[PATCH v3 wayland-protocols] Add the tablet protocol
Daniel Stone
daniel at fooishbar.org
Thu Feb 18 12:00:09 UTC 2016
Hi,
No real opinion on the angles/units thing, and indeed we can't really
add native 64-bit integers now (even if we did, it rapidly descends
into a padding/alignment nightmare; much easier to keep _everything_
on the wire as 32-bit units for that reason). Aside from that:
On 29 January 2016 at 04:32, Peter Hutterer <peter.hutterer at who-t.net> wrote:
> + When the tool leaves proximity, a proximity_out event is sent. If any
> + button is still down, a button release event is sent before this
> + proximity event. These button events are sent in the same frame as the
> + proximity event to signal to the client that the buttons were held when
> + the tool left proximity.
> +
> + If the tool moves out of the surface but stays in proximity (i.e.
> + between windows), compositor-specific grab policies apply. This usually
> + means that the proximity-out is delayed until all buttons are released.
This took me a couple of reads to convince myself; it might be useful
to explicitly make the difference between physically out of proximity,
and a logical event (for the second paragraph) here. But it seems
fine.
> + <interface name="zwp_tablet_manager_v1" version="1">
> + <description summary="controller object for graphic tablet devices">
> + An object that provides access to the graphics tablets available on this
> + system. Any tablet is associated with a seat, to get access to the
> + actual tablets, use wp_tablet_manager.get_tablet_seat.
> + </description>
> +
> + <request name="get_tablet_seat">
> + <description summary="get the tablet seat">
> + Get the wp_tablet_seat object for the given seat. This object
> + provides access to all graphics tablets in this seat.
> + </description>
> + <arg name="tablet_seat" type="new_id" interface="zwp_tablet_seat_v1"/>
> + <arg name="seat" type="object" interface="wl_seat" summary="The wl_seat object to retrieve the tablets for" />
> + </request>
> +
> + <request name="destroy" type="destructor">
> + <description summary="release the memory for the tablet manager object">
> + This destroys the resources associated with the tablet manager.
Which associated resources? Does it imply that all tablet_seats will
(by the server) or should (by the client) be destroyed by this point?
Or is it just purely the object itself?
> + <interface name="zwp_tablet_seat_v1" version="1">
> + <description summary="controller object for graphic tablet devices of a seat">
> + An object that provides access to the graphics tablets available on this
> + seat. After binding to this interface, the compositor sends a set of
> + wp_tablet_seat.tablet_added and wp_tablet_seat.tool_added events.
> + </description>
> +
> + <request name="destroy" type="destructor">
> + <description summary="release the memory for the tablet seat object">
> + This destroys the resources associated with the tablet seat.
Same question, but for tablet/tablet_tools.
> + <request name="destroy" type="destructor">
> + <description summary="destroy the tool object">
> + This destroys the client's resource for this tool object.
> +
> + A client must not issue this request until it receives a
> + wp_tablet_tool.remove event.
> + </description>
> + </request>
>From last time (two levels in me, one level in you):
> > Egads. What happens when a client no longer wants to know about tablet
> > events (e.g. you have an embedded drawing program in a browser but
> > then close the tab): it just has to ignore the stream of events
> > forever? A bit hostile.
>
> you can drop the tablet manager and re-bind. I think filtering specific
> devices at the protocol level is a bit of a niche usecase and better handled
> in the toolkit.
So, this ties in with the questions above, about what gets destroyed /
is required to have been destroyed. For me, it's less about
filtering/ignoring particular tools, than a clean takedown sequence.
Say you switch from a mode where tablet events are useful/important
(you're in a browser and drawing sequence diagrams) to not (sequence
diagrams are really boring so you're watching highlights of the 1990
World Cup on YouTube). What's - ideally described in $WAYLAND_DEBUG
form - the sequence for a client cleanly exiting from all tablet
events?
(Assuming that destroy before removed is supported, presumably it'd
need to follow the same proximity_out+up+frame sequence so the client
knew when it would no longer receive any events.)
> + <enum name="capability">
> + [...]
> + <entry name="slider" value="5" summary="Slider axis"/>
> + <entry name="wheel" value="6" summary="Slider axis"/>
Whoops. :)
> + <event name="removed">
> + <description summary="tool removed">
> + This event is sent when the tool is removed from the system and will
> + send no further events. Should the physical tool comes back into
> + proximity later, a new wp_tablet_tool object will be created.
> +
> + It is compositor-dependent when a tool is removed. A compositor may
> + remove a tool on proximity out, tablet removal or any other reason.
> + A compositor may also keep a tool alive until shutdown.
> +
> + If the tool is currently in proximity, a proximity_out event will be
> + sent before the removed event.
... and an up event?
> + <enum name="error">
> + <entry name="role" value="0" summary="given wl_surface has another role"/>
> + </enum>
?!
> + <request name="destroy" type="destructor">
> + <description summary="destroy the tablet object">
> + This destroys the client's resource for this tablet object.
> +
> + A client must not issue this request until it receives a
> + wp_tablet.remove event.
> + </description>
> + </request>
All the same questions apply.
Cheers,
Daniel
More information about the wayland-devel
mailing list