aboutsummaryrefslogtreecommitdiff
path: root/xorg-server
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2012-01-26 09:34:42 +0100
committermarha <marha@users.sourceforge.net>2012-01-26 09:34:42 +0100
commit6dff1084f0e0ea54d1b78ef8ba24df6bbc8fd68d (patch)
tree91b4fa0e3a27460a4123fe11fa250a92f5ba3b60 /xorg-server
parentd99165260070ce9668f3eeac8bb010393f490c0a (diff)
downloadvcxsrv-6dff1084f0e0ea54d1b78ef8ba24df6bbc8fd68d.tar.gz
vcxsrv-6dff1084f0e0ea54d1b78ef8ba24df6bbc8fd68d.tar.bz2
vcxsrv-6dff1084f0e0ea54d1b78ef8ba24df6bbc8fd68d.zip
In multiwindow mode, don't grab native input focus for new windows which
hint they don't want it
Diffstat (limited to 'xorg-server')
-rw-r--r--xorg-server/hw/xwin/winmultiwindowclass.h10
-rw-r--r--xorg-server/hw/xwin/winmultiwindowwndproc.c17
2 files changed, 26 insertions, 1 deletions
diff --git a/xorg-server/hw/xwin/winmultiwindowclass.h b/xorg-server/hw/xwin/winmultiwindowclass.h
index c635ab20b..9767656e8 100644
--- a/xorg-server/hw/xwin/winmultiwindowclass.h
+++ b/xorg-server/hw/xwin/winmultiwindowclass.h
@@ -47,6 +47,16 @@ typedef struct {
/* this structure may be extended in the future */
} WinXWMHints;
+/* Window manager hints mask bits */
+#define InputHint (1L << 0)
+#define StateHint (1L << 1)
+#define IconPixmapHint (1L << 2)
+#define IconWindowHint (1L << 3)
+#define IconPositionHint (1L << 4)
+#define IconMaskHint (1L << 5)
+#define WindowGroupHint (1L << 6)
+#define UrgencyHint (1L << 8)
+#define AllHints (InputHint|StateHint|IconPixmapHint|IconWindowHint|IconPositionHint|IconMaskHint|WindowGroupHint)
/*
* new version containing base_width, base_height, and win_gravity fields;
diff --git a/xorg-server/hw/xwin/winmultiwindowwndproc.c b/xorg-server/hw/xwin/winmultiwindowwndproc.c
index f4313d353..3142776b5 100644
--- a/xorg-server/hw/xwin/winmultiwindowwndproc.c
+++ b/xorg-server/hw/xwin/winmultiwindowwndproc.c
@@ -886,7 +886,22 @@ winTopLevelWindowProc (HWND hwnd, UINT message,
& ~WS_CAPTION & ~WS_SIZEBOX);
winUpdateWindowPosition (hwnd, FALSE, &zstyle);
- SetForegroundWindow (hwnd);
+
+ {
+ WinXWMHints hints;
+ if (winMultiWindowGetWMHints(pWin, &hints))
+ {
+ /*
+ Give the window focus, unless it has an InputHint
+ which is FALSE (this is used by e.g. glean to
+ avoid every test window grabbing the focus)
+ */
+ if (!((hints.flags & InputHint) && (!hints.input)))
+ {
+ SetForegroundWindow (hwnd);
+ }
+ }
+ }
}
wmMsg.msg = WM_WM_MAP3;
}