On 10/08/2015 10:15 AM, Derek Foreman wrote:
On 07/10/15 07:41 PM, Jonas Ådahl wrote:
I think it would be nice to land this in the same release cycle (ie:
this one) as pointer confinement, because I think the two features
really go hand in hand.
Indeed. Relative pointer events are quite useless if you loose focus
almost immediately
Wrong. Relative pointer events are useful if the client has a grab, such
as when the user is holding the mouse button down. They thus don't loose
focus "almost immediately", they lose it when the user releases the
mouse button.
For instance they could be used to scroll a very tall popup menu as the
mouse hits the edge of the screen. Or to make a smooth drawing stroke
even if the path the user makes goes outside the screen.
If the client could also control where the cursor is drawn then this
would work even for clients that don't touch the screen edges. It would
be the nirvana of usefulness for toolkit authors. That is why I am still
really insistent that the proposed pointer lock have these TRIVIAL
modifications:
1. The cursor is not "frozen" during pointer lock, instead it is placed
at the "hint" position.
2. There is a type of pointer lock that is attached to a mouse-down
event and is lost when the mouse is released. The reason for this is
because a compositor will be much more likely to grant such a lock,
because it is easy for a user to get out of it no matter how misbehaved
a client is. Therefore clients can assume it will work.
I know this will get ignored, but I still don't understand why. My
changes are obvious and really useful. All I can think is that Jonas is
thinking of a single usage for games, and is failing to realize how
incredibly useful his pointer lock would be in many other cases.
Why are we passing a pointer object here instead of the seat? If a game
wants relative pointer data it'll likely not want absolute pointer data,
so why does it have to bind an absolute pointer (and receive events on
it?) before it can get the relative stuff it's actually going to use?
The client needs to know where the cursor actually is so it can start
the relative motion at the right place. So it will need to get absolute
positions. Also the button events are sent to the pointer.
Why not just allow the pointer to be bound as either/both serial and
absolute, and have each be a fully functional interface?
It needs to be able to see both the absolute and relative events without
a round trip. So it would keep both open and would just get duplicate
button events.
A simpler solution would be to just make the relative motion be another
event produced by wl_pointer, or to add extra fields to the motion
events. Not sure why that solution is ruled out, it seems to be allowed
when the protocol version changes. The overhead is trivial because the
absolute event is being sent anyway.
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel