]> git.sur5r.net Git - i3/i3/commitdiff
tests: lib/i3test: Remove open_standard_window, introduce open_window
authorMichael Stapelberg <michael@stapelberg.de>
Sat, 24 Sep 2011 14:11:37 +0000 (15:11 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 24 Sep 2011 14:11:37 +0000 (15:11 +0100)
open_window has a better API than open_standard_window. It uses named
parameters and supplies default values for everything you don’t specify. This
way, you can use every feature which X11::XCB::Window supports.

38 files changed:
testcases/t/05-ipc.t
testcases/t/06-focus.t
testcases/t/08-focus-stack.t
testcases/t/10-dock.t
testcases/t/11-goto.t
testcases/t/12-floating-resize.t
testcases/t/13-urgent.t
testcases/t/14-client-leader.t
testcases/t/19-match.t
testcases/t/29-focus-after-close.t
testcases/t/33-size-hints.t
testcases/t/35-floating-focus.t
testcases/t/36-floating-ws-empty.t
testcases/t/37-floating-unmap.t
testcases/t/38-floating-attach.t
testcases/t/39-ws-numbers.t
testcases/t/40-focus-lost.t
testcases/t/41-resize.t
testcases/t/45-flattening.t
testcases/t/46-floating-reinsert.t
testcases/t/47-regress-floatingmove.t
testcases/t/48-regress-floatingmovews.t
testcases/t/50-regress-dock-restart.t
testcases/t/53-floating-originalsize.t
testcases/t/54-regress-multiple-dock.t
testcases/t/55-floating-split-size.t
testcases/t/56-fullscreen-focus.t
testcases/t/57-regress-fullscreen-level-up.t
testcases/t/58-wm_take_focus.t
testcases/t/61-regress-borders-restart.t
testcases/t/63-wm-state.t
testcases/t/64-kill-win-vs-client.t
testcases/t/65-for_window.t
testcases/t/67-workspace_layout.t
testcases/t/68-regress-fullscreen-restart.t
testcases/t/70-force_focus_wrapping.t
testcases/t/74-border-config.t
testcases/t/lib/i3test.pm

index 0d18040ec1efb8c8ff157400ddcaf5bed9bd2a8e..982ece7e9a2c7f232dc530d19b4bfce63edeea7a 100644 (file)
@@ -12,8 +12,7 @@ fresh_workspace;
 #####################################################################
 
 # Create a window so we can get a focus different from NULL
-my $window = open_standard_window($x);
-sync_with_i3($x);
+my $window = open_window($x);
 
 my $focus = $x->input_focus;
 
index b3add32227b5a3542af8cbc116d505a887ab06ba..5ded494fbe9fd5e4894c04853d79532cb4a68cd9 100644 (file)
@@ -2,15 +2,9 @@
 # vim:ts=4:sw=4:expandtab
 
 use i3test;
-use X11::XCB qw(:all);
-
-BEGIN {
-    use_ok('X11::XCB::Connection') or BAIL_OUT('Cannot load X11::XCB::Connection');
-}
 
 my $x = X11::XCB::Connection->new;
 
-my $i3 = i3(get_socket_path());
 my $tmp = fresh_workspace;
 
 #####################################################################
@@ -21,14 +15,9 @@ my $tmp = fresh_workspace;
 cmd 'layout default';
 cmd 'split v';
 
-my $top = open_standard_window($x);
-my $mid = open_standard_window($x);
-my $bottom = open_standard_window($x);
-##sleep 0.25;
-
-diag("top id = " . $top->id);
-diag("mid id = " . $mid->id);
-diag("bottom id = " . $bottom->id);
+my $top = open_window($x);
+my $mid = open_window($x);
+my $bottom = open_window($x);
 
 #
 # Returns the input focus after sending the given command to i3 via IPC
@@ -37,7 +26,8 @@ diag("bottom id = " . $bottom->id);
 sub focus_after {
     my $msg = shift;
 
-    $i3->command($msg)->recv;
+    cmd $msg;
+    sync_with_i3 $x;
     return $x->input_focus;
 }
 
index 33a5884a2fc24d85b5336ecc6a6f8f1dcc12eb8b..b5be284c3b0cbde3eedc9b6387643a490100d06c 100644 (file)
@@ -7,28 +7,23 @@ use i3test;
 
 my $x = X11::XCB::Connection->new;
 
-my $i3 = i3(get_socket_path());
 fresh_workspace;
 
 cmd 'split h';
-my $tiled_left = open_standard_window($x);
-my $tiled_right = open_standard_window($x);
-
-sync_with_i3($x);
+my $tiled_left = open_window($x);
+my $tiled_right = open_window($x);
 
 # Get input focus before creating the floating window
 my $focus = $x->input_focus;
 
 # Create a floating window which is smaller than the minimum enforced size of i3
-my $window = open_standard_window($x, undef, 1);
-sync_with_i3($x);
+my $window = open_floating_window($x);
 
 is($x->input_focus, $window->id, 'floating window focused');
 
 $window->unmap;
 
-# TODO: wait for unmap
-sync_with_i3($x);
+wait_for_unmap($x);
 
 is($x->input_focus, $focus, 'Focus correctly restored');
 
index 988d92dbb08cfc8b47836ab130ad17b1d2d83cd6..cad54c26c81aa17228591437ff735b08aaab7442 100644 (file)
@@ -29,18 +29,9 @@ my $screens = $x->screens;
 my $primary = first { $_->primary } @{$screens};
 
 # TODO: focus the primary screen before
-
-my $window = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 30, 30],
-    background_color => '#FF0000',
-    window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
-    event_mask => [ 'structure_notify' ],
-);
-
-$window->map;
-
-wait_for_map $x;
+my $window = open_window($x, {
+        window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
+    });
 
 my $rect = $window->rect;
 is($rect->width, $primary->rect->width, 'dock client is as wide as the screen');
