[PATCH] protocol: Add DnD actions
spitzak at gmail.com
Fri Apr 10 12:44:29 PDT 2015
On 04/10/2015 02:29 AM, Carlos Garnacho wrote:
>> However the
>> compositor could send state along with A to the dest.
> This could also work,
Thanks I think I finally made it clear what I am asking for.
So "intersection" is now f(A,B,state), and what I propose is:
source sends A to compositor
compositor sends A to dest
compositor sends state to dest
dest does C = f(A,B,state)
dest sends C to compositor
compositor sends C to source
"compositor sends state to dest" could very well mean that the dest gets
events for the seat, as though it was temporarily focused. This would
also allow the dest to make a popup menu to let the user choose an action.
> I however think it makes sense to abstract this a
> bit wrt the devices involved. Generally, wl_data_device nicely
> abstracts from the pointer/touch/device being used throughout the
> operation. It makes sense to me to do the same here, if what we are
> pursuing is a DnD action. Also, this IMO gives some degree of liberty
> wrt form factors, testing...
Any such concerns like this apply to *all* events, there is nothing
special about the events during a DnD, and the clients must already have
code to "abstract wrt the devices involved". The DnD should indicate
which "seat" is doing the drag however.
> It's true that the modifier mapping becomes compositor-dependent (It's
> been traditionally on toolkit domain), but then so is every keycombo
> the compositor wants to implement.
That seems completely different, as compositor bindings do actions
without communicating with any client (ie a key that launches a
particular client will work when there are no clients).
> But I won't be as hard positioned on this one, if the consensus is
> that we better send pressed buttons/modifiers to the dest, it can be
> made to work.
Anybody else want to say anything?
I am VERY much in favor of moving as much logic as possible from the
compositor to the clients. And f(A,B,state) is a very complicated
function. B may not be a list, it could be, in effect, infinite in size
(a client conceivably could ask the user to type a filename that the
drop should go to), can vary quickly (as the user moves across widget
boundaries), and can contain items the compositor has no business
knowing about (a paint program may ask how to tile a dropped pattern).
The list A does not vary much and is much shorter IMHO. I think it is
really move vs copy in almost all cases. Even file linking could be
considered a "copy" as far as the source is concerned (it does not have
to know that a link was made rather than the data copied).
More information about the wayland-devel