contrib
debian
docs
i3-config-wizard
i3-dump-log
i3-input
i3-msg
i3-nagbar
i3bar
include
libi3
man
parser-specs
src
testcases
lib
t
000-load-deps.t
001-tile.t
002-i3-sync.t
003-ipc.t
004-unmanaged.t
005-floating.t
100-fullscreen.t
101-focus.t
102-dock.t
103-move.t
104-focus-stack.t
105-stacking.t
111-goto.t
112-floating-resize.t
113-urgent.t
114-client-leader.t
115-ipc-workspaces.t
116-nestedcons.t
117-workspace.t
118-openkill.t
119-match.t
120-multiple-cmds.t
121-next-prev.t
122-split.t
124-move.t
126-regress-close.t
127-regress-floating-parent.t
128-open-order.t
129-focus-after-close.t
130-close-empty-split.t
131-stacking-order.t
132-move-workspace.t
133-size-hints.t
134-invalid-command.t
135-floating-focus.t
136-floating-ws-empty.t
137-floating-unmap.t
138-floating-attach.t
139-ws-numbers.t
140-focus-lost.t
141-resize.t
142-regress-move-floating.t
143-regress-floating-restart.t
144-regress-floating-resize.t
145-flattening.t
146-floating-reinsert.t
147-regress-floatingmove.t
148-regress-floatingmovews.t
150-regress-dock-restart.t
151-regress-float-size.t
152-regress-level-up.t
153-floating-originalsize.t
154-regress-multiple-dock.t
155-floating-split-size.t
156-fullscreen-focus.t
158-wm_take_focus.t
159-socketpaths.t
161-regress-borders-restart.t
162-regress-dock-urgent.t
163-wm-state.t
164-kill-win-vs-client.t
165-for_window.t
166-assign.t
167-workspace_layout.t
168-regress-fullscreen-restart.t
169-border-toggle.t
170-force_focus_wrapping.t
171-config-migrate.t
172-start-on-named-ws.t
173-get-marks.t
173-regress-focus-assign.t
174-border-config.t
174-regress-focus-toggle.t
175-startup-notification.t
176-workspace-baf.t
177-bar-config.t
178-regress-workspace-open.t
179-regress-multiple-ws.t
180-fd-leaks.t
181-regress-float-border.t
182-regress-focus-dock.t
183-config-variables.t
184-regress-float-split-resize.t
185-scratchpad.t
186-regress-assign-focus-parent.t
187-commands-parser.t
188-regress-focus-restart.t
189-floating-constraints.t
190-scratchpad-diff-ws.t
191-resize-levels.t
192-layout.t
193-ipc-version.t
194-regress-floating-size.t
195-net-active-window.t
196-randr-output-names.t
197-regression-move-vanish.t
198-regression-scratchpad-crash.t
199-ipc-mode-event.t
200-urgency-timer.t
201-config-parser.t
202-scratchpad-criteria.t
203-regress-assign-and-move.t
204-regress-scratchpad-move.t
205-ipc-windows.t
206-fullscreen-scratchpad.t
207-shmlog.t
208-regress-floating-criteria.t
209-ewmh-net-workarea.t
210-mark-unmark.t
211-regress-urgency-assign.t
212-assign-urgency.t
213-layout-restore-simple.t
213-move-branch-position.t
214-layout-restore-criteria.t
215-layout-restore-crash.t
216-layout-restore-split-swallows.t
217-NET_CURRENT_DESKTOP.t
218-regress-floating-split.t
219-ipc-window-focus.t
220-ipc-window-title.t
221-floating-type-hints.t
222-regress-dock-resize.t
223-net-client-list.t
224-regress-resize-branch.t
225-ipc-window-fullscreen.t
226-internal-workspaces.t
227-ipc-workspace-empty.t
228-border-widths.t
229-cleanup-tmpdir.t
230-floating-fullscreen-restart.t
231-ipc-floating-event.t
231-ipc-window-close.t
231-ipc-window-move.t
232-cmd-move-criteria.t
232-ipc-window-urgent.t
233-regress-manage-focus-unmapped.t
234-ewmh-desktop-names.t
234-layout-restore-output.t
234-regress-default-floating-border.t
235-check-config-no-x.t
235-wm-class-change-handler.t
236-floating-focus-raise.t
237-regress-assign-focus.t
238-ipc-binding-event.t
238-regress-reload-bindsym.t
239-net-close-window-request.t
500-multi-monitor.t
501-scratchpad.t
502-focus-output.t
503-workspace.t
504-move-workspace-to-output.t
505-scratchpad-resolution.t
506-focus-right.t
507-workspace-move-crash.t
509-workspace_layout.t
510-focus-across-outputs.t
511-scratchpad-configure-request.t
512-move-wraps.t
513-move-workspace.t
514-ipc-workspace-multi-monitor.t
515-create-workspace.t
516-move.t
517-regress-move-direction-ipc.t
518-interpret-workspace-numbers.t
519-mouse-warping.t
520-regress-focus-direction-floating.t
521-ewmh-desktop-viewport.t
522-rename-assigned-workspace.t
.gitignore
Makefile.PL
complete-run.pl
i3-test.config
new-test
restart-state.golden
valgrind.supp
tests
.clang-format
.gitignore
.travis.yml
CONTRIBUTING.md
DEPENDS
LICENSE
Makefile
PACKAGE-MAINTAINER
RELEASE-NOTES-4.10.1
common.mk
generate-command-parser.pl
i3-dmenu-desktop
i3-migrate-config-to-v4
i3-save-tree
i3-sensible-editor
i3-sensible-pager
i3-sensible-terminal
i3-with-shmlog.xsession.desktop
i3.applications.desktop
i3.config
i3.config.keycodes
i3.xsession.desktop
logo.svg
pseudo-doc.doxygen
release.sh
Focusing child from a workspace should now skip over the floating con and go directly to its child. Focusing parent from that grandchild should leave the workspace focused again.
220 lines
6.4 KiB
Perl
220 lines
6.4 KiB
Perl
#!perl
|
|
# vim:ts=4:sw=4:expandtab
|
|
#
|
|
# Please read the following documents before working on tests:
|
|
# • http://build.i3wm.org/docs/testsuite.html
|
|
# (or docs/testsuite)
|
|
#
|
|
# • http://build.i3wm.org/docs/lib-i3test.html
|
|
# (alternatively: perldoc ./testcases/lib/i3test.pm)
|
|
#
|
|
# • http://build.i3wm.org/docs/ipc.html
|
|
# (or docs/ipc)
|
|
#
|
|
# • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf
|
|
# (unless you are already familiar with Perl)
|
|
|
|
use i3test;
|
|
|
|
my $tmp = fresh_workspace;
|
|
|
|
#############################################################################
|
|
# 1: see if focus stays the same when toggling tiling/floating mode
|
|
#############################################################################
|
|
|
|
my $first = open_window;
|
|
my $second = open_window;
|
|
|
|
is($x->input_focus, $second->id, 'second window focused');
|
|
|
|
cmd 'floating enable';
|
|
cmd 'floating disable';
|
|
|
|
is($x->input_focus, $second->id, 'second window still focused after mode toggle');
|
|
|
|
#############################################################################
|
|
# 2: see if focus stays on the current floating window if killing another
|
|
# floating window
|
|
#############################################################################
|
|
|
|
$tmp = fresh_workspace;
|
|
|
|
$first = open_window; # window 2
|
|
$second = open_window; # window 3
|
|
my $third = open_window; # window 4
|
|
|
|
is($x->input_focus, $third->id, 'last container focused');
|
|
|
|
cmd 'floating enable';
|
|
|
|
cmd '[id="' . $second->id . '"] focus';
|
|
|
|
is($x->input_focus, $second->id, 'second con focused');
|
|
|
|
cmd 'floating enable';
|
|
|
|
# now kill the third one (it's floating). focus should stay unchanged
|
|
cmd '[id="' . $third->id . '"] kill';
|
|
|
|
wait_for_unmap($third);
|
|
|
|
is($x->input_focus, $second->id, 'second con still focused after killing third');
|
|
|
|
|
|
#############################################################################
|
|
# 3: see if the focus gets reverted correctly when closing floating clients
|
|
# (first to the next floating client, then to the last focused tiling client)
|
|
#############################################################################
|
|
|
|
$tmp = fresh_workspace;
|
|
|
|
$first = open_window({ background_color => '#ff0000' }); # window 5
|
|
$second = open_window({ background_color => '#00ff00' }); # window 6
|
|
$third = open_window({ background_color => '#0000ff' }); # window 7
|
|
|
|
is($x->input_focus, $third->id, 'last container focused');
|
|
|
|
cmd 'floating enable';
|
|
|
|
cmd '[id="' . $second->id . '"] focus';
|
|
|
|
is($x->input_focus, $second->id, 'second con focused');
|
|
|
|
cmd 'floating enable';
|
|
|
|
# now kill the second one. focus should fall back to the third one, which is
|
|
# also floating
|
|
cmd 'kill';
|
|
wait_for_unmap($second);
|
|
|
|
is($x->input_focus, $third->id, 'third con focused');
|
|
|
|
cmd 'kill';
|
|
wait_for_unmap($third);
|
|
|
|
is($x->input_focus, $first->id, 'first con focused after killing all floating cons');
|
|
|
|
#############################################################################
|
|
# 4: same test as 3, but with another split con
|
|
#############################################################################
|
|
|
|
$tmp = fresh_workspace;
|
|
|
|
$first = open_window({ background_color => '#ff0000' }); # window 5
|
|
cmd 'split v';
|
|
cmd 'layout stacked';
|
|
$second = open_window({ background_color => '#00ff00' }); # window 6
|
|
$third = open_window({ background_color => '#0000ff' }); # window 7
|
|
|
|
is($x->input_focus, $third->id, 'last container focused');
|
|
|
|
cmd 'floating enable';
|
|
|
|
cmd '[id="' . $second->id . '"] focus';
|
|
|
|
is($x->input_focus, $second->id, 'second con focused');
|
|
|
|
cmd 'floating enable';
|
|
|
|
sync_with_i3;
|
|
|
|
# now kill the second one. focus should fall back to the third one, which is
|
|
# also floating
|
|
cmd 'kill';
|
|
wait_for_unmap($second);
|
|
|
|
is($x->input_focus, $third->id, 'third con focused');
|
|
|
|
cmd 'kill';
|
|
wait_for_unmap($third);
|
|
|
|
is($x->input_focus, $first->id, 'first con focused after killing all floating cons');
|
|
|
|
#############################################################################
|
|
# 5: see if the 'focus tiling' and 'focus floating' commands work
|
|
#############################################################################
|
|
|
|
$tmp = fresh_workspace;
|
|
|
|
$first = open_window({ background_color => '#ff0000' }); # window 8
|
|
$second = open_window({ background_color => '#00ff00' }); # window 9
|
|
|
|
is($x->input_focus, $second->id, 'second container focused');
|
|
|
|
cmd 'floating enable';
|
|
|
|
is($x->input_focus, $second->id, 'second container focused');
|
|
|
|
cmd 'focus tiling';
|
|
|
|
is($x->input_focus, $first->id, 'first (tiling) container focused');
|
|
|
|
cmd 'focus floating';
|
|
|
|
is($x->input_focus, $second->id, 'second (floating) container focused');
|
|
|
|
cmd 'focus floating';
|
|
|
|
is($x->input_focus, $second->id, 'second (floating) container still focused');
|
|
|
|
cmd 'focus mode_toggle';
|
|
|
|
is($x->input_focus, $first->id, 'first (tiling) container focused');
|
|
|
|
cmd 'focus mode_toggle';
|
|
|
|
is($x->input_focus, $second->id, 'second (floating) container focused');
|
|
|
|
#############################################################################
|
|
# 6: see if switching floating focus using the focus left/right command works
|
|
#############################################################################
|
|
|
|
$tmp = fresh_workspace;
|
|
|
|
$first = open_floating_window({ background_color => '#ff0000' });# window 10
|
|
$second = open_floating_window({ background_color => '#00ff00' }); # window 11
|
|
$third = open_floating_window({ background_color => '#0000ff' }); # window 12
|
|
|
|
is($x->input_focus, $third->id, 'third container focused');
|
|
|
|
cmd 'focus left';
|
|
|
|
is($x->input_focus, $second->id, 'second container focused');
|
|
|
|
cmd 'focus left';
|
|
|
|
is($x->input_focus, $first->id, 'first container focused');
|
|
|
|
cmd 'focus left';
|
|
|
|
is($x->input_focus, $third->id, 'focus wrapped to third container');
|
|
|
|
cmd 'focus right';
|
|
|
|
is($x->input_focus, $first->id, 'focus wrapped to first container');
|
|
|
|
cmd 'focus right';
|
|
|
|
is($x->input_focus, $second->id, 'focus on second container');
|
|
|
|
#############################################################################
|
|
# 7: verify that focusing the parent of a window inside a floating con goes
|
|
# up to the grandparent (workspace) and that focusing child from the ws
|
|
# goes back down to the child of the floating con
|
|
#############################################################################
|
|
|
|
$tmp = fresh_workspace;
|
|
|
|
my $tiled = open_window;
|
|
my $floating = open_floating_window;
|
|
is($x->input_focus, $floating->id, 'floating window focused');
|
|
|
|
cmd 'focus parent';
|
|
|
|
is(get_ws($tmp)->{focused}, 1, 'workspace is focused');
|
|
cmd 'focus child';
|
|
|
|
is($x->input_focus, $floating->id, 'floating window focused');
|
|
|
|
done_testing;
|