@@ -91,17 +82,11 @@ is(@docked, 0, 'no more dock clients');
 # check if it gets placed on bottom (by coordinates)
 #####################################################################
 
-$window = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 1000, 30, 30],
-    background_color => '#FF0000',
-    window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
-    event_mask => [ 'structure_notify' ],
-);
-
-$window->map;
-
-wait_for_map $x;
+$window = open_window($x, {
+        rect => [ 0, 1000, 30, 30 ],
+        background_color => '#FF0000',
+        window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
+    });
 
 my $rect = $window->rect;
 is($rect->width, $primary->rect->width, 'dock client is as wide as the screen');
@@ -121,13 +106,12 @@ is(@docked, 0, 'no more dock clients');
 # check if it gets placed on bottom (by hint)
 #####################################################################
 
-$window = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 1000, 30, 30],
-    background_color => '#FF0000',
-    window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
-    event_mask => [ 'structure_notify' ],
-);
+$window = open_window($x, {
+        dont_map => 1,
+        rect => [ 0, 1000, 30, 30 ],
+        background_color => '#FF0000',
+        window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
+    });
 
 $window->_create();
 
@@ -159,13 +143,12 @@ wait_for_unmap $x;
 @docked = get_dock_clients();
 is(@docked, 0, 'no more dock clients');
 
-$window = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 1000, 30, 30],
-    background_color => '#FF0000',
-    window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
-    event_mask => [ 'structure_notify' ],
-);
+$window = open_window($x, {
+        dont_map => 1,
+        rect => [ 0, 1000, 30, 30 ],
+        background_color => '#FF0000',
+        window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
+    });
 
 $window->_create();
 
@@ -197,13 +180,11 @@ $window->destroy;
 # regression test: transient dock client
 #####################################################################
 
-my $fwindow = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 30, 30],
-    background_color => '#FF0000',
-    window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
-    event_mask => [ 'structure_notify' ],
-);
+$fwindow = open_window($x, {
+        dont_map => 1,
+        background_color => '#FF0000',
+        window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
+    });
 
 $fwindow->transient_for($window);
 $fwindow->map;
index 44cf55abe69b37d1be919918f0bb67d920a2d501..5bec5892eaa73d9c90ed710e5a9221876ef1241c 100644 (file)
@@ -11,7 +11,6 @@ BEGIN {
 
 my $x = X11::XCB::Connection->new;
 
-my $i3 = i3(get_socket_path());
 my $tmp = fresh_workspace;
 
 cmd 'split h';
@@ -20,13 +19,9 @@ cmd 'split h';
 # Create two windows and make sure focus switching works
 #####################################################################
 
-my $top = open_standard_window($x);
-my $mid = open_standard_window($x);
-my $bottom = open_standard_window($x);
-
-diag("top id = " . $top->id);
-diag("mid id = " . $mid->id);
-diag("bottom id = " . $bottom->id);
+my $top = open_window($x);
+my $mid = open_window($x);
+my $bottom = open_window($x);
 
 #
 # Returns the input focus after sending the given command to i3 via IPC
@@ -55,7 +50,7 @@ my $random_mark = sha1_base64(rand());
 $focus = focus_after(qq|[con_mark="$random_mark"] focus|);
 is($focus, $mid->id, "focus unchanged");
 
-$i3->command("mark $random_mark")->recv;
+cmd "mark $random_mark";
 
 $focus = focus_after('focus left');
 is($focus, $top->id, "Top window focused");
index 1aec9573fb56acda1337c0ebbaa8611f1716fef7..ac3387a9ef7afcd69120ca25ca316a2b02005e2d 100644 (file)
@@ -16,8 +16,7 @@ fresh_workspace;
 # Create a floating window and see if resizing works
 #####################################################################
 
-# Create a floating window
-my $window = open_standard_window($x, undef, 1);
+my $window = open_floating_window($x);
 
 # See if configurerequests cause window movements (they should not)
 my ($a, $t) = $window->rect;
index 83c36a980ac7fa0d0bde2cafac0d6d37b7fd4c48..7954408fa2bf30efaa30d590f0c16ef1fedf2ea2 100644 (file)
@@ -19,8 +19,8 @@ my $tmp = fresh_workspace;
 
 cmd 'split v';
 
-my $top = open_standard_window($x);
-my $bottom = open_standard_window($x);
+my $top = open_window($x);
+my $bottom = open_window($x);
 
 my @urgent = grep { $_->{urgent} } @{get_ws_content($tmp)};
 is(@urgent, 0, 'no window got the urgent flag');
index 08deabf8a988f9d15890c0973906c81499e0727e..6f7ffce032e3d440e99552c8e5ef5b9aa97037f5 100644 (file)
@@ -20,40 +20,15 @@ my $tmp = fresh_workspace;
 # one of both (depending on your screen resolution) will be positioned wrong.
 ####################################################################################
 
-my $left = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [0, 0, 30, 30],
-    background_color => '#FF0000',
-    event_mask => [ 'structure_notify' ],
-);
-
-$left->name('Left');
-$left->map;
-
-my $right = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [0, 0, 30, 30],
-    background_color => '#FF0000',
-    event_mask => [ 'structure_notify' ],
-);
-
-$right->name('Right');
-$right->map;
-
-ok(wait_for_map($x), 'left window mapped');
-ok(wait_for_map($x), 'right window mapped');
+my $left = open_window($x, { name => 'Left' });
+my $right = open_window($x, { name => 'Right' });
 
 my ($abs, $rgeom) = $right->rect;
 
