From 36b106a9d39727b06909113e3f11552f2f1b6abe Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sat, 22 Dec 2012 14:06:38 +0100 Subject: [PATCH] Bugfix: Ignore ConfigureRequests for scratchpad windows (Thanks MeanEYE) fixes #898 --- src/handlers.c | 5 ++ .../t/511-scratchpad-configure-request.t | 54 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 testcases/t/511-scratchpad-configure-request.t diff --git a/src/handlers.c b/src/handlers.c index 7fa29e12..1bfcce56 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -349,6 +349,11 @@ static void handle_configure_request(xcb_configure_request_event_t *event) { } Con *floatingcon = con->parent; + if (strcmp(con_get_workspace(floatingcon)->name, "__i3_scratch") == 0) { + DLOG("This is a scratchpad container, ignoring ConfigureRequest\n"); + return; + } + Rect newrect = floatingcon->rect; if (event->value_mask & XCB_CONFIG_WINDOW_X) { diff --git a/testcases/t/511-scratchpad-configure-request.t b/testcases/t/511-scratchpad-configure-request.t new file mode 100644 index 00000000..561d2435 --- /dev/null +++ b/testcases/t/511-scratchpad-configure-request.t @@ -0,0 +1,54 @@ +#!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) +# +# Tests that ConfigureRequests don’t make windows fall out of the scratchpad. +# Ticket: #898 +# Bug still in: 4.4-15-g770ead6 +use i3test i3_autostart => 0; + +# Ensure the pointer is at (0, 0) so that we really start on the first +# (the left) workspace. +$x->root->warp_pointer(0, 0); + +my $config = < 0); +my $right_ws = fresh_workspace(output => 1); + +my $window = open_window; +cmd 'move scratchpad'; + +# Cause a ConfigureRequest by setting the window’s position/size. +my ($a, $t) = $window->rect; +$window->rect(X11::XCB::Rect->new(x => 0, y => 0, width => $a->width, height => $a->height)); + +sync_with_i3; + +my $ws = get_ws($left_ws); +is(scalar @{$ws->{floating_nodes}}, 0, 'scratchpad window still in scratchpad after ConfigureRequest'); +$ws = get_ws($right_ws); +is(scalar @{$ws->{floating_nodes}}, 0, 'scratchpad window still in scratchpad after ConfigureRequest'); + +exit_gracefully($pid); + +done_testing;