From dc16df439e8866ba49b69304412757c07d5807e5 Mon Sep 17 00:00:00 2001 From: Orestis Date: Sat, 3 Nov 2018 14:39:49 +0200 Subject: [PATCH] Update ewmh focused only when new focus is different (#3496) Fixes #3495. --- src/x.c | 4 ++++ testcases/t/295-net-wm-state-focused.t | 10 ++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/x.c b/src/x.c index 0fc6e714..5b54d145 100644 --- 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) { diff --git a/testcases/t/295-net-wm-state-focused.t b/testcases/t/295-net-wm-state-focused.t index 1881154e..fd7c2513 100644 --- a/testcases/t/295-net-wm-state-focused.t +++ b/testcases/t/295-net-wm-state-focused.t @@ -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; -- 2.39.2