dwm-ewmhtags-6.2.diff - sites - public wiki contents of suckless.org
HTML git clone git://git.suckless.org/sites
DIR Log
DIR Files
DIR Refs
---
dwm-ewmhtags-6.2.diff (5471B)
---
1 From e5f0eefa921e6bad1e6f75faced0c3ae519995b3 Mon Sep 17 00:00:00 2001
2 From: Ryan Kes <alrayyes@gmail.com>
3 Date: Thu, 28 Mar 2019 14:49:28 +0100
4 Subject: [PATCH] dwm-ewhmtags-6.2
5
6 ---
7 dwm.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++-
8 1 file changed, 48 insertions(+), 1 deletion(-)
9
10 diff --git a/dwm.c b/dwm.c
11 index 4465af1..92022a1 100644
12 --- a/dwm.c
13 +++ b/dwm.c
14 @@ -55,6 +55,7 @@
15 #define WIDTH(X) ((X)->w + 2 * (X)->bw)
16 #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
17 #define TAGMASK ((1 << LENGTH(tags)) - 1)
18 +#define TAGSLENGTH (LENGTH(tags))
19 #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
20
21 /* enums */
22 @@ -62,7 +63,7 @@ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
23 enum { SchemeNorm, SchemeSel }; /* color schemes */
24 enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
25 NetWMFullscreen, NetActiveWindow, NetWMWindowType,
26 - NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
27 + NetWMWindowTypeDialog, NetClientList, NetDesktopNames, NetDesktopViewport, NetNumberOfDesktops, NetCurrentDesktop, NetLast }; /* EWMH atoms */
28 enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
29 enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
30 ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
31 @@ -197,11 +198,15 @@ static void scan(void);
32 static int sendevent(Client *c, Atom proto);
33 static void sendmon(Client *c, Monitor *m);
34 static void setclientstate(Client *c, long state);
35 +static void setcurrentdesktop(void);
36 +static void setdesktopnames(void);
37 static void setfocus(Client *c);
38 static void setfullscreen(Client *c, int fullscreen);
39 static void setlayout(const Arg *arg);
40 static void setmfact(const Arg *arg);
41 +static void setnumdesktops(void);
42 static void setup(void);
43 +static void setviewport(void);
44 static void seturgent(Client *c, int urg);
45 static void showhide(Client *c);
46 static void sigchld(int unused);
47 @@ -216,6 +221,7 @@ static void toggleview(const Arg *arg);
48 static void unfocus(Client *c, int setfocus);
49 static void unmanage(Client *c, int destroyed);
50 static void unmapnotify(XEvent *e);
51 +static void updatecurrentdesktop(void);
52 static void updatebarpos(Monitor *m);
53 static void updatebars(void);
54 static void updateclientlist(void);
55 @@ -1431,6 +1437,16 @@ setclientstate(Client *c, long state)
56 XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32,
57 PropModeReplace, (unsigned char *)data, 2);
58 }
59 +void
60 +setcurrentdesktop(void){
61 + long data[] = { 0 };
62 + XChangeProperty(dpy, root, netatom[NetCurrentDesktop], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)data, 1);
63 +}
64 +void setdesktopnames(void){
65 + XTextProperty text;
66 + Xutf8TextListToTextProperty(dpy, tags, TAGSLENGTH, XUTF8StringStyle, &text);
67 + XSetTextProperty(dpy, root, &text, netatom[NetDesktopNames]);
68 +}
69
70 int
71 sendevent(Client *c, Atom proto)
72 @@ -1457,6 +1473,12 @@ sendevent(Client *c, Atom proto)
73 return exists;
74 }
75
76 +void
77 +setnumdesktops(void){
78 + long data[] = { TAGSLENGTH };
79 + XChangeProperty(dpy, root, netatom[NetNumberOfDesktops], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)data, 1);
80 +}
81 +
82 void
83 setfocus(Client *c)
84 {
85 @@ -1562,6 +1584,10 @@ setup(void)
86 netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False);
87 netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False);
88 netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False);
89 + netatom[NetDesktopViewport] = XInternAtom(dpy, "_NET_DESKTOP_VIEWPORT", False);
90 + netatom[NetNumberOfDesktops] = XInternAtom(dpy, "_NET_NUMBER_OF_DESKTOPS", False);
91 + netatom[NetCurrentDesktop] = XInternAtom(dpy, "_NET_CURRENT_DESKTOP", False);
92 + netatom[NetDesktopNames] = XInternAtom(dpy, "_NET_DESKTOP_NAMES", False);
93 /* init cursors */
94 cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr);
95 cursor[CurResize] = drw_cur_create(drw, XC_sizing);
96 @@ -1584,6 +1610,10 @@ setup(void)
97 /* EWMH support per view */
98 XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
99 PropModeReplace, (unsigned char *) netatom, NetLast);
100 + setnumdesktops();
101 + setcurrentdesktop();
102 + setdesktopnames();
103 + setviewport();
104 XDeleteProperty(dpy, root, netatom[NetClientList]);
105 /* select events */
106 wa.cursor = cursor[CurNormal]->cursor;
107 @@ -1595,6 +1625,11 @@ setup(void)
108 grabkeys();
109 focus(NULL);
110 }
111 +void
112 +setviewport(void){
113 + long data[] = { 0, 0 };
114 + XChangeProperty(dpy, root, netatom[NetDesktopViewport], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)data, 2);
115 +}
116
117
118 void
119 @@ -1732,6 +1767,7 @@ toggletag(const Arg *arg)
120 focus(NULL);
121 arrange(selmon);
122 }
123 + updatecurrentdesktop();
124 }
125
126 void
127 @@ -1744,6 +1780,7 @@ toggleview(const Arg *arg)
128 focus(NULL);
129 arrange(selmon);
130 }
131 + updatecurrentdesktop();
132 }
133
134 void
135 @@ -1846,6 +1883,15 @@ updateclientlist()
136 XA_WINDOW, 32, PropModeAppend,
137 (unsigned char *) &(c->win), 1);
138 }
139 +void updatecurrentdesktop(void){
140 + long rawdata[] = { selmon->tagset[selmon->seltags] };
141 + int i=0;
142 + while(*rawdata >> i+1){
143 + i++;
144 + }
145 + long data[] = { i };
146 + XChangeProperty(dpy, root, netatom[NetCurrentDesktop], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)data, 1);
147 +}
148
149 int
150 updategeom(void)
151 @@ -2042,6 +2088,7 @@ view(const Arg *arg)
152 selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
153 focus(NULL);
154 arrange(selmon);
155 + updatecurrentdesktop();
156 }
157
158 Client *
159 --
160 2.21.0
161