dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit 3c2d303c0e8efc9a08f2e70867794b003b886810
parent 1e20a0f78a580ebf4ad521d0e074125bb0a7d4b8
Author: Anselm R Garbe <anselm@garbe.us>
Date:   Thu, 14 Apr 2011 13:46:25 +0000

applied Peter/Andreas NetActiveWindow patch in a slightly modified version
Diffstat:
Mdwm.c | 31++++++++++++++++++++++---------
1 file changed, 22 insertions(+), 9 deletions(-)
diff --git a/dwm.c b/dwm.c
@@ -58,7 +58,7 @@
 enum { CurNormal, CurResize, CurMove, CurLast };        /* cursor */
 enum { ColBorder, ColFG, ColBG, ColLast };              /* color */
 enum { NetSupported, NetWMName, NetWMState,
-       NetWMFullscreen, NetLast };                      /* EWMH atoms */
+       NetWMFullscreen, NetActiveWindow, NetLast };     /* EWMH atoms */
 enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
 enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
        ClkClientWin, ClkRootWin, ClkLast };             /* clicks */
@@ -1259,11 +1259,11 @@ propertynotify(XEvent *e) {
 void
 clientmessage(XEvent *e) {
     XClientMessageEvent *cme = &e->xclient;
-    Client *c;
+    Client *c = wintoclient(cme->window);
 
-    if((c = wintoclient(cme->window))
-    && (cme->message_type == netatom[NetWMState] && cme->data.l[1] == netatom[NetWMFullscreen]))
-    {
+    if(!c)
+        return;
+    if(cme->message_type == netatom[NetWMState] && cme->data.l[1] == netatom[NetWMFullscreen]) {
         if(cme->data.l[0]) {
             XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,
                             PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1);
@@ -1287,6 +1287,16 @@ clientmessage(XEvent *e) {
             arrange(c->mon);
         }
     }
+    else if(cme->message_type == netatom[NetActiveWindow]) {
+        if(!ISVISIBLE(c)) {
+            Arg a = { .ui = c->tags };
+            view(&a); 
+        }
+        detach(c);
+        attach(c);
+        focus(c);
+        arrange(c->mon);
+    }
 }
 
 void
@@ -1460,7 +1470,7 @@ sendevent(Client *c, Atom proto) {
             exists = protocols[n] == proto;
         XFree(protocols);
     }
-    if (exists) {
+    if(exists) {
         ev.type = ClientMessage;
         ev.xclient.window = c->win;
         ev.xclient.message_type = wmatom[WMProtocols];
@@ -1474,7 +1484,7 @@ sendevent(Client *c, Atom proto) {
 
 void
 setfocus(Client *c) {
-    if (!c->neverfocus)
+    if(!c->neverfocus)
         XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
     sendevent(c, wmatom[WMTakeFocus]);
 }
@@ -1525,6 +1535,7 @@ setup(void) {
     wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
     wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
     wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False);
+        netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
     wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
     netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
     netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
@@ -1942,8 +1953,10 @@ updatewmhints(Client *c) {
         }
         else
             c->isurgent = (wmh->flags & XUrgencyHint) ? True : False;
-        if (wmh->flags & InputHint) c->neverfocus = !wmh->input;
-        else                        c->neverfocus = False;
+        if(wmh->flags & InputHint)
+            c->neverfocus = !wmh->input;
+        else
+            c->neverfocus = False;
         XFree(wmh);
     }
 }