Merge pull request #1684 from acrisci/bug/focus-without-input-hint

Ignore InputHint when not in WM_HINTS
next
Michael Stapelberg 2015-04-26 12:15:38 +02:00
commit a4f0ed62e5
2 changed files with 16 additions and 5 deletions

View File

@ -271,8 +271,10 @@ void window_update_hints(i3Window *win, xcb_get_property_reply_t *prop, bool *ur
return;
}
win->doesnt_accept_focus = !hints.input;
LOG("WM_HINTS.input changed to \"%d\"\n", hints.input);
if (hints.flags & XCB_ICCCM_WM_HINT_INPUT) {
win->doesnt_accept_focus = !hints.input;
LOG("WM_HINTS.input changed to \"%d\"\n", hints.input);
}
if (urgency_hint != NULL)
*urgency_hint = (xcb_icccm_wm_hints_get_urgency(&hints) != 0);

View File

@ -50,12 +50,15 @@ sub recv_take_focus {
}
subtest 'Window without WM_TAKE_FOCUS', sub {
fresh_workspace;
my $ws = fresh_workspace;
my $window = open_window;
ok(!recv_take_focus($window), 'did not receive ClientMessage');
my $con = shift get_ws_content($ws);
ok($con->{focused}, 'con is focused');
done_testing;
};
@ -72,7 +75,7 @@ subtest 'Window without WM_TAKE_FOCUS', sub {
# list), the window cannot accept input focus, so we should not try to focus
# the window at all.
subtest 'Window with WM_TAKE_FOCUS and without InputHint', sub {
fresh_workspace;
my $ws = fresh_workspace;
my $take_focus = $x->atom(name => 'WM_TAKE_FOCUS');
@ -88,6 +91,9 @@ subtest 'Window with WM_TAKE_FOCUS and without InputHint', sub {
ok(!recv_take_focus($window), 'did not receive ClientMessage');
my $con = shift get_ws_content($ws);
ok($con->{focused}, 'con is focused');
done_testing;
};
@ -97,7 +103,7 @@ subtest 'Window with WM_TAKE_FOCUS and without InputHint', sub {
# nearly identical presently, so this is currently used also as a proxy test
# for the latter case.
subtest 'Window with WM_TAKE_FOCUS and unspecified InputHint', sub {
fresh_workspace;
my $ws = fresh_workspace;
my $take_focus = $x->atom(name => 'WM_TAKE_FOCUS');
@ -105,6 +111,9 @@ subtest 'Window with WM_TAKE_FOCUS and unspecified InputHint', sub {
ok(!recv_take_focus($window), 'did not receive ClientMessage');
my $con = shift get_ws_content($ws);
ok($con->{focused}, 'con is focused');
done_testing;
};