dwm-focusonnetactive-6.2.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-focusonnetactive-6.2.diff (1719B)
       ---
            1 From 286ca3bb1af08b452bf8140abcc23d4ef61baaa2 Mon Sep 17 00:00:00 2001
            2 From: bakkeby <bakkeby@gmail.com>
            3 Date: Tue, 7 Apr 2020 12:33:04 +0200
            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 ---
           23  dwm.c | 11 +++++++++--
           24  1 file changed, 9 insertions(+), 2 deletions(-)
           25 
           26 diff --git a/dwm.c b/dwm.c
           27 index 4465af1..3919d47 100644
           28 --- a/dwm.c
           29 +++ b/dwm.c
           30 @@ -514,6 +514,7 @@ clientmessage(XEvent *e)
           31  {
           32          XClientMessageEvent *cme = &e->xclient;
           33          Client *c = wintoclient(cme->window);
           34 +        unsigned int i;
           35  
           36          if (!c)
           37                  return;
           38 @@ -523,8 +524,14 @@ clientmessage(XEvent *e)
           39                          setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD    */
           40                                  || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen)));
           41          } else if (cme->message_type == netatom[NetActiveWindow]) {
           42 -                if (c != selmon->sel && !c->isurgent)
           43 -                        seturgent(c, 1);
           44 +                for (i = 0; i < LENGTH(tags) && !((1 << i) & c->tags); i++);
           45 +                if (i < LENGTH(tags)) {
           46 +                        const Arg a = {.ui = 1 << i};
           47 +                        selmon = c->mon;
           48 +                        view(&a);
           49 +                        focus(c);
           50 +                        restack(selmon);
           51 +                }
           52          }
           53  }
           54  
           55 -- 
           56 2.17.1
           57