aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Williams <taaparthur@gmail.com>2020-06-22 22:52:54 -0700
committerBerke Kocaoğlu <berke.kocaoglu@metu.edu.tr>2021-09-16 22:55:31 +0300
commitba0d87fadf4bb292d7baadf9f01843da354c4a43 (patch)
tree3d44f9857123aa9c3bd552a5de0c0a1a54011765
parent88f77bc59c26068ae1a5e1c9a8bd3b1b88dbe683 (diff)
Added ICCCM WM_HINTS
When the window is mapped, some ICCCM WM_HINTS are set. The input field is set to true and state is set to NormalState. To quote the spec, "The input field is used to communicate to the window manager the input focus model used by the client" and "[c]lients with the Passive and Locally Active models should set the input flag to True". sxiv falls under the Passive Input model, since it expects keyboard input, but only listens for key events on its single, top-level window instead of subordinate windows (Locally Active) or the root window (Globally Active). From the end users prospective, all EWMH/ICCCM compliant WMs (especially the minimalistic ones) will allow the user to focus sxiv, which will allow sxiv to receive key events. If the input field is not set, WMs are allowed to assume that sxiv doesn't require focus.
-rw-r--r--window.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/window.c b/window.c
index 6f9a390..eb534a7 100644
--- a/window.c
+++ b/window.c
@@ -154,6 +154,7 @@ void win_open(win_t *win)
Pixmap none;
int gmask;
XSizeHints sizehints;
+ XWMHints hints;
e = &win->env;
parent = options->embed != 0 ? options->embed : RootWindow(e->dpy, e->scr);
@@ -252,6 +253,11 @@ void win_open(win_t *win)
sizehints.y = win->y;
XSetWMNormalHints(win->env.dpy, win->xwin, &sizehints);
+ hints.flags = InputHint | StateHint;
+ hints.input = 1;
+ hints.initial_state = NormalState;
+ XSetWMHints(win->env.dpy, win->xwin, &hints);
+
win->h -= win->bar.h;
win->buf.w = e->scrw;