From: Orestis Date: Sat, 3 Nov 2018 12:39:49 +0000 (+0200) Subject: Update ewmh focused only when new focus is different (#3496) X-Git-Tag: 4.16~1 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=dc16df439e8866ba49b69304412757c07d5807e5;p=i3%2Fi3 Update ewmh focused only when new focus is different (#3496) Fixes #3495. --- 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;