1. 1. Introduction
    1. 1.1. High-level Wayland design
    2. 1.2. Goals & target audience
    3. 1.3. What's in the package
  2. 2. Protocol design
    1. 2.1. Wire protocol basics
    2. 2.2. Interfaces, requests, events
    3. 2.3. The high-level protocol
    4. 2.4. Protocol design patterns
  3. 3. libwayland in depth
    1. 3.1. wayland-util primitives
    2. 3.2. wayland-scanner
    3. 3.3. Proxies & resources
    4. 3.4. Interfaces & listeners
  4. 4. The Wayland display
    1. 4.1. Creating a display
    2. 4.2. Incorporating an event loop
  5. 5. Globals & the registry
    1. 5.1. Binding to globals
    2. 5.2. Registering globals
  6. 6. Buffers & surfaces
    1. 6.1. Using wl_compositor
    2. 6.2. Shared memory buffers
    3. 6.3. Linux dmabuf
    4. 6.4. Surface roles
  7. 7. XDG shell basics
    1. 7.1. XDG surfaces
    2. 7.2. Application windows
    3. 7.3. Extended example code
  8. 8. Surfaces in depth
    1. 8.1. Surface lifecycle
    2. 8.2. Frame callbacks
    3. 8.3. Damaging surfaces
    4. 8.4. Surface regions
    5. 8.5. Subsurfaces
    6. 8.6. High density surfaces (HiDPI)
  9. 9. Seats: Handling input
    1. 9.1. Pointer input
    2. 9.2. XKB, briefly
    3. 9.3. Keyboard input
    4. 9.4. Touch input
    5. 9.5. Expanding our example code
  10. 10. XDG shell in depth
    1. 10.1. Configuration & lifecycle
    2. 10.2. Popups & parent windows
    3. 10.3. Interactive move and resize
    4. 10.4. Positioners
  11. 11. Clipboard access
    1. 11.1. Data offers
    2. 11.2. Drag & drop
  12. 12. Protocol extensions
    1. 12.1. Accurate timing
    2. 12.2. Pointer constraints
    3. 12.3. Extended clipboard support
    4. 12.4. Desktop shell components
    5. 12.5. Miscellaneous extensions
    6. 12.6. Writing new extensions
  13. Acknowledgements

The Wayland Protocol

Accurate timing