On Thu, Aug 16, 2018 at 4:46 PM, Jonas Ådahl <jad...@gmail.com> wrote: > On Thu, Aug 16, 2018 at 04:25:06PM +0200, Carlos Garnacho wrote: >> Hi!, >> >> Thanks Simon for moving this forward. FTR this looks good to me. Had >> some chat with Jonas on IRC about the suitability of xdg vs wp >> prefixes, but I personally think your choice is fine. Either way, this >> is > > To elaborate what the discussion was about: > > "xdg" shouldn't be seen as a "desktop" (device that sits on a desk) > thing, but a place to put protocols that aims to "bridge" different > environments, be they things running in devices placed on desks or in > hands.
Making merits for my "captain obvious" award, I'll point out the 'd' in xdg stands for "desktop" :). If we aim 'xdg' to be a form factor-agnostic set of standards, I would say that even window management is a bit of a stretch... Certainly not something you usually see in tablets or mobile. But times surely change, so I don't say we must attain to the original meaning, AFAIR the 'x' was already switched to 'cross' at some point. > > For example, if someone plugs in a mouse to a smartphone or tablet, if > that person has the middle-click-paste function on the actual desktop > computer, I'd assume the same user would expect it also on the > not-a-desktop-computer device. > > Personally I don't think clipboard really fall into this category of > desktop environment interoperability, and "primary selection" is not > really different from the regular clipboard and drag-n-drop > functionality here I think. > > On the other hand, if we see clipboard as something that bridges > environments (e.g. if gtk wants to have interoperable clipboard, it > needs to use a bridging protocol), and with that in mind, primary > selection *do* fall into this category (so does regular clipboard, but > can't rename that so meh). That is my line of thought, although I kind of agree this is being a "historical artifact". This is about having heterogeneous clients have a lingua franca. I ultimately think the prefix is least relevant for that goal, the wayland-protocols blessing should be enough :) > > So, my personal opinion is that putting this inside a "xdg_" prefix is > not entirely suitable, given that this is clipboard type plumbing that > just happens to historically come from the traditional desktop Linux > usage. > > Thoughts? If we ignore form factors (desktop vs hand held), where does > it fall, you think? I guess we are less likely to regret it in 10 years time if it's wp, but just because it's such a big bucket :). But I see some pain going that way with the xdg rubberstamp... the amount of form factors is not going to decrease, anything can potentially get a bad idea in retrospective if we aim for the lowest common denominator. Or maybe should we acknowledge form-factor variety in xdg, so eg. a VR headset protocol could be "xdg" just as we have xdg-shell for desktop-style window management? Cheers, Carlos > > > Jonas > > >> >> Acked-by: Carlos Garnacho <carl...@gnome.org> >> >> On Sun, Jul 8, 2018 at 9:14 PM, Simon Ser <cont...@emersion.fr> wrote: >> > This primary selection is similar in spirit to the eponimous >> > in X11, allowing a quick "select text + middle click" shortcut >> > to copying and pasting. >> > >> > It's otherwise very similar to its Yayland counterpart, and >> > explicitly made consistent with it. >> > >> > Signed-off-by: Simon Ser <cont...@emersion.fr> >> > --- >> > This is a continuation of [1]. This protocol was pretty close to being >> > accepted. >> > >> > I've chosen to put the xdg prefix because this primary selection is mostly >> > relevant >> > to desktop compositors. >> > >> > I've added myself as maintainer, Carlos and Lyude let me know if you want >> > to replace >> > me or be added to the list too. >> > >> > [1]: >> > https://lists.freedesktop.org/archives/wayland-devel/2016-February/027101.html >> > >> > Makefile.am | 3 +- >> > unstable/xdg-primary-selection/README | 4 + >> > .../xdg-primary-selection-unstable-v1.xml | 225 ++++++++++++++++++ >> > 3 files changed, 231 insertions(+), 1 deletion(-) >> > create mode 100644 unstable/xdg-primary-selection/README >> > create mode 100644 >> > unstable/xdg-primary-selection/xdg-primary-selection-unstable-v1.xml >> > >> > diff --git a/Makefile.am b/Makefile.am >> > index 2b59d34..66a65af 100644 >> > --- a/Makefile.am >> > +++ b/Makefile.am >> > @@ -19,7 +19,8 @@ unstable_protocols = >> > \ >> > >> > unstable/keyboard-shortcuts-inhibit/keyboard-shortcuts-inhibit-unstable-v1.xml >> > \ >> > unstable/xdg-output/xdg-output-unstable-v1.xml >> > \ >> > unstable/input-timestamps/input-timestamps-unstable-v1.xml \ >> > - unstable/xdg-decoration/xdg-decoration-unstable-v1.xml \ >> > + unstable/xdg-decoration/xdg-decoration-unstable-v1.xml \ >> > + >> > unstable/xdg-primary-selection/xdg-primary-selection-unstable-v1.xml \ >> > $(NULL) >> > >> > stable_protocols = >> > \ >> > diff --git a/unstable/xdg-primary-selection/README >> > b/unstable/xdg-primary-selection/README >> > new file mode 100644 >> > index 0000000..ae0a402 >> > --- /dev/null >> > +++ b/unstable/xdg-primary-selection/README >> > @@ -0,0 +1,4 @@ >> > +Primary selection protocol >> > + >> > +Maintainers: >> > +Simon Ser <cont...@emersion.fr> >> > diff --git >> > a/unstable/xdg-primary-selection/xdg-primary-selection-unstable-v1.xml >> > b/unstable/xdg-primary-selection/xdg-primary-selection-unstable-v1.xml >> > new file mode 100644 >> > index 0000000..eb97425 >> > --- /dev/null >> > +++ b/unstable/xdg-primary-selection/xdg-primary-selection-unstable-v1.xml >> > @@ -0,0 +1,225 @@ >> > +<?xml version="1.0" encoding="UTF-8"?> >> > +<protocol name="xdg_primary_selection_unstable_v1"> >> > + <copyright> >> > + Copyright © 2015, 2016 Red Hat >> > + >> > + Permission is hereby granted, free of charge, to any person obtaining >> > a >> > + copy of this software and associated documentation files (the >> > "Software"), >> > + to deal in the Software without restriction, including without >> > limitation >> > + the rights to use, copy, modify, merge, publish, distribute, >> > sublicense, >> > + and/or sell copies of the Software, and to permit persons to whom the >> > + Software is furnished to do so, subject to the following conditions: >> > + >> > + The above copyright notice and this permission notice (including the >> > next >> > + paragraph) shall be included in all copies or substantial portions of >> > the >> > + Software. >> > + >> > + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, >> > EXPRESS OR >> > + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF >> > MERCHANTABILITY, >> > + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT >> > SHALL >> > + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR >> > OTHER >> > + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, >> > ARISING >> > + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER >> > + DEALINGS IN THE SOFTWARE. >> > + </copyright> >> > + >> > + <description summary="Primary selection protocol"> >> > + This protocol provides the ability to have a primary selection device >> > to >> > + match that of the X server. This primary selection is a shortcut to >> > the >> > + common clipboard selection, where text just needs to be selected in >> > order >> > + to allow copying it elsewhere. The de facto way to perform this action >> > + is the middle mouse button, although it is not limited to this one. >> > + >> > + Clients wishing to honor primary selection should create a primary >> > + selection source and set it as the selection through >> > + xdg_primary_selection_device.set_selection whenever the text selection >> > + changes. In order to minimize calls in pointer-driven text selection, >> > + it should happen only once after the operation finished. Similarly, >> > + a NULL source should be set when text is unselected. >> > + >> > + xdg_primary_selection_offer objects are first announced through the >> > + xdg_primary_selection_device.data_offer event. Immediately after this >> > event, >> > + the primary data offer will emit xdg_primary_selection_offer.offer >> > events >> > + to let know of the mime types being offered. >> > + >> > + When the primary selection changes, the client with the keyboard focus >> > + will receive xdg_primary_selection_device.selection events. Only the >> > client >> > + with the keyboard focus will receive such events with a non-NULL >> > + xdg_primary_selection_offer. Across keyboard focus changes, previously >> > + focused clients will receive xdg_primary_selection_device.events with >> > a >> > + NULL xdg_primary_selection_offer. >> > + >> > + In order to request the primary selection data, the client must pass >> > + a recent serial pertaining to the press event that is triggering the >> > + operation, if the compositor deems the serial valid and recent, the >> > + xdg_primary_selection_source.send event will happen in the other end >> > + to let the transfer begin. The client owning the primary selection >> > + should write the requested data, and close the file descriptor >> > + immediately. >> > + >> > + If the primary selection owner client disappeared during the transfer, >> > + the client reading the data will receive a >> > + xdg_primary_selection_device.selection event with a NULL >> > + xdg_primary_selection_offer, the client should take this as a hint >> > + to finish the reads related to the no longer existing offer. >> > + >> > + The primary selection owner should be checking for errors during >> > + writes, merely cancelling the ongoing transfer if any happened. >> > + </description> >> > + >> > + <interface name="zxdg_primary_selection_device_manager_v1" version="1"> >> > + <description summary="X primary selection emulation"> >> > + The primary selection device manager is a singleton global object >> > that >> > + provides access to the primary selection. It allows to create >> > + xdg_primary_selection_source objects, as well as retrieving the >> > per-seat >> > + xdg_primary_selection_device objects. >> > + </description> >> > + >> > + <request name="create_source"> >> > + <description summary="create a new primary selection source"> >> > + Create a new primary selection source. >> > + </description> >> > + <arg name="id" type="new_id" >> > interface="zxdg_primary_selection_source_v1"/> >> > + </request> >> > + >> > + <request name="get_device"> >> > + <description summary="create a new primary selection device"> >> > + Create a new data device for a given seat. >> > + </description> >> > + <arg name="id" type="new_id" >> > interface="zxdg_primary_selection_device_v1"/> >> > + <arg name="seat" type="object" interface="wl_seat"/> >> > + </request> >> > + >> > + <request name="destroy" type="destructor"> >> > + <description summary="destroy the primary selection device manager"> >> > + Destroy the primary selection device manager. >> > + </description> >> > + </request> >> > + </interface> >> > + >> > + <interface name="zxdg_primary_selection_device_v1" version="1"> >> > + <request name="set_selection"> >> > + <description summary="set the primary selection"> >> > + Replaces the current selection. The previous owner of the primary >> > selection >> > + will receive a xdg_primary_selection_source.cancelled event. >> > + >> > + To unset the selection, set the source to NULL. >> > + </description> >> > + <arg name="source" type="object" >> > interface="zxdg_primary_selection_source_v1" allow-null="true"/> >> > + <arg name="serial" type="uint" summary="serial of the event that >> > triggered this request"/> >> > + </request> >> > + >> > + <event name="data_offer"> >> > + <description summary="introduce a new xdg_primary_selection_offer"> >> > + Introduces a new xdg_primary_selection_offer object that may be >> > used >> > + to receive the current primary selection. Immediately following >> > this >> > + event, the new xdg_primary_selection_offer object will send >> > + xdg_primary_selection_offer.offer events to describe the offered >> > mime >> > + types. >> > + </description> >> > + <arg name="offer" type="new_id" >> > interface="zxdg_primary_selection_offer_v1"/> >> > + </event> >> > + >> > + <event name="selection"> >> > + <description summary="advertise a new primary selection"> >> > + The xdg_primary_selection_device.selection event is sent to >> > notify the >> > + client of a new primary selection. This event is sent after the >> > + xdg_primary_selection.data_offer event introducing this object, >> > and after >> > + the offer has announced its mimetypes through >> > + xdg_primary_selection_offer.offer. >> > + >> > + The data_offer is valid until a new offer or NULL is received >> > + or until the client loses keyboard focus. The client must destroy >> > the >> > + previous selection data_offer, if any, upon receiving this event. >> > + </description> >> > + <arg name="id" type="object" >> > interface="zxdg_primary_selection_offer_v1" allow-null="true"/> >> > + </event> >> > + >> > + <request name="destroy" type="destructor"> >> > + <description summary="destroy the primary selection device"> >> > + Destroy the primary selection device. >> > + </description> >> > + </request> >> > + </interface> >> > + >> > + <interface name="zxdg_primary_selection_offer_v1" version="1"> >> > + <description summary="offer to transfer primary selection contents"> >> > + A xdg_primary_selection_offer represents an offer to transfer the >> > contents >> > + of the primary selection clipboard to the client. Similar to >> > + wl_data_offer, the offer also describes the mime types that the >> > source >> > + will transferthat the >> > + data can be converted to and provides the mechanisms for >> > transferring the >> > + data directly to the client. >> > + </description> >> > + >> > + <request name="receive"> >> > + <description summary="request that the data is transferred"> >> > + To transfer the contents of the primary selection clipboard, the >> > client >> > + issues this request and indicates the mime type that it wants to >> > + receive. The transfer happens through the passed file descriptor >> > + (typically created with the pipe system call). The source client >> > writes >> > + the data in the mime type representation requested and then >> > closes the >> > + file descriptor. >> > + >> > + The receiving client reads from the read end of the pipe until >> > EOF and >> > + closes its end, at which point the transfer is complete. >> > + </description> >> > + <arg name="mime_type" type="string"/> >> > + <arg name="fd" type="fd"/> >> > + </request> >> > + >> > + <request name="destroy" type="destructor"> >> > + <description summary="destroy the primary selection offer"> >> > + Destroy the primary selection offer. >> > + </description> >> > + </request> >> > + >> > + <event name="offer"> >> > + <description summary="advertise offered mime type"> >> > + Sent immediately after creating announcing the >> > xdg_primary_selection_offer >> > + through xdg_primary_selection_device.data_offer. One event is >> > sent per >> > + offered mime type. >> > + </description> >> > + <arg name="mime_type" type="string"/> >> > + </event> >> > + </interface> >> > + >> > + <interface name="zxdg_primary_selection_source_v1" version="1"> >> > + <description summary="offer to replace the contents of the primary >> > selection"> >> > + The source side of a xdg_primary_selection_offer, it provides a way >> > to >> > + describe the offered data and respond to requests to transfer the >> > + requested contents of the primary selection clipboard. >> > + </description> >> > + >> > + <request name="offer"> >> > + <description summary="add an offered mime type"> >> > + This request adds a mime type to the set of mime types advertised >> > to >> > + targets. Can be called several times to offer multiple types. >> > + </description> >> > + <arg name="mime_type" type="string"/> >> > + </request> >> > + >> > + <request name="destroy" type="destructor"> >> > + <description summary="destroy the primary selection source"> >> > + Destroy the primary selection source. >> > + </description> >> > + </request> >> > + >> > + <event name="send"> >> > + <description summary="send the primary selection contents"> >> > + Request for the current primary selection contents from the >> > client. >> > + Send the specified mime type over the passed file descriptor, then >> > + close it. >> > + </description> >> > + <arg name="mime_type" type="string"/> >> > + <arg name="fd" type="fd"/> >> > + </event> >> > + >> > + <event name="cancelled"> >> > + <description summary="request for primary selection contents was >> > canceled"> >> > + This primary selection source is no longer valid. The client >> > should >> > + clean up and destroy this primary selection source. >> > + </description> >> > + </event> >> > + </interface> >> > +</protocol> >> > -- >> > 2.18.0 >> > >> > >> > _______________________________________________ >> > wayland-devel mailing list >> > wayland-devel@lists.freedesktop.org >> > https://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel