Core Wayland window system code and protocol
Find a file
Kristian Høgsberg 385fe30e8b client: Add wl_event_queue for multi-thread dispatching
This introduces wl_event_queue, which is what will make multi-threaded
wayland clients possible and useful.  The driving use case is that of a
GL rendering thread that renders and calls eglSwapBuffer independently of
a "main thread" that owns the wl_display and handles input events and
everything else.  In general, the EGL and GL APIs have a threading model
that requires the wayland client library to be usable from several threads.
Finally, the current callback model gets into trouble even in a single
threaded scenario: if we have to block in eglSwapBuffers, we may end up
doing unrelated callbacks from within EGL.

The wl_event_queue mechanism lets the application (or middleware such as
EGL or toolkits) assign a proxy to an event queue.  Only events from objects
associated with the queue will be put in the queue, and conversely,
events from objects associated with the queue will not be queue up anywhere
else.  The wl_display struct has a built-in event queue, which is considered
the main and default event queue.  New proxies are associated with the
same queue as the object that created them (either the object that a
request with a new-id argument was sent to or the object that sent an
event with a new-id argument).  A proxy can be moved to a different event
queue by calling wl_proxy_set_queue().

A subsystem, such as EGL, will then create its own event queue and associate
the objects it expects to receive events from with that queue.  If EGL
needs to block and wait for a certain event, it can keep dispatching event
from its queue until that events comes in.  This wont call out to unrelated
code with an EGL lock held.  Similarly, we don't risk the main thread
handling an event from an EGL object and then calling into EGL from a
different thread without the lock held.
2012-10-10 20:59:00 -04:00
cursor Ensure cursor_data.c is included in distribution tarballs 2012-10-09 23:42:52 -04:00
doc doc: Remove Shared Object Cache section 2012-10-09 22:45:45 -04:00
m4 Clean up .gitignore files 2010-11-11 20:11:27 -05:00
protocol wayland: Fix typos 2012-10-09 22:45:48 -04:00
spec doc: move documentation from the tex file to docbook 2012-03-28 23:04:25 -04:00
src client: Add wl_event_queue for multi-thread dispatching 2012-10-10 20:59:00 -04:00
tests Change filedescriptor API to be thread safe 2012-10-10 20:59:00 -04:00
.gitignore man: add man-page infrastructure 2012-09-25 11:02:52 -04:00
autogen.sh Update autotools configuration 2010-11-06 21:04:03 -04:00
configure.ac man: add man-page infrastructure 2012-09-25 11:02:52 -04:00
COPYING Add COPYING 2012-04-25 10:12:21 -04:00
Makefile.am Introduce libwayland-cursor, a cursor helper library 2012-05-22 15:20:13 -04:00
README README: Update 2012-07-20 12:20:20 -04:00
TODO protocol: Add transform argument to wl_output.geometry event 2012-07-22 15:50:37 -04:00
wayland-scanner.m4.in Split into a core repository that only holds the core Wayland libraries 2011-02-14 22:21:13 -05:00
wayland-scanner.mk Split into a core repository that only holds the core Wayland libraries 2011-02-14 22:21:13 -05:00

What is Wayland

Wayland is a project to define a protocol for a compositor to talk to
its clients as well as a library implementation of the protocol.  The
compositor can be a standalone display server running on Linux kernel
modesetting and evdev input devices, an X applications, or a wayland
client itself.  The clients can be traditional applications, X servers
(rootless or fullscreen) or other display servers.

The wayland protocol is essentially only about input handling and
buffer management.  The compositor receives input events and forwards
them to the relevant client.  The clients creates buffers and renders
into them and notifies the compositor when it needs to redraw.  The
protocol also handles drag and drop, selections, window management and
other interactions that must go through the compositor.  However, the
protocol does not handle rendering, which is one of the features that
makes wayland so simple.  All clients are expected to handle rendering
themselves, typically through cairo or OpenGL.

The weston compositor is a reference implementation of a wayland
compositor and the weston repository also includes a few example
clients clients.

Building the wayland libraries is fairly simple, aside from libffi,
they don't have many dependencies:

    $ git clone git://anongit.freedesktop.org/wayland/wayland
    $ cd wayland
    $ ./autogen.sh --prefix=PREFIX
    $ make
    $ make install

where PREFIX is where you want to install the libraries.  See
http://wayland.freedesktop.org for more complete build instructions
for wayland, weston, xwayland and various toolkits.