dwm-focusonnetactive-6.2.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dwm-focusonnetactive-6.2.diff (1719B) | |
--- | |
1 From 286ca3bb1af08b452bf8140abcc23d4ef61baaa2 Mon Sep 17 00:00:00 2001 | |
2 From: bakkeby <[email protected]> | |
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#idm14… | |
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_W… | |
40 || (cme->data.l[0] == 2 /* _NET_WM_STAT… | |
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); … | |
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 |