[PATCH] Xephyr: option to disable grabbing the host

William ML Leslie william.leslie.ttg at gmail.com
Fri Oct 10 02:55:57 PDT 2014


Hi, is this patch ok?  Just bumping it while it still applies cleanly.
I know that it might be a bit of a silly feature, but it makes life a
lot easier for me at least.

On 21 May 2014 10:28, William ML Leslie <william.leslie.ttg at gmail.com> wrote:
> 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
>



-- 
William Leslie

Notice:
Likely much of this email is, by the nature of copyright, covered
under copyright law.  You absolutely MAY reproduce any part of it in
accordance with the copyright law of the nation you are reading this
in.  Any attempt to DENY YOU THOSE RIGHTS would be illegal without
prior contractual agreement.


More information about the xorg-devel mailing list