[PATCH wayland 2/4] protocol: clarify input region on drags and pointers

Pekka Paalanen ppaalanen at gmail.com
Wed Oct 10 03:51:50 PDT 2012


On Wed, 10 Oct 2012 13:28:07 +0300
Ander Conselvan de Oliveira <conselvan2 at gmail.com> wrote:

> On 10/10/2012 12:47 PM, Pekka Paalanen wrote:
> > Drag icon and cursor surfaces must never receive input, so their input
> > region is always empty.
> >
> > Signed-off-by: Pekka Paalanen <ppaalanen at gmail.com>
> > ---
> >   protocol/wayland.xml |   20 ++++++++++++++++----
> >   1 files changed, 16 insertions(+), 4 deletions(-)
> >
> > diff --git a/protocol/wayland.xml b/protocol/wayland.xml
> > index c45a404..6293f56 100644
> > --- a/protocol/wayland.xml
> > +++ b/protocol/wayland.xml
> > @@ -332,8 +332,13 @@
> >   	The icon surface is an optional (can be nil) surface that
> >   	provides an icon to be moved around with the cursor.  Initially,
> >   	the top-left corner of the icon surface is placed at the cursor
> > -	hotspot, but subsequent surface.attach request can move the
> > -	relative position.
> > +	hotspot, but subsequent wl_surface.attach request can move the
> > +	relative position. Attach requests must be confirmed with
> > +	wl_surface.commit as usual.
> > +
> > +	The current and pending input regions of the wl_surface are
> > +	cleared, and wl_surface.set_input_region is ignored until the
> > +	wl_surface is destroyed.
> 
> That's not the behavior implemented in Weston right now. When the drag 
> ends the user is able to set the input region again. In fact, the 
> surface just becomes a regular wl_surface with no specified role.

Right, that is different to how wl_shell surface types work, that also
use the weston_surface:configure field. More below...

> Also, start_drag takes two wl_surface arguments so the paragraph above 
> should make it clear it is referring to the icon surface.

Will do.

> >         </description>
> >         <arg name="source" type="object" interface="wl_data_source" allow-null="true"/>
> >         <arg name="origin" type="object" interface="wl_surface"/>
> > @@ -742,7 +747,9 @@
> >
> >   	wl_surface.set_input_region changes the pending input region.
> >   	wl_surface.commit copies the pending region to the current region.
> > -	Otherwise the pending and current regions are never changed.
> > +	Otherwise the pending and current regions are never changed,
> > +	except cursor and icon surfaces are special cases, see
> > +	wl_pointer.set_cursor and wl_data_device.start_drag.
> >
> >   	The initial value for input region is infinite. That means the whole
> >   	surface will accept input. Setting the pending input region has copy
> > @@ -864,11 +871,16 @@
> >
> >   	On surface.attach requests to the pointer surface, hotspot_x
> >   	and hotspot_y are decremented by the x and y parameters
> > -	passed to the request.
> > +	passed to the request. Attach must be confirmed by
> > +	wl_surface.commit as usual.
> >
> >   	The hotspot can also be updated by passing the current set
> >   	pointer surface to this request with new values for hotspot_x
> >   	and/or hotspot_y.
> > +
> > +	The current and pending input regions of the wl_surface are
> > +	cleared, and wl_surface.set_input_region is ignored until the
> > +	wl_surface is destroyed.
> 
> Same thing here. Setting a new pointer surface releases the old one, 
> making it a regular wl_surface with no specified role.

Ok, I missed the pointer_unmap_sprite().

What should we specify for the input regions after the surface is no
longer a pointer sprite or a drag icon? Undefined, empty, infinite, or
the region it was before becoming a pointer sprite? We need to specify
it for both current and pending input regions.


Thanks,
pq


More information about the wayland-devel mailing list