[PATCH weston 1/2] compositor: add a way to override the default pointer grab

Kristian Høgsberg hoegsberg at gmail.com
Tue Oct 1 10:40:02 PDT 2013


On Mon, Sep 30, 2013 at 12:40:28PM +0200, Giulio Camuffo wrote:
> ---
>  src/compositor.c | 16 ++++++++++++++++
>  src/compositor.h | 11 ++++++++++-
>  src/input.c      | 18 +++++++++++++++---
>  3 files changed, 41 insertions(+), 4 deletions(-)

I think this idea makes sense, but let's do it after 1.3 (hoping to
release this Friday).

Kristian

> diff --git a/src/compositor.c b/src/compositor.c
> index 0fa6613..62a3558 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -3077,6 +3077,21 @@ weston_compositor_shutdown(struct weston_compositor *ec)
>  }
>  
>  WL_EXPORT void
> +weston_compositor_set_default_pointer_grab(struct weston_compositor *ec,
> +			const struct weston_pointer_grab_interface *interface)
> +{
> +	struct weston_seat *seat;
> +
> +	ec->default_pointer_grab = interface;
> +	wl_list_for_each(seat, &ec->seat_list, link) {
> +		if (seat->pointer) {
> +			weston_pointer_set_default_grab(seat->pointer,
> +							interface);
> +		}
> +	}
> +}
> +
> +WL_EXPORT void
>  weston_version(int *major, int *minor, int *micro)
>  {
>  	*major = WESTON_VERSION_MAJOR;
> @@ -3515,6 +3530,7 @@ int main(int argc, char *argv[])
>  	segv_compositor = ec;
>  
>  	ec->idle_time = idle_time;
> +	ec->default_pointer_grab = NULL;
>  
>  	setenv("WAYLAND_DISPLAY", socket_name, 1);
>  
> diff --git a/src/compositor.h b/src/compositor.h
> index a19d966..92c7f4d 100644
> --- a/src/compositor.h
> +++ b/src/compositor.h
> @@ -348,7 +348,7 @@ struct weston_touch {
>  };
>  
>  struct weston_pointer *
> -weston_pointer_create(void);
> +weston_pointer_create(struct weston_seat *seat);
>  void
>  weston_pointer_destroy(struct weston_pointer *pointer);
>  void
> @@ -363,6 +363,9 @@ weston_pointer_end_grab(struct weston_pointer *pointer);
>  void
>  weston_pointer_clamp(struct weston_pointer *pointer,
>  			    wl_fixed_t *fx, wl_fixed_t *fy);
> +void
> +weston_pointer_set_default_grab(struct weston_pointer *pointer,
> +		const struct weston_pointer_grab_interface *interface);
>  
>  struct weston_keyboard *
>  weston_keyboard_create(void);
> @@ -582,6 +585,8 @@ struct weston_compositor {
>  	uint32_t idle_inhibit;
>  	int idle_time;			/* timeout, s */
>  
> +	const struct weston_pointer_grab_interface *default_pointer_grab;
> +
>  	/* Repaint state. */
>  	struct weston_plane primary_plane;
>  	uint32_t capabilities; /* combination of enum weston_capability */
> @@ -1023,6 +1028,10 @@ weston_compositor_run_debug_binding(struct weston_compositor *compositor,
>  				    uint32_t key,
>  				    enum wl_keyboard_key_state state);
>  
> +void
> +weston_compositor_set_default_pointer_grab(struct weston_compositor *compositor,
> +			const struct weston_pointer_grab_interface *interface);
> +
>  int
>  weston_environment_get_fd(const char *env);
>  
> diff --git a/src/input.c b/src/input.c
> index 1313b52..15c2b5f 100644
> --- a/src/input.c
> +++ b/src/input.c
> @@ -350,7 +350,7 @@ pointer_handle_sprite_destroy(struct wl_listener *listener, void *data)
>  }
>  
>  WL_EXPORT struct weston_pointer *
> -weston_pointer_create(void)
> +weston_pointer_create(struct weston_seat *seat)
>  {
>  	struct weston_pointer *pointer;
>  
> @@ -360,7 +360,8 @@ weston_pointer_create(void)
>  
>  	wl_list_init(&pointer->resource_list);
>  	wl_list_init(&pointer->focus_resource_list);
> -	pointer->default_grab.interface = &default_pointer_grab_interface;
> +	weston_pointer_set_default_grab(pointer,
> +					seat->compositor->default_pointer_grab);
>  	pointer->default_grab.pointer = pointer;
>  	pointer->grab = &pointer->default_grab;
>  	wl_signal_init(&pointer->focus_signal);
> @@ -385,6 +386,17 @@ weston_pointer_destroy(struct weston_pointer *pointer)
>  	free(pointer);
>  }
>  
> +void
> +weston_pointer_set_default_grab(struct weston_pointer *pointer,
> +		const struct weston_pointer_grab_interface *interface)
> +{
> +	if (interface)
> +		pointer->default_grab.interface = interface;
> +	else
> +		pointer->default_grab.interface =
> +			&default_pointer_grab_interface;
> +}
> +
>  WL_EXPORT struct weston_keyboard *
>  weston_keyboard_create(void)
>  {
> @@ -1676,7 +1688,7 @@ weston_seat_init_pointer(struct weston_seat *seat)
>  	if (seat->pointer)
>  		return;
>  
> -	pointer = weston_pointer_create();
> +	pointer = weston_pointer_create(seat);
>  	if (pointer == NULL)
>  		return;
>  
> -- 
> 1.8.4
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list