<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 10, 2016 at 10:50 PM, Jonas Ã…dahl <span dir="ltr"><<a href="mailto:jadahl@gmail.com" target="_blank">jadahl@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Turn xdg_popup into plain temporary child surfaces without any grabbing<br>
or mapping order requirements by default.<br>
<br>
In order to create grabbing popup chains, a new request 'grab' is<br>
introduced which enables more or less the same semantics and<br>
requirements as xdg_popup previously had related to grabbing, stacking<br>
and mapping order.<br>
<br>
This enables using xdg_popup for creating tooltips and other user<br>
interface elements that does not want to take an explicit grab.<br></blockquote><div><br></div><div>YAY!!!!</div><div><br></div><div>However clients need the ability to "grab" from any surface. Otherwise they cannot use their own graphics to create popup menus (they can make a dummy invisible popup window, but that seems like a kludge), or make an interface that uses multiple popup windows but can be in a state where there are zero of them displayed. Also necessary if you want to emulate X grabs since they can be done from any surface. Basically the grab request should be moved to xdg_surface.</div><div><br></div><div>Dismissing a grab should not unmap the popup surfaces (except perhaps if the client is failing to respond to pings, but in that case I would have a click anywhere remove the popups whether or not a grab was done). This is a requirement so the client can synchronize other graphics with the removal of the popups. It sounds like this is true right now, but the description of grab contains a lot of text that implies some relationship that should maybe be deleted.</div><div><br></div><div>The idea of sending a copy of every event to every client surface is pretty ugly. You need at least a 'frame' event so the client can tell which blocks belong together. Instead the events can go to the surface that did the grab. The compositor should send events to the client telling the actual position of any child surface relative to it's parent, this allows a client to translate an event in any child surface to any other one.</div><div><br></div></div></div></div>