]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Don’t focus the wrong workspace when moving to scratchpad (+test) (Thanks...
authorMichael Stapelberg <michael@stapelberg.de>
Fri, 14 Sep 2012 11:03:39 +0000 (13:03 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Fri, 14 Sep 2012 11:17:32 +0000 (13:17 +0200)
The problem was that scratchpad_move() didn’t check whether the source
workspace was focused. Therefore, 'move scratchpad' only worked reliably
interactively , but not when used with criteria.

src/con.c
src/scratchpad.c
testcases/t/198-regression-scratchpad-crash.t [new file with mode: 0644]

index c24a379f7abc186a1fd2dc5944da7a1e03992be0..23cf156887c8d85af07e3afcd43be3311557bfaf 100644 (file)
--- a/src/con.c
+++ b/src/con.c
@@ -657,7 +657,9 @@ void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool
      * con focused. Otherwise, we leave the focus on the current workspace as we
      * don’t want to focus invisible workspaces */
     if (source_output != dest_output &&
-        workspace_is_visible(workspace)) {
+        workspace_is_visible(workspace) &&
+        workspace->name[0] != '_' &&
+        workspace->name[1] != '_') {
         DLOG("Moved to a different output, focusing target\n");
     } else {
         /* Descend focus stack in case focus_next is a workspace which can
index 5f65bba8798558be8fda5953d3f29229779ba669..c54b1adaed868cf10eb03291491d099bddf16c3d 100644 (file)
@@ -58,7 +58,8 @@ void scratchpad_move(Con *con) {
 
     /* 4: Fix focus. Normally, when moving a window to a different output, the
      * destination output gets focused. In this case, we don’t want that. */
-    con_focus(focus_next);
+    if (con_get_workspace(focus_next) == con_get_workspace(focused))
+        con_focus(focus_next);
 }
 
 /*
diff --git a/testcases/t/198-regression-scratchpad-crash.t b/testcases/t/198-regression-scratchpad-crash.t
new file mode 100644 (file)
index 0000000..8f732ba
--- /dev/null
@@ -0,0 +1,19 @@
+#!perl
+# vim:ts=4:sw=4:expandtab
+# When using a command which moves a window to scratchpad from an invisible
+# (e.g. unfocused) workspace and immediately shows that window again, i3
+# crashed.
+# Bug still in: 4.2-305-g22922a9
+use i3test;
+
+my $ws1 = fresh_workspace;
+my $invisible_window = open_window;
+my $other_focusable_window = open_window;
+
+my $ws2 = fresh_workspace;
+my $id = $invisible_window->id;
+cmd qq|[id="$id"] move scratchpad, scratchpad show|;
+
+does_i3_live;
+
+done_testing;