From e64fb9f768d0667db91907b32e8a83f32640aabf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Sun, 30 Jun 2013 23:00:44 +0200 Subject: i3: Patch fixing focussing floating windows --- x11-wm/i3/fix-floating-bug.patch | 108 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 x11-wm/i3/fix-floating-bug.patch diff --git a/x11-wm/i3/fix-floating-bug.patch b/x11-wm/i3/fix-floating-bug.patch new file mode 100644 index 0000000..a72cd9f --- /dev/null +++ b/x11-wm/i3/fix-floating-bug.patch @@ -0,0 +1,108 @@ +From b4f7142509e3af51504a1e72163d544d305f0fa8 Mon Sep 17 00:00:00 2001 +From: Michael Stapelberg +Date: Sat, 29 Jun 2013 18:27:33 +0000 +Subject: Bugfix: fix focus handling in 'floating disable' on non-visible windows (Thanks necoro) + +fixes #1027 +--- +diff --git a/src/floating.c b/src/floating.c +index 49a4122..ea93747 100644 +--- a/src/floating.c ++++ b/src/floating.c +@@ -315,6 +315,8 @@ void floating_disable(Con *con, bool automatic) { + return; + } + ++ const bool set_focus = (con == focused); ++ + Con *ws = con_get_workspace(con); + + /* 1: detach from parent container */ +@@ -344,8 +346,9 @@ void floating_disable(Con *con, bool automatic) { + con_attach(con, con->parent, false); + + con_fix_percent(con->parent); +- // TODO: don’t influence focus handling when Con was not focused before. +- con_focus(con); ++ ++ if (set_focus) ++ con_focus(con); + } + + /* +diff --git a/testcases/t/208-regress-floating-criteria.t b/testcases/t/208-regress-floating-criteria.t +new file mode 100644 +index 0000000..09a29fd +--- a/dev/null ++++ b/testcases/t/208-regress-floating-criteria.t +@@ -0,0 +1,68 @@ ++#!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) ++# ++# Regression test for focus handling when using floating enable/disable with ++# criteria for windows on non-visible workspaces. ++# Ticket: #1027 ++# Bug still in: 4.5.1-90-g6582da9 ++use i3test i3_autostart => 0; ++use X11::XCB qw(PROP_MODE_REPLACE); ++ ++my $config = <<'EOT'; ++# i3 config file (v4) ++font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1 ++ ++assign [class="^special$"] → mail ++for_window [class="^special$"] floating enable, floating disable ++EOT ++ ++my $pid = launch_with_config($config); ++ ++# TODO: move this to X11::XCB::Window ++sub set_wm_class { ++ my ($id, $class, $instance) = @_; ++ ++ # Add a _NET_WM_STRUT_PARTIAL hint ++ my $atomname = $x->atom(name => 'WM_CLASS'); ++ my $atomtype = $x->atom(name => 'STRING'); ++ ++ $x->change_property( ++ PROP_MODE_REPLACE, ++ $id, ++ $atomname->id, ++ $atomtype->id, ++ 8, ++ length($class) + length($instance) + 2, ++ "$instance\x00$class\x00" ++ ); ++} ++ ++my $window = open_window( ++ name => 'Borderless window', ++ before_map => sub { set_wm_class($_->id, 'special', 'special') }, ++ dont_map => 1, ++); ++$window->map; ++ ++sync_with_i3; ++ ++cmd '[class="^special$"] focus'; ++ ++does_i3_live; ++ ++exit_gracefully($pid); ++ ++done_testing; +-- +cgit v0.9.0.3 -- cgit v1.2.3