Louvre v2.0.0-1
New Protocols/Globals
- Session Lock
- Wlr Layer Shell
- Wlr Screen Copy
- Pointer Gestures
- Pointer Constraints
- Relative Pointer
- Wayland Touch Events
- XDG Output
- Update xdg_wm_base global to v6.
- Update zwp_linux_dmabuf global to v5.
Backends
- Introduced a new Wayland input and graphic backend for running compositors as nested Wayland clients.
- Added support for absolute Libinput pointer events, enabling proper handling of pointer events when running inside QEMU or Virtual Box, thanks to @milisarge.
- Removed unnecessary SRM headers prefix from the DRM backend, thanks to @EBADBEEF.
Rendering
- Added support for automatic and custom blending modes in
LPainter
. - Included premultiplied alpha hints to
LTexture
. - Introduced the
LFramebufferWrapper
class, enabling the use ofLPainter
in native OpenGL framebuffers. - Removed deprecated
LPainter
API.
Layout
- Introduced the concept of surface layers: background, bottom, middle, top, and overlay, simplifying surface ordering management based on their role.
- Added the concept of available geometry and exclusive edges to
LOutput
. - Included the
LExclusiveZone
class for easy calculation and modification of available geometry for outputs.
Roles
- Introduced the
LLayerRole
class forwlr_layer_shell
surfaces, featuring a default implementation that automatically updates their position and size, as well as the available outputs geometry. - Introduced the
LSessionLockRole
for session_lock surfaces, featuring a default implementation that automatically updates their position, size, and mapping state based on the session state. - Detached toplevel move and resize sessions from
LPointer
, moving them into the newLToplevelMoveSession
andLToplevelResizeSession
classes. - Move and resize sessions constraints can now be updated dynamically as needed.
- Now multiple move and resize toplevel sessions are allowed at a time (e.g. pointer and touch at the same time).
- Replaced
LToplevelRole::ResizeEdge
enum with the newLEdge
flags. - Replaced individual
LToplevelRole
andLPopupRole
property change events withatomsChanged()
, enabling the handling of multiple property changes simultaneously while accessing the previous state. This prevents issues that arose from the order in which events were previously triggered. - Added
setExtraGeometry()
toLToplevelRole
to simplify the calculation of position, size, and constraints for toplevels using server-side decorations. - Popups are now immediately unmapped when dismissed.
- Optimized popup position recalculations, preventing unnecessary processing.
Screencasting
- Added support for screencasting through the
wlr_screencopy
protocol, also compatible with thexdg-desktop-portal-wlr
portal, thanks to @Fox2Code for providing feedback on the API design.
Cursor
- Added new
LClientCursor
class for easier tracking and management of client cursors. When assigned toLCursor
, the texture, hotspot, and visibility automatically adjust based on the underlyingLCursorRole
state. LPointer::setCursorRequest()
now provides anLClientCursor
instead of a rawLCursorRole
and hotspot.- The
LClient
class now stores and provides access to the last cursor set by a client viaLClient::lastCursor()
. LCursor
enablement and hardware compositing can be now toggled for specific outputs usingLCursor::enable()
andLCursor::enableHwCompositing()
.- Manual cursor drawing is no longer necessary when hardware composition is not supported.
Clipboard / Drag & Drop
- Removed the
LDataDevice
,LDataSource
, andLDataOffer
classes, their functionality is now handled internally by Louvre. - Migrated clipboard functionality from
LSeat
to the new dedicatedLClipboard
class. - It is now possible to specify which MIME types of the clipboard to make persistent through
LClipboard::persistentMimeTypeFilter()
. - Renamed the
LDNDManager
class toLDND
. - Transferred drag & drop enter, move, and leave events from
LPointer
toLDND
, facilitating support for touch or other forms of DND sessions. - It is now possible to distinguish whether a DND session is originated from a pointer, keyboard, or touch event using
LDND::triggeringEvent()
.
Input Events
- Redesigned the entire input system, with each input event now having its own
LEvent
subclass providing detailed information. - Added support for touch events through the
LTouch
,LTouchPoint
, andLSceneTouchPoint
classes. - Introduced the
LInputDevice
class for configuring and accessing basic input device properties. - Requests triggered by user interactions now include the specific event that triggered them.
- Included support for pointer constraints.
- Added support for swipe, pinch, and hold pointer gestures.
LClient
now provideseventHistory()
andfindEventBySerial()
for querying the last events sent from the compositor.- Removed the
LKeyboard::sendModifiersEvent()
method. Modifiers are now automatically sent to focused surfaces whenever they change.
Security
- Introduced the
LWeak
class for efficient management of weak references toLObjects
, automatically setting them tonullptr
upon object destruction, with an optional destruction callback. - Replaced
LClient::destroy()
withdestroyLater()
to prevent immediate client resource destruction and reduce potential access to freed memory. - Added assert to prevent users from creating factory objects outside
LCompositor::createObjectRequest()
.
Protocol Globals
- Introduced the new
LGlobal
class for managing protocol globals. - Added proper methods in
LCompositor
for safely adding and removing protocol globals (enabling/disabling protocols). - Included
globalsFilter()
inLCompositor
to allow only well-known clients to bind to specific protocols.
Factory
- All classes that provide an interface are now subclasses of
LFactoryObject
. - Replaced all virtual constructors/destructors in
LCompositor
withcreateObjectRequest()
andonAnticipatedObjectDestruction()
.
Cleaning / Performance
- Removed unnecessary 'inline' keywords from class member methods, thanks to @Paraworker for the suggestion.
- Added 'noexcept' keyword to all class member methods that do not throw exceptions.
- Removed unnecessary pimpl pattern from multiple classes, enhancing cache locality and performance.
Bug Fixes
- Fixed incorrect axis scroll values sent to clients using
wl_pointer
v1. - Resolved a segmentation fault issue triggered by accessing
LOutput
buffers following mode changes. - Addressed synchronization problems related to the presentation time protocol.
louvre-views example
- Added fade-in/out toplevel animations.
- Added
Meta + Shift + L + Up/Down
shortcut for modifying the priority of a focusedLLayerRole
surface. - Added
Meta + Shift + W
to launchWofi
. - Added
LLauncher
commands at startup to automatically enable thexdg-desktop-portal-wlr
portal if installed.
-- Eduardo Hopperdietzel [email protected] Mon, 10 Jun 2024 18:53:58 -0400