-my $child = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 30, 30 ],
-    background_color => '#C0C0C0',
-    window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_UTILITY'),
-    event_mask => [ 'structure_notify' ],
-);
-
-$child->name('Child window');
+my $child = open_floating_window($x, {
+        dont_map => 1,
+        name => 'Child window',
+    });
 $child->client_leader($right);
 $child->map;
 
@@ -63,15 +38,10 @@ my $cgeom;
 ($abs, $cgeom) = $child->rect;
 cmp_ok($cgeom->x, '>=', $rgeom->x, 'Child X >= right container X');
 
-my $child2 = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 30, 30 ],
-    background_color => '#C0C0C0',
-    window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_UTILITY'),
-    event_mask => [ 'structure_notify' ],
-);
-
-$child2->name('Child window 2');
+my $child2 = open_floating_window($x, {
+        dont_map => 1,
+        name => 'Child window 2',
+    });
 $child2->client_leader($left);
 $child2->map;
 
@@ -81,15 +51,7 @@ ok(wait_for_map($x), 'second child window mapped');
 cmp_ok(($cgeom->x + $cgeom->width), '<', $rgeom->x, 'child above left window');
 
 # check wm_transient_for
-
-
-my $fwindow = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 30, 30],
-    background_color => '#FF0000',
-    event_mask => [ 'structure_notify' ],
-);
-
+my $fwindow = open_window($x, { dont_map => 1 });
 $fwindow->transient_for($right);
 $fwindow->map;
 
@@ -105,14 +67,7 @@ SKIP: {
 # Create a parent window
 #####################################################################
 
-my $window = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 30, 30 ],
-    background_color => '#C0C0C0',
-    event_mask => [ 'structure_notify' ],
-);
-
-$window->name('Parent window');
+my $window = open_window($x, { dont_map => 1, name => 'Parent window' });
 $window->map;
 
 ok(wait_for_map($x), 'parent window mapped');
@@ -123,14 +78,7 @@ ok(wait_for_map($x), 'parent window mapped');
 #########################################################################
 fresh_workspace;
 
-my $child = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 30, 30 ],
-    background_color => '#C0C0C0',
-    event_mask => [ 'structure_notify' ],
-);
-
-$child->name('Child window');
+my $child = open_window($x, { dont_map => 1, name => 'Child window' });
 $child->client_leader($window);
 $child->map;
 
index aab54456466f322978b280b89c5f6a1d363dce1a..8b9d21d3e0da46fbc422bda5041cd9365fcbbb61 100644 (file)
@@ -12,7 +12,7 @@ ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
 
 # Open a new window
 my $x = X11::XCB::Connection->new;
-my $window = open_standard_window($x);
+my $window = open_window($x);
 my $content = get_ws_content($tmp);
 ok(@{$content} == 1, 'window mapped');
 my $win = $content->[0];
index ac029eb14f85c1f2b6ade674c1baa7eb2c52f50d..8d22561359234e5643d3815e9fc3081e350c183f 100644 (file)
@@ -102,7 +102,7 @@ $first = open_empty_con($i3);
 $middle = open_empty_con($i3);
 # XXX: the $right empty con will be filled with the x11 window we are creating afterwards
 $right = open_empty_con($i3);
-my $win = open_standard_window($x, '#00ff00');
+my $win = open_window($x, { background_color => '#00ff00' });
 
 cmd qq|[con_id="$middle"] focus|;
 $win->destroy;
index 0d607dbcb777c0d7d18a08b573b4c58938b55caf..d2d77e8e0f2ae6abb6b14684776dfcf26b96c62b 100644 (file)
@@ -11,13 +11,7 @@ my $tmp = fresh_workspace;
 
 ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
 
-my $win = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => X11::XCB::Rect->new(x => 0, y => 0, width => 30, height => 30),
-    background_color => '#C0C0C0',
-    event_mask => [ 'structure_notify' ],
-);
-
+my $win = open_window($x, { dont_map => 1 });
 # XXX: we should check screen size. in screens with an AR of 2.0,
 # this is not a good idea.
 my $aspect = X11::XCB::Sizehints::Aspect->new;
index fc94c440fd6f4145e9af683afb93a3a7129dd473..4c5b562ff12ef21a40ca6df520baaf25bcdffaf6 100644 (file)
@@ -13,10 +13,8 @@ my $tmp = fresh_workspace;
 # 1: see if focus stays the same when toggling tiling/floating mode
 #############################################################################
 
-my $first = open_standard_window($x);
-my $second = open_standard_window($x);
-
-sync_with_i3($x);
+my $first = open_window($x);
+my $second = open_window($x);
 
 is($x->input_focus, $second->id, 'second window focused');
 
