Starting from 0.30.0 and onwards, the crate versions are no longer fixed together. Each crate now has its own changelog in their respective directories.
- [client] Fix a case of possible dereferencing of nullptr
- [server] Introduce
Client::credentials()
to allow retrieving the credentials of client socket (implementswl_client_get_credentials
). - [protocols] KDE's
server-decoration
protocol was added to misc module. - [protocols] Introduce misc/input-method-unstable-v2
- [protocols] Update wayland-protocols to 1.21.
- [protocols] Add new feature to enable staging protocols.
- [protocols]
xdg-activation-v1
is now generated under staging protocols feature.
A few protocols broke in the rust bindings but not in the C-api. A few of these changes to the generated bindings due to the protocol now properly declaring bitsets and enums include:
- Events and Requests now taking a bitflag struct or enum instead of a raw
u32
. - Bitflags now properly declared as a bitflag struct vs the old method which involved some enums and converting the enums to
u32
.
Effected protocols by above changes include:
fullscreen-shell
linux-dmabuf-v1
pointer-constraints-v1
pointer-gestures-v1
presentation-time
text-input-v1
text-input-v3
- [protocols] Update
wlr-protocols
to commitd1598e82240d6e8ca57729495a94d4e11d222033
, updatingwlr-layer-shell
to version 4. - [client] Added the possibility to handle attributes for
event_enum!
macro. - [server] Added the possibility to handle attributes for
request_enum!
macro. - [server] Added
PartialEq
implementation forClient
structure.
- [client] Allow invocations of
event_enum!
without prior imports withuse
- [sys] Update
dlib
dependency to v0.5 to match new macro fornat. Thedlopen
feature no longer affects other crates usingdlib
.
- [client] Unset WAYLAND_SOCKET when we use the socket
- [client] Correctly cleanup internal state on object destruction when usin the system lib backend
- [cursor] Fix the algorithm for choosing cursor icons to match libwayland-cursor.
- [server] Introduce
Client::get_resource()
to retrieve a resource from its protocol id and its client
- [client] Properly print protocol errors to stderr when they occur on the rust backend
- [cursor] Account for both width and height when picking nearest cursor.
- [cursor] Fix crash on systems without
memfd
.
- [protocols] Update
wlr-protocols
to commit992841c2aa731ab02774c9bf8c6cda9f24dfbf10
, updatingwlr-foreign-toplevel-management
to version 3.
- [wayland-client] Update core protocol to 1.18.
- [wayland-server] Update core protocol to 1.18.
- [client] Parsing or protocol errors encountered when reading events are now written to stderr,
rather than being swallowed into a generic
EPROTO
.
- [protocols] Update
wayland-protocols
to version 1.20. Some arguments are replaced with their correct enum type (instead of a plainu32
), making it a breaking change.
- [client] Clone implementation for
QueueToken
- [client] implement
From<Main<I: Interface>>
impl forAttached<I: Interface>
- [client] std::fmt::Debug implementation for
Proxy
,Attached
,Main
- [server] std::fmt::Debug implementation for
Resource
,Main
- [scanner] std::fmt::Debug implementation for
Event
andRequest
- [protocols] Update
wlr-protocols
to commit16a28885bc92869d8e589e725e7bf018432c47e4
. Adding thewlr-output-management
,wlr-output-power-management
andwlr-virtual-pointer
protocol extensions.
- [cursor] Fix crash when providing extra large or 0 sizes for cursor theme
- [sys] Use pkg-config for compile time linking (fixes FreeBSD build without dlopen)
- [scanner] Force the use of
proc_macro2
fallback implementation, so that the scanner doesn't panic when ran withRUSTFLAGS="-Cpanic=abort"
. - [client] Fix a crash when receiving an event with a dead object argument (can happen due to protocol races).
- [cursor] Update
xcursor
to0.3
, fixing a few cursor-related bugs.
- [client] Fix a deadlock when dispatching & reading event queues conccurently from different threads when using the rust implementation of the protocol.
- [cursor] Don't panic if
load_cursor
fails to find the requested cursor - [cursor] Fix buffer content endianness
- [cursor] Use
xcursor
for parsing cursor files
- [cursor] Fix FreeBSD build
Technical release due to crates.io issues.
- [cursor] Properly assign internal buffers to filters.
- [cursor] Introduce helper functions
Cursor::image_count()
,CursorImageBuffer::delay
,CursorImageBuffer::hotspot()
andCursorImageBuffer::dimensions()
to access metadata of cursor images.
- The minimum supported Rust version is now 1.41.0
wayland-cursor
is now fully implemented in Rust
- [client] When using the
use_system_lib
feature, track the lifetime of theDisplay
so that attempting to send a request after the connection is dropped results in a noop instead of aSIGSEGV
.
- [client/server] Introduce the
DispatchData
mechanism, allowing global state to be shared with the filters and callbaks during an event dispatch. - [scanner] Use
#[non_exhaustive]
on protocol-generated enums to replace the__nonexhaustive
hidden variant - [client] Rename
EventQueue::get_token
toEventQueue::token
- [client] Introduce
EventQueue::display()
to access theDisplay
from anEventQueue
- [cursor] The types of the wayland-cursor library are no longer
Send
(they should never have been) - [server] The globals-creation APIs now take a
Filter
, as the rest of the callbacks of the crate.
- [client] The
attach()
method ofProxy<_>
and thedetach()
method ofAttached<_>
now takeself
by reference instead of by value, allowing the creation of new attached/detached proxy handles without requiring ownership - [commons] Carefully handle
Drop
types in the thread-aware containers.
- [protocols] Update wayland-protocols to
82d4c152a5163fc39c6c1fbf3b27578449d6be8e
(includes fixes toxdg_shell
enums) - [protocols] Update wlr-protocols to
67abc798b03f3b4f4691f3307c9ca86fa6aa16ed
- Update
nix
dependency to0.17
- [client] Add
get_connection_fd()
toDisplay
as well asEventQueue
. - [client] Bugfix: remove a spurious panic when using the
use_system_lib
feature.
- [client/server] The implementations system is replaced by a more versatile
Filter
API, which allows registering more than one wayland object to the same callback - [client/server] Introduction of the
Main<I>
(andAttached<I>
client-side) types, for type-system-level control of which operation on objects can or can not be done in a threadsafe maneer - [client/server] Replace the user data system with an
UserData
type, which is a type-generic container that can only be set once, and can store non-threadsafe data by preventing access to it from the wrong thread - [client] Creating a
Display
no longer automatically create anEventQueue
with it, you'll need to create it manually and assign theWlDisplay
object to it to create your registry - [client/server] the
native_lib
feature is renamed touse_system_lib
to be more explicit - [client] the
cursor
andegl
features are split into their own crates:wayland-egl
andwayland-cursor
- [server] All dependencies on
calloop
are now removed,wayland-server
now only exposes adispatch(..)
andget_poll_fd()
method, that you are responsible for integrating into your event loop. - [commons] Use
smallvec
to store the arguments of messages having 4 or less, drastically reducing the number of allocations when using the rust implementation of the protocol.
- [client/server] Make
NewProxy/NewResource::implement_dummy()
threadsafe. - [client/server] Add new
NewProxy/NewResource::implement*_user_data_threadsafe()
functions to mix thread unsafe implementations with threadsafe user data.
- Update
nix
dependency to 0.14
- [scanner] Added
generate_code_with_destructor_events
allowing to patch the protocol file by specifying that some events are destructors.
- [commons] Added
UserData::get_mut
andUserDataMap::get_mut
- [server] Unmanaged resources (when using
native_lib
) are now correctly considered alive rather than dead
nix
to 0.13
- Minimize the scope of the
native_lib
features towayland-client
andwayland-server
. The code generated bywayland-scanner
is now independent of this feature, makingwayland-protocols
also independent of it, and avoiding it to pollute dependency trees in non-trivial ways.
- [protocols] Update
wlr-protocols
(data-control
version 2).
- [client] Fix a potential race when the client destroys an object after pending events for it have already been queued in the event queue
- [client] Expose
Display::protocol_error()
to get the details of a protocol error that occured. - [client] Don't try to connect to
wayland-0
ifWAYLAND_DISPLAY
is not set, this is a bad legacy practice which can cause clients to spawn in the wrong environment. - [client]
Display
can now be cloned and sent accross threads as nothing prevents it
- [scanner] Generate
EventHandler
andRequestHandler
traits for trait-based event and request handling (as opposed to manually matching on enums). - Breaking [client/server] Change
NewProxy/NewRequest::implement()
to accept a handler struct which implements the correspondingEventHandler/RequestHandler
trait. - [client/server] Introduce
NewProxy/NewRequest::implement_closure()
which behaves like the previousNewProxy/NewRequest::implement()
andNewProxy/NewRequest::implement_dummy()
which adds an empty implementation. - Breaking [client/server]
implement()
method will now runtime-track which thread it can be called on, making it safe to use non-Send
implementation.implement_nonsend()
is removed as being non-Send
is now the default.implement_threadsafe()
is added for when a threadsafe impl is needed. - Breaking [server] When the
native_lib
cargo feature is active, none of the types of the server crate are threadsafe, as the underlying C lib actually never supported it. The rust implementation remains threadsafe. - Breaking [client/server]
Proxy<I>
andResource<I>
are now wrapped in their correspondingI
objects. AllRequestsTrait
traits were removed and methods for sending requests and events are now part of theI
objects themselves. This means that it is no longer needed to import all necessaryRequestsTrait
traits into scope and deal with their name clashes. This also means that a lot ofProxy<I>
andResource<I>
types were replaced with justI
. To convert betweenProxy/Resource<I>
andI
,From
implementations are provided (use.into()
), as well as anAsRef<Proxy/Resource<I>>
implementation forI
. - Breaking [client/server/commons]
AnonymousObject
was moved out ofwayland-commons
intowayland-client
andwayland-server
. This is to accommodate the design change above. - [scanner] Fixed a number of cases where invalid Rust code would be generated if variable or method names in the protocol were Rust keywords.
- [commons] Properly close FDs we dup-ed after sending them to the server, to avoid leaking open FDs.
- [commons/client] Introduce message iterators and message sinks, allowing to opt-in into an iterator-based handling of messages.
- [client/server] Fix handling of messages & ID receycling in races around object destruction,
which could cause
wayland-client
to unexpectedly panic. - Breaking [client/server] Update the core protocol to 1.16
- [protocols] Introduce misc/gtk-primary-selection
- Breaking [client] Lifted the thread-safety bound on
GlobalManager
. This means that the closure given toGlobalManager::new_with_cb()
no longer needs to beSend
. - [client] Added an explicit
.expect()
to binding in theglobal_filter!()
macro. This gets rid of the warning when usingglobal_filter!()
. - [client/server]
WAYLAND_DEBUG
output will now be directed to stderr (as it should have been from the start). - [scanner] Generate
__nonexaustive
variants to protocol enums to match semver guarantees of protocols - [client] replace
GlobalManager::instantiate_auto
withGlobalManager::instanciate_range
- [client/server] Check that versions of messages are correctly respected on objects
- [commons] Fix incorrect number of server-side ids when using the rust implementation
- [protocols] Update wlroots-protocols.
- Implement
std::error::Error
for public error types in all crates - [scanner] Generate constants in each interface module to expose the minimum version of each request and event.
- [client] Undo protocol update which was a breakind change
- [sys] Fix dependencies specification
- Update
mio
dependency - [server] Fix some leaks when dropping the display when using the rust implementation
- [protocols] Update wayland-protocols and wlroots-protocols.
- [protocols] Only depend on
wayland-sys
ifnative_lib
is set - [server] Resources are now properly marked as dead during client cleanup
- [sys] Introduce
wl_display_destroy_clients
in server-side bindings - [server] Properly cleanup clients when dropping
WlDisplay
when usingnative_lib
.
- [server] Properly cleanup clients when dropping
WlDisplay
when usingnative_lib
.
- Dependencies updates
- [protocols] Add bindings to wlr-protocols
- [client & server] Support calloop 0.4 as well as 0.3
- [client] Introduce
Proxy::send_constructor
allowing the sending of a message creating a new object atomically. This solves races when creating objects from two threads concurrently (#206). Also, this simplifies the implementation ofwayland-scanner
, removing some unsafe code from it. - [client] Unmanaged proxies (when using
native_lib
) are now correctly considered alive rather than dead
- [server] When using
native_lib
, only attempt to filter globals that are managed by the rust lib.
- [protocols] Remove support for wayland-wall, which has been discontinued.
- [client] Add
Display::get_display_ptr()
to differentiate between the wrapper and the actualwl_display
- [client] Rework user-data mechanism to introduce type-safety
- [server] Rework
Resource
user-data mechanism to introduce type-safety - [server] Implement global filtering capabilities, to selectively advertise globals to clients.
- Breaking: this bumps the minimal version of the C libraries to 1.13.0
- [server] Breaking: migrate the event loop logic to using
calloop
rather than our own - [client] Add the
eventloop
cargo feature which providescalloop
integration forEventQueue
- Complete refactor of the library to integrate a pure rust implementation of the protocol,
controlled by the
native_lib
switch cargo feature
- [scanner] Fixed
*mut_
typo when generating code for nullable array arguments - [protocols] Integrate
xdg-decoration
protocol to replace KDE's decoration protocol. - [client]
Proxy
now implementsPartialEq
andEq
- [server]
Resource
now implementsPartialEq
andEq
- [client] Fix regression from previous release where
Display
was no longerSend
andSync
.
- [client] Allow the creation of a
Display
from a foreignwl_display
- [protocols] Expose generated C interfaces for protocol interop
- [protocols] Update wayland-protocols to 1.14
- [client/server] Use
Clone
trait rather than inherent method forclone()
. - [client] GlobalManager is now
Clone
.
- [client/server] Bugfix: Actually destroy the proxy/resource when sending a destructor message.
- [client] Expose
ConnectError
which should have been public from start.
- [client] Fix a typo in the name of
instantiate_*
methods ofGlobalManager
. Old names are kept for backward compatibility but marked as deprecated.
- [client] Check availability of library in
Display::connect_to_env
- [protocols] Tweak cargo features to avoid always pulling both wayland-client and wayland-server.
- [server] Add methods for manual client management
- [server] Add a workaround in
Resource
definition to avoid rust-lang/rust#50153
- Breaking Complete rework of the libraries, basically everything is changed.
- [scanner] All objects are implementable (except display), as it is required to properly setup destructors.
- Breaking [server] Return the implementation data when the creation of an event source fails
- [server] Add
with_idata
to event sources to access idata without removing the event source - Breaking [server] Move common event source functions into new
EventSource
trait
- [sys] Update lazy_static dependency to 1.0
- [protocols] Add KDE's server decoration protocol
- [server] Add a
ptr()
method toDisplay
for ffi purpose
- [protocols] XDG Shell is now stable
- [server] Move
register_global
toEventLoopHandle
- [server] Add idle event sources
- [sys] More robust loading of wayland-egl and wayland-cursor (failed on ubuntu 17.04)
- [protocols] Rework internal structure to reflect versionning of unstable protocols (breaking change for unstable protocols)
- [protocols] Add the wayland-wall protocol collection.
- [client] No longer auto-close the connexion on
WlDisplay
drop (this was unsafe)
- [scanner] Bugfix: properly destroy implementation data when a destructor method is called.
- [server] Bugfix: don't destroy ID of Timer and Signal event sources on drop
- [server] Event sources now return their ID on
destroy()
- [scanner] Update xml-rs dependency to 0.7
- [client] Add
EnvHandler::clone_inner()
- [client] Fields of
EnvNotify
were mistakenly private.
- [client] Add
EnvHandler::init_with_notify()
to still be notified about global events when usingEnvHandler
. - [client/server] Externalise state logic to crate
token_store
- Breaking change: Update bitflags dependency to 1.0. Generated code for protocols will now have bitflags values as associated constants to these bitflags structs.
- [server] Update nix dependency to 0.9
- [server] Add
Resource::same_client_as(..)
for checking if two resources are from the same client.
- [server] Correct some forgotten stuff in the previous release
- Breaking change: large rework of the event loops / event queues to a new architecture separating logic from data, helping data-sharing between different implementations in a same event loop/queue.
- Breaking change: event loops / event queues are no longer
Send
, and as such can accept non-Send
data. It is still possible to directly create them in different threads, as theWlDisplay
isSync
.
- [sys] Print debug msg only when the
WAYLAND_RS_DEBUG
env variable is set - [client/server] Allow removal of handlers from event queues or event loops
- [server] Fix wrong logic in FD event source causing spurious errors
- [sys] Also try to load libwayland-client.so.0 and libwayland-server.so.0
- [scanner] Normalize whitespaces in doc summary (fixes wayland-protocols 0.9.8)
- The
declare_handler!(..)
macros can now handle generic types with trait bounds - [sys] Implement the
wl_signal_*
functions - [sys] Don't panic if the .so versions are too old and missing symbols
- [protocols] Update to wayland-protocols 1.8
- [scanner] Fix objects not being properly destroyed after calling destructor requests
- [protocols] Remove the
nightly
feature, now that rustc'sstatic_recursion
is stable
- Migrate the repository to https://github.com/smithay
- [client] Add a method to create
WlEglSurface
from a rawwl_surface
ptr - [client]
WlDisplay::get_fs
is unsafe as it should always have been
- [server] Fix a memory corruption in global registration
- [scanner] Fix a null-check leading to segfaults
- [server] Bugfix previous release...
- [server] Fix a bug of register-related functions leading to resources not being properly recognized. Thanks @fangyuanziti.
- [client] Proxy objects are now cloneable via
Proxy
methods - [client] impl Debug for RequestResult
- [server] Server objects are noe cloneable via
Resource
methods - [server] impl Debug for EventResult
- [breaking-change] Be more conservative regarding the use of
user_data
from the C libraries. This makes us compatible with manipulation of wayland objects managed by other libraries.wayland-client
andwayland-server
will not attempt to manage objects already managed by something else.
- [server] Correct secondary event source handlers API
- Robustify macros regarding shadowing of
Result
(thanks to @Daggerbot) - [sys] Fix typos & errors in symbol names (thanks to @jplatte and @drakulix for spotting them)
- [server] Add support for secondary event sources and multiple event loops
- Add
resource_is_registered
to check if a given resource is registered to a given handler - Add 'Resource::post_error()` to send protocol errors
#[derive(PartialEq)]
for enums
- Add a missing public import of
Destroy
trait
- [breaking change] Don't generate result-like return type on proxies that cannot be destroyed
- [breaking change] Correct argument types to take optionnal
destructor_func_t
- Add a destructor mechanism for resources
- Add a raw user-data mechanism
- Improve a client example (thanks @ideasman42)
- Update metadata of the crates on crates.io
- Properly handle conflicts in bitflags names
- Creation of the crate
- expose interface structs for extention protocols integration
- Add
declare_delegating_handler!(..)
macro for delegading an handler impl to a field of the handler struct - update
lazy_static
dependency
- Add methods to add socket to the server's event loop
- Concurent read API ( EventQueue::prepare_read() and WlDisplay::get_fd() )
- Fix multi-queue dispatching (events on other queue than default were not dispatched)
- Event queues and event loops are now
Send
and require handlers to beSend
- the
cursor
api is nowSend
- fix a typo in
declare_handler!
macro ( #70 from @fangyuanziti )
- Proxies and Resources are nor
Send+Sync
as they should be equals
method to chek if two handles refer to the same wayland objectInit
trait allowing handlers to be initialized after insertion in an event queue/loop
egl
modules binding tolibwayland-egl
providing OpenGL supportcursor
module binding tolibwayland-cursor
giving access to system's cursor theme
Complete rewrite of the libs to a new architecture.
Addition of wayland-server to the libs.
Add Iterator impl to EventIterator.
Fix premature 0.6.0 release
- Add missing ReadEventsGuard public import
- Hide internals details
- Polish the EventIterator API
- Rework
EventIterator
internals to avoid adding unnecessary overhead - Fix soundness of destructors
- Integrate referencing enums from other interfaces
- added stable
wp-viewporter
- added stable
wp-presentation_time
- added unstable
wpu-xdg_shell
- Update
dlib
dependency to v0.3 to match new macro syntax rules.
- Fix typos and missed things introduced in previous version.
- Do not rely on lib for C types, but rather std::os::raw. Should improve soundness in the long term.
- Stop trying to set the dispatcher on buffers from wayland-cursor.
- Interface to
libwayland_cursor
insys
andclient
, behind thecursor
cargo feature.
WlEglSurface
is nowSend
andSync
as it should be.
- wayland-client:
ProxyId
is nowHash
- wayland-sys: Remove inexistant
wl_log
symbols from the bindings - wayland-client: improve
egl_surface_ptr()
method of WlEglSurface
is_available()
andegl::is_available()
functions
First unified version of wayland-sys, wayland-scanner and wayland-client.
CHANGELOG.md
- Use local versions in travis testing