sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit 31e7d6198aa0e294e5109cfc0b3c03ad6106c35f
parent 559ddebf9769f453d3eb1e45149f5f08b1d46798
Author: Rumen <rumenmitov@protonmail.com>
Date:   Mon,  6 Jan 2025 14:29:25 +0100

dwm-appicons fix

appicons patch should now correctly handle mouse clicks

Diffstat:
Mdwm.suckless.org/patches/appicons/dwm-appicons-6.5.diff | 87+++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------
1 file changed, 63 insertions(+), 24 deletions(-)

diff --git a/dwm.suckless.org/patches/appicons/dwm-appicons-6.5.diff b/dwm.suckless.org/patches/appicons/dwm-appicons-6.5.diff @@ -1,14 +1,13 @@ -From 5bd12261788064919c47ea35085bba6c9a1110ed Mon Sep 17 00:00:00 2001 +From f967b9b49ab3522d84fba8d95bbd90b6b5db0052 Mon Sep 17 00:00:00 2001 From: Rumen <rumenmitov@protonmail.com> -Date: Sat, 4 Jan 2025 22:28:14 +0100 -Subject: [PATCH] appicons patch: +Date: Mon, 6 Jan 2025 14:22:39 +0100 +Subject: [PATCH] appicons patch -clients can now be assigned icons based on rules set by the user. -these icons will be displayed insteas of the tag indicator and tag name. +Adds support for app icons that can replace the tag indicator and tag name. --- config.def.h | 14 ++++-- - dwm.c | 128 +++++++++++++++++++++++++++++++++++++++++++++++++-- - 2 files changed, 136 insertions(+), 6 deletions(-) + dwm.c | 140 +++++++++++++++++++++++++++++++++++++++++++++++++-- + 2 files changed, 147 insertions(+), 7 deletions(-) diff --git a/config.def.h b/config.def.h index 9efa774..3045af6 100644 @@ -41,7 +40,7 @@ index 9efa774..3045af6 100644 /* layout(s) */ diff --git a/dwm.c b/dwm.c -index 1443802..069ece9 100644 +index 1443802..35327af 100644 --- a/dwm.c +++ b/dwm.c @@ -85,6 +85,7 @@ typedef struct Monitor Monitor; @@ -52,7 +51,15 @@ index 1443802..069ece9 100644 float mina, maxa; int x, y, w, h; int oldx, oldy, oldw, oldh; -@@ -138,6 +139,7 @@ typedef struct { +@@ -121,6 +122,7 @@ struct Monitor { + unsigned int seltags; + unsigned int sellt; + unsigned int tagset[2]; ++ char **tag_icons; + int showbar; + int topbar; + Client *clients; +@@ -138,6 +140,7 @@ typedef struct { unsigned int tags; int isfloating; int monitor; @@ -60,7 +67,7 @@ index 1443802..069ece9 100644 } Rule; /* function declarations */ -@@ -160,6 +162,9 @@ static void destroynotify(XEvent *e); +@@ -160,6 +163,9 @@ static void destroynotify(XEvent *e); static void detach(Client *c); static void detachstack(Client *c); static Monitor *dirtomon(int dir); @@ -70,7 +77,7 @@ index 1443802..069ece9 100644 static void drawbar(Monitor *m); static void drawbars(void); static void enternotify(XEvent *e); -@@ -283,7 +288,13 @@ applyrules(Client *c) +@@ -283,7 +289,13 @@ applyrules(Client *c) Monitor *m; XClassHint ch = { NULL, NULL }; @@ -84,7 +91,7 @@ index 1443802..069ece9 100644 c->isfloating = 0; c->tags = 0; XGetClassHint(dpy, c->win, &ch); -@@ -296,6 +307,8 @@ applyrules(Client *c) +@@ -296,6 +308,8 @@ applyrules(Client *c) && (!r->class || strstr(class, r->class)) && (!r->instance || strstr(instance, r->instance))) { @@ -93,7 +100,43 @@ index 1443802..069ece9 100644 c->isfloating = r->isfloating; c->tags |= r->tags; for (m = mons; m && m->num != r->monitor; m = m->next); -@@ -694,6 +707,96 @@ dirtomon(int dir) +@@ -433,7 +447,7 @@ buttonpress(XEvent *e) + if (ev->window == selmon->barwin) { + i = x = 0; + do +- x += TEXTW(tags[i]); ++ x += TEXTW(m->tag_icons[i]); + while (ev->x >= x && ++i < LENGTH(tags)); + if (i < LENGTH(tags)) { + click = ClkTagBar; +@@ -508,6 +522,12 @@ cleanupmon(Monitor *mon) + } + XUnmapWindow(dpy, mon->barwin); + XDestroyWindow(dpy, mon->barwin); ++ ++ for (int i = 0; i < LENGTH(tags); i++) { ++ free(mon->tag_icons[i]); ++ mon->tag_icons[i] = NULL; ++ } ++ + free(mon); + } + +@@ -643,6 +663,13 @@ createmon(void) + m->lt[0] = &layouts[0]; + m->lt[1] = &layouts[1 % LENGTH(layouts)]; + strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); ++ ++ m->tag_icons = (char**) malloc(LENGTH(tags)); ++ if (m->tag_icons == NULL) perror("dwm: malloc()"); ++ for (int i = 0; i < LENGTH(tags); i++) { ++ m->tag_icons[i] = NULL; ++ } ++ + return m; + } + +@@ -694,6 +721,96 @@ dirtomon(int dir) return m; } @@ -190,22 +233,23 @@ index 1443802..069ece9 100644 void drawbar(Monitor *m) { -@@ -713,22 +816,41 @@ drawbar(Monitor *m) +@@ -713,22 +830,37 @@ drawbar(Monitor *m) drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); } -+ char *tag_icons[LENGTH(tags)]; + int icons_per_tag[LENGTH(tags)]; + memset(icons_per_tag, 0, LENGTH(tags) * sizeof(int)); + + for (int i = 0; i < LENGTH(tags); i++) { ++ if (m->tag_icons[i]) free(m->tag_icons[i]); ++ + /* set each tag to default value */ -+ tag_icons[i] = strndup(tags[i], strlen(tags[i])); ++ m->tag_icons[i] = strndup(tags[i], strlen(tags[i])); + } + for (c = m->clients; c; c = c->next) { + if (c->appicon && strlen(c->appicon) > 0) { -+ applyappicon(tag_icons, icons_per_tag, c); ++ applyappicon(m->tag_icons, icons_per_tag, c); + } + occ |= c->tags; @@ -215,11 +259,11 @@ index 1443802..069ece9 100644 x = 0; for (i = 0; i < LENGTH(tags); i++) { - w = TEXTW(tags[i]); -+ w = TEXTW(tag_icons[i]); ++ w = TEXTW(m->tag_icons[i]); drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); - if (occ & 1 << i) -+ drw_text(drw, x, 0, w, bh, lrpad / 2, tag_icons[i], urg & 1 << i); ++ drw_text(drw, x, 0, w, bh, lrpad / 2, m->tag_icons[i], urg & 1 << i); + if (occ & 1 << i && icons_per_tag[i] == 0) drw_rect(drw, x + boxs, boxs, boxw, boxw, m == selmon && selmon->sel && selmon->sel->tags & 1 << i, @@ -227,11 +271,6 @@ index 1443802..069ece9 100644 x += w; } + -+ for (int i = 0; i < LENGTH(tags); i++) { -+ free(tag_icons[i]); -+ tag_icons[i] = NULL; -+ } -+ w = TEXTW(m->ltsymbol); drw_setscheme(drw, scheme[SchemeNorm]); x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);