diff options
author | William ML Leslie <william.leslie.ttg@gmail.com> | 2014-05-21 10:28:52 +1000 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2014-10-22 14:16:16 -0700 |
commit | 942e18e17e334d7a25f8c1dcc6f5c3711eeb6a7d (patch) | |
tree | c2098b201aacb4392a4bc58863a0c67dfdaa654b /hw/kdrive | |
parent | 61a292adf45405641de1c522a04c148e0a152acd (diff) |
Xephyr: option to disable grabbing the host
This patch makes it possible to use C-S key combinations
within Xephyr without losing access to the host window manager's
commands.
Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'hw/kdrive')
-rw-r--r-- | hw/kdrive/ephyr/ephyr.c | 12 | ||||
-rw-r--r-- | hw/kdrive/ephyr/ephyrinit.c | 6 | ||||
-rw-r--r-- | 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 8b88f3e6d..57617107d 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) @@ -649,7 +650,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 @@ -1092,12 +1097,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 36935318a..bcfb7506d 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, ephyr_glamor_gles2; @@ -153,6 +154,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"); } @@ -360,6 +362,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 f14f6c864..c04379035 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. |