@@ -32,11 +30,9 @@ is($x->input_focus, $second->id, 'second window still focused after mode toggle'
 
 $tmp = fresh_workspace;
 
-$first = open_standard_window($x);    # window 2
-$second = open_standard_window($x);   # window 3
-my $third = open_standard_window($x); # window 4
-
-sync_with_i3($x);
+$first = open_window($x);    # window 2
+$second = open_window($x);   # window 3
+my $third = open_window($x); # window 4
 
 is($x->input_focus, $third->id, 'last container focused');
 
@@ -66,11 +62,9 @@ is($x->input_focus, $second->id, 'second con still focused after killing third')
 
 $tmp = fresh_workspace;
 
-$first = open_standard_window($x, '#ff0000');    # window 5
-$second = open_standard_window($x, '#00ff00');   # window 6
-my $third = open_standard_window($x, '#0000ff'); # window 7
-
-sync_with_i3($x);
+$first = open_window($x, '#ff0000');    # window 5
+$second = open_window($x, '#00ff00');   # window 6
+my $third = open_window($x, '#0000ff'); # window 7
 
 is($x->input_focus, $third->id, 'last container focused');
 
@@ -105,13 +99,11 @@ is($x->input_focus, $first->id, 'first con focused after killing all floating co
 
 $tmp = fresh_workspace;
 
-$first = open_standard_window($x, '#ff0000');    # window 5
+$first = open_window($x, { background_color => '#ff0000' });    # window 5
 cmd 'split v';
 cmd 'layout stacked';
-$second = open_standard_window($x, '#00ff00');   # window 6
-$third = open_standard_window($x, '#0000ff'); # window 7
-
-sync_with_i3($x);
+$second = open_window($x, { background_color => '#00ff00' });   # window 6
+$third = open_window($x, { background_color => '#0000ff' }); # window 7
 
 is($x->input_focus, $third->id, 'last container focused');
 
@@ -148,8 +140,8 @@ is($x->input_focus, $first->id, 'first con focused after killing all floating co
 
 $tmp = fresh_workspace;
 
-$first = open_standard_window($x, '#ff0000');    # window 8
-$second = open_standard_window($x, '#00ff00');   # window 9
+$first = open_window($x, { background_color => '#ff0000' });    # window 8
+$second = open_window($x, { background_color => '#00ff00' });   # window 9
 
 sync_with_i3($x);
 
@@ -195,9 +187,9 @@ is($x->input_focus, $second->id, 'second (floating) container focused');
 
 $tmp = fresh_workspace;
 
-$first = open_standard_window($x, '#ff0000', 1);    # window 10
-$second = open_standard_window($x, '#00ff00', 1);   # window 11
-$third = open_standard_window($x, '#0000ff', 1);   # window 12
+$first = open_floating_window($x, { background_color => '#ff0000' });# window 10
+$second = open_floating_window($x, { background_color => '#00ff00' }); # window 11
+$third = open_floating_window($x, { background_color => '#0000ff' }); # window 12
 
 sync_with_i3($x);
 
index 91467ed3785ff1b3a054e3e5a03809349d2e1a60..a6e0e405e867de092fa8a42035a3dcc45576fb89 100644 (file)
@@ -22,7 +22,7 @@ ok(workspace_exists($tmp), "workspace $tmp exists");
 my $x = X11::XCB::Connection->new;
 
 # Create a floating window which is smaller than the minimum enforced size of i3
-my $window = open_standard_window($x, undef, 1);
+my $window = open_floating_window($x);
 ok($window->mapped, 'Window is mapped');
 
 # switch to a different workspace, see if the window is still mapped?
index b3be1348b7b8e6ecb4f3c6a1ea6c372118a19983..ab1a33d313e7d9478476e30258a0828baf437278 100644 (file)
@@ -21,7 +21,7 @@ my $tmp = fresh_workspace;
 my $x = X11::XCB::Connection->new;
 
 # Create a floating window which is smaller than the minimum enforced size of i3
-my $window = open_standard_window($x, undef, 1);
+my $window = open_floating_window($x);
 ok($window->mapped, 'Window is mapped');
 
 # switch to a different workspace, see if the window is still mapped?
index 411ffa8e8423a0701134e42be2e7bce0a1c75e96..b08190a22036ba320f40848fcb83294411917fd3 100644 (file)
@@ -21,7 +21,7 @@ my $tmp = fresh_workspace;
 my $x = X11::XCB::Connection->new;
 
 # Create a floating window
-my $window = open_standard_window($x, undef, 1);
+my $window = open_floating_window($x);
 ok($window->mapped, 'Window is mapped');
 
 my $ws = get_ws($tmp);
@@ -31,7 +31,7 @@ is(@{$ws->{floating_nodes}}, 1, 'one floating node');
 is(@{$nodes}, 0, 'no tiling nodes');
 
 # Create a tiling window
-my $twindow = open_standard_window($x);
+my $twindow = open_window($x);
 
 ($nodes, $focus) = get_ws_content($tmp);
 
@@ -44,8 +44,8 @@ is(@{$nodes}, 1, 'one tiling node');
 
 $tmp = fresh_workspace;
 
-my $first = open_standard_window($x);
-my $second = open_standard_window($x);
+my $first = open_window($x);
+my $second = open_window($x);
 
 cmd 'layout stacked';
 
@@ -54,14 +54,14 @@ is(@{$ws->{floating_nodes}}, 0, 'no floating nodes so far');
 is(@{$ws->{nodes}}, 1, 'one tiling node (stacked con)');
 
 # Create a floating window
-my $window = open_standard_window($x, undef, 1);
+my $window = open_floating_window($x);
 ok($window->mapped, 'Window is mapped');
 
 $ws = get_ws($tmp);
 is(@{$ws->{floating_nodes}}, 1, 'one floating nodes');
 is(@{$ws->{nodes}}, 1, 'one tiling node (stacked con)');
 
-my $third = open_standard_window($x);
+my $third = open_window($x);
 
 
 $ws = get_ws($tmp);
index 3afd281b2329a6310ea6982e8c89b504588d9cd6..31f013efd8cb2646d436f3f5d2e1bf9de13b0371 100644 (file)
@@ -30,7 +30,7 @@ check_order('workspace order alright before testing');
 
 cmd "workspace 93";
 
-open_standard_window($x);
+open_window($x);
 
 my @ws = @{$i3->get_workspaces->recv};
 my @f = grep { defined($_->{num}) && $_->{num} == 93 } @ws;
@@ -38,23 +38,23 @@ is(@f, 1, 'ws 93 found by num');
 check_order('workspace order alright after opening 93');
 
 cmd "workspace 92";
-open_standard_window($x);
+open_window($x);
 check_order('workspace order alright after opening 92');
 
 cmd "workspace 94";
-open_standard_window($x);
+open_window($x);
 check_order('workspace order alright after opening 94');
 
 cmd "workspace 96";
-open_standard_window($x);
+open_window($x);
 check_order('workspace order alright after opening 96');
 
 cmd "workspace foo";
-open_standard_window($x);
+open_window($x);
 check_order('workspace order alright after opening foo');
 
 cmd "workspace 91";
-open_standard_window($x);
+open_window($x);
 check_order('workspace order alright after opening 91');
 
 done_testing;
index 1121f124bbb270a92187926d29230a0b81ee6806..fb77f01e83b75ebefb943da352e4cfde2af09162 100644 (file)
@@ -24,9 +24,9 @@ sub check_order {
 
 my $tmp = fresh_workspace;
 
-my $left = open_standard_window($x);
-my $mid = open_standard_window($x);
-my $right = open_standard_window($x);
+my $left = open_window($x);
+my $mid = open_window($x);
+my $right = open_window($x);
 
 sync_with_i3($x);
 
index 2a3846d81a72bda2905dc78c9c90198e2b4ee8ec..8691a044fda77ffd3501e19a633a302a59cc5551 100644 (file)
@@ -14,8 +14,8 @@ my $tmp = fresh_workspace;
 
 cmd 'split v';
 
-my $top = open_standard_window($x);
-my $bottom = open_standard_window($x);
+my $top = open_window($x);
+my $bottom = open_window($x);
 
 sync_with_i3($x);
 
@@ -54,8 +54,8 @@ $tmp = fresh_workspace;
 
 cmd 'split v';
 
-$top = open_standard_window($x);
-$bottom = open_standard_window($x);
+$top = open_window($x);
+$bottom = open_window($x);
 
 cmd 'split h';
 cmd 'layout stacked';
@@ -76,7 +76,7 @@ is($nodes->[1]->{percent}, 0.75, 'bottom window got 75%');
 
 $tmp = fresh_workspace;
 
-$top = open_standard_window($x);
+$top = open_window($x);
 
 cmd 'floating enable';
 
index 4a57f21154b3eacee9f1f4ea3f1060527cb3f758..904252e74c16fcf503e15144892d308bdddfca95 100644 (file)
@@ -17,9 +17,9 @@ my $x = X11::XCB::Connection->new;
 
 my $tmp = fresh_workspace;
 
-my $left = open_standard_window($x);
-my $mid = open_standard_window($x);
-my $right = open_standard_window($x);
+my $left = open_window($x);
+my $mid = open_window($x);
+my $right = open_window($x);
 
 cmd 'move before v';
 cmd 'move after h';
index 07f78956e95f45bd40882e6e1eb94083ac0dcaca..bc1302bbe645d571107ea60719e0f636ba5fec39 100644 (file)
@@ -12,11 +12,11 @@ my $x = X11::XCB::Connection->new;
 
 my $tmp = fresh_workspace;
 
-my $left = open_standard_window($x);
-my $mid = open_standard_window($x);
+my $left = open_window($x);
+my $mid = open_window($x);
 
 cmd 'split v';
-my $bottom = open_standard_window($x);
+my $bottom = open_window($x);
 
 my ($nodes, $focus) = get_ws_content($tmp);
 
@@ -24,10 +24,8 @@ my ($nodes, $focus) = get_ws_content($tmp);
 # 1: open a floating window, get it mapped
 #############################################################################
 
-my $x = X11::XCB::Connection->new;
-
 # Create a floating window
-my $window = open_standard_window($x, undef, 1);
+my $window = open_floating_window($x);
 ok($window->mapped, 'Window is mapped');
 
 ($nodes, $focus) = get_ws_content($tmp);
index 8425f6d9c6de342e1bacb03c3f26897d81ab678c..771ace320f59f6b1f7b9754b646ec63e41d4d15c 100644 (file)
@@ -16,9 +16,9 @@ my $x = X11::XCB::Connection->new;
 
 my $tmp = fresh_workspace;
 
-my $left = open_standard_window($x);
-my $mid = open_standard_window($x);
-my $right = open_standard_window($x);
+my $left = open_window($x);
+my $mid = open_window($x);
+my $right = open_window($x);
 
 # go to workspace level
 cmd 'level up';
index 355e697ade7d4e0dd58a6faaf25f2a2bff4e2a75..6f9dfc40d47a36ceb2de6b888ec01a8fd68e8d70 100644 (file)
@@ -16,13 +16,13 @@ my $x = X11::XCB::Connection->new;
 my $tmp = fresh_workspace;
 
 # open a tiling window on the first workspace
-open_standard_window($x);
+open_window($x);
 #sleep 0.25;
 my $first = get_focused($tmp);
 
 # on a different ws, open a floating window
 my $otmp = fresh_workspace;
-open_standard_window($x);
+open_window($x);
 #sleep 0.25;
 my $float = get_focused($otmp);
 cmd 'mode toggle';
index caadb9e301d3703268f45607cf72a3bac4b2ad44..e294e6bd3de9fe70dc312f72bf19011577adfcc4 100644 (file)
@@ -11,7 +11,6 @@ BEGIN {
 }
 
 my $x = X11::XCB::Connection->new;
-my $i3 = i3(get_socket_path());
 
 my $tmp = fresh_workspace;
 
@@ -26,17 +25,10 @@ is(@docked, 0, 'no dock clients yet');
 
 # open a dock client
 
-my $window = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 30, 30],
-    background_color => '#FF0000',
-    window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
-    event_mask => [ 'structure_notify' ],
-);
-
-$window->map;
-
-wait_for_map $x;
+my $window = open_window($x, {
+        background_color => '#FF0000',
+        window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
+    });
 
 #####################################################################
 # check that we can find it in the layout tree at the expected position
@@ -79,18 +71,12 @@ is(@docked, 0, 'no dock clients found');
 # create a dock client with a 1px border
 #####################################################################
 
-$window = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    border => 1,
-    rect => [ 0, 0, 30, 20],
-    background_color => '#00FF00',
-    window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
-    event_mask => [ 'structure_notify' ],
-);
-
-$window->map;
-
-wait_for_map $x;
+$window = open_window($x, {
+        border => 1,
+        rect => [ 0, 0, 30, 20 ],
+        background_color => '#00FF00',
+        window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
+    });
 
 @docked = get_dock_clients;
 is(@docked, 1, 'one dock client found');
index b1dc6199f0ff030b45028704504bc5ffab9f88a0..db0b6e9c63649bab76d70e31bc45b42dee62b9f2 100644 (file)
@@ -11,18 +11,7 @@ my $tmp = fresh_workspace;
 my $x = X11::XCB::Connection->new;
 
 # Create a floating window which is smaller than the minimum enforced size of i3
-my $window = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 400, 150],
-    background_color => '#C0C0C0',
-    event_mask => [ 'structure_notify' ],
-);
-
-isa_ok($window, 'X11::XCB::Window');
-
-$window->map;
-
-wait_for_map $x;
+my $window = open_window($x, { rect => [ 0, 0, 400, 150 ] });
 
 my ($absolute, $top) = $window->rect;
 
