Skip to content

Releases: CuarzoSoftware/Louvre

Louvre v2.5.0-1

06 Aug 18:40
Compare
Choose a tag to compare

Louvre (2.5.0-1)

New Protocols

Packaging

  • Added Fedora package in the downloads section. Credits to @Conan-Kudo.

Examples

  • New louvre-views shortcuts: Credits to @mishoo:
    • Super + L/R Click: Starts interactive move/resize for toplevel windows.
    • Super + Shift + PageUp: Toggle maximize.
    • Super + Shift + PageDown: Minimize.

Bug Fixes / Internal Changes

  • Prevent weston-terminal from launching when switching to TTY 1. Credits to @mishoo.
  • Allow TTY switching using the right CTRL key. Credits to @mishoo.

-- Eduardo Hopperdietzel [email protected] Tue, 06 Aug 2024 13:59:30 -0400

Louvre v2.4.1-1

02 Aug 18:30
Compare
Choose a tag to compare

Louvre (2.4.1-1)

Bug Fixes

  • DRM Backend: Added missing SRM version checks to prevent symbol resolution issues with older versions, thanks to @Silitonix.
  • Added missing pointer focus checks in the default pointer button event implementation to securely handle cases where users unset it from indirectly triggered events.
  • louvre-views: Fixed bug causing occasional unminimizing of toplevel windows when switching to the main workspace of an output.
  • louvre-views: Fixed bug causing compositor to get stuck in an infinite loop when associating Wayland clients with application PIDs, thanks to @panaflexx.
  • louvre-views: Toplevel windows with subsurfaces are now hidden, and their captures are displayed immediately during fullscreen animations. This change prevents visual glitches caused by clients updating subsurface sizes before acknowledging the toplevel configuration.

-- Eduardo Hopperdietzel [email protected] Fri, 02 Aug 2024 14:28:41 -0400

Louvre v2.4.0-1

23 Jul 16:04
Compare
Choose a tag to compare

Louvre (2.4.0-1)

API Additions

Examples

  • louvre-views & louvre-weston-clone now use direct scanout for session lock and fullscreen surfaces when possible.
  • louvre-views:
    • Reduced unnecessary SSD title updates during window resizing to prevent slowdowns.
    • Minimized repainting of offscreen scene views during fullscreen/unfullscreen animations.
    • Introduced louvre.desktop file for launching louvre-views as a Wayland session.

Bug Fixes

  • Corrected title bar positioning for fullscreen windows when the X offset of the parent output exceeds 0.
  • Addressed issues with cursor size perception in Wayland backend when emulating hardware composition.

Internal Changes

  • Added scanout tranche to Linux-DMA-Buff.

-- Eduardo Hopperdietzel [email protected] Tue, 23 Jul 2024 11:44:04 -0400

Louvre v2.3.2-1

10 Jul 22:25
Compare
Choose a tag to compare

Louvre (2.3.2-1)

Examples

  • Replaced default wallpaper with a bluish-colored one.
  • louvre-views: Scale-down wallpaper on startup to match the largest available output preferred mode size.

Internal Changes

  • Replaced unnecessary execlp() call with system() in LLauncher.

-- Eduardo Hopperdietzel [email protected] Wed, 10 Jul 2024 18:16:12 -0400

Louvre v2.3.1-1

07 Jul 18:39
Compare
Choose a tag to compare

Louvre (2.3.1-1)

Bug Fixes

  • Fixed issue preventing apps from launching when LLauncher daemon fails to redirect stdin to /dev/null.
  • Removed unnecessary override of SRM environment variables that may cause some hardware to function suboptimally.

Dependencies

  • Updated SRM dependency to v0.6.1.

-- Eduardo Hopperdietzel [email protected] Sun, 07 Jul 2024 14:28:24 -0400

Louvre v2.3.0-1

29 Jun 23:25
Compare
Choose a tag to compare

Louvre (2.3.0-1)

New Protocols

Bug Fixes

  • Fixed bug preventing fallback keyboard map from loading when faulty XKB_DEFAULT_* environment variables are set, thanks to @Fox2Code for noticing it.
  • Fixed bug in louvre-views where fullscreen toplevel subsurfaces incorrectly appeared on top of the topbar.
  • Fixed bug in louvre-views causing fullscreen toplevels to move behind the black background when a child popup is mapped.

Backends

  • Moved responsibility for restoring gamma and cursor planes during TTY switching to SRM.
  • Wayland Backend: Added multiple cursor buffers to handle compositors that do not release buffers immediately.

