X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=testcases%2Flib%2Fi3test.pm;h=979c60ac73815ca0629a106c697c9b1d779ffa55;hb=e114b3dba2485606cf5a3d044c0de8430c9f80b4;hp=aecec5342ea7e1b5d52d928c7999605c6dc700b3;hpb=1f2c9306a27cced83ad960e929bb9e9a163b7843;p=i3%2Fi3 diff --git a/testcases/lib/i3test.pm b/testcases/lib/i3test.pm index aecec534..979c60ac 100644 --- a/testcases/lib/i3test.pm +++ b/testcases/lib/i3test.pm @@ -247,7 +247,7 @@ sub open_empty_con { my ($i3) = @_; my $reply = $i3->command('open')->recv; - return $reply->{id}; + return $reply->[0]->{id}; } sub get_workspace_names { @@ -256,6 +256,7 @@ sub get_workspace_names { my @outputs = @{$tree->{nodes}}; my @cons; for my $output (@outputs) { + next if $output->{name} eq '__i3'; # get the first CT_CON of each output my $content = first { $_->{type} == 2 } @{$output->{nodes}}; @cons = (@cons, @{$content->{nodes}}); @@ -270,7 +271,34 @@ sub get_unused_workspace { $tmp } +=head2 fresh_workspace(...) + +Switches to an unused workspace and returns the name of that workspace. + +Optionally switches to the specified output first. + + my $ws = fresh_workspace; + + # Get a fresh workspace on the second output. + my $ws = fresh_workspace(output => 1); + +=cut sub fresh_workspace { + my %args = @_; + if (exists($args{output})) { + my $i3 = i3(get_socket_path()); + my $tree = $i3->get_tree->recv; + my $output = first { $_->{name} eq "xinerama-$args{output}" } + @{$tree->{nodes}}; + die "BUG: Could not find output $args{output}" unless defined($output); + # Get the focused workspace on that output and switch to it. + my $content = first { $_->{type} == 2 } @{$output->{nodes}}; + my $focused = $content->{focus}->[0]; + my $workspace = first { $_->{id} == $focused } @{$content->{nodes}}; + $workspace = $workspace->{name}; + cmd("workspace $workspace"); + } + my $unused = get_unused_workspace; cmd("workspace $unused"); $unused @@ -336,11 +364,11 @@ sub get_dock_clients { @{$output->{nodes}}); } elsif ($which eq 'top') { my $first = first { $_->{type} == 5 } @{$output->{nodes}}; - @docked = (@docked, @{$first->{nodes}}); + @docked = (@docked, @{$first->{nodes}}) if defined($first); } elsif ($which eq 'bottom') { my @matching = grep { $_->{type} == 5 } @{$output->{nodes}}; my $last = $matching[-1]; - @docked = (@docked, @{$last->{nodes}}); + @docked = (@docked, @{$last->{nodes}}) if defined($last); } } return @docked; @@ -355,17 +383,19 @@ sub workspace_exists { ($name ~~ @{get_workspace_names()}) } +=head2 focused_ws + +Returns the name of the currently focused workspace. + +=cut sub focused_ws { my $i3 = i3(get_socket_path()); 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} - } + my $focused = $tree->{focus}->[0]; + my $output = first { $_->{id} == $focused } @{$tree->{nodes}}; + my $content = first { $_->{type} == 2 } @{$output->{nodes}}; + my $first = first { $_->{fullscreen_mode} == 1 } @{$content->{nodes}}; + return $first->{name} } # @@ -468,6 +498,9 @@ sub get_socket_path { my $cookie = $x->get_property(0, $x->get_root_window(), $atom->id, GET_PROPERTY_TYPE_ANY, 0, 256); my $reply = $x->get_property_reply($cookie->{sequence}); my $socketpath = $reply->{value}; + if ($socketpath eq "/tmp/nested-$ENV{DISPLAY}") { + $socketpath .= '-activation'; + } $_cached_socket_path = $socketpath; return $socketpath; } @@ -480,6 +513,8 @@ sub launch_with_config { $tmp_socket_path = "/tmp/nested-$ENV{DISPLAY}"; + $args{dont_create_temp_dir} //= 0; + my ($fh, $tmpfile) = tempfile("i3-cfg-for-$ENV{TESTNAME}-XXXXX", UNLINK => 1); if ($config ne '-default') { @@ -505,7 +540,9 @@ sub launch_with_config { testname => $ENV{TESTNAME}, valgrind => $ENV{VALGRIND}, strace => $ENV{STRACE}, + restart => $ENV{RESTART}, cv => $cv, + dont_create_temp_dir => $args{dont_create_temp_dir}, ); # force update of the cached socket path in lib/i3test