From 9796eb2c3ce77ff56e992ac8a3f8025fa21e296c Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Sun, 28 Dec 2025 00:36:44 +0900 Subject: [PATCH] give icons to launcher --- mpanel/launcher/module.c | 31 ++++++++++++++++++++++++++++--- mpanel/mpanelrc.in | 28 +++++++++++++--------------- mpanel/startbutton/module.c | 23 +++++++++++++++++++++++ 3 files changed, 64 insertions(+), 18 deletions(-) diff --git a/mpanel/launcher/module.c b/mpanel/launcher/module.c index bb42493..12b73cb 100644 --- a/mpanel/launcher/module.c +++ b/mpanel/launcher/module.c @@ -1,3 +1,4 @@ +#include #include #include @@ -31,9 +32,33 @@ void module(MwWidget box, xl_node_t* node) { int y = (gap + 18) * (c % 2); if(n->type == XL_NODE_NODE && strcmp(n->name, "Execute") == 0 && n->text != NULL) { - MwWidget btn = MwVaCreateWidget(MwButtonClass, "button", f, x, y, 18, 18, - MwNflat, 1, - NULL); + MwLLPixmap px = NULL; + MwWidget btn; + const char* icon = NULL; + xl_attribute_t* a = n->first_attribute; + + while(a != NULL) { + if(strcmp(a->key, "Icon") == 0) { + icon = a->value; + } + a = a->next; + } + + if(icon != NULL && icon[0] == '/') { + px = MwLoadImage(box, icon); + } else if(icon != NULL) { + char* p = MDEIconLookUp("apps", icon, 16); + + if(p != NULL) { + px = MwLoadImage(box, p); + free(p); + } + } + + btn = MwVaCreateWidget(MwButtonClass, "button", f, x, y, 18, 18, + MwNflat, 1, + MwNpixmap, px, + NULL); c++; } diff --git a/mpanel/mpanelrc.in b/mpanel/mpanelrc.in index f0b65aa..5a8e0b9 100644 --- a/mpanel/mpanelrc.in +++ b/mpanel/mpanelrc.in @@ -10,27 +10,25 @@ uxterm - - - - - - - - - - + + + + - uxterm - uxterm - uxterm - uxterm - uxterm + uxterm + uxterm + uxterm + uxterm + uxterm + uxterm + uxterm + uxterm + uxterm diff --git a/mpanel/startbutton/module.c b/mpanel/startbutton/module.c index 3c19e1f..5eddb98 100644 --- a/mpanel/startbutton/module.c +++ b/mpanel/startbutton/module.c @@ -339,6 +339,29 @@ static void menu_scan(opaque_t* opaque, xl_node_t* node) { m->wsub = NULL; m->sub = NULL; m->opaque = MwStringDuplicate(n->text == NULL ? "" : n->text); + } else if(n->type == XL_NODE_NODE && strcmp(n->name, "EndSession") == 0 && name != NULL) { + m = malloc(sizeof(*m)); + m->name = MwStringDuplicate(name); + m->keep = 0; + m->wsub = NULL; + m->sub = NULL; + m->opaque = malloc(512); + + sprintf(m->opaque, "kill %ld", (long)getppid()); + } else if(n->type == XL_NODE_NODE && strcmp(n->name, "ShutDown") == 0 && name != NULL) { + m = malloc(sizeof(*m)); + m->name = MwStringDuplicate(name); + m->keep = 0; + m->wsub = NULL; + m->sub = NULL; + m->opaque = MwStringDuplicate(""); /* TODO */ + } else if(n->type == XL_NODE_NODE && strcmp(n->name, "Reboot") == 0 && name != NULL) { + m = malloc(sizeof(*m)); + m->name = MwStringDuplicate(name); + m->keep = 0; + m->wsub = NULL; + m->sub = NULL; + m->opaque = MwStringDuplicate(""); /* TODO */ } if(m != NULL) {