[PATCH weston] input: add a motion signal to weston_pointer

Kristian Høgsberg hoegsberg at gmail.com
Fri Aug 30 13:26:55 PDT 2013


On Sun, Aug 25, 2013 at 11:18:20AM +0200, Giulio Camuffo wrote:
> The signal will be emitted after the pointer is moved. A shell plugin
> can listen to the signal and activate certain effects when the pointer
> touches the screen corners, for instance.

I wonder how we would implement something like the X barrier feature
in weston.  GNOME Shell uses hot corners too and in case you have a
setup like this:

   ┌─────────────────────────┬─────────────────┐
   │                         │ ↖ Panel         │
   │                         ├─────────────────┤
   │                         │                 │
   │                         │                 │
   │                         │                 │
   │                         │                 │
   │                         ├─────────────────┘
   │                         │
   └─────────────────────────┘

with the hot corner in the panel marked by the arrow.  When you throw
the cursor into the hot corner you don't want it to continue onto the
left-side output but if you move under the panel you do.  I think the
best way may be to let a shell provide a custom default_grab in that
case.
   
I think the motion signal may be useful on its own still.  What do you
think?

Kristian

> ---
>  src/compositor.h | 1 +
>  src/input.c      | 2 ++
>  2 files changed, 3 insertions(+)
> 
> diff --git a/src/compositor.h b/src/compositor.h
> index ee7853b..a2f8073 100644
> --- a/src/compositor.h
> +++ b/src/compositor.h
> @@ -307,6 +307,7 @@ struct weston_pointer {
>  	struct wl_listener focus_listener;
>  	uint32_t focus_serial;
>  	struct wl_signal focus_signal;
> +	struct wl_signal motion_signal;
>  
>  	struct weston_surface *sprite;
>  	struct wl_listener sprite_destroy_listener;
> diff --git a/src/input.c b/src/input.c
> index ad21be1..1aba210 100644
> --- a/src/input.c
> +++ b/src/input.c
> @@ -315,6 +315,7 @@ weston_pointer_create(void)
>  	pointer->default_grab.pointer = pointer;
>  	pointer->grab = &pointer->default_grab;
>  	wl_signal_init(&pointer->focus_signal);
> +	wl_signal_init(&pointer->motion_signal);
>  
>  	pointer->sprite_destroy_listener.notify = pointer_handle_sprite_destroy;
>  
> @@ -630,6 +631,7 @@ notify_motion(struct weston_seat *seat,
>  
>  	pointer->grab->interface->focus(pointer->grab);
>  	pointer->grab->interface->motion(pointer->grab, time);
> +	wl_signal_emit(&pointer->motion_signal, pointer);
>  }
>  
>  WL_EXPORT void
> -- 
> 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