Do not send WM_TAKE_FOCUS when InputHint is set
Patch status: needinfo
Patch by Tony Crisci
Long description:
Window managers do not conventionally send WM_TAKE_FOCUS when the WM_HINTS property of the client has the `input` flag set (which shall be "the client's input model"). The "models of input handling" can be found here: http://tronche.com/gui/x/icccm/sec-4.html#s-4.1.7 fixes #1167
To apply this patch, use:
curl http://cr.i3wm.org/patch/402/raw.patch | git am
b/src/x.c
| 21 |
@@ -949,17 +949,13 @@ void x_push_changes(Con *con) {
|
| 22 |
/* Invalidate focused_id to correctly focus new windows with the same ID */ |
| 23 |
focused_id = XCB_NONE; |
| 24 |
} else {
|
| 25 |
- bool set_focus = true; |
| 26 |
if (focused->window != NULL && |
| 27 |
- focused->window->needs_take_focus) {
|
| 28 |
+ focused->window->needs_take_focus && |
| 29 |
+ focused->window->doesnt_accept_focus) {
|
| 30 |
DLOG("Updating focus by sending WM_TAKE_FOCUS to window 0x%08x (focused: %p / %s)\n",
|
| 31 |
to_focus, focused, focused->name); |
| 32 |
send_take_focus(to_focus); |
| 33 |
- set_focus = !focused->window->doesnt_accept_focus; |
| 34 |
- DLOG("set_focus = %d\n", set_focus);
|
| 35 |
- } |
| 36 |
- |
| 37 |
- if (set_focus) {
|
| 38 |
+ } else {
|
| 39 |
DLOG("Updating focus (focused: %p / %s) to X11 window 0x%08x\n", focused, focused->name, to_focus);
|
| 40 |
/* We remove XCB_EVENT_MASK_FOCUS_CHANGE from the event mask to get |
| 41 |
* no focus change events for our own focus changes. We only want |