index b1809493f5553cb92dbaab3dffab79b440eb53e3..21cb96967ba246ae5a03bca05520d7819e61b3df 100644 (file)
@@ -27,33 +27,19 @@ is(@docked, 0, 'no dock clients yet');
 # open a dock client
 #####################################################################
 
-my $first = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 30, 30],
-    background_color => '#FF0000',
-    window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
-    event_mask => [ 'structure_notify' ],
-);
-
-$first->map;
-
-wait_for_map $x;
+my $first = open_window($x, {
+        background_color => '#FF0000',
+        window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
+    });
 
 #####################################################################
 # Open a second dock client
 #####################################################################
 
-my $second = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 30, 30],
-    background_color => '#FF0000',
-    window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
-    event_mask => [ 'structure_notify' ],
-);
-
-$second->map;
-
-wait_for_map $x;
+my $second = open_window($x, {
+        background_color => '#FF0000',
+        window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'),
+    });
 
 #####################################################################
 # Kill the second dock client
index 0ba5cdc43acb54ddb023b015e1e18cc534664ef0..5de05e8b2dceb44fb55f9becef9f9d8ab7df71d0 100644 (file)
@@ -19,31 +19,19 @@ my $tmp = fresh_workspace;
 # open a window with 200x80
 #####################################################################
 
