Merge pull request #1684 from acrisci/bug/focus-without-input-hint
Ignore InputHint when not in WM_HINTS
This commit is contained in:
commit
a4f0ed62e5
|
@ -271,8 +271,10 @@ void window_update_hints(i3Window *win, xcb_get_property_reply_t *prop, bool *ur
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
win->doesnt_accept_focus = !hints.input;
|
if (hints.flags & XCB_ICCCM_WM_HINT_INPUT) {
|
||||||
LOG("WM_HINTS.input changed to \"%d\"\n", hints.input);
|
win->doesnt_accept_focus = !hints.input;
|
||||||
|
LOG("WM_HINTS.input changed to \"%d\"\n", hints.input);
|
||||||
|
}
|
||||||
|
|
||||||
if (urgency_hint != NULL)
|
if (urgency_hint != NULL)
|
||||||
*urgency_hint = (xcb_icccm_wm_hints_get_urgency(&hints) != 0);
|
*urgency_hint = (xcb_icccm_wm_hints_get_urgency(&hints) != 0);
|
||||||
|
|
|
@ -50,12 +50,15 @@ sub recv_take_focus {
|
||||||
}
|
}
|
||||||
|
|
||||||
subtest 'Window without WM_TAKE_FOCUS', sub {
|
subtest 'Window without WM_TAKE_FOCUS', sub {
|
||||||
fresh_workspace;
|
my $ws = fresh_workspace;
|
||||||
|
|
||||||
my $window = open_window;
|
my $window = open_window;
|
||||||
|
|
||||||
ok(!recv_take_focus($window), 'did not receive ClientMessage');
|
ok(!recv_take_focus($window), 'did not receive ClientMessage');
|
||||||
|
|
||||||
|
my $con = shift get_ws_content($ws);
|
||||||
|
ok($con->{focused}, 'con is focused');
|
||||||
|
|
||||||
done_testing;
|
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
|
# list), the window cannot accept input focus, so we should not try to focus
|
||||||
# the window at all.
|
# the window at all.
|
||||||
subtest 'Window with WM_TAKE_FOCUS and without InputHint', sub {
|
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');
|
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');
|
ok(!recv_take_focus($window), 'did not receive ClientMessage');
|
||||||
|
|
||||||
|
my $con = shift get_ws_content($ws);
|
||||||
|
ok($con->{focused}, 'con is focused');
|
||||||
|
|
||||||
done_testing;
|
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
|
# nearly identical presently, so this is currently used also as a proxy test
|
||||||
# for the latter case.
|
# for the latter case.
|
||||||
subtest 'Window with WM_TAKE_FOCUS and unspecified InputHint', sub {
|
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');
|
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');
|
ok(!recv_take_focus($window), 'did not receive ClientMessage');
|
||||||
|
|
||||||
|
my $con = shift get_ws_content($ws);
|
||||||
|
ok($con->{focused}, 'con is focused');
|
||||||
|
|
||||||
done_testing;
|
done_testing;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue