So... It's been 3.5 years since the last release, but by no means has the project lost its steam, it's quite the opposite, it's more lively than ever. The reason for the release gap is simply the fact that we all got used to using cargo git dependencies, for the constant stream of latest and greatest features.
Wayland-rs 0.30
The big highlight of 0.4 is the development of wayland-rs 0.30 by @elinorbgr followed by the porting of Smithay to it by @PolyMeilex @i509VCB and @Drakulix which changed the design direction of the project significantly and opened a lot of new possibilities when it comes to Smithay's API design.
Desktop & Rendering Abstractions
Introduced by @Drakulix desktop abstractions solve a lot of the busy work needed for a typical desktop shell, they introduce 2D Spaces that elements like TopLevels and Layers can be mapped onto for easier tracking of popups, z-order and most importantly, full damage tracking via RenderElements.
As a cherry on top, you can combine this with the new DrmCompositor abstraction by @cmeissl to achieve proper DRM Planes support and fully leverage your hardware's capabilities.
New Protocols
- WLR Layer Shell protocol by @PolyMeilex in #354
- XDG activation protocol by @PolyMeilex in #358
- XDG decoration protocol by @PolyMeilex in #394
- Add wl-touch support by @chrisduerr in #499
- Add support for viewporter by @cmeissl in #588
- Add support for the wp_primary_selection protocol by @Drakulix in #670
- Input method and text input protocols by @rano-oss in #443
- KDE server-decoration protocol by @chrisduerr in #410
- Shortcuts inhibit protocol by @PolyMeilex in #687
- Virtual keyboard protocol by @rano-oss in #720
- wp presentation protocol by @cmeissl in #794
- Support fractional scale by @cmeissl in #840
- Relative pointer protocol by @ids1024 in #757
- XDG shell versions 3,4,5 by @cmeissl
- XDG shell version 6 by @PolyMeilex in #1130
- WpContentType protocol by @PolyMeilex in #1011
zwp_idle_inhibit
protocol by @chrisduerr in #1004- Security Context protocol by @ids1024 in #1106
- zwp_pointer_gestures_v1 protocol by @YaLTeR in #1114
- Pointer constraints protocol by @ids1024 in #872
- drm leasing by @Drakulix in #1132
- cursor_shape_v1 protocol by @kchibisov in #1154
- wlr-data-control protocol by @kchibisov in #1151
- ext-session-lock protocol by @YaLTeR in #1166
- High res scrolling support (
wl_pointer
version 8) by @ids1024 in #1246 - Implement
axis_relative_direction
(wl_pointer
version 9) by @ids1024 in #1253 - ext-idle-notify protocol by @YaLTeR in #1320
- XdgForeign protocol by @PolyMeilex in #1342
- XWayland shell protocol by @colinmarc in #1351
- wp alpha modifier protocol by @PolyMeilex in #1426
- XDG Dialog protocol by @PolyMeilex in #1389
- foreign_toplevel_list protocol by @PolyMeilex in #1513
- xdg_toplevel_icon protocol by @PolyMeilex in #1512
- linux-drm-syncobj-v1 protocol by @ids1024 in #1356
- xdg_system_bell protocol by @PolyMeilex in #1566
- wl_shm version 2 by @PolyMeilex in #1532
- fifo-v1 and commit-timing-v1 protocol by @cmeissl in #1588
Backend changes
- X11 backend by @i509VCB in #371
- Desktop abstractions by @Drakulix in #423
- Popup grabs for desktop abstraction by @cmeissl in #467
- Add support for GPUs without instanced rendering by @chrisduerr in #495
- Introduce MultiGPU renderer by @Drakulix in #503
- Feature/opaque regions by @cmeissl in #659
- The Vulkan allocator by @i509VCB in #614
- input: Split off input-handling and wayland-specific seat handling by @Drakulix in #689
- renderer: Add glow integration by @Drakulix in #744
- X11 wm in smithay by @Drakulix in #570
- gles2: custom shaders by @Drakulix in #901
- DRM planes with DrmCompositor by @cmeissl in #760
- Introduce DRM abstractions crate by @PolyMeilex in #924
- Surface Transactions by @Drakulix in #1009
- Perf optimizations by @cmeissl in #1086 & #1128
- Feature/software renderer by @cmeissl in #1228
- Perf/tiled renderers by @cmeissl in #1449
- libdisplay-info integration by @cmeissl in #1522
- DrmOutputManager by @cmeissl in #1576
And many more changes that would take to long to list: v0.3.0...v0.4.0