wayland-server
was updated to 0.30:
- Most of the wayland frontend API is changed to follow the new request dispatching mechanism built around the
Dispatch
trait fromwayland-server
- Modules that provide handlers for Wayland globals now provide
DelegateDispatch
implementations, as well as macros to simplify the dispatching from your main state
- Remove
xdg-shell-unstable-v6
backwards compatibility XdgPositionerState
moved toXdgPopupState
and added toXdgRequest::NewPopup
PopupSurface::send_configure
now checks the protocol version and returns anResult
KeyboardHandle::input
filter closure now receives aKeysymHandle
instead of aKeysym
and returns aFilterResult
.PointerButtonEvent::button
now returns anOption<MouseButton>
.MouseButton
is now non-exhaustive.- Remove
Other
and addForward
andBack
variants toMouseButton
. Use the newPointerButtonEvent::button_code
in place ofOther
. GrabStartData
has been renamed toPointerGrabStartData
- The
slot
method on touch events no longer returns anOption
and multi-touch capability is thus opaque to the compositor wayland::output::Output
now is created separately from it'sGlobal
as reflected by [Output::new
] and the new [`Output::create_global] method.PointerHandle
no longer sends an implicit motion event when a grab is set,time
has been replaced by an explicitfocus
parameter in [PointerHandle::set_grab
]ToplevelSurface::send_configure
/PopupSurface::send_configure
/LayerSurface::send_configure
now always send a configure event regardless of changes and return the serial of the configure event.send_pending_configure
can be used to only send a configure event on pending changes.
- Rename
WinitInputBacked
toWinitEventLoop
. - Rename
WinitInputError
toWinitError
; WinitInputBackend
no longer implementsInputBackend
. Input events are now received from theWinitEvent::Input
variant.- All winit backend internal event types now use
WinitInput
as the backend type. WinitEventLoop::dispatch_new_events
is now used to receive someWinitEvent
s.- Added
TabletToolType::Unknown
as an option for tablet events render_texture
was removed fromFrame
, userender_texture_at
orrender_texture_from_to
instead or useGles2Renderer::render_texture
as a direct replacement.- Remove
InputBackend::dispatch_new_events
, turningInputBackend
into a definition of backend event types. Future input backends should be acalloop::EventSource
. - Remove
InputBackend::EventError
associated type as it is unneeded sincedispatch_new_events
was removed. Swapchain
does not have a generic Userdata-parameter anymore, but utilizesUserDataMap
insteadGbmBufferedSurface::next_buffer
now additionally returns the age of the bufferPresent
was merged into theX11Surface
X11Surface::buffer
now additionally returns the age of the bufferX11Surface
now has an explicitsubmit
functionX11Surface
is now multi-window capable.Renderer::clear
now expects a second argument to optionally only clear parts of the buffer/surfaceTransform::transform_size
now takes aSize
instead of twou32
Gles2Renderer
now automatically flips therender
result to account for OpenGLs coordinate systemFrame::clear
,Frame::render_texture_at
andFrame::render_texture_from_to
now have an additional damage argumentEGLNativeSurface
implementations overridingswap_buffers
now receive and additionaldamage
attribute to be used witheglSwapBuffersWithDamageEXT
if desiredEGLSurface::swap_buffers
now accepts an optionaldamage
parameterWinitGraphicsBackend
does no longer provide arender
-method and exposes itsRenderer
directly instead including new functionsbind
andsubmit
to handle swapping buffers.ImportShm
was renamed toImportMem
ImportMem
andImportDma
were split and do now have accompanying traitsImportMemWl
andImportDmaWl
to import wayland buffers.- Added
EGLSurface::get_size
EGLDisplay::get_extensions
was renamed toextensions
and now returns a&[String]
.- Added gesture input events, which are supported with the libinput backend.
xdg_activation_v1
supportwlr-layer-shell-unstable-v1
support- Added public api constants for the roles of
wl_shell_surface
,zxdg_toplevel
andxdg_toplevel
. See theshell::legacy
andshell::xdg
modules for these constants. - Whether a surface is toplevel equivalent can be determined with the new function
shell::is_toplevel_equivalent
. - Setting the parent of a toplevel surface is now possible with the
xdg::ToplevelSurface::set_parent
function. - Add support for the zxdg-foreign-v2 protocol.
- Support for
xdg_wm_base
protocol version 3 - Added the option to initialize the dmabuf global with a client filter
wayland::output::Output
now has user data attached to it and more functions to query its properties- Added a
KeyboardGrab
similar to the existingPointerGrab
wayland::output::Output
now has acurrent_scale
method to quickly retrieve its set scale.wayland::shell::wlr_layer::KeyboardInteractivity
now implementsPartialEq
andEq
.- Added
TouchHandle
for Wayland client touch support (seeSeat::get_touch
) wayland::output::Scale
was introduced to handle fractional scale values better- Support for
wl_output
global version 4 - Support for
wl_seat
global version 7 - Support for
wl_compositor
global version 5 - Support for the
wp_viewporter
protocol - Support for the
zwp_input_method_v2
protocol - Support for the
zwp_text_input_v3
protocol
- New
x11
backend to run the compositor as an X11 client. Enabled through thebackend_x11
feature. x11rb
event source integration used in anvil's XWayland implementation is now part of smithay atutils::x11rb
. Enabled through thex11rb_event_source
feature.KeyState
,MouseButton
,ButtonState
andAxis
inbackend::input
now deriveHash
.- New
DrmNode
type in drm backend. This is primarily for use a backend which needs to run as client inside another session. - The button code for a
PointerButtonEvent
may now be obtained usingPointerButtonEvent::button_code
. Renderer
now allows texture filtering methods to be set.backend::renderer
has a newutils
-module that can take care of client buffer management for you.EGLSurface::buffer_age
can be used to query the surface buffer age.GbmBufferedSurface::reset_buffers
can now be used to reset underlying buffers.- Added new
Offscreen
trait to create offscreen surfaces forRenderer
s - Added functions to
ImportMem
to upload bitmaps from memory - Added
ExportDma
trait to export framebuffers and textures into dmabufs - Added
ExportMem
trait to copy framebuffers and textures into memory - Added
multigpu
-module to the renderer, which makes handling multi-gpu setups easier! - Added
backend::renderer::utils::import_surface_tree
to be able to import buffers before rendering - Added
EGLContext::display
to allow getting the underlying display of some context. - Make
EGLContext::dmabuf_render_formats
andEGLContext::dmabuf_texture_formats
also accessible fromEGLDisplay
.
- New
desktop
module to handle window placement, tracks popups, layer surface and various rendering helpers including automatic damage-tracking! (+so much more)
Rectangle
can now also be converted from f64 to i32 variantsRectangle::contains_rect
can be used to check if a rectangle is contained within anotherCoordinate
is now part of the public api, so it can be used for coordinate agnositic functions outside of the utils module or even out-of-tree
Multicache::has()
now correctly does what is expected of itxdg_shell
had an issue where it was possible that configured state gets overwritten before it was acked/committed.wl_keyboard
rewind thekeymap
file before passing it to the clientwl_shm
properly validates parameters when creating awl_buffer
.ServerDnDGrab
andDnDGrab
now correctly send data deviceleave
event on button release- Client are now allowed to reassign the same role to a surface
xdg_output
now applies the output transforms to the reported logical size
- EGLBufferReader now checks if buffers are alive before using them.
- LibSeat no longer panics on seat disable event.
- X11 backend will report an error when trying to present a dmabuf fails.
- Anvil now implements the x11 backend in smithay. Run by passing
--x11
into the arguments when launching. - Passing
ANVIL_MUTEX_LOG
in environment variables now uses the slowerMutex
logging drain. - Only toplevel surfaces now get implicit keyboard focus
- Fix popup drawing for fullscreen windows
Large parts of Smithay were changed with numerous API changes. It is thus recommended to approach version 0.3 as if it was a new crate altogether compared to 0.2.
The most notable changes are:
- Deep refactor of the graphics backends around a workflows centered on allocating graphics buffers, and a Gles2-based renderer abstraction is provided.
- Support for DRM atomic modesetting as well as client-provided DMABUF
- Most backends are now
calloop
event sources generating events. The recommended organization for your smithay-based compositor is thus to centralize most of your logic on a global state struct, and delegate event handling to it via the shared data mechanism ofcalloop
. Most of the callbacks you provide to Smithay are given mutable access to this shared data. - The
wayland::compositor
handling logic now automatically handles state tracking and delayed commit for wayland surfaces.
Many thanks to the new contributors to Smithay, who contributed the following:
- Support for
libseat
as a session backend, by @PolyMeilex - Support for graphics tablets via the
tablet
protocol extension, by @PolyMeilex - Support for running Smithay on
aarch64
architectures, by @cmeissl - A rework of the
xdg-shell
handlers to better fit the protocol logic and correctly track configure events, by @cmeissl - Basic Xwayland support, by @psychon
- [Breaking] Upgrade to wayland-rs 0.21
- [Breaking] Moving the public dependencies to a
reexports
module - Migrate the codebase to Rust 2018
- [Breaking] WinitBackend: Upgrade to winit 0.18
- [Breaking] Global refactor of the DRM & Session backends
- [Breaking] Restructuration of the backends around the
calloop
event-loop
- Basic XWayland support
- Data device & Drag'n'Drop support
- Custom client pointers support
- Low-level handling routines for several wayland globals:
wayland::shm
handleswl_shm
wayland::compositor
handleswl_compositor
andwl_subcompositor
wayland::shell
handleswl_shell
andxdg_shell
wayland::seat
handleswl_seat
wayland::output
handleswl_output
- Winit backend (EGL context & input)
- DRM backend
- libinput backend
- glium integration