dwm-current_desktop-5.8.2.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-current_desktop-5.8.2.diff (3607B)
---
1 diff -r 23b71491e149 dwm.c
2 --- a/dwm.c Thu Dec 02 10:16:47 2010 +0000
3 +++ b/dwm.c Mon Dec 13 08:18:03 2010 -0500
4 @@ -57,8 +57,8 @@
5 /* enums */
6 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
7 enum { ColBorder, ColFG, ColBG, ColLast }; /* color */
8 -enum { NetSupported, NetWMName, NetWMState,
9 - NetWMFullscreen, NetLast }; /* EWMH atoms */
10 +enum { NetSupported, NetWMName, NetWMState, NetWMFullscreen,
11 + NetNumberOfDesktops, NetCurrentDesktop, NetLast }; /* EWMH atoms */
12 enum { WMProtocols, WMDelete, WMState, WMLast }; /* default atoms */
13 enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
14 ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
15 @@ -212,6 +212,7 @@
16 static void setclientstate(Client *c, long state);
17 static void setlayout(const Arg *arg);
18 static void setmfact(const Arg *arg);
19 +static void setnumbdesktops(void);
20 static void setup(void);
21 static void showhide(Client *c);
22 static void sigchld(int unused);
23 @@ -227,6 +228,7 @@
24 static void unfocus(Client *c, Bool setfocus);
25 static void unmanage(Client *c, Bool destroyed);
26 static void unmapnotify(XEvent *e);
27 +static void updatecurrenddesktop(void);
28 static Bool updategeom(void);
29 static void updatebarpos(Monitor *m);
30 static void updatebars(void);
31 @@ -1467,6 +1469,13 @@
32 }
33
34 void
35 +setcurrentdesktop(void){
36 + long data[] = { 0 };
37 + XChangeProperty(dpy, root, netatom[NetCurrentDesktop], XA_CARDINAL, 32,
38 + PropModeReplace, (unsigned char *)data, 1);
39 +}
40 +
41 +void
42 setclientstate(Client *c, long state) {
43 long data[] = { state, None };
44
45 @@ -1502,6 +1511,13 @@
46 }
47
48 void
49 +setnumbdesktops(void){
50 + long data[] = { TAGMASK };
51 + XChangeProperty(dpy, root, netatom[NetNumberOfDesktops], XA_CARDINAL, 32,
52 + PropModeReplace, (unsigned char *)data, 1);
53 +}
54 +
55 +void
56 setup(void) {
57 XSetWindowAttributes wa;
58
59 @@ -1524,6 +1540,8 @@
60 netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
61 netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
62 netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
63 + netatom[NetNumberOfDesktops] = XInternAtom(dpy, "_NET_NUMBER_OF_DESKTOPS", False);
64 + netatom[NetCurrentDesktop] = XInternAtom(dpy, "_NET_CURRENT_DESKTOP", False);
65 /* init cursors */
66 cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
67 cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
68 @@ -1546,6 +1564,10 @@
69 /* EWMH support per view */
70 XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
71 PropModeReplace, (unsigned char *) netatom, NetLast);
72 + /* set EWMH NUMBER_OF_DESKTOPS */
73 + setnumbdesktops();
74 + /* initialize EWMH CURRENT_DESKTOP */
75 + setcurrentdesktop();
76 /* select for events */
77 wa.cursor = cursor[CurNormal];
78 wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask|ButtonPressMask
79 @@ -1688,6 +1710,7 @@
80 selmon->tagset[selmon->seltags] = newtagset;
81 arrange(selmon);
82 }
83 + updatecurrenddesktop();
84 }
85
86 void
87 @@ -1763,6 +1786,14 @@
88 m->by = -bh;
89 }
90
91 +void
92 +updatecurrenddesktop(){
93 + long data[] = { selmon->tagset[selmon->seltags] };
94 +
95 + XChangeProperty(dpy, root, netatom[NetCurrentDesktop], XA_CARDINAL, 32,
96 + PropModeReplace, (unsigned char *)data, 1);
97 +}
98 +
99 Bool
100 updategeom(void) {
101 Bool dirty = False;
102 @@ -1948,6 +1979,7 @@
103 if(arg->ui & TAGMASK)
104 selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
105 arrange(selmon);
106 + updatecurrenddesktop();
107 }
108
109 Client *