-my $first = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 200, 80],
-    background_color => '#FF0000',
-    event_mask => [ 'structure_notify' ],
-);
-
-$first->map;
-
-wait_for_map $x;
+my $first = open_window($x, {
+        rect => [ 0, 0, 200, 80],
+        background_color => '#FF0000',
+    });
 
 #####################################################################
 # Open a second window with 300x90
 #####################################################################
 
-my $second = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 300, 90],
-    background_color => '#00FF00',
-    event_mask => [ 'structure_notify' ],
-);
-
-$second->map;
-
-wait_for_map $x;
+my $second = open_window($x, {
+        rect => [ 0, 0, 300, 90],
+        background_color => '#00FF00',
+    });
 
 #####################################################################
 # Set the parent to floating
index 2eb35a6b702ca96c2ed8486a2a38b329e576c478..a559b5a5134cb81c4238924167d7bc760797b9d3 100644 (file)
@@ -20,7 +20,7 @@ my $tmp = fresh_workspace;
 # open the left window
 #####################################################################
 
-my $left = open_standard_window($x, '#ff0000');
+my $left = open_window($x, { background_color => '#ff0000' });
 
 is($x->input_focus, $left->id, 'left window focused');
 
@@ -30,7 +30,7 @@ diag("left = " . $left->id);
 # Open the right window
 #####################################################################
 
-my $right = open_standard_window($x, '#00ff00');
+my $right = open_window($x, { background_color => '#00ff00' });
 
 diag("right = " . $right->id);
 
@@ -44,16 +44,12 @@ cmd 'fullscreen';
 # Open a third window
 #####################################################################
 
-#my $third = open_standard_window($x, '#0000ff');
+my $third = open_window($x, {
+        background_color => '#0000ff',
+        name => 'Third window',
+        dont_map => 1,
+    });
 
-my $third = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => X11::XCB::Rect->new(x => 0, y => 0, width => 30, height => 30 ),
-    background_color => '#0000ff',
-    event_mask => [ 'structure_notify' ],
-);
-
-$third->name('Third window');
 $third->map;
 
 sync_with_i3 $x;
