From: Ingo Bürk Date: Sun, 7 Feb 2016 11:08:50 +0000 (+0100) Subject: Remove _NET_WM_STATE on withdrawn windows. X-Git-Tag: 4.12~20^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=refs%2Fpull%2F2196%2Fhead;p=i3%2Fi3 Remove _NET_WM_STATE on withdrawn windows. According to the spec, _NET_WM_STATE must be removed when the window is withdrawn, much like _NET_WM_DESKTOP. fixes #2165 --- diff --git a/src/handlers.c b/src/handlers.c index 7e116ce7..2991d7c3 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -503,8 +503,10 @@ static void handle_unmap_notify_event(xcb_unmap_notify_event_t *event) { goto ignore_end; } - /* Since we close the container, we need to unset _NET_WM_DESKTOP according to the spec. */ + /* Since we close the container, we need to unset _NET_WM_DESKTOP and + * _NET_WM_STATE according to the spec. */ xcb_delete_property(conn, event->window, A__NET_WM_DESKTOP); + xcb_delete_property(conn, event->window, A__NET_WM_STATE); tree_close_internal(con, DONT_KILL_WINDOW, false, false); tree_render(); diff --git a/testcases/t/253-multiple-net-wm-state-atoms.t b/testcases/t/253-multiple-net-wm-state-atoms.t index bbd6c521..bfa8b46c 100644 --- a/testcases/t/253-multiple-net-wm-state-atoms.t +++ b/testcases/t/253-multiple-net-wm-state-atoms.t @@ -33,7 +33,7 @@ sub get_wm_state { my $reply = $x->get_property_reply($cookie->{sequence}); my $len = $reply->{length}; - return 0 if $len == 0; + return undef if $len == 0; my @atoms = unpack("L$len", $reply->{value}); return \@atoms; @@ -64,6 +64,20 @@ cmd 'sticky enable'; cmd 'fullscreen disable'; is_deeply(get_wm_state($window), [ $wm_state_sticky ], 'only _NET_WM_STATE_STICKY is set'); +############################################################################### +# _NET_WM_STATE is removed when the window is withdrawn. +############################################################################### + +fresh_workspace; +$window = open_window; +cmd 'sticky enable'; +is_deeply(get_wm_state($window), [ $wm_state_sticky ], 'sanity check: _NET_WM_STATE_STICKY is set'); + +$window->unmap; +wait_for_unmap($window); + +is(get_wm_state($window), undef, '_NET_WM_STATE is removed'); + ########################################################################## done_testing;