dwm-focusonnetactive-2017-12-24-3756f7f.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-focusonnetactive-2017-12-24-3756f7f.diff (1702B)
       ---
            1 From cda7fd4e732c6db03180301e45b48b961fda5eba Mon Sep 17 00:00:00 2001
            2 From: Danny O'Brien <danny@spesh.com>
            3 Date: Sat, 23 Dec 2017 16:45:29 -0800
            4 Subject: [PATCH] Activate a window in response to _NET_ACTIVE_WINDOW
            5 
            6 By default, dwm response to client requests to _NET_ACTIVE_WINDOW client
            7 messages by setting the urgency bit on the named window.
            8 
            9 This patch activates the window instead.
           10 
           11 Both behaviours are legitimate according to
           12 https://specifications.freedesktop.org/wm-spec/wm-spec-latest.html#idm140200472702304
           13 
           14 One should decide which of these one should perform based on the message
           15 senders' untestable claims that it represents the end-user. Setting the
           16 urgency bit is the conservative decision. This patch implements the more
           17 trusting alternative.
           18 
           19 It also allows dwm to work with `wmctrl -a` and other external window
           20 management utilities.
           21 ---
           22  dwm.c | 10 ++++++++--
           23  1 file changed, 8 insertions(+), 2 deletions(-)
           24 
           25 diff --git a/dwm.c b/dwm.c
           26 index ff893df..b278182 100644
           27 --- a/dwm.c
           28 +++ b/dwm.c
           29 @@ -515,6 +515,7 @@ clientmessage(XEvent *e)
           30  {
           31          XClientMessageEvent *cme = &e->xclient;
           32          Client *c = wintoclient(cme->window);
           33 +        unsigned int i;
           34  
           35          if (!c)
           36                  return;
           37 @@ -524,8 +525,13 @@ clientmessage(XEvent *e)
           38                          setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD    */
           39                                  || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen)));
           40          } else if (cme->message_type == netatom[NetActiveWindow]) {
           41 -                if (c != selmon->sel && !c->isurgent)
           42 -                        seturgent(c, 1);
           43 +                for (i = 0; i < LENGTH(tags) && !((1 << i) & c->tags); i++);
           44 +                if (i < LENGTH(tags)) {
           45 +                        const Arg a = {.ui = 1 << i};
           46 +                        view(&a);
           47 +                        focus(c);
           48 +                        restack(selmon);
           49 +                }
           50          }
           51  }
           52  
           53 -- 
           54 2.15.1
           55