Documentation

  • Added link to the old tutorial.

Examples

  • Reused the TextRenderer component in louvre-views and louvre-weston-clone.

-- Eduardo Hopperdietzel [email protected] Sat, 29 Jun 2024 18:14:25 -0400

Louvre v2.2.0-1

24 Jun 17:51
Compare
Choose a tag to compare

Louvre (2.2.0-1)

New Protocols

  • Single Pixel Buffer.

Environment Variables

  • Removed the hardcoded call to LKeyboard::setKeymap() inside the LCompositor::initialized() event, enabling the use of XKB environment variables to override the default keyboard map. Refer to the Environment page for more details.

Bug Fixes

  • Fixed bug causing unnecessary repaints on outputs using fractional scaling with oversampling.

Examples

  • Cleaned up louvre-weston-clone example and replaced most raw pointers with smart pointers.

-- Eduardo Hopperdietzel [email protected] Mon, 24 Jun 2024 13:40:52 -0400

Louvre v2.1.0-1

18 Jun 02:33
Compare
Choose a tag to compare

Louvre (2.1.0-1)

New Protocols

  • Wlr Foreign Toplevel Management (Refer to the LForeignToplevelController class for details).

API Additions

  • Add activateRequest(), closeRequest() and unsetMinimizedRequest() to the LToplevelRole class.

Minor API changes

  • Removed unused constructor overload in the LResource class.
  • Disabled bottom constraints by default during interactive toplevel move sessions.

Bug Fixes

  • Implemented a temporary fix to allow xdg_popups to trigger reposition requests before being mapped (until GTK4 fixes it).
  • Removed unnecessary checks in LLauncher::startDaemon() that prevented it from starting the daemon on some systems.

-- Eduardo Hopperdietzel [email protected] Mon, 17 Jun 2024 22:22:05 -0400

Louvre v2.0.0-1

10 Jun 23:01
Compare
Choose a tag to compare

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 of LPainter 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 for wlr_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 new LToplevelMoveSession and LToplevelResizeSession 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 new LEdge flags.
  • Replaced individual LToplevelRole and LPopupRole property change events with atomsChanged(), 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() to LToplevelRole 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 the xdg-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 to LCursor, the texture, hotspot, and visibility automatically adjust based on the underlying LCursorRole state.
  • LPointer::setCursorRequest() now provides an LClientCursor instead of a raw LCursorRole and hotspot.
  • The LClient class now stores and provides access to the last cursor set by a client via LClient::lastCursor().
  • LCursor enablement and hardware compositing can be now toggled for specific outputs using LCursor::enable() and LCursor::enableHwCompositing().
  • Manual cursor drawing is no longer necessary when hardware composition is not supported.

Clipboard / Drag & Drop

  • Removed the LDataDevice, LDataSource, and LDataOffer classes, their functionality is now handled internally by Louvre.
  • Migrated clipboard functionality from LSeat to the new dedicated LClipboard class.
  • It is now possible to specify which MIME types of the clipboard to make persistent through LClipboard::persistentMimeTypeFilter().
  • Renamed the LDNDManager class to LDND.
  • Transferred drag & drop enter, move, and leave events from LPointer to LDND, 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, and LSceneTouchPoint 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 provides eventHistory() and findEventBySerial() 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 to LObjects, automatically setting them to nullptr upon object destruction, with an optional destruction callback.
  • Replaced LClient::destroy() with destroyLater() 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() in LCompositor 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 with createObjectRequest() and onAnticipatedObjectDestruction().

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 focused LLayerRole surface.
  • Added Meta + Shift + W to launch Wofi.
  • Added LLauncher commands at startup to automatically enable the xdg-desktop-portal-wlr portal if installed.

-- Eduardo Hopperdietzel [email protected] Mon, 10 Jun 2024 18:53:58 -0400

Louvre v1.2.1-2

19 Feb 16:14
e516ddd
Compare
Choose a tag to compare

Louvre (1.2.1-2)

Internal Changes

  • Replaced raw boolean pointer of LObject alive indicator with std::shared_ptr - Thanks to @Paraworker.

Building

  • Fixed header include problem preventing Louvre from building on Musl-based distros - Thanks to @ahmadraniri1994 for reporting the issue.

Building

  • Added a link to a curated list of compositors using Louvre into README.md - Suggested by @wiki-me.

-- Eduardo Hopperdietzel [email protected] Mon, 19 Feb 2024 13:02:10 -0300