git: 1c31059e3d12 - main - x11-wm/twm: generate synthetic WM hints when needed

Adriaan de Groot adridg at FreeBSD.org
Tue May 4 23:11:01 UTC 2021


The branch main has been updated by adridg:

URL: https://cgit.FreeBSD.org/ports/commit/?id=1c31059e3d1233fdbaee9b89ff041365f1710d17

commit 1c31059e3d1233fdbaee9b89ff041365f1710d17
Author:     Adriaan de Groot <adridg at FreeBSD.org>
AuthorDate: 2021-05-04 10:12:41 +0000
Commit:     Adriaan de Groot <adridg at FreeBSD.org>
CommitDate: 2021-05-04 23:10:26 +0000

    x11-wm/twm: generate synthetic WM hints when needed
    
    This is based on a patch from Reddit -- the patch on Reddit is in
    context-diff form and contains a bunch of cruft, so it's been
    re-done (in add_window.c ; the util.c part is used unchanged).
    Tested by running Chrome in previous twm -- no drop-downs at
    all -- and in this lightly patched one, where it does behave.
    
    PR:             252873
    Obtained from:  Reddit
---
 x11-wm/twm/Makefile                      |  1 +
 x11-wm/twm/files/patch-src_add__window.c | 12 ++++++++
 x11-wm/twm/files/patch-src_util.c        | 47 ++++++++++++++++++++++++++++++++
 x11-wm/twm/files/patch-src_util.h        | 11 ++++++++
 4 files changed, 71 insertions(+)

diff --git a/x11-wm/twm/Makefile b/x11-wm/twm/Makefile
index 25da81fa5ee4..4227998ae901 100644
--- a/x11-wm/twm/Makefile
+++ b/x11-wm/twm/Makefile
@@ -1,5 +1,6 @@
 PORTNAME=	twm
 PORTVERSION=	1.0.11
+PORTREVISION=	1
 CATEGORIES=	x11-wm
 
 MAINTAINER=	x11 at FreeBSD.org
diff --git a/x11-wm/twm/files/patch-src_add__window.c b/x11-wm/twm/files/patch-src_add__window.c
new file mode 100644
index 000000000000..c0fc55446d57
--- /dev/null
+++ b/x11-wm/twm/files/patch-src_add__window.c
@@ -0,0 +1,12 @@
+--- 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
new file mode 100644
index 000000000000..27419870b8de
--- /dev/null
+++ b/x11-wm/twm/files/patch-src_util.c
@@ -0,0 +1,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;
++}
diff --git a/x11-wm/twm/files/patch-src_util.h b/x11-wm/twm/files/patch-src_util.h
new file mode 100644
index 000000000000..143a3f2e695a
--- /dev/null
+++ b/x11-wm/twm/files/patch-src_util.h
@@ -0,0 +1,11 @@
+--- 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


More information about the dev-commits-ports-all mailing list