56 lines
1.7 KiB
Diff
56 lines
1.7 KiB
Diff
From cda7fd4e732c6db03180301e45b48b961fda5eba Mon Sep 17 00:00:00 2001
|
|
From: Danny O'Brien <danny@spesh.com>
|
|
Date: Sat, 23 Dec 2017 16:45:29 -0800
|
|
Subject: [PATCH] Activate a window in response to _NET_ACTIVE_WINDOW
|
|
|
|
By default, dwm response to client requests to _NET_ACTIVE_WINDOW client
|
|
messages by setting the urgency bit on the named window.
|
|
|
|
This patch activates the window instead.
|
|
|
|
Both behaviours are legitimate according to
|
|
https://specifications.freedesktop.org/wm-spec/wm-spec-latest.html#idm140200472702304
|
|
|
|
One should decide which of these one should perform based on the message
|
|
senders' untestable claims that it represents the end-user. Setting the
|
|
urgency bit is the conservative decision. This patch implements the more
|
|
trusting alternative.
|
|
|
|
It also allows dwm to work with `wmctrl -a` and other external window
|
|
management utilities.
|
|
---
|
|
dwm.c | 10 ++++++++--
|
|
1 file changed, 8 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/dwm.c b/dwm.c
|
|
index ff893df..b278182 100644
|
|
--- a/dwm.c
|
|
+++ b/dwm.c
|
|
@@ -515,6 +515,7 @@ clientmessage(XEvent *e)
|
|
{
|
|
XClientMessageEvent *cme = &e->xclient;
|
|
Client *c = wintoclient(cme->window);
|
|
+ unsigned int i;
|
|
|
|
if (!c)
|
|
return;
|
|
@@ -524,8 +525,13 @@ clientmessage(XEvent *e)
|
|
setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */
|
|
|| (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen)));
|
|
} else if (cme->message_type == netatom[NetActiveWindow]) {
|
|
- if (c != selmon->sel && !c->isurgent)
|
|
- seturgent(c, 1);
|
|
+ for (i = 0; i < LENGTH(tags) && !((1 << i) & c->tags); i++);
|
|
+ if (i < LENGTH(tags)) {
|
|
+ const Arg a = {.ui = 1 << i};
|
|
+ view(&a);
|
|
+ focus(c);
|
|
+ restack(selmon);
|
|
+ }
|
|
}
|
|
}
|
|
|
|
--
|
|
2.15.1
|
|
|