Introduce extended-drag protocol

Open Nick Yamane requested to merge nickdiego/wayland-protocols:extended-drag into main
Context and Motivation:

Native Wayland support is being implemented in Chromium browser and one of the last major missing features is tab/window dragging. After some research and experimentation, the conclusion is that Wayland protocol needs to be extended to enable Chromium's full tab dragging experience to be properly implemented. Further details on such study can be found in design document [1].

The proposed protocol extension aims to provide a set of features unsupported by the current Wayland core DND protocol and extensions, such as:

  1. The ability to make toplevel shell surfaces "draggable" during DND sessions;
  2. Snapping toplevel shell surfaces in and out of a the currently focused surface and make it possible to smoothly dropped into an arbitrary location of the screen (without necessarily having another client accepting such drop, as required in regular DND);
  3. Configurable options which make it possible to support a variety of use cases, including multi-client ones.
  4. The ability to detect session cancellation at client side when shell surfaces are dragged.

The protocol currently has a working implementation that should be landing soon in ChromeOS' Exo Wayland compositor [2] (the first patches already landed and others are under review) and a client using it, Chromium browser [3] and we plan to get it implemented in another major open source compositor soon (not yet decided which one exactly). There are also a few demo videos where this WIP impl can be seen in action at [4].

The motivation for this standardization effort is, besides enabling Chromium to provide its complete UX in Linux desktop environments supporting Wayland, to make it usable by other potential use cases in the community aiming to support such rich UI features.

Further explanation about the protocol and its operation in a typical use case is available in the protocol descriptor XML file.

[1] [2] [3] [4]

Edited by Nick Yamane

Merge request reports