[PATCH xserver] xwayland: No grab handler without protocol support

Peter Hutterer peter.hutterer at who-t.net
Mon Sep 4 04:46:46 UTC 2017


On Fri, Sep 01, 2017 at 09:35:33AM +0200, Olivier Fourdan wrote:
> If the compositor has no support for the Xwayland keyboard grab
> protocol, there is no need to set-up our keyboard grab handler.
> 
> Signed-off-by: Olivier Fourdan <ofourdan at redhat.com>

   aabf65d2a..3fbc3c3ee  master -> master

thanks

Cheers,
   Peter

> ---
>  hw/xwayland/xwayland-input.c | 31 ++++++++++++++++++++++---------
>  1 file changed, 22 insertions(+), 9 deletions(-)
> 
> diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
> index acb467b91..d45bee410 100644
> --- a/hw/xwayland/xwayland-input.c
> +++ b/hw/xwayland/xwayland-input.c
> @@ -1050,11 +1050,10 @@ set_grab(struct xwl_seat *xwl_seat, struct xwl_window *xwl_window)
>          release_grab (xwl_seat);
>  
>      xwl_screen = xwl_seat->xwl_screen;
> -    if (xwl_screen->wp_grab)
> -        xwl_seat->keyboard_grab =
> -            zwp_xwayland_keyboard_grab_manager_v1_grab_keyboard(xwl_screen->wp_grab,
> -                                                                xwl_window->surface,
> -                                                                xwl_seat->seat);
> +    xwl_seat->keyboard_grab =
> +        zwp_xwayland_keyboard_grab_manager_v1_grab_keyboard(xwl_screen->wp_grab,
> +                                                            xwl_window->surface,
> +                                                            xwl_seat->seat);
>  }
>  
>  static void
> @@ -1197,14 +1196,18 @@ init_keyboard(struct xwl_seat *xwl_seat)
>      EnableDevice(xwl_seat->keyboard, TRUE);
>      xwl_seat->keyboard->key->xkbInfo->checkRepeat = keyboard_check_repeat;
>  
> -    master = GetMaster(xwl_seat->keyboard, MASTER_KEYBOARD);
> -    if (master)
> -        setup_keyboard_grab_handler(master);
> +    if (xwl_seat->xwl_screen->wp_grab) {
> +        /* We have Xwayland grab protocol supported by the compositor */
> +        master = GetMaster(xwl_seat->keyboard, MASTER_KEYBOARD);
> +        if (master)
> +            setup_keyboard_grab_handler(master);
> +    }
>  }
>  
>  static void
>  release_keyboard(struct xwl_seat *xwl_seat)
>  {
> +    release_grab(xwl_seat);
>      wl_keyboard_release(xwl_seat->wl_keyboard);
>      xwl_seat->wl_keyboard = NULL;
>  
> @@ -1257,7 +1260,6 @@ seat_handle_capabilities(void *data, struct wl_seat *seat,
>      if (caps & WL_SEAT_CAPABILITY_KEYBOARD && xwl_seat->wl_keyboard == NULL) {
>          init_keyboard(xwl_seat);
>      } else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && xwl_seat->wl_keyboard) {
> -        release_grab(xwl_seat);
>          release_keyboard(xwl_seat);
>      }
>  
> @@ -2401,10 +2403,21 @@ static void
>  init_keyboard_grab(struct xwl_screen *xwl_screen,
>                     uint32_t id, uint32_t version)
>  {
> +    struct xwl_seat *xwl_seat;
> +    DeviceIntPtr master;
> +
>      xwl_screen->wp_grab =
>           wl_registry_bind(xwl_screen->registry, id,
>                            &zwp_xwayland_keyboard_grab_manager_v1_interface,
>                            1);
> +
> +    xorg_list_for_each_entry(xwl_seat, &xwl_screen->seat_list, link) {
> +        if (xwl_seat->keyboard) {
> +            master = GetMaster(xwl_seat->keyboard, MASTER_KEYBOARD);
> +            if (master)
> +                setup_keyboard_grab_handler(master);
> +        }
> +    }
>  }
>  
>  static void
> -- 
> 2.13.5
> 


More information about the wayland-devel mailing list