]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Switch to appropriate workspace when using 'focus' (+test) (Thanks rogutes)
authorMichael Stapelberg <michael@stapelberg.de>
Thu, 14 Jul 2011 21:43:57 +0000 (23:43 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Thu, 14 Jul 2011 21:45:36 +0000 (23:45 +0200)
Fixes #432

src/cmdparse.y
testcases/t/11-goto.t
testcases/t/17-workspace.t
testcases/t/36-floating-ws-empty.t
testcases/t/lib/i3test.pm

index 0b80b6b333748ca0425c4041644f3675779f1d52..a8e190e789664d82f3249c1f5eabd73cb40c96d9 100644 (file)
@@ -412,6 +412,8 @@ focus:
 
         int count = 0;
         TAILQ_FOREACH(current, &owindows, owindows) {
+            Con *ws = con_get_workspace(current->con);
+            workspace_show(ws->name);
             LOG("focusing %p / %s\n", current->con, current->con->name);
             con_focus(current->con);
             count++;
index 4eedb56c370f426f06184de3f2afbc434a79463b..ed8c43586133d0ca15e653a0919e74a3ac526655 100644 (file)
@@ -12,7 +12,7 @@ BEGIN {
 my $x = X11::XCB::Connection->new;
 
 my $i3 = i3("/tmp/nestedcons");
-fresh_workspace;
+my $tmp = fresh_workspace;
 
 cmd 'split h';
 
@@ -73,5 +73,17 @@ is($focus, $top->id, "Top window focused");
 $focus = focus_after(qq|[con_mark="$random_mark" con_mark="$random_mark"] focus|);
 is($focus, $mid->id, "goto worked");
 
+#####################################################################
+# Check whether the focus command will switch to a different
+# workspace if necessary
+#####################################################################
+
+my $tmp2 = fresh_workspace;
+
+is(focused_ws(), $tmp2, 'tmp2 now focused');
+
+cmd qq|[con_mark="$random_mark"] focus|;
+
+is(focused_ws(), $tmp, 'tmp now focused');
 
 done_testing;
index 32f8296905148b57348f12899f3edc8d9d7d8894..16e87ce199ca805bef0dd071cdc4ae9146175230 100644 (file)
@@ -7,11 +7,6 @@
 use List::Util qw(first);
 use i3test;
 
-sub workspace_exists {
-    my ($name) = @_;
-    ($name ~~ @{get_workspace_names()})
-}
-
 my $tmp = fresh_workspace;
 ok(workspace_exists($tmp), 'workspace created');
 # if the workspace could not be created, we cannot run any other test
@@ -53,24 +48,6 @@ cmd 'open';
 ok(workspace_exists($tmp), 'workspace tmp still exists');
 ok(workspace_exists($otmp), 'workspace otmp created');
 
-sub focused_ws_con {
-    my $i3 = i3("/tmp/nestedcons");
-    my $tree = $i3->get_tree->recv;
-    my @outputs = @{$tree->{nodes}};
-    my @cons;
-    for my $output (@outputs) {
-        # get the first CT_CON of each output
-        my $content = first { $_->{type} == 2 } @{$output->{nodes}};
-        my @focused = @{$content->{focus}};
-        return first { $_->{id} == $focused[0] } @{$content->{nodes}};
-    }
-}
-
-sub focused_ws {
-    my $con = focused_ws_con;
-    return $con->{name};
-}
-
 is(focused_ws(), $otmp, 'focused workspace is otmp');
 
 cmd 'workspace prev';
index 2ea1693623fc31848e986e30dbc7a99cccc68d4f..67986251fd801343250fe2abe526cf8ae2855c9e 100644 (file)
@@ -17,11 +17,6 @@ my $tmp = fresh_workspace;
 # 1: open a floating window, get it mapped
 #############################################################################
 
-sub workspace_exists {
-    my ($name) = @_;
-    ($name ~~ @{get_workspace_names()})
-}
-
 ok(workspace_exists($tmp), "workspace $tmp exists");
 
 my $x = X11::XCB::Connection->new;
index ed75faff3f6cc3170096220c9d29b4d430bb0d05..7bfad56a9a71d7babeedf2f97554697f54a0defd 100644 (file)
@@ -14,7 +14,7 @@ use Try::Tiny;
 use v5.10;
 
 use Exporter ();
-our @EXPORT = qw(get_workspace_names get_unused_workspace fresh_workspace get_ws_content get_ws get_focused open_empty_con open_standard_window get_dock_clients cmd does_i3_live exit_gracefully);
+our @EXPORT = qw(get_workspace_names get_unused_workspace fresh_workspace get_ws_content get_ws get_focused open_empty_con open_standard_window get_dock_clients cmd does_i3_live exit_gracefully workspace_exists focused_ws);
 
 my $tester = Test::Builder->new();
 
@@ -167,6 +167,24 @@ sub cmd {
     i3("/tmp/nestedcons")->command(@_)->recv
 }
 
+sub workspace_exists {
+    my ($name) = @_;
+    ($name ~~ @{get_workspace_names()})
+}
+
+sub focused_ws {
+    my $i3 = i3("/tmp/nestedcons");
+    my $tree = $i3->get_tree->recv;
+    my @outputs = @{$tree->{nodes}};
+    my @cons;
+    for my $output (@outputs) {
+        # get the first CT_CON of each output
+        my $content = first { $_->{type} == 2 } @{$output->{nodes}};
+        my $first = first { $_->{fullscreen_mode} == 1 } @{$content->{nodes}};
+        return $first->{name}
+    }
+}
+
 sub does_i3_live {
     my $tree = i3('/tmp/nestedcons')->get_tree->recv;
     my @nodes = @{$tree->{nodes}};