What’s New in Wayland 1.10

Wayland 1.10 introduces a larger range of new functionality than what’s been typical in recent Wayland releases; this is partly due to the longer development period because of the holidays and other end of the year activities. More importantly, Wayland support is being actively refined for many desktop environments, applications, and devices and we’ve seen better engagement from the wider community as more people have shared their ideas and development efforts. We’re beginning to see the fruits of these collaborations.

The release date for Wayland 1.10 is set for February 16, 2016, and I’d like to use this article to describe some of the new features and changes.

Wayland Changes in 1.10

First, let’s take a look at some of the new functionality in Wayland 1.10:

  • The Wayland API can now use Drag and drop actions to facilitate negotiation of content type when dragging between a source and destination. Additionally, a new provision allows the completion (or cancellation) of the drag action to be communicated back to the source. It’s designed so that the drag destination is given more control over deciding which action to use; this is different than the XDND protocol in X11.
  • Pointer events can now be grouped together in Frame events; this enables things like diagonal scrolling (which combines horizontal and vertical scroll events). New events have been added to more precisely track wheel click counts, termination of scroll sequences, and how axis events were generated.
  • wl_surface.damage_buffer is a new buffer damage request that provides applications with a more convenient way to communicate the portions of a surface that need to be re-rendered.
  • There are now provisions for deleting wl_seat objects. This is useful in compositors that handle multiple seats for things like remote desktops.
  • Shared memory buffers now handle reference counting, allowing compositors to delay the release of memory pools until they’re no longer in use. Enlightenment uses this for doing asynchronous rendering.
  • Specific version numbers can now be associated with protocol objects client-side. For backwards compatibility, version 0 is recognized as indicating an unversioned API.
  • Socket file descriptors can be set/get using new API’s that have been provided. Wayland servers use this to communicate with their clients. This functionality can be used in SELinux or SMACK environments for improved security.
  • This release introduces the enum and bitfield attributes which allow protocol designers to refer to the specific enum that is expected in an argument. Enums can also be specified as bitfields, as opposed to just ordinary numerical sequences.
  • The are quite a few new clarifications to protocols and API; many of these arose as various desktop environments implemented their own Wayland support.
  • Finally, of course a rich assortment of bug fixes, code cleanups, and test code enhancements are included. Of particular note, the scanner now validates the protocol XML using a wayland.dtd.

The official release announcement for Wayland 1.10 can be found here.

Weston Changes for 1.10

Weston is the reference implementation for the Wayland protocol, so many of the changes are to provide example support for the new Wayland protocol APIs. This includes the new drag and drop actions, new frame and axis events, and buffer co-ordinates for surface damage. Touch input support has been added as well.

In addition, the following items have been added:

  • A V4L2 (Video for Linux 2) client is now included for demonstrating a way to retrieve video frames from V4L2 devices like dmabuf. YUV dmabuf formats are also supported now.
  • The IVI shell has improved multi screen functionality and now supports a variety of modes including side-by-side, fullscreen, tiled, and random.
  • New configuration options in weston.ini make it easier to use and  test with Weston. For example, “vt-switching” enables/disables Ctrl-Alt-fn key combos. “allow-zap” enables/disables Ctrl-Alt-Backspace from killing the server.
  • Systemd notification support can be enabled by the –enable-systemd-notify configuration flag. This permits things like establishing a watchdog that can restart Weston if it crashes.
  • Weston now requires the recently created wayland-protocols package to be installed. Wayland-protocols provides a collection of proposed, experimental, and/or unstable protocols for use with Wayland. These were included in Weston in the past, but have been split out to make it easier for other compositor implementations to contribute to and track them without having  Weston as a dependency or needing to provide a Weston reference implementation before they can be shared.

There’s probably many more features included which I’ve overlooked. Of course, this release also brings the usual heap of bug fixes, leak plugging, code refactoring, documentation, and test improvements.

The official release announcement for Weston 1.10 can be found here.

Looking Forward

What should we expect to come in 1.11? With 1.10 bringing in such a wealth of new functionality, and with this next development cycle being shorter, bugfixing may well be a primary focus for 1.11.

However, several features are under way that seem well poised to be included, depending on how rapidly they proceed through the review process. A primary selection protocol RFC offers the X11 “middle-button paste” copy/paste functionality. A text input protocol has been proposed which will improve text composition and control of input methods. A proposed (but controversial) authorizer protocol promises a mechanism to let users decide whether or not a client can be trusted. Refinements for clipboards, tooltips, screensaver inhibition, and popups will continue to sand the rough edges off the desktop use case. On the input side, tablet support is getting attention, including the recent addition of libwacom as a dependency for libinput.

Author: Bryce Harrington

Bryce is a founder and developer of the Inkscape project, but began his career in the aerospace industry as a spacecraft propulsions engineer.