# Introduction This file contains significant user-visible changes for each version. For full changelog, use `git log`. The format is based on [Keep a Changelog] # Summary of Releases | Date | All Changes | wlroots version | lines-of-code | |------------|---------------|-----------------|---------------| | 2025-05-02 | [0.8.4] | 0.18.2 | 27679 | | 2025-02-21 | [0.8.3] | 0.18.2 | 27671 | | 2024-12-13 | [0.8.2] | 0.18.2 | 26298 | | 2024-10-25 | [0.8.1] | 0.18.1 | 25473 | | 2024-08-16 | [0.8.0] | 0.18.0 | 23320 | | 2024-06-19 | [0.7.4] | 0.17.4 | 22746 | | 2024-06-12 | [0.7.3] | 0.17.4 | 22731 | | 2024-05-10 | [0.7.2] | 0.17.3 | 21368 | | 2024-03-01 | [0.7.1] | 0.17.1 | 18624 | | 2023-12-22 | [0.7.0] | 0.17.1 | 16576 | | 2023-11-25 | [0.6.6] | 0.16.2 | 15796 | | 2023-09-23 | [0.6.5] | 0.16.2 | 14809 | | 2023-07-14 | [0.6.4] | 0.16.2 | 13675 | | 2023-05-08 | [0.6.3] | 0.16.2 | 13050 | | 2023-03-20 | [0.6.2] | 0.16.2 | 12157 | | 2023-01-29 | [0.6.1] | 0.16.1 | 11828 | | 2022-11-17 | [0.6.0] | 0.16.0 | 10830 | | 2022-07-15 | [0.5.3] | 0.15.1 | 9216 | | 2022-05-17 | [0.5.2] | 0.15.1 | 8829 | | 2022-04-08 | [0.5.1] | 0.15.1 | 8829 | | 2022-02-18 | [0.5.0] | 0.15.1 | 8766 | | 2021-12-31 | [0.4.0] | 0.15.0 | 8159 | | 2021-06-28 | [0.3.0] | 0.14.0 | 5051 | | 2021-04-15 | [0.2.0] | 0.13.0 | 5011 | | 2021-03-05 | [0.1.0] | 0.12.0 | 4627 | ## [0.8.4] This release predominantly consists of bug-fixes, code simplification and usability improvements. Amongst the new features the most noteworthy is the addition of icons support in the window-switcher and client-list-combined-menu. A big thank you to @tokyo4j for leading the way on a lot of work in this release. ### Added - Support all pango font weight options (normal, thin, ultralight, light, semilight, book, medium, semibold, bold, ultrabold, heavy, ultraheavy) via config option `` @spl237 [#2692] [#2693] - Add theme option `osd.workspace-switcher.boxes.border.width` @czkz [#2657] - Add theme option `osd.window-switcher.item.icon.size` @tokyo4j [#2651] - Localize desktop-entry application names used by the window switcher via `desktop_entry_name` or the `%n` specifier @tokyo4j [#2653] - Add `HideCursor` action @jp7677 [#2633] - Support application icons in window-switcher using `` and use this by default. @tokyo4j [#2621] - Support application icons in client-list-combined-menu @tokyo4j [#2617] - Support the use of the keypad-enter key when using menu. @zeusgoose [#2610] - Show fallback icon in SSD titlebar when no `app_id` is set via `` @tokyo4j [#2599] ### Fixed - Enable overriding of `` configs to fix `--merge-config` bug @spl237 [#2700] - Handle initially minimized windows (for example VSCode) to fix a focus and stacking bug @jlindgren90 [#2688] [#2627] - Minor window-switcher fix for box size and alignment @czkz [#2657] - Overwrite (not amend) configuration entries for `` and `` in support of using --merge-config @tokyo4j [#2669] - Consider `item.padding.y` when centering workspace name in window- switcher @tokyo4j [#2651] - Notify XWayland of correct window stacking order to fix issue with mouse scroll events and always-on-top windows. @tokyo4j [#2638] - Scale and transform magnifier in accordance with output settings @tokyo4j [#2645] - Allow only `Previous/NextWindow` action while window switching to prevent undefined behaviour like using `SendToDesktop` while window switching. @tokyo4j [#2613] - Harden window stacking order while window switching @tokyo4j [#2613] - Do not update cursor while window switching @tokyo4j [#2613] - Honor no content `` node because users need a way to override the default "Workspace". @johanmalm [#2601] [#2613] ### Changed - Change default window-switcher layout to show icons and desktop-entry application name @tokyo4j [#2648] - If `` is set to yes, the focus is now updated only when the cursor enters a window content, not when the cursor moves within the whole window including the titlebar. This makes the behaviour consistent with that of kwin, xfwm4 and openbox @tokyo4j [#2652] - Show magnifier only on one output to simplify handling of different scales and transforms. @tokyo4j [#2645] - Center labwc.svg logo vertically @jlindgren90 [#2619] - Increase default `` to 10 to make it easier to snap windows on the edge between two monitors. @johanmalm [#2602] [#2608] ## [0.8.3] The eye-catching new features of this release are undoubtedly: 1. Support for the `ext-workspace` protocol with big thanks to @Consolatis 2. Menu enhancements including icons and dynamic root-menus. Credits here go to @Consolatis, @tokyo4j and @johanmalm for improvements to both backend buffer managements and front end menu mechanics. However - on the whole - the main effort of this release has gone into stability, usability and performance fixes, and it really feels like we have matured nicely against the wlroots 0.18 series. Notes to package maintainers: - This version introduces the ext-workspace protocol which breaks xfce4-panel 4.20.0. There is a fix in subsequent releases so make sure xfce4-panel is shipped at >= 4.20.1. ### Added - Add config options `` and `` [#2529] - Menu icons support [#2509] ```xml yes ``` - Support toplevel pipemenus [#2238] [#2239] ```xml ``` - Add `` to specify the icon name to be used when lookups for an application icon have failed [#2518] - Use 'labwc' directory for themes as well as 'openbox-3' [#2488] - Add default Alt-Shift-Tab keybind for `PreviousWindow` [#2477] - Add config option `` to allow users to avoid automatically enabling outputs at startup and when new outputs are connected. With autoEnableOutputs disabled, tools such as kanshi can be used to give finer-grained control of which outputs are enabled, which may be useful to avoid re-enabling outputs that disconnect and reconnect during powersave [#2458] - Add WarpCursor action. Written-by: @orfeasxyz [#2118] - Support ext-workspace protocol [#2365] ### Fixed - Prevent black flash (caused by unnecessary output commit without buffer) when repeatedly calling `wlopm --on` [#2580] - Set custom output mode on `wlopm --on` to work around a wlroots issue: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3946 [#2578] - Handle layer-shell unmap without any outputs left [#2577] - Fix some odd, inconsistent behaviour with resize edges [#2529] - Cleanup overlay timer on exit [#2574] - Fix unexpected behavior when a menu is opened from another menu [#2537] - Taking into account SSD margin in `MoveTo` action [#2469] [#2563] - Fix UAF caused by trying to update xcursor in an output destroy-handler [#2539] [#2560] - Send wlr-foreign-toplevel `output_enter` on initialization to fix a bug which causes missing taskbar items in Waybar when configured to show windows per output. [#2550] - Use subsurface as reference for out-of-surface cursor movement [#2542] [#2547] - Dynamically look up window icons in server-side-deco titlebar for output scales [#2518] - Do not leak bound scroll events from touchpad to clients in some conditions [#2516] - Ignore duplicated buttons in `` rather than ignoring all of it [#2524] - Set repeat information for virtual keyboards [#2513] - Honour modifier state of virtual keyboards when processing mousebinds. Helps some use-cases under wayvnc [#2511] - Accept uppercase icon endings - IME: fix stuck Ctrl when pressed Ctrl+F in Firefox with Fcitx5 [#2498] - Fix invisible cursor on application after reconfigure [#2499] - Fix abort() on non-ARGB32 PNG file [#2495] - Ignore `wlr_output_state.mode/custom_mode` except for client request [#2486] - Cancel keyboard keybind-repeat on reconfigure [#2473] - Send initial wlr-foreign-toplevel pre-map state [#2460] - Fix NULL `string_prop` crash when `app_id` is NULL [#2453] - Fix scaling for rendering large image in non-square rectangle [#2451] - Fix cursor focus when menu is closed by clicking its border [#2443] - Update pointer focus on xdg-popup/layer popup destruction to fix bug where closing a popup did not move the pointer focus to the main toplevel until the cursor was moved. [#2443] - Improve algorithm for menu placement with xdg-positioner [#2408] - Do not forward IME key-release without correspinding key-press to avoid stuck keys [#2437] ### Changed - Make window switcher more Openbox-like in terms of key processing. The shift key no longer inverts the direction of window switching, so to keep the original behavior, alt-shift-tab has been added as a default keybind to cycle to the previous window [#2477] - Do not set numlock by default, only set on|off if user specifically requests it in the config file [#2483] - Demote libsfdo error-logging to `WLR_INFO` to avoid logging issues with .desktop files as errors [#2456] - Always send modifier release events. This means that when a keybind is triggered while focusing on an application, the key-release event of the modifier key is now sent to the application. This fixes the problem of stuck modifier keys in some applications including Blender and wlfreerdp. Note that this change makes existing keybinds with Alt key show Firefox's menu bar. For those who don't want to make those keybinds interfere with Firefox's menu bar, we recommend replacing Alt key (e.g. "A-s") with Win key (e.g. "W-s") in the keybinds. [#2455] - Removed `wantAbsorbedModifierReleaseEvents` window rule as it's no longer needed [#2455] - Clear the keyboard/pointer focus while a window is dragged, the window switcher is activated or a menu is opened. As a result, with followMouse="yes" and followMouseRequiresMovement="no" in rc.xml, keyboard-focus semantics have subtly changed when using the window-switcher. [#2455] ## [0.8.2] This is a shorter release cycle compared with the usual 10-week one because it contains a significant number of stability and cleanliness fixes which warrant packaging. We do not normally describe behind-the-scenes work in this log, but will mention two here as an exception: 1. A clean run with gcc/clang memory leak check has been achieved. Thanks to @tokyo4j for fantastic work with this [#2331] 2. A buffer-sharing mechanism has been merged to improve both processor and memory usage in the long term. Credits to @tokyo4j and @Consolatis for this one. [#2363] Notes to package maintainers: - The wlroots dependency has been increased to `0.18.1` to avoid a crash when using ext-foreign-toplevel-list protocol. - It is also advisable to use `0.18.2` as soon as possible to fix a crash triggered when the xwayland server closes during a drag-and-drop with an XWayland client. ### Added - Add support for xdg-foreign-v1 and xdg-foreign-v2 protocols [#2400] - Add window rule to send release-events of modifiers which are part of keybinds. This supports clients (like blender) that want to see modifier release events even when they are part of a keybinds. [#2377] ```xml ``` - Support menu borders [#2376] ``` menu.border.width: 1 menu.border.color: #aaaaaa ``` - Add conversion specifier `%n` to the window-switcher `` config option to show desktop entry name in the window-switcher. Written-by: @jp7677 [#2360] ```xml ``` - Add hold gestures. @jp7677 [#2326] - Support ext-foreign-toplevel-list protocol [#2072] - Support additional window rule conditions including `shaded`, `maximized`, `iconified`, `focused`, `omnipresent`, `desktop`, `tiled` and `tiled_region`. This also works for `If` and `ForEach` queries. @orfeasxyz @ahesford [#2245] - Add mouse emulation for touch devices. @spl237 [#2277] - Improve handling of touch events. @jp7677 [#2273] This includes: - Hide the cursor on touch input and keep the cursur invisible until pointer or tablet input - Close xdg-popups on touch down - Notify idle-manager on touch down/up - Clear pointer focus on touch input to avoid pointer focus interfering with touch input, like showing hover effect on unexpected locations - Move touch only with one touch point - in other words do not move the cursor when more than one finger is down - Warp cursor to touch coordinates for consistent behaviour with non-touch capable surfaces including the desktop - Set environment variable `LABWC_VER` with current compositor version. @01micko [#2257] - Broadcast keyboard modifiers to all clients rather than just the one with keyboard focus. [#2274] This enables: - Clients such as panels to display the current keyboard layout without introducing new wayland protocols or other IPC. - Unfocused xdg-shell clients to understand button press with keyboard modifiers for example Ctrl+click. ### Fixed - Fix crash caused by `rc.xml` `` options being specified as elements rather than attributes. [#2412] - Fix `ShowMenu` action position with x/y arguments in multi-monitor setup. [#2409] - Block privileged protocols for sandboxed clients [#2398] - Fix incorrect focus behaviour when switching between workspaces with omnipresent windows open [#2335] - Fall back to loading icon based on app-id when `Icon` defined in .desktop file can not be loaded [#2361] - Fix regression introduced with `0.8.1` to allow negative values for theme option `menu.overlap` [#2356] - Ensure output is usable before setting adaptive sync [#2337] [#2338] - Fix `menu.title.text.justify: right` not working [#2336] - Keep focus on omnipresent windows when switching workspaces [#2329] - Skip painting output when session is not active. @enometh @Madhu [#2249] - Ignore variable assignments > 1 KiB in environment files to guard against recursive constructs like FOO=$FOO:bar which would grow on each reconfigure. [#2325] - Improve support for non-compliant .desktop files by matching partial strings to handle for example app-id="gimp-2.10" with file "gimp.desktop". @spl237 [#2266] - Correctly center menu opened with `` @tokyo4j [#2319] - Allow pointer speed of -1.0. @spl237 [#2321] - Fix off-by-one bug in `buf_add_char()` [#2313] - Fix menu separator-line padding regression introduced in `0.8.1`. @domo141 [#2291] - Avoid permanent disabling of tearing due to rejected commits caused by the cursor plane not allowing async page flips which causes tearing page flips to be rejected if the cursor is moved. @RicArch97 [#2295] - Use `MenuHeader` font height in separators with labels. @domo141 [#2276] ### Changed - Set xwaylandPersistence default value to `yes` when compiled with wlroots <0.18.2. This prevents a bug which has the potential to crash the compositor when performing a drag-and-drop action at the same time as the XWayland server is shutting down. [#2371] [#2414] [#2420] - Set default window placement policy to `cascade` instead of `center` [#2345] ```xml cascade ``` - Set default values of theme option `window.*.border.color` to `#aaaaaa`. This makes the colors of window borders and titlebar different, but will let `menu.border.color` inherit `window.active.border.color` just like Openbox does, without making the menu borders around a selected menu item invisible. [#2376] - Invert the y-offset of submenus applied by `menu.overlap.y` to (i) follow Openbox's behavior and (ii) behave as already described in our own documentation. [#2380] ## [0.8.1] The most noteworthy additions in this release are: 1. Titlebar window icons and layout configuration 2. Support for the cosmic-workspace protocol and the openbox inspired client-list-combined-menu for a better user experience with workspaces. Notes to package maintainers: - The SSD titlebar window icon support requires [libsfdo] to be added as a (build and run-time) dependency or statically linked. If this is not wanted, add `-Dicon=disabled` to the `meson setup` command in the build script for the next release. - PRs [#1716] and [#2205] add labwc xdg-portal configuration, modify `labwc.desktop` and amend `XDG_CURRENT_DESKTOP` which should enable better out-of-the-box support for xdg-desktop-portal, but if you already ship a custom setup for this or have different requirements, please review this change. [libsfdo]: https://gitlab.freedesktop.org/vyivel/libsfdo ### Added - Support dmabuf feedback [#2234] [#1278] - Add initial implementation of cosmic-workspace-unstable-v1 [#2030] - Optionally support SSD titlebar window icons. When an icon file is not found or could not be loaded, the window menu icon is shown as before. The icon theme can be selected with `` [#2128] - Add actions `ToggleSnapToEdge` and `ToggleSnapToRegion`. These behave like `SnapToEdge` and `SnapToRegion`, except that they untile the window when already being tiled to the given region or direction. Written-by: @jp7677 and @tokyo4j [#2154] - Add action `UnSnap`. This behaves like `ToggleSnapToEdge/Region` but unconditionally. Written-by: @jp7677 and @tokyo4j [#2154] - Handle xdg-shell `show_window_menu` requests [#2167] - Support the openbox style menus listed below. Written-by: @droc12345 1. `client-list-combined-menu` shows windows across all workspaces. This can be used with a mouse/key bind using: `` [#2101] 2. `client-send-to` shows all workspaces that the current window can be sent to. This can additional be used within a client menu using: `` [#2152] - Add theme option for titlebar padding and button spacing [#2189] ``` window.button.height: 26 window.titlebar.padding.width: 0 window.titlebar.padding.height: 0 window.button.spacing: 0 ``` - Set titlebar height based on the maximum height of any of the objects within it, rather than just taking the font height into account [#2152] - Add theme option for setting button hover effect corner radius [#2127] [#2231] ``` window.button.hover.bg.corner-radius: 0 ``` - Add position arguments for menus. Written-by: @droc12345 [#2102] ```xml root-menu 0 0 ``` - Allow interactive window movement when horizontally or vertically maximized and add associated config option `` [#2052] - Add optional Shade (shade.xbm) and AllDesktops (desk.xbm) buttons and theme options: ``` window.active.button.desk.unpressed.image.color window.inactive.button.desk.unpressed.image.color window.active.button.shade.unpressed.image.color window.inactive.button.shade.unpressed.image.color ``` - Make action `FocusOutput` behave like `MoveToOutput` by adding direction and wrap arguments. Written-by: @orfeasxyz [#2100] - Add config option for titlebar layout. Written-by: @xi [#2088] [#2150] ```xml icon:iconify,max,close yes|no ``` - Add `Oblique` option to `