]> git.sur5r.net Git - i3/i3/commitdiff
Fix: killing unfocused window shouldn't produce focus event
authorOrestis Floros <orestisf1993@gmail.com>
Fri, 14 Dec 2018 18:37:29 +0000 (20:37 +0200)
committerOrestis Floros <orestisf1993@gmail.com>
Fri, 14 Dec 2018 21:46:21 +0000 (23:46 +0200)
src/x.c
testcases/t/219-ipc-window-focus.t

diff --git a/src/x.c b/src/x.c
index 82c19d3022b3e7ad68f64b72224b33dccc15e215..a2f2c39f887d0eaf14cf06937c9e560989bb9737 100644 (file)
--- a/src/x.c
+++ b/src/x.c
@@ -276,7 +276,12 @@ static void _x_con_kill(Con *con) {
     free(state);
 
     /* Invalidate focused_id to correctly focus new windows with the same ID */
-    focused_id = last_focused = XCB_NONE;
+    if (con->frame.id == focused_id) {
+        focused_id = XCB_NONE;
+    }
+    if (con->frame.id == last_focused) {
+        last_focused = XCB_NONE;
+    }
 }
 
 /*
index b1c8ba1836148b377a706da4848143d040a2b951..afb1bfbcf218a6f5e8527230128ba3d328580556 100644 (file)
@@ -44,11 +44,26 @@ sub focus_subtest {
     is($events[0]->{container}->{name}, $name, "$name focused");
 }
 
+sub kill_subtest {
+    my ($cmd, $name) = @_;
+
+    my $focus = AnyEvent->condvar;
+
+    my @events = events_for(
+       sub { cmd $cmd },
+       'window');
+
+    is(scalar @events, 1, 'Received 1 event');
+    is($events[0]->{change}, 'close', 'Close event received');
+    is($events[0]->{container}->{name}, $name, "$name closed");
+}
+
 subtest 'focus left (1)', \&focus_subtest, 'focus left', $win1->name;
 subtest 'focus left (2)', \&focus_subtest, 'focus left', $win0->name;
 subtest 'focus right (1)', \&focus_subtest, 'focus right', $win1->name;
 subtest 'focus right (2)', \&focus_subtest, 'focus right', $win2->name;
 subtest 'focus right (3)', \&focus_subtest, 'focus right', $win0->name;
 subtest 'focus left', \&focus_subtest, 'focus left', $win2->name;
+subtest 'kill doesn\'t produce focus event', \&kill_subtest, '[id=' . $win1->id . '] kill', $win1->name;
 
 done_testing;