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-decorationprotocol 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-v1is 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-shelllinux-dmabuf-v1pointer-constraints-v1pointer-gestures-v1presentation-timetext-input-v1text-input-v3
- [protocols] Update
wlr-protocolsto commitd1598e82240d6e8ca57729495a94d4e11d222033, updatingwlr-layer-shellto 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
PartialEqimplementation forClientstructure.
- [client] Allow invocations of
event_enum!without prior imports withuse
- [sys] Update
dlibdependency to v0.5 to match new macro fornat. Thedlopenfeature 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-protocolsto commit992841c2aa731ab02774c9bf8c6cda9f24dfbf10, updatingwlr-foreign-toplevel-managementto 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-protocolsto 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
EventandRequest - [protocols] Update
wlr-protocolsto commit16a28885bc92869d8e589e725e7bf018432c47e4. Adding thewlr-output-management,wlr-output-power-managementandwlr-virtual-pointerprotocol 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_macro2fallback 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
xcursorto0.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_cursorfails to find the requested cursor - [cursor] Fix buffer content endianness
- [cursor] Use
xcursorfor 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-cursoris now fully implemented in Rust
- [client] When using the
use_system_libfeature, track the lifetime of theDisplayso that attempting to send a request after the connection is dropped results in a noop instead of aSIGSEGV.
- [client/server] Introduce the
DispatchDatamechanism, 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__nonexhaustivehidden variant - [client] Rename
EventQueue::get_tokentoEventQueue::token - [client] Introduce
EventQueue::display()to access theDisplayfrom 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 takeselfby reference instead of by value, allowing the creation of new attached/detached proxy handles without requiring ownership - [commons] Carefully handle
Droptypes in the thread-aware containers.
- [protocols] Update wayland-protocols to
82d4c152a5163fc39c6c1fbf3b27578449d6be8e(includes fixes toxdg_shellenums) - [protocols] Update wlr-protocols to
67abc798b03f3b4f4691f3307c9ca86fa6aa16ed - Update
nixdependency to0.17
- [client] Add
get_connection_fd()toDisplayas well asEventQueue. - [client] Bugfix: remove a spurious panic when using the
use_system_libfeature.
- [client/server] The implementations system is replaced by a more versatile
FilterAPI, 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
UserDatatype, 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
Displayno longer automatically create anEventQueuewith it, you'll need to create it manually and assign theWlDisplayobject to it to create your registry - [client/server] the
native_libfeature is renamed touse_system_libto be more explicit - [client] the
cursorandeglfeatures are split into their own crates:wayland-eglandwayland-cursor - [server] All dependencies on
calloopare now removed,wayland-servernow only exposes adispatch(..)andget_poll_fd()method, that you are responsible for integrating into your event loop. - [commons] Use
smallvecto 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
nixdependency to 0.14
- [scanner] Added
generate_code_with_destructor_eventsallowing to patch the protocol file by specifying that some events are destructors.
- [commons] Added
UserData::get_mutandUserDataMap::get_mut
- [server] Unmanaged resources (when using
native_lib) are now correctly considered alive rather than dead
nixto 0.13
- Minimize the scope of the
native_libfeatures towayland-clientandwayland-server. The code generated bywayland-scanneris now independent of this feature, makingwayland-protocolsalso independent of it, and avoiding it to pollute dependency trees in non-trivial ways.
- [protocols] Update
wlr-protocols(data-controlversion 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-0ifWAYLAND_DISPLAYis not set, this is a bad legacy practice which can cause clients to spawn in the wrong environment. - [client]
Displaycan now be cloned and sent accross threads as nothing prevents it
- [scanner] Generate
EventHandlerandRequestHandlertraits 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/RequestHandlertrait. - [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-Sendimplementation.implement_nonsend()is removed as being non-Sendis now the default.implement_threadsafe()is added for when a threadsafe impl is needed. - Breaking [server] When the
native_libcargo 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 correspondingIobjects. AllRequestsTraittraits were removed and methods for sending requests and events are now part of theIobjects themselves. This means that it is no longer needed to import all necessaryRequestsTraittraits 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,Fromimplementations are provided (use.into()), as well as anAsRef<Proxy/Resource<I>>implementation forI. - Breaking [client/server/commons]
AnonymousObjectwas moved out ofwayland-commonsintowayland-clientandwayland-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-clientto 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_DEBUGoutput will now be directed to stderr (as it should have been from the start). - [scanner] Generate
__nonexaustivevariants to protocol enums to match semver guarantees of protocols - [client] replace
GlobalManager::instantiate_autowithGlobalManager::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::Errorfor 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
miodependency - [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-sysifnative_libis set - [server] Resources are now properly marked as dead during client cleanup
- [sys] Introduce
wl_display_destroy_clientsin server-side bindings - [server] Properly cleanup clients when dropping
WlDisplaywhen usingnative_lib.
- [server] Properly cleanup clients when dropping
WlDisplaywhen 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_constructorallowing 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
Resourceuser-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
callooprather than our own - [client] Add the
eventloopcargo feature which providescalloopintegration forEventQueue
- Complete refactor of the library to integrate a pure rust implementation of the protocol,
controlled by the
native_libswitch cargo feature
- [scanner] Fixed
*mut_typo when generating code for nullable array arguments - [protocols] Integrate
xdg-decorationprotocol to replace KDE's decoration protocol. - [client]
Proxynow implementsPartialEqandEq - [server]
Resourcenow implementsPartialEqandEq
- [client] Fix regression from previous release where
Displaywas no longerSendandSync.
- [client] Allow the creation of a
Displayfrom a foreignwl_display - [protocols] Expose generated C interfaces for protocol interop
- [protocols] Update wayland-protocols to 1.14
- [client/server] Use
Clonetrait 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
ConnectErrorwhich 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
Resourcedefinition 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_idatato event sources to access idata without removing the event source - Breaking [server] Move common event source functions into new
EventSourcetrait
- [sys] Update lazy_static dependency to 1.0
- [protocols] Add KDE's server decoration protocol
- [server] Add a
ptr()method toDisplayfor ffi purpose
- [protocols] XDG Shell is now stable
- [server] Move
register_globaltoEventLoopHandle
- [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
WlDisplaydrop (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
EnvNotifywere 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-Senddata. It is still possible to directly create them in different threads, as theWlDisplayisSync.
- [sys] Print debug msg only when the
WAYLAND_RS_DEBUGenv 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
nightlyfeature, now that rustc'sstatic_recursionis stable
- Migrate the repository to https://github.com/smithay
- [client] Add a method to create
WlEglSurfacefrom a rawwl_surfaceptr - [client]
WlDisplay::get_fsis 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
Proxymethods - [client] impl Debug for RequestResult
- [server] Server objects are noe cloneable via
Resourcemethods - [server] impl Debug for EventResult
- [breaking-change] Be more conservative regarding the use of
user_datafrom the C libraries. This makes us compatible with manipulation of wayland objects managed by other libraries.wayland-clientandwayland-serverwill 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_registeredto 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
Destroytrait
- [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_staticdependency
- 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
Sendand require handlers to beSend
- the
cursorapi is nowSend
- fix a typo in
declare_handler!macro ( #70 from @fangyuanziti )
- Proxies and Resources are nor
Send+Syncas they should be equalsmethod to chek if two handles refer to the same wayland objectInittrait allowing handlers to be initialized after insertion in an event queue/loop
eglmodules binding tolibwayland-eglproviding OpenGL supportcursormodule binding tolibwayland-cursorgiving 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
EventIteratorinternals 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
dlibdependency 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_cursorinsysandclient, behind thecursorcargo feature.
WlEglSurfaceis nowSendandSyncas it should be.
- wayland-client:
ProxyIdis nowHash
- wayland-sys: Remove inexistant
wl_logsymbols 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