blob: 27419870b8de8cb44cc2099796c53359c5ca6c9b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
--- src/util.c.orig 2020-06-14 23:58:19 UTC
+++ src/util.c
@@ -1033,3 +1033,44 @@ Bell(int type _X_UNUSED, int percent, Window win _X_UN
#endif
return;
}
+
+/*
+ * Create synthetic WM_HINTS info for windows. When a window specifies
+ * stuff, we should probably pay attention to it (though we don't
+ * always; x-ref comments in AddWindow() especially about focus).
+ * However, when it doesn't tell us anything at all, we should assume
+ * something useful. "Window managers are free to assume convenient
+ * values for all fields of the WM_HINTS property if a window is mapped
+ * without one." (ICCCM Ch. 4,
+ * <https://www.x.org/releases/X11R7.7/doc/xorg-docs/icccm/icccm.html#Client_Properties>).
+ *
+ * Specifically, we assume it wants us to give it focus. It's fairly
+ * bogus for a window not to tell us anything, but e.g current versions
+ * of Chrome do (don't do) just that. So we better make up something
+ * useful.
+ *
+ * Should probably be some configurability for this, so make the func
+ * take the window, even though we don't currently do anything useful
+ * with it...
+ */
+XWMHints *
+gen_synthetic_wmhints(TwmWindow *win)
+{
+ XWMHints *hints;
+
+ hints = XAllocWMHints();
+ if(!hints) {
+ return NULL;
+ }
+
+ /*
+ * Reasonable defaults. Takes input, in normal state.
+ *
+ * XXX Make configurable?
+ */
+ hints->flags = InputHint | StateHint;
+ hints->input = True;
+ hints->initial_state = NormalState;
+
+ return hints;
+}
|