diff --git a/x11-wm/twm/files/patch-src_add__window.c b/x11-wm/twm/files/patch-src_add__window.c index c0fc55446d57..98e83a5df911 100644 --- a/x11-wm/twm/files/patch-src_add__window.c +++ b/x11-wm/twm/files/patch-src_add__window.c @@ -1,12 +1,15 @@ +This is a cut-down version of https://bazaar.launchpad.net/~ctwm/ctwm/trunk/revision/558 +which passed through vtwm and Reddit before arriving in FreeBSD ports. + --- src/add_window.c.orig 2020-06-14 23:58:19 UTC +++ src/add_window.c @@ -238,6 +238,9 @@ AddWindow(Window w, int iconm, IconMgr *iconp) tmp_win->wmhints = XGetWMHints(dpy, tmp_win->w); + if (!tmp_win->wmhints) { + tmp_win->wmhints = gen_synthetic_wmhints(tmp_win); + } if (tmp_win->wmhints) { if (restore_iconified) { tmp_win->wmhints->initial_state = IconicState; diff --git a/x11-wm/twm/files/patch-src_util.c b/x11-wm/twm/files/patch-src_util.c index 27419870b8de..1d36fed3896b 100644 --- a/x11-wm/twm/files/patch-src_util.c +++ b/x11-wm/twm/files/patch-src_util.c @@ -1,47 +1,50 @@ +This is a cut-down version of https://bazaar.launchpad.net/~ctwm/ctwm/trunk/revision/558 +which passed through vtwm and Reddit before arriving in FreeBSD ports. + --- 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, + * ). + * + * 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; +} diff --git a/x11-wm/twm/files/patch-src_util.h b/x11-wm/twm/files/patch-src_util.h index 143a3f2e695a..c5e5130b4c4f 100644 --- a/x11-wm/twm/files/patch-src_util.h +++ b/x11-wm/twm/files/patch-src_util.h @@ -1,11 +1,14 @@ +This is a cut-down version of https://bazaar.launchpad.net/~ctwm/ctwm/trunk/revision/558 +which passed through vtwm and Reddit before arriving in FreeBSD ports. + --- src/util.h.orig 2020-06-14 23:58:19 UTC +++ src/util.h @@ -88,6 +88,8 @@ extern Status I18N_GetIconName(Display *dpy, Window wi extern void SetFocus(TwmWindow *tmp_win, Time time); extern void Bell(int type, int percent, Window win); +extern XWMHints *gen_synthetic_wmhints(TwmWindow *win); + extern int HotX, HotY; #define WM_BELL 0