]> git.sur5r.net Git - i3/i3/commitdiff
Update ewmh focused only when new focus is different (#3496)
authorOrestis <orestisf1993@gmail.com>
Sat, 3 Nov 2018 12:39:49 +0000 (14:39 +0200)
committerMichael Stapelberg <stapelberg@users.noreply.github.com>
Sat, 3 Nov 2018 12:39:49 +0000 (13:39 +0100)
Fixes #3495.

src/x.c
testcases/t/295-net-wm-state-focused.t

diff --git a/src/x.c b/src/x.c
index 0fc6e714e5ab27f28c1ae929ed6849ceb4adbb50..5b54d1457de1829590e8a16f16db8a7dd822aeac 100644 (file)
--- a/src/x.c
+++ b/src/x.c
@@ -105,6 +105,10 @@ static con_state *state_for_frame(xcb_window_t window) {
  *
  */
 static void change_ewmh_focus(xcb_window_t new_focus, xcb_window_t old_focus) {
+    if (new_focus == old_focus) {
+        return;
+    }
+
     ewmh_update_active_window(new_focus);
 
     if (new_focus != XCB_WINDOW_NONE) {
index 1881154e4be362c0576d82c62b4b8604180936c4..fd7c251306ecee62a4446360d8d22f2afae11fcd 100644 (file)
@@ -23,15 +23,17 @@ my ($windowA, $windowB);
 
 fresh_workspace;
 $windowA = open_window;
-
 ok(is_net_wm_state_focused($windowA), 'a newly opened window that is focused should have _NET_WM_STATE_FOCUSED set');
 
 $windowB = open_window;
-
 ok(!is_net_wm_state_focused($windowA), 'when a another window is focused, the old window should not have _NET_WM_STATE_FOCUSED set');
+ok(is_net_wm_state_focused($windowB), 'a newly opened window that is focused should have _NET_WM_STATE_FOCUSED set');
 
-fresh_workspace;
+# See issue #3495.
+cmd 'kill';
+ok(is_net_wm_state_focused($windowA), 'when the second window is closed, the first window should have _NET_WM_STATE_FOCUSED set');
 
-ok(!is_net_wm_state_focused($windowB), 'when focus moves to the ewmh support window, neither window should have _NET_WM_STATE_FOCUSED set');
+fresh_workspace;
+ok(!is_net_wm_state_focused($windowA), 'when focus moves to the ewmh support window, no window should have _NET_WM_STATE_FOCUSED set');
 
 done_testing;