Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-xfce4-panel-20220306-d39e2f3.diff - sites - public wiki contents of suckles…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-xfce4-panel-20220306-d39e2f3.diff (4775B)
---
1 From 2cf1eff75a6dc6ee21ed37f4f57a1eb4bf588b9f Mon Sep 17 00:00:00 2001
2 From: Gunther Klessinger <[email protected]>
3 Date: Sun, 6 Mar 2022 10:32:29 +0100
4 Subject: [PATCH] fix: Fixing problems at monitor setup changes
5
6 - Panel was sometimes out of place when monitor setup was changed on the
7 fly
8 - Patch less intrusive than the previous one.
9 - Tested with dwm6.3 and 6.2.
10 ---
11 config.def.h | 2 ++
12 dwm.c | 36 +++++++++++++++++++++++++++++-------
13 2 files changed, 31 insertions(+), 7 deletions(-)
14
15 diff --git a/config.def.h b/config.def.h
16 index a2ac963..eaf909e 100644
17 --- a/config.def.h
18 +++ b/config.def.h
19 @@ -3,6 +3,7 @@
20 /* appearance */
21 static const unsigned int borderpx = 1; /* border pixel of wind…
22 static const unsigned int snap = 32; /* snap pixel */
23 +static const char panel[][20] = { "xfce4-panel", "Xfce4-panel" };…
24 static const int showbar = 1; /* 0 means no bar */
25 static const int topbar = 1; /* 0 means bottom bar */
26 static const char *fonts[] = { "monospace:size=10" };
27 @@ -29,6 +30,7 @@ static const Rule rules[] = {
28 /* class instance title tags mask isfloating …
29 { "Gimp", NULL, NULL, 0, 1, …
30 { "Firefox", NULL, NULL, 1 << 8, 0, …
31 + { panel[1], NULL, NULL, (1 << 9) - 1, 1, …
32 };
33
34 /* layout(s) */
35 diff --git a/dwm.c b/dwm.c
36 index a96f33c..458f3dc 100644
37 --- a/dwm.c
38 +++ b/dwm.c
39 @@ -175,6 +175,7 @@ static long getstate(Window w);
40 static int gettextprop(Window w, Atom atom, char *text, unsigned int si…
41 static void grabbuttons(Client *c, int focused);
42 static void grabkeys(void);
43 +static int ispanel(Client *c);
44 static void incnmaster(const Arg *arg);
45 static void keypress(XEvent *e);
46 static void killclient(const Arg *arg);
47 @@ -713,6 +714,8 @@ drawbar(Monitor *m)
48 }
49
50 for (c = m->clients; c; c = c->next) {
51 + // prevent showing the panel as active application:
52 + if (ispanel(c)) continue;
53 occ |= c->tags;
54 if (c->isurgent)
55 urg |= c->tags;
56 @@ -796,11 +799,14 @@ focus(Client *c)
57 selmon = c->mon;
58 if (c->isurgent)
59 seturgent(c, 0);
60 - detachstack(c);
61 - attachstack(c);
62 - grabbuttons(c, 1);
63 - XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBord…
64 - setfocus(c);
65 + // prevents the panel getting focus when tag switching:
66 + if (!ispanel(c)) {
67 + detachstack(c);
68 + attachstack(c);
69 + grabbuttons(c, 1);
70 + XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].…
71 + setfocus(c);
72 + }
73 } else {
74 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentT…
75 XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
76 @@ -833,6 +839,7 @@ focusmon(const Arg *arg)
77 focus(NULL);
78 }
79
80 +int focussed_panel = 0; // helper for focusstack, avoids loops when pan…
81 void
82 focusstack(const Arg *arg)
83 {
84 @@ -857,6 +864,12 @@ focusstack(const Arg *arg)
85 focus(c);
86 restack(selmon);
87 }
88 + // skipping the panel when switching focus:
89 + if (ispanel(c) && focussed_panel == 0) {
90 + focussed_panel = 1;
91 + focusstack(arg);
92 + focussed_panel = 0;
93 + }
94 }
95
96 Atom
97 @@ -967,6 +980,11 @@ grabkeys(void)
98 }
99 }
100
101 +int
102 +ispanel(Client *c) {
103 + return !strcmp(c->name, panel[0]);
104 +}
105 +
106 void
107 incnmaster(const Arg *arg)
108 {
109 @@ -1053,6 +1071,8 @@ manage(Window w, XWindowAttributes *wa)
110 && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh …
111 c->bw = borderpx;
112
113 + // no border - even when active
114 + if (ispanel(c)) c->bw = c->oldbw = 0;
115 wc.border_width = c->bw;
116 XConfigureWindow(dpy, w, CWBorderWidth, &wc);
117 XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel);
118 @@ -1272,7 +1292,7 @@ recttomon(int x, int y, int w, int h)
119 void
120 resize(Client *c, int x, int y, int w, int h, int interact)
121 {
122 - if (applysizehints(c, &x, &y, &w, &h, interact))
123 + if (ispanel(c) || applysizehints(c, &x, &y, &w, &h, interact))
124 resizeclient(c, x, y, w, h);
125 }
126
127 @@ -1286,6 +1306,8 @@ resizeclient(Client *c, int x, int y, int w, int h)
128 c->oldw = c->w; c->w = wc.width = w;
129 c->oldh = c->h; c->h = wc.height = h;
130 wc.border_width = c->bw;
131 + // nail it to no border & y=0:
132 + if (ispanel(c)) c->y = c->oldy = c->bw = wc.y = wc.border_width = 0;
133 XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorder…
134 configure(c);
135 XSync(dpy, False);
136 @@ -1994,7 +2016,7 @@ void
137 updatestatus(void)
138 {
139 if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
140 - strcpy(stext, "dwm-"VERSION);
141 + strcpy(stext, ""); // no shining of dwm version thru pa…
142 drawbar(selmon);
143 }
144
145 --
146 2.31.1
147
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.