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 *