[PATCH] Xephyr: option to disable grabbing the host
William ML Leslie
william.leslie.ttg at gmail.com
Tue May 20 17:28:52 PDT 2014
This patch makes it possible to use C-S key combinations
within Xephyr without losing access to the host window manager's
commands.
---
hw/kdrive/ephyr/ephyr.c | 12 +++++++++---
hw/kdrive/ephyr/ephyrinit.c | 6 ++++++
hw/kdrive/ephyr/man/Xephyr.man | 3 +++
3 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
index def50d8..ee323b1 100644
--- a/hw/kdrive/ephyr/ephyr.c
+++ b/hw/kdrive/ephyr/ephyr.c
@@ -68,6 +68,7 @@ typedef struct _EphyrInputPrivate {
Bool EphyrWantGrayScale = 0;
Bool EphyrWantResize = 0;
+Bool EphyrWantNoHostGrab = 0;
Bool
host_has_extension(xcb_extension_t *extension)
@@ -645,7 +646,11 @@ ephyrInitScreen(ScreenPtr pScreen)
EPHYR_LOG("pScreen->myNum:%d\n", pScreen->myNum);
hostx_set_screen_number(screen, pScreen->myNum);
- hostx_set_win_title(screen, "(ctrl+shift grabs mouse and keyboard)");
+ if (EphyrWantNoHostGrab) {
+ hostx_set_win_title(screen, "xephyr");
+ } else {
+ hostx_set_win_title(screen, "(ctrl+shift grabs mouse and keyboard)");
+ }
pScreen->CreateColormap = ephyrCreateColormap;
#ifdef XV
@@ -1080,12 +1085,13 @@ ephyrProcessKeyRelease(xcb_generic_event_t *xev)
if (!keysyms)
keysyms = xcb_key_symbols_alloc(conn);
- if (((xcb_key_symbols_get_keysym(keysyms, key->detail, 0) == XK_Shift_L
+ if (!EphyrWantNoHostGrab &&
+ (((xcb_key_symbols_get_keysym(keysyms, key->detail, 0) == XK_Shift_L
|| xcb_key_symbols_get_keysym(keysyms, key->detail, 0) == XK_Shift_R)
&& (key->state & XCB_MOD_MASK_CONTROL)) ||
((xcb_key_symbols_get_keysym(keysyms, key->detail, 0) == XK_Control_L
|| xcb_key_symbols_get_keysym(keysyms, key->detail, 0) == XK_Control_R)
- && (key->state & XCB_MOD_MASK_SHIFT))) {
+ && (key->state & XCB_MOD_MASK_SHIFT)))) {
KdScreenInfo *screen = screen_from_window(key->event);
EphyrScrPriv *scrpriv = screen->driver;
diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c
index fac84cd..ad66bd8 100644
--- a/hw/kdrive/ephyr/ephyrinit.c
+++ b/hw/kdrive/ephyr/ephyrinit.c
@@ -33,6 +33,7 @@
extern Window EphyrPreExistingHostWin;
extern Bool EphyrWantGrayScale;
extern Bool EphyrWantResize;
+extern Bool EphyrWantNoHostGrab;
extern Bool kdHasPointer;
extern Bool kdHasKbd;
extern Bool ephyr_glamor;
@@ -149,6 +150,7 @@ ddxUseMsg(void)
ErrorF("-name [name] define the name in the WM_CLASS property\n");
ErrorF
("-title [title] set the window title in the WM_NAME property\n");
+ ErrorF("-no-host-grab Disable grabbing the keyboard and mouse.\n");
ErrorF("\n");
}
@@ -323,6 +325,10 @@ ddxProcessArgument(int argc, char **argv, int i)
return 2;
}
/* end Xnest compat */
+ else if (!strcmp(argv[i], "-no-host-grab")) {
+ EphyrWantNoHostGrab = 1;
+ return 2;
+ }
return KdProcessArgument(argc, argv, i);
}
diff --git a/hw/kdrive/ephyr/man/Xephyr.man b/hw/kdrive/ephyr/man/Xephyr.man
index f14f6c8..c043790 100644
--- a/hw/kdrive/ephyr/man/Xephyr.man
+++ b/hw/kdrive/ephyr/man/Xephyr.man
@@ -63,6 +63,9 @@ improvement is negligible.
.B -resizeable
Allow the Xephyr window to be resized, even if not embedded into a parent
window. By default, the Xephyr window has a fixed size.
+.TP 8
+.B -no-host-grab
+Disable grabbing the keyboard and mouse.
.SH "SIGNALS"
Send a SIGUSR1 to the server (e.g. pkill -USR1 Xephyr) to
toggle the debugging mode.
--
1.7.10.4
More information about the xorg-devel
mailing list