# 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-10-10 | [0.9.2] | 0.19.1 | 28818 |
| 2025-08-02 | [0.9.1] | 0.19.0 | 28605 |
| 2025-07-11 | [0.9.0] | 0.19.0 | 28586 |
| 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 |
[unreleased]: NEWS.md#unreleased
[0.9.2]: NEWS.md#092---2025-10-10
[0.9.1]: NEWS.md#091---2025-08-02
[0.9.0]: NEWS.md#090---2025-07-11
[0.8.4]: NEWS.md#084---2025-05-02
[0.8.3]: NEWS.md#083---2025-02-21
[0.8.2]: NEWS.md#082---2024-12-13
[0.8.1]: NEWS.md#081---2024-10-25
[0.8.0]: NEWS.md#080---2024-08-16
[0.7.4]: NEWS.md#074---2024-06-19
[0.7.3]: NEWS.md#073---2024-06-12
[0.7.2]: NEWS.md#072---2024-05-10
[0.7.1]: NEWS.md#071---2024-03-01
[0.7.0]: NEWS.md#070---2023-12-22
[0.6.6]: NEWS.md#065---2023-11-25
[0.6.5]: NEWS.md#064---2023-09-23
[0.6.4]: NEWS.md#063---2023-07-14
[0.6.3]: NEWS.md#062---2023-05-08
[0.6.2]: NEWS.md#061---2023-03-20
[0.6.1]: NEWS.md#060---2023-01-29
[0.6.0]: NEWS.md#060---2022-11-17
[0.5.3]: NEWS.md#053---2022-07-15
[0.5.2]: NEWS.md#052---2022-05-17
[0.5.1]: NEWS.md#051---2022-04-08
[0.5.0]: NEWS.md#050---2022-02-18
[0.4.0]: NEWS.md#040---2021-12-31
[0.3.0]: NEWS.md#030---2021-06-28
[0.2.0]: NEWS.md#020---2021-04-15
[0.1.0]: NEWS.md#010---2021-03-05
## Notes on wlroots-0.19
There are some regression warnings worth noting for the switch to wlroots 0.19:
- The DRM backend now destroys/recreates outputs on VT switch and in some cases
on suspend/resume too. The reason for this change was that (i) the KMS state
is undefined when a VT is switched away; and (ii) the previous outputs had
issues with restoration, particularly when the output configuration had
changed whilst switched away. This change causes two issues for users:
- Some layer-shell clients do not re-appear on output re-connection, or may
appear on a different output. Whilst this has always been the case, it will
now also happen in said situations. We recommend layer-shell clients to
handle the new-output and surface-destroy signals to achieve desired
behaviours.
- Some Gtk clients issue critical warnings as they assume that at least one
output is always available. This will be fixed in `Gtk-3.24.50`. It is
believed to be a harmless warning, but it can be avoided by running labwc
with the environment variable `LABWC_FALLBACK_OUTPUT=NOOP-fallback` to
temporarily create a fallback-output when the last physical display
disconnects. [#2914] [#2939] [wlroots-4878] [gtk-8792]
- Due to a single-pixel protocol issue, `waylock` and `chayang` do not work.
This will be fixed in `wlroots-0.19.1`. [#2943] [wlroots-5098]
- Menu item can no longer be activated in any Gtk applications with a single
press-drag-release mouse action. For context: This is due to ambiguity in the
specifications and contrary implementations. For example, Gtk applications are
broken under KWin in this regard, while vice versa Qt clients are broken under
other compositors like Weston, Mutter and labwc. It has been decided not to
block the release due to this regression as it is an eco-system wide issue
that has existed for a long time. [#2787]
- VR headset support is disabled when compiled with wlroots `0.19.0` to work
around a bug on the wlroots side which is expected to be fixed in wlroots
`0.19.1` [#2887]
With wlroots compiled with libwayland (>= 1.24.0), there is an invisible margin
preventing pointer focus on some layer-shell surfaces including those created by
Gtk. In simple words, this is because libwayland now rounds floats a bit
differently [#3099]. There is a pending fix [wlroots-5159].
[wlroots-4878]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4878
[wlroots-5098]:https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/5098
[wlroots-5159]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/5159
[gtk-8792]: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/8792
## unreleased
[unreleased-commits]
### Added
- With the window-switcher custom field state specifiers 's' and 'S', show 's'
for shaded window @domo141 [#2895]
- Support `xdg-dialog` protocol to enable better handling of modal dialogs @xi
[#3134]
- labnag: add --keyboard-focus option @tokyo4j [#3120]
- Allow window switcher to temporarily unshade windows using config option
`` @Amodio @Consolatis [#3124]
- For the 'classic' style window-switcher, add the following theme options:
- `osd.window-switcher.style-classic.item.active.border.color`
- `osd.window-switcher.style-classic.item.active.bg.color`
@tokyo4j [#3118]
### Fixed
- Don't remove newlines when parsing config, menu and XBM because doing so can
cause parser error in some unusual situations like the one shown below.
@tokyo4j [#3148]
```
```
### Changed
- If XML documents (like rc.xml and menu.xml) have an XML declaration (typically
``), this XML declaration must be the first thing in the
document. In previous versions, line breaks (`\n`) were allowed before due to
the way the files were parsed, but this is approach caused other issues like
[#3145] and is contrary to XML syntax. [#3148] [#3153]
- With the window-switcher custom field state specifiers 's' and 'S', change the
display order from M|m|F to m|s|M|F; and increase the size from three
characters wide to four. @domo141 [#2895]
- Call labnag with on-demand keyboard interactivity by default @tokyo4j [#3120]
- Temporarily unshade windows when switching windows. Restore old behaviour with
`` @Amodio @Consolatis [#3124]
- In the classic style window-switcher, the default color of the selected window
item has been changed to inherit the border color but with 15% opacity
@tokyo4j [#3118]
## 0.9.2 - 2025-10-10
[0.9.2-commits]
### Added
- Allow `SnapToEdge` and `ToggleSnapToEdge` to combine two cardinal directions
with the config option `combine="yes|no"`. [#3081] @tokyo4j
- Support `Border` context for mousebinds as an alias for `Top`...`BRCorner` to
make configuration easier. @tokyo4j [#3047]
- Add window-switcher mode with thumbnails. This can be enabled with:
``. @tokyo4j [#2981]
- Add `toggle` option to `GoToDesktop` action. This has the effect of going back
to the last desktop if already on the target. @RainerKuemmerle [#3024]
- Add `` to allow hiding titlebar
when window is maximized. @CosmicFusion @tokyo4j [#3015]
- Use client-send-to-menu as 'Workspace' submenu in built-in client-menu
@johanmalm [#2995]
- Allow overwriting submenu icon to increase flexibility and enhance Openbox
compatibility. @tokyo4j [#2998]
- Allow client-{list-combined,send-to}-menu as submenu of static menu @tokyo4j
[#2994]
- Add `labnag` (a dialog client with message and buttons) and associated
`` option in 'If' actions. @johanmalm @Consolatis @tokyo4j [#2699]
- Support config option `` @johanmalm [#3097]
- Allow snapping to corner edges during interactive move with associated config
options ``. @tokyo4j [#2885]
- Support new values "up-left", "up-right", "down-left" and "down-right" with
`` and
``. @tokyo4j [#2885]
- XML parsing improvements as listed below. @tokyo4j [#2667] [#2967] [#2971]
- Support nested `If` and `ForEach` actions
- Parse CDATA as text all nodes
- Remove ordering constraint of attributes in ``, `` and
``
- `If` actions now works for menus
- For menus, the `name` argument no longer has to be the first argument of
``; and the `label` argument no longer has to be the first argument
of `- `
- Toggle mousebinds with the `ToggleKeybinds` action @tokyo4j [#2942]
- Add support for direction value 'any' with tiled queries. This allows users
to query for any snap directions without using multiple query statements
@lynxy [#2883]
### Fixed
- On detecting broken icon theme, fall back on 'hicolor' @Consolatis [#3126]
- Restore initially-maximized window position after unplug/plug @tokyo4j [#3042]
- Fix large client-side icon not being loaded when the rendered icon size is
larger than icon sizes from the client. @tokyo4j [#3033]
- Improve debug logging for configuring input devices @jlindgren90 [#3028]
- Fix false positives when matching desktop entries @datMaffin [#3004]
- Prevent accidental downcasting of scale in scaled-icon-buffer to avoid blurry
icons on non-integer scales and a cairo assert when using a output scale < 1.
@Consolatis #2984
- Fix xdg-shell windows moving between outputs due to configure timeout
@jlindgren90 [#2976]
- Fix segfault with toplevel `` in `menu.xml` @tokyo4j [#2970]
- Prevent hi-res mice triggering scroll actions too often @tokyo4j [#2933]
### Changed
- Change default keybind `W-` to combine cardinal directions to support
resizing of windows to fill a quarter of an output. This only affects users
who do not use an `rc.xml` (thereby using default keybinds) or use the
`` option. Previous behavior can be restored by setting
`combine="no"` as shown below. [#3081] @tokyo4j
```
```
- `Focus` and `Raise` on window border press because it is probably what most
people expect and it makes the behavior consistent with that of Openbox.
@johanmalm [#3039] [#3049]
- On interactive resize, only un-maximize the axis/axes that are being resized.
@jlindgren90 [#3043]
- Change theme setting `osd.window-switcher.*` to
`osd.window-switcher.style-classic.*`. Backward compatibility is preserved.
@tokyo4j [#2981]
- In client-list menu, add brackets around the titles of any minimised windows
@davidphilipbarr [#3002]
- Respect client-initiated window resize of non-maximized axis, for example
remember the width of vertically-maximized window resizing itself
horizontally. @jlindgren90 [#3020]
- Remember position of window along non-maximized axis during interactive move.
@jlindgren90 [#3020]
- Restore default libinput device values on reconfigure with empty value, rather
than leaving the old configuration. This makes rc.xml more declarative.
@tokyo4j [#3011]
- Change `If` action when used without a focused window to execute the ``
branch (previously it was just ignored). The reason for this is to make things
more consistent with ``. It is not anticipated that this will affect
anyone's workflow but is mentioned here for completeness.
- Make `autoEnableOutputs=no` apply only to drm outputs @jlindgren90 [#2972]
- Take into account `` for edge and region overlays @tokyo4j [#2965]
## 0.9.1 - 2025-08-02
[0.9.1-commits]
This is an earlier-than-usual release containinig bug fixes only. It has been
done on a separate branch to avoid the inclusion of refactoring and new
features.
```
0.9.1 <--- bug-fixes only
/
/
0.8.4--------0.9.0-------- <-- master
```
### Fixed
- Prevent interaction with un-initialized xdg-shell windows after unmap to fix a
bug exposed by `wlroots-0.19.0` resulting in a compositor crash in certain
(unusual) circumstances [#2948] [#2937] [#2944] @Consolatis
- Fix double-free in `img_svg_render()` failure path [#2910] @jlindgren90
- Fix swapped width/height in XWayland client `_NET_WM_ICON` stride calculation
[#2909] @jlindgren90
## 0.9.0 - 2025-07-11
[0.9.0-commits]
The main focus has been to port labwc to wlroots 0.19 [#2388] and fix associated
issues. Special thanks to @Consolatis @jlindgren90 for this.
### Added
- Add client `lab-sensible-terminal` and add a `Terminal` entry to the default
root-menu @johanmalm [#2877]
- Enhance `-v|--version` option by adding feature flags like `+xwayland -rsvg`.
@Consolatis [#2873]
- Send drm leases to XWayland clients. This requires XWayland >= 21.1.9.
@Consolatis [#553] [#2873]
- Add ``. @Consolatis @tokyo4j [#2839]
- Support theme colors defined by X11-color-names and '#rgb' syntax @jlindgren90
[#2686]
- Support basic vertical titlebar gradients and the additional theme options
listed below. @jlindgren90 [#2686]
```
window.*.title.bg: Solid | Gradient ( Vertical | SplitVertical )
window.*.title.bg.colorTo:
window.*.title.bg.color.splitTo:
window.*.title.bg.colorTo.splitTo:
```
- Support the XWayland `_NET_WM_ICON` property. Use the new `iconPriority`
window rule to enable this. @Consolatis @tokyo4j [#2840]
- Add config option ``. This enables autoscroll
(middle-click to scroll up/down) in Chromium and electron based clients
without inadvertantly pasting the primary clipboard. @johanmalm [#2832]
- Bump `xdg_shell` version from 3 to 6 @tokyo4j [#2814]
- Bump `wl_compositor` version from 5 to 6 @tokyo4j [#2812]
- Support tablet tool mouse buttons @jp7677 [#2778]
- Add libinput config options:
- `` @m4rch3n1ng [#2795]
- `sticky` @tokyo4j [#2803]
- `none|twofinger|edge` @Consolatis [#2767]
- Add `{left,right}-occupied` options to `GoToDesktop` @DreamMaoMao [#2790]
- Add config option `` @diredocks [#2789]
- Add missing tracking of configure serials for xdg-shell surface to fix issue
with mpv @jlindgren90 [#2774] [#2788]
- Add support for the following Wayland protocols:
- `ext-data-control` @Consolatis [#2829]
- `alpha-modifier` @Consolatis [#2829]
- `xdg-toplevel-icon protocol`. Use the new `iconPriority` window rule to
enable this. @tokyo4j [#2755]
- `drm-syncobj` protocol @zeusgoose [#2737]
- `ext-image-copy-capture` protocol @any1 [#2740]
- Support both axis for XWayland client side maximize requests.
@Consolatis [#2728]
- Add scroll emulation for cursor motion and associated actions @jp7677
[#2678]:
- `EnableScrollWheelEmulation`
- `DisableScrollWheelEmulation`
- `ToggleScrollWheelEmulation`
### Fixed
- Fix flicking with negative screen/window resistance @ahesford [#2886]
- Fix layer-shell UAF bug on TTY change @johanmalm @Consolatis [#2874]
- Allow dragged windows to be moved to other workspaces. @Sumandora [#2868]
- Destroy xdg-shell popups when their parent is destroyed to fix potential
compositor crash. @Consolatis [#2846]
- Clear SSD hover effects after touch-up @jp7677 [#2837]
- Close compositor menus on first touch up/down event to prevent menus from
staying open during touch interactions in native touch mode. @jp7677 [#2827]
- Omit pointer cursor shape for tablet tools to prevent a resize cursor for
out-of-surface scrolling with a tablet tool in recent GTK4 (which uses the
cursor shape protocol). @jp7677 [#2808]
- For XWayland, give focus to a modal dialog rather than its parent.
@jlindgren90 [#2722]
- Do not send configure events in unmap handler to fix issues with `wshowkeys`
and `kitten` @tokyo4j @johanmalm [#1153] [#1154] [#2867]
- Window switcher fixes: @tokyo4j [#2770]
- Always show title with ``. Before this patch, titles
were not shown if identical to identifiers.
- Always show output name with ``. Before this patch,
output names were not shown if there was only one output.
- Send fractional scale to layer-shell surfaces before map. @Consolatis [#2768]
- Only configure initialized layer-shell surfaces to fix bug with
`kitten quick-access-terminal` @alex-huff [#2736] [#2745]
- Improve focus semantics for XWayland windows using the Globally Active input
model to fix issues with Zoom, WeChat and CLion @jlindgren90 [#1142]
[#2811] [#2819]
- Provide better support for XWayland client keyboard focus grabs by using the
new `grab_focus` signal. @jlindgren90 [#1142]
- Guard against negative sizes in window-switching and menu graphical artefacts.
@tokyo4j [#2727]
- Do not broadcast keyboard modifiers from virtual keyboards to fix issue with
per-window layout settings. @orfeasxyz [#2723] [#2724]
- Gracefully exit when no fonts are installed @tokyo4j [#2713]
- config: validate total osd field width to ensure it does not exceed 100%.
@tokyo4j [#2710]
### Changed
- Replace alacritty in default keybind with `lab-sensible-terminal` @tokyo4j
[#2891]
- Use the `Super` modifier instead of `Alt` for the default mousebinds `A-Left`
and `A-Right` (for move and resize) to avoid interfering with some clients
like CAD programs and games @johanmalm [#2831]
- Deprecate the default keybinds listed below. @johanmalm [#2831]
- `A-F3` for bemenu-run because it is too close to A-F4 and it is better to be
agnostic on choice of launcher.
- `A-` for `MoveToEdge` because `Alt-` keybinds should be for clients
to use and this one results in frequent user complaints because it prevents
some common usage patterns like alt-left/right in web browers.
- Change default titlebar menu button from a dot to an arrow @johanmalm [#2844]
- When `dragLock` is set to `yes`, the drag no longer expires after a short
delay (known as `Sticky` mode) as recommended by libinput [#2803]. The timeout
based behavior can be restored via the snippet below.
```xml
timeout
```
## 0.8.4 - 2025-05-02
[0.8.4-commits]
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 - 2025-02-21
[0.8.3-commits]
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
```
- 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 - 2024-12-13
[0.8.2-commits]
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 - 2024-10-25
[0.8.1-commits]
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
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 `