dwm-dualstatus-20251003-89e0350.diff (5172B)
1 From 89e03501c62b7533d7c4399e2b65feaaf8ccf1b0 Mon Sep 17 00:00:00 2001 2 From: elbachir-one <bachiralfa@gmail.com> 3 Date: Fri, 3 Oct 2025 10:39:34 +0100 4 Subject: [PATCH] Fixed patch — no more errors when applying it 5 6 --- 7 config.def.h | 2 ++ 8 dwm.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++- 9 2 files changed, 55 insertions(+), 1 deletion(-) 10 11 diff --git a/config.def.h b/config.def.h 12 index 3836510..d1bf68c 100644 13 --- a/config.def.h 14 +++ b/config.def.h 15 @@ -5,6 +5,7 @@ static const unsigned int borderpx = 1; /* border pixel of windows */ 16 static const unsigned int snap = 32; /* snap pixel */ 17 static const int showbar = 1; /* 0 means no bar */ 18 static const int topbar = 1; /* 0 means bottom bar */ 19 +static const int extrabar = 1; /* 0 means no extra bar */ 20 static const char *fonts[] = { "monospace:size=10" }; 21 static const char dmenufont[] = "monospace:size=10"; 22 static const char col_gray1[] = "#222222"; 23 @@ -66,6 +67,7 @@ static const Key keys[] = { 24 { MODKEY, XK_p, spawn, {.v = dmenucmd } }, 25 { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, 26 { MODKEY, XK_b, togglebar, {0} }, 27 + { MODKEY, XK_b, toggleextrabar, {0} }, 28 { MODKEY, XK_j, focusstack, {.i = +1 } }, 29 { MODKEY, XK_k, focusstack, {.i = -1 } }, 30 { MODKEY, XK_i, incnmaster, {.i = +1 } }, 31 diff --git a/dwm.c b/dwm.c 32 index 4f345ee..52149ad 100644 33 --- a/dwm.c 34 +++ b/dwm.c 35 @@ -140,6 +140,13 @@ typedef struct { 36 int monitor; 37 } Rule; 38 39 +typedef struct { 40 + int y; 41 + int show; 42 + Window win; 43 + char text[256]; 44 +} Bar; 45 + 46 /* function declarations */ 47 static void applyrules(Client *c); 48 static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact); 49 @@ -209,6 +216,7 @@ static void tag(const Arg *arg); 50 static void tagmon(const Arg *arg); 51 static void tile(Monitor *m); 52 static void togglebar(const Arg *arg); 53 +static void toggleextrabar(const Arg *arg); 54 static void togglefloating(const Arg *arg); 55 static void toggletag(const Arg *arg); 56 static void toggleview(const Arg *arg); 57 @@ -266,6 +274,7 @@ static Display *dpy; 58 static Drw *drw; 59 static Monitor *mons, *selmon; 60 static Window root, wmcheckwin; 61 +static Bar eb; 62 63 /* configuration, allows nested code to access above variables */ 64 #include "config.h" 65 @@ -481,6 +490,8 @@ cleanup(void) 66 while (m->stack) 67 unmanage(m->stack, 0); 68 XUngrabKey(dpy, AnyKey, AnyModifier, root); 69 + XUnmapWindow(dpy, eb.win); 70 + XDestroyWindow(dpy, eb.win); 71 while (mons) 72 cleanupmon(mons); 73 for (i = 0; i < CurLast; i++) 74 @@ -570,6 +581,7 @@ configurenotify(XEvent *e) 75 if (c->isfullscreen) 76 resizeclient(c, m->mx, m->my, m->mw, m->mh); 77 XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); 78 + XMoveResizeWindow(dpy, eb.win, mons->wx, eb.y, mons->ww, bh); 79 } 80 focus(NULL); 81 arrange(NULL); 82 @@ -745,6 +757,9 @@ drawbar(Monitor *m) 83 } 84 } 85 drw_map(drw, m->barwin, 0, 0, m->ww, bh); 86 + drw_setscheme(drw, scheme[SchemeNorm]); 87 + drw_text(drw, 0, 0, mons->ww, bh, 0, eb.text, 0); 88 + drw_map(drw, eb.win, 0, 0, mons->ww, bh); 89 } 90 91 void 92 @@ -1558,6 +1573,7 @@ setup(void) 93 sh = DisplayHeight(dpy, screen); 94 root = RootWindow(dpy, screen); 95 drw = drw_create(dpy, screen, root, sw, sh); 96 + eb.show = extrabar; 97 if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) 98 die("no fonts could be loaded."); 99 lrpad = drw->fonts->h; 100 @@ -1720,6 +1736,17 @@ togglebar(const Arg *arg) 101 arrange(selmon); 102 } 103 104 +void 105 +toggleextrabar(const Arg *arg) 106 +{ 107 + if(selmon == mons) { 108 + eb.show = !eb.show; 109 + updatebarpos(selmon); 110 + XMoveResizeWindow(dpy, eb.win, selmon->wx, eb.y, selmon->ww, bh); 111 + arrange(selmon); 112 + } 113 +} 114 + 115 void 116 togglefloating(const Arg *arg) 117 { 118 @@ -1834,6 +1861,13 @@ updatebars(void) 119 XMapRaised(dpy, m->barwin); 120 XSetClassHint(dpy, m->barwin, &ch); 121 } 122 + if (!eb.win) { 123 + eb.win = XCreateWindow(dpy, root, mons->wx, eb.y, mons->ww, bh, 0, DefaultDepth(dpy, screen), 124 + CopyFromParent, DefaultVisual(dpy, screen), 125 + CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); 126 + XDefineCursor(dpy, eb.win, cursor[CurNormal]->cursor); 127 + XMapRaised(dpy, eb.win); 128 + } 129 } 130 131 void 132 @@ -1847,6 +1881,13 @@ updatebarpos(Monitor *m) 133 m->wy = m->topbar ? m->wy + bh : m->wy; 134 } else 135 m->by = -bh; 136 + 137 + if (m == mons && eb.show) { 138 + m->wh -= bh; 139 + eb.y = topbar ? m->wy + m->wh : m->wy; 140 + m->wy = m->topbar ? m->wy : m->wy + bh; 141 + } else 142 + eb.y = -bh; 143 } 144 145 void 146 @@ -2004,8 +2045,19 @@ updatesizehints(Client *c) 147 void 148 updatestatus(void) 149 { 150 - if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) 151 + char text[512]; 152 + if (!gettextprop(root, XA_WM_NAME, text, sizeof(text))) { 153 strcpy(stext, "dwm-"VERSION); 154 + eb.text[0] = '\0'; 155 + } else { 156 + char *e = strchr(text, ';'); 157 + if (e) { 158 + *e = '\0'; e++; 159 + strncpy(eb.text, e, sizeof(eb.text)-1); 160 + } else 161 + eb.text[0] = '\0'; 162 + strncpy(stext, text, sizeof(stext)-1); 163 + } 164 drawbar(selmon); 165 } 166 167 -- 168 2.50.1 169