index 3e0b2fe156c28a82f44855e5ec1137c0e77bc858..7a101dbc8cf0dd777602262283ac098a01ed80fe 100644 (file)
@@ -11,7 +11,6 @@ BEGIN {
 }
 
 my $x = X11::XCB::Connection->new;
-my $i3 = i3(get_socket_path());
 
 my $tmp = fresh_workspace;
 
@@ -19,7 +18,7 @@ my $tmp = fresh_workspace;
 # open a window, verify it’s not in fullscreen mode
 #####################################################################
 
-my $win = open_standard_window($x);
+my $win = open_window($x);
 
 my $nodes = get_ws_content $tmp;
 is(@$nodes, 1, 'exactly one client');
index 04c785ae30983fd5b28ab238d95e082e61964f07..372f41cd27fb83f65723bbef2e7dff168053c517 100644 (file)
@@ -17,7 +17,6 @@ BEGIN {
 }
 
 my $x = X11::XCB::Connection->new;
-my $i3 = i3(get_socket_path());
 
 subtest 'Window without WM_TAKE_FOCUS', sub {
 
index 1acf6c66fdf4824493eaa4220485dad9df37ee6b..c5e3ef8080c2cd2224cee9815d931f0a98e71dab 100644 (file)
@@ -12,7 +12,7 @@ use i3test;
 my $x = X11::XCB::Connection->new;
 my $i3 = i3(get_socket_path());
 my $tmp = fresh_workspace;
-my $window = open_standard_window($x);
+my $window = open_window($x);
 
 sub get_border_style {
     my @content = @{get_ws_content($tmp)};
index b91614007567ece6da6f381a073eaffd241dda7b..e55d86824de934d97cab3fb0b21f5773618c3e0d 100644 (file)
@@ -7,27 +7,17 @@
 use X11::XCB qw(:all);
 use i3test;
 
-BEGIN {
-    use_ok('X11::XCB::Window');
-    use_ok('X11::XCB::Event::Generic');
-    use_ok('X11::XCB::Event::MapNotify');
-    use_ok('X11::XCB::Event::ClientMessage');
-}
-
 my $x = X11::XCB::Connection->new;
 
-my $window = open_standard_window($x);
+my $window = open_window($x);
 
 sync_with_i3($x);
 
-diag('window mapped');
-
 is($window->state, ICCCM_WM_STATE_NORMAL, 'WM_STATE normal');
 
 $window->unmap;
 
-# TODO: wait for unmapnotify
-sync_with_i3($x);
+wait_for_unmap $x;
 
 is($window->state, ICCCM_WM_STATE_WITHDRAWN, 'WM_STATE withdrawn');
 
index 890775007e93948c068e7dcaadc0039b103ef6c4..ef45a789923e94556bbbffd8b10aab0d6a3c693a 100644 (file)
@@ -13,8 +13,8 @@ sub two_windows {
 
     ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
 
-    my $first = open_standard_window($x);
-    my $second = open_standard_window($x);
+    my $first = open_window($x);
+    my $second = open_window($x);
 
     sync_with_i3 $x;
 
index 0dbe99c36b2b04c6367759b8378bd63de19d648f..36a20ea9e4394272d1a7de188b5d9d039f9b4d15 100644 (file)
@@ -186,7 +186,7 @@ wait_for_map $x;
 cmp_ok(@content, '==', 1, 'one node on this workspace now');
 is($content[0]->{border}, 'none', 'no border');
 
-my $other = open_standard_window($x);
+my $other = open_window($x);
 
 @content = @{get_ws_content($tmp)};
 cmp_ok(@content, '==', 2, 'two nodes');
index 0e07ebf7957f10534aeabf378a67a710a65899bb..6ff3f15b2bd28d86c9e3601c9936d303e5bd0b0b 100644 (file)
@@ -27,8 +27,8 @@ my $tmp = fresh_workspace;
 
 ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
 
-my $first = open_standard_window($x);
-my $second = open_standard_window($x);
+my $first = open_window($x);
+my $second = open_window($x);
 
 sync_with_i3($x);
 
@@ -56,8 +56,8 @@ $tmp = fresh_workspace;
 
 ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
 
-$first = open_standard_window($x);
-$second = open_standard_window($x);
+$first = open_window($x);
+$second = open_window($x);
 
 sync_with_i3($x);
 
@@ -72,8 +72,8 @@ is($content[0]->{layout}, 'stacked', 'layout stacked');
 #####################################################################
 
 cmd 'focus parent';
-my $right_top = open_standard_window($x);
-my $right_bot = open_standard_window($x);
+my $right_top = open_window($x);
+my $right_bot = open_window($x);
 
 @content = @{get_ws_content($tmp)};
 is(@content, 2, 'two cons at workspace level after focus parent');
index fcc9ac7e12f5de0b6281151eaa15ee3862f22302..1418b402d38bff307f2386b13f34254e643a3b5a 100644 (file)
@@ -11,8 +11,8 @@ my $x = X11::XCB::Connection->new;
 
 fresh_workspace;
 
-open_standard_window($x);
-open_standard_window($x);
+open_window($x);
+open_window($x);
 
 cmd 'layout stacking';
 sleep 1;
index cf1c32168b4794fe958d6ef83cb8c5b0a672d620..2aa5407d57b337f78cfe5d30a77b72d80881022e 100644 (file)
@@ -25,13 +25,13 @@ my $tmp = fresh_workspace;
 
 ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
 
-my $first = open_standard_window($x);
-my $second = open_standard_window($x);
+my $first = open_window($x);
+my $second = open_window($x);
 
 cmd 'layout tabbed';
 cmd 'focus parent';
 
-my $third = open_standard_window($x);
+my $third = open_window($x);
 is($x->input_focus, $third->id, 'third window focused');
 
 cmd 'focus left';
@@ -66,13 +66,13 @@ $tmp = fresh_workspace;
 
 ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
 
-$first = open_standard_window($x);
-$second = open_standard_window($x);
+$first = open_window($x);
+$second = open_window($x);
 
 cmd 'layout tabbed';
 cmd 'focus parent';
 
-$third = open_standard_window($x);
+$third = open_window($x);
 
 sync_with_i3($x);
 
index d66ef477cf1c24695332514650db02e0067b80ad..617e37b927c7e69d53f4c10e94e5447350fa4883 100644 (file)
@@ -25,7 +25,7 @@ my $tmp = fresh_workspace;
 
 ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
 
-my $first = open_standard_window($x);
+my $first = open_window($x);
 
 my @content = @{get_ws_content($tmp)};
 ok(@content == 1, 'one container opened');
@@ -51,7 +51,7 @@ $tmp = fresh_workspace;
 
 ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
 
-$first = open_standard_window($x);
+$first = open_window($x);
 
 @content = @{get_ws_content($tmp)};
 ok(@content == 1, 'one container opened');
@@ -75,19 +75,7 @@ $tmp = fresh_workspace;
 
 ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
 
-# Create a floating window which is smaller than the minimum enforced size of i3
-$first = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 30, 30],
-    background_color => '#C0C0C0',
-    # replace the type with 'utility' as soon as the coercion works again in X11::XCB
-    window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_UTILITY'),
-    event_mask => [ 'structure_notify' ],
-);
-
-$first->map;
-
-wait_for_map $x;
+$first = open_floating_window($x);
 
 my $wscontent = get_ws($tmp);
 my @floating = @{$wscontent->{floating_nodes}};
@@ -115,19 +103,7 @@ $tmp = fresh_workspace;
 
 ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
 
-# Create a floating window which is smaller than the minimum enforced size of i3
-$first = $x->root->create_child(
-    class => WINDOW_CLASS_INPUT_OUTPUT,
-    rect => [ 0, 0, 30, 30],
-    background_color => '#C0C0C0',
-    # replace the type with 'utility' as soon as the coercion works again in X11::XCB
-    window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_UTILITY'),
-    event_mask => [ 'structure_notify' ],
-);
-
-$first->map;
-
-wait_for_map $x;
+$first = open_floating_window($x);
 
 $wscontent = get_ws($tmp);
 @floating = @{$wscontent->{floating_nodes}};
index 40e84044cd51a437cbeff9ab9e14e467dac7ddcf..87cb769d1d928858fd5d18f5550e7b81e174ae24 100644 (file)
@@ -26,7 +26,8 @@ our @EXPORT = qw(
     get_ws
     get_focused
     open_empty_con
-    open_standard_window
+    open_window
+    open_floating_window
     get_dock_clients
     cmd
     sync_with_i3
@@ -124,31 +125,51 @@ sub wait_for_unmap {
     sync_with_i3($x);
 }
 
-sub open_standard_window {
-    my ($x, $color, $floating) = @_;
+#
+# Opens a new window (see X11::XCB::Window), maps it, waits until it got mapped
+# and synchronizes with i3.
+#
+# set dont_map to a true value to avoid mapping
+#
+# default values:
+#     class => WINDOW_CLASS_INPUT_OUTPUT
+#     rect => [ 0, 0, 30, 30 ]
+#     background_color => '#c0c0c0'
+#     event_mask => [ 'structure_notify' ]
+#     name => 'Window <n>'
+#
+sub open_window {
+    my ($x, $args) = @_;
+    my %args = ($args ? %$args : ());
 
-    $color ||= '#c0c0c0';
+    my $dont_map = delete $args{dont_map};
 
-    # We cannot use a hashref here because create_child expands the arguments into an array
-    my @args = (
-        class => WINDOW_CLASS_INPUT_OUTPUT,
-        rect => X11::XCB::Rect->new(x => 0, y => 0, width => 30, height => 30 ),
-        background_color => $color,
-        event_mask => [ 'structure_notify' ],
-    );
+    $args{class} = WINDOW_CLASS_INPUT_OUTPUT unless exists $args{class};
+    $args{rect} = [ 0, 0, 30, 30 ] unless exists $args{rect};
+    $args{background_color} = '#c0c0c0' unless exists $args{background_color};
+    $args{event_mask} = [ 'structure_notify' ] unless exists $args{event_mask};
+    $args{name} = 'Window ' . counter_window() unless exists $args{name};
 
-    if (defined($floating) && $floating) {
-        @args = (@args, window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_UTILITY'));
-    }
+    my $window = $x->root->create_child(%args);
 
-    my $window = $x->root->create_child(@args);
+    return $window if $dont_map;
 
-    $window->name('Window ' . counter_window());
     $window->map;
+    wait_for_map($x);
+    # We sync with i3 here to make sure $x->input_focus is updated.
+    sync_with_i3($x);
+    return $window;
+}
 
-    wait_for_event $x, 0.5, sub { $_[0]->{response_type} == MAP_NOTIFY };
+# Thin wrapper around open_window which sets window_type to
+# _NET_WM_WINDOW_TYPE_UTILITY to make the window floating.
+sub open_floating_window {
+    my ($x, $args) = @_;
+    my %args = ($args ? %$args : ());
 
-    return $window;
+    $args{window_type} = $x->atom(name => '_NET_WM_WINDOW_TYPE_UTILITY');
+
+    return open_window($x, \%args);
 }
 
 sub open_empty_con {