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
231-wm-change-state.t
232-cmd-move-criteria.t
232-cmd-workspace-number-selection.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
.gitignore
Makefile.PL
complete-run.pl
i3-test.config
new-test
restart-state.golden
valgrind.supp
tests
.clang-format
.gitignore
DEPENDS
LICENSE
Makefile
PACKAGE-MAINTAINER
RELEASE-NOTES-4.8
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
This patch fixes ticket #1168 to extend the window IPC event mechanism to send IPC events for window focus and title changes. The newly added window events use the same format as the already established "new" event. Specifically this patch: * Moves the ipc_send_window_event() function from src/manage.c into src/ipc.c and adds an argument for the change property of the event * Updates src/manage.c to use the new function signature. To ensure that the "new" event does not send the same event data as the "focus" event, setting focus now happens after the "new" event has been sent * Adds IPC focus event notification to src/x.c. To workaround a problem during window close when accessing the window name, a function has been added to query whether a window is actually attached to its parent. To avoid obsolete focus notification, a new field has been added to keep track of the focus without any interference by the click handling * Adds IPC title event notification to src/handlers.c. To avoid obsolete title notification, a function has been added to determine whether a window title has actually changed * Updates the IPC documentation to include the new events * Updates testcases/t/205-ipc-windows.t to include the "focus" event in order to ensure the correct event sequence * Adds two new unit tests, b/testcases/t/219-ipc-window-focus.t and b/testcases/t/220-ipc-window-title.t to ensure proper "focus" and "title" events
62 lines
1.3 KiB
Perl
62 lines
1.3 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;
|
|
|
|
SKIP: {
|
|
|
|
skip "AnyEvent::I3 too old (need >= 0.15)", 1 if $AnyEvent::I3::VERSION < 0.15;
|
|
|
|
my $i3 = i3(get_socket_path());
|
|
$i3->connect()->recv;
|
|
|
|
################################
|
|
# Window event
|
|
################################
|
|
|
|
# Events
|
|
|
|
my $new = AnyEvent->condvar;
|
|
my $focus = AnyEvent->condvar;
|
|
$i3->subscribe({
|
|
window => sub {
|
|
my ($event) = @_;
|
|
if ($event->{change} eq 'new') {
|
|
$new->send($event);
|
|
} elsif ($event->{change} eq 'focus') {
|
|
$focus->send($event);
|
|
}
|
|
}
|
|
})->recv;
|
|
|
|
open_window;
|
|
|
|
my $t;
|
|
$t = AnyEvent->timer(
|
|
after => 0.5,
|
|
cb => sub {
|
|
$new->send(0);
|
|
$focus->send(0);
|
|
}
|
|
);
|
|
|
|
is($new->recv->{container}->{focused}, 0, 'Window "new" event received');
|
|
is($focus->recv->{container}->{focused}, 1, 'Window "focus" event received');
|
|
|
|
}
|
|
|
|
done_testing;
|