<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Jun 10, 2015 at 5:20 PM, Jasper St. Pierre <span dir="ltr"><<a href="mailto:jstpierre@mecheye.net" target="_blank">jstpierre@mecheye.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Wed, Jun 10, 2015 at 4:50 AM, Carlos Garnacho <<a href="mailto:carlosg@gnome.org">carlosg@gnome.org</a>> wrote:<br>
> On mar, 2015-06-09 at 11:03 -0700, Jasper St. Pierre wrote:<br>
>> What is the value of clients having this information?<br>
><br>
> The same there is in having wl_touch.cancelled. See the cases in the<br>
> original email in the thread.<br>
><br>
>> I think we've<br>
>> tried to hide grab semantics from the point of view of the client and<br>
>> simply say "we can revoke input at any time, including in response to<br>
>> a request you make", which gives us, the compositor, a lot more<br>
>> leeway<br>
>> with future possibilities.<br>
><br>
> Sure, I'm all for that. What I'd really want is having a way to tell<br>
> clients we do so. I'm totally fine with documenting the places where<br>
> this potentially happens on a per-case basis, even if the final wording<br>
> is "compositor dependent", same as for seat.release_input emission.<br>
><br>
> That said, toolkits/clients will surely expect some consistence across<br>
> compositors, so the leeway is relative.<br>
><br>
>><br>
>> Grabs were a major pain point in X11 since they were overspecified,<br>
>> so<br>
>> we're trying to not fall into that same trap again.<br>
><br>
> I'm sure there is a lot of ground between "let's not overspecify" and<br>
> "let's go shopping".<br>
><br>
> It would be convenient first to identify what are the sore points with<br>
> X grabs. AFAICT, most of these come from grabs not being easily<br>
> transferred, and the WM/screensaver/etc not being more of a client to<br>
> revoke/break grabs. On wayland the compositor is completely free to do<br>
> as it pleases, with and without this change I'm proposing.<br>
<br>
</div></div>Yeah, transferring grabs race-free, a lack of being able to override<br>
or revoke grabs are the top two. But focus management + grabs in X11<br>
is tricksy and sort of awkward: if I take a keyboard grab, key focus<br>
can still navigate around as usual, we'll just get NotifyWhileGrabbed<br>
as our detail.<br>
<span class=""><br>
> However, one thing that X did well is defining a consistent event<br>
> delivery model when grabs were being taken (well, except for touch<br>
> events...), so both the grabbing and the pre-grab windows are well<br>
> aware of what's going on, I think one is due in wayland, at least face<br>
> to clients.<br>
<br>
</span>Did it? I don't know of any model that lets me know when a client has<br>
taken a grab or ungrabs their existing grab. The exception is that I<br>
believe if I'm the key or pointer focus, I'll get a FocusOut / Leave<br>
event with the "NotifyGrabbed" detail, and when the grab is dropped<br>
(and I am still the key focus / pointer focus, which is not<br>
guaranteed!), we'll get the reverse event with "NotifyUngrabbed".<br>
<br>
And in X11, this is actually good, because such an event would be<br>
racy: some other client might have taken a grab in such a time. And it<br>
happens all the time because of passive grabs, including X11's own<br>
implicit passive grab on the pointer.<br>
<br>
Anyway, this model matches well with wl_keyboard.leave /<br>
wl_pointer.leave being sent at the start of device grabs.<br>
<span class=""><br>
>><br>
>> For instance, if the user is in a game that has a keyboard grab and<br>
>> presses Alt-Tab to switch out, the client should just have its<br>
>> keyboard grab revoked without having to have that as a possibility in<br>
>> the protocol spec. Same thing with tray icon behavior, etc.<br>
><br>
> sure, in that case you'd still get wl_keyboard.leave and the client can<br>
> properly undo the key press / mods. But notice there is always a need<br>
> to know when to undo (eg. in your example above, the game might have<br>
> bound Alt to "release flares", if you first press Alt and then Tab, and<br>
> the client doesn't get the Alt key release, you don't want to leave<br>
> that stuck when you focus back)<br>
<br>
</span>The client gets a wl_keyboard.leave. Is that not good enough? What use<br>
cases does this new event solve?<br></blockquote><div><br></div><div>There's a case where that doesn't happen: if the key press triggers the activation of an input method, which grabs the keyboard. The client still keeps the focus and has no way to know if has to stop generating key repeats for the key that triggered the activation.</div><div><br></div><div>I'm getting exactly this issue, the keyboard grab is needed in the virtual keyboard to be usable with the arrow keys.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="im HOEnZb"><br>
>> Clients need to cope with losing mouse and keyboard focus at any<br>
>> time,<br>
>> and with seats going away at any time. It's just how it is.<br>
><br>
> Toolkits are nothing else than giant state machines, they rely on a<br>
> meaningful event order, or some proper notification when things go<br>
> south. If you mess with that, you'll get clients in inconsistent<br>
> states, including:<br>
><br>
> - stuck buttons<br>
> - gestures listening to vanished touch sequences, unable to trigger<br>
> anymore<br>
> - stuck repeat keys</span></blockquote></div><br clear="all"><div>-- <br></div><div class="gmail_signature">Arnaud</div>
</div></div>