Skip to content
labwc 0.7.2

This release is the second in a row that is larger than usual in terms of both
fixes and new features. Significant additions include input-methods, pipemenus,
snap-to-edge overlays and optionally drop-shadows.

As usual, most of the commits are by the core devs: @ahesford, @Consolatis,
@jlindgren90, @johanmalm and @tokyo4j, but we also have many great
contributions from others as noted in the log.

Added

- Add `<menu><ignoreButtonReleasePeriod>` to prevent clicks with small movements
  from inadvertantly closing a menu or selecting a menu item. This is the
  equivalent of `<menu><hideDelay>` on Openbox. #1760
- Support drop-shadows (disabled by default) for windows using server-side
  decorations. Written-by: @cillian64

```xml
<theme>
  <dropShadows>yes|no</dropShadows>
</theme>
```

```
window.active.shadow.size: 60
window.inactive.shadow.size: 40
window.active.shadow.color: #00000060
window.inactive.shadow.color: #00000040
```

- Add window-rule `ignoreConfigureRequest` to ignore X11 client-side
  configure requests (positioning and resizing). #1446
- Support window-rules based on window type: `<windowRule type="">`, where
  type can be for example `NET_WM_WINDOW_TYPE_DESKTOP` for an XWayland
  window. Written-by: @xi @txgk
- Add `none` branch to the `ForEach` action. Written-by: @nicolas3121
  #1298

```xml
<action name="ForEach">
  <query identifier="foo"/>
  <then>
    <!-- carry out some action on match -->
  </then>
  <none>
    <!-- carry out some action if there were no matches at all -->
  </none>
</action>
```

- Add -S|--session `<command>` option to start `<command>` on startup and
  to terminate the compositor when <command> exits. This is useful for
  session management as it allows the session client (for example
  `lxqt-session`) to terminate labwc when exiting itself.
- In theme setting color definitions, support inline alpha encoding like
  `#aabbccff`
- Add window-switcher custom field inspired by printf formatting. #1670
  Written-by: @droc12345 and @Consolatis

```xml
<windowSwitcher>
  <fields>
    <field content="custom" format="foobar %b %3s %-10o %-20W %-10i%t" width="100%" />
  </fields>
</windowSwitcher>
```

- Support defining window-switcher width as a percentage of output
  (display) width. Written-by: @droc12345

```
osd.window-switcher.width: 75%
```

- Support Openbox compatible pipe-menus. See labwc-menu(5) for usage.
- Add snap-to-edge overlay. Written-by: @tokyo4j. PR #1652 #1702
  This includes the following new config and theme settings:

```xml
<snapping>
  <overlay>
    <enabled>yes|no</enabled>
    <delay inner="500" outer="500"/>
  </overlay>
</snapping>
```

```
snapping.overlay.[region|edge].bg.enabled: yes|no
snapping.overlay.[region|edge].border.enabled: yes|no
snapping.overlay.[region|edge].bg.color: #8080b380
snapping.overlay.[region|edge].border.width: 1
snapping.overlay.[region|edge].border.color: #ffffff,#000000,#ffffff
```

- Add theme settings listed below for window-switcher preview border.
  Written-by: @tokyo4j

```
osd.window-switcher.preview.border.width: 2
osd.window-switcher.preview.border.color: #ffffff,#00a2ff,#ffffff
```

- Support libinput config option for calibration matrices.
  `<libinput><device><calibrationMatrix>`. Written-by: @SnowNF
- Add new window-switcher field content types `workspace`, `state`,
  `type_short` and `output`. Written-by: @droc12345 PR #1623

```xml
<windowSwitcher allWorkspaces="yes">
  <fields>
    <field content="workspace" width="5%" />
    <field content="state" width="3%" />
    <field content="type_short" width="3%" />
    <field content="output" width="9%" />
    <field content="identifier" width="30%" />
    <field content="title" width="50%" />
  </fields>
</windowSwitcher>
```

- Support input methods (or input method editors, commonly abbreviated
  IMEs) like Fcitx5, using protocols text-input-v3 and input-method-v2.
  This includes IME popups. Written-by: @tokyo4j
- Add `atCursor` attribute to action `ShowMenu` so that a window's
  "client-menu" could optionally be launched at the pointer using a
  keybind as follows:

```xml
<action name="ShowMenu" menu="value" atCursor="yes" />
```

- Support workspace-prefix (`<desktops><prefix>`) for workspace-switcher
  onscreen display when naming workspaces by digits, for example 1, 2, 3
  Written-by: @droc12345
- Process all `*.env` files in an `environment.d` directory alongside and
  in the same way as each potential `environment` file.
- Allow empty variables in `environment` files. In other words, respond to
  variable declarations of the form "VARIABLE=", with no following value,
  by setting the corresponding environment variable as an empty string.
- Add optional headless fallback output that is automatically created when
  no other output exists.  Enable this by setting the environment variable
  `LABWC_FALLBACK_OUTPUT` to the desired output name.  The feature
  benefits applications like wayvnc the most by ensuring that there is
  always an output available to connect to. #1618
  Co-Authored-By: Simon Long <simon@raspberrypi.com>
- Optionally show windows on all workspaces in window-switcher.

```xml
<windowSwitcher allWorkspaces="yes">
```

- Handle touch on headerbar using cursor emulate events. Issue #1550
  Written-by: @spl237
- Updated dbus activation environment with more environment variables
  (`XCURSOR_SIZE`, `XCURSOR_THEME`, `XDG_SESSION_TYPE`, `LABWC_PID`)
  Written-by: @winerysearch  Issue #694
- Run `shutdown` script on exit (equivalent to `autostart` on startup)
- Add `wrap` argument to action `MoveToOutput`. Wrap is disabled by
  default to keep the user interface consistent. Example usage:

```xml
<action name="MoveToOutput" direction="right" wrap="yes" />
```

Fixed

- Prevent Chromium from crashing when started after a virtual keyboard is
  destroyed. #1789
- Fix top-layer not showing when there is a minimized full-screen window
  Written-by: @fberg
- Prevent the following whilst window-switcher cycling (#1640):
  - Cursor actions on the window previews
  - Request-xdg-activation
  - Foreign toplevel request-activate
  - XWayland request-activate
- Prevent shaded XWayland windows from getting cursor events. #1753
- Fix menu-parser use-after-free bug. #1780
- Update top layer visibility on map to fix bug with Steam's Big Picture Mode
  window which requests fullscreen before mapping. #1763
- Do not update server-side-decoration if window is too small. #1762
- Fix crash on `Kill` action with XWayland windows. #1739
- Update workspaces on `--reconfigure`. Written-by: @tokyo4j
- Notify idle manager when emulating cursor movement.
- Fix GrowToEdge/ShrinkToEdge action bug caused by clients ignoring the
  requested size, for example a terminal honouring size-hints.
- Fix `assert()` on VT switch. Issue #1667
- Ensure titlebar has consistent look when using transparency. #1684
- Fix dnd bug where dnd does not finish properly on cursor-button-release
  if there is no surface under the cursor such as on the desktop when no
  background client is running. #1673
- Send cursor-button release event to CSD client before finishing window
  dragging to avoid a bug whereby the release event is incorrectly sent to
  a layer-shell client at the end of a drag.
- Validate double-click against SSD part type because clicks on
  different parts of a client in quick succession should not be
  interpreted as a double click. #1657
- Fix bug that region overlay is not shown when a modifier key is re-
  pressed.
- Fix workspace-switcher on-screen-display positioning of text using
  right-to-left (RTL) locales. Written-by: @micko01 Issue #1633
- Unconstrain xdg-shell popups to usable area (rather than full output) so
  that popups do not cover layer-shell clients such as panels.
  Written-by: @tokyo4j
- Exclude unfocusable XWayland windows (for example notifications and
  floating toolbars) from being processed by wlr-foreign-toplevel protocol
  as these windows should not be shown in taskbars/docks/etc.
- Render text buffers with opaque backgrounds because subpixel text
  rendering over a transparent background does not work properly with
  cairo/pango. PR #1631 issue #1684
- Fallback on layout 'us' if a keymap cannot be created for the provided
  `XKB_DEFAULT_LAYOUT`. If keymap still cannot be created, exit with a
  helpful message instead of a segv crash.
- Reload cursor theme and size on reconfigure. This gives instant feedback, but
  only works for server side cursors or clients using the cursor-shape protocol.
  Written-by: @spl237 and @Consolatis. #1587 #1619
- Fix a number of surface-focus related short-comings:
  - Handle cursor-button-press on layer-shell subsurfaces and fix bug in
    `get_cursor_context()` which resulted in layer-surfaces not being
    detected correctly. PR #1594
  - Overhaul the logic for giving keyboard focus to layer-shell clients.
    PR #1599 Issue #1653
- Fix move/resize bug manifesting itself on touchpad taps with
  `<tapAndDrag>` disabled because libinput sends button press & release
  signals so quickly that `interactive_finish()` is never called.
  Written-by: @tokyo4j
- Include always-on-top windows in window-switcher.
- Make resize flicker free again when running labwc nested (it was a
  regression caused by wlroots 0.17).
- Clean up dbus and systemd activation environments on exit
- Fix `view_get_adjacent_output()` bug resulting in often returning an
  incorrect output when using more than two outputs. Issue #1582

Changed

- Support press-move-release when interacting with the labwc root-menu. #1750
- In theme settings, mark color definitions in the format `#rrggbb aaa` as
  deprecated (still supported, but will removed in some future release) in
  favor of the more commonly used `#rrggbbaa`.
- If your `rc.xml` contains a keybind to show menu "client-menu", it will
  be launched at pointer rather than the top-left part of the window. To
  keep the old behaviour, redefine it as follows:

```xml
<keybind key="A-Space">
  <action name="ShowMenu" menu="client-menu" atCursor="No"/>
</keybind>
```

- Change action `MoveToOutput` argument 'name' to 'output' (because 'name'
  is already used by the action itself).  Issue #1589

```xml
<action name="MoveToOutput" output="HDMI-A-1"/>
```

- Do not deactivate window when giving keyboard focus to a non-view
  surface such as a popup or layer-shell surface.  This matches Openbox
  behavior.
- Treat Globally Active XWayland windows according to type to fix focus
  issues with IntelliJ IDEA and JDownloader 2. Issues: #1139 #1341
  Also revert f6e3527 which allowed re-focus between Globally Active
  XWayland windows of the same PID.
- Only update dbus and systemd activation environments when running on
  the DRM backend or by explicit request using environment variable
  `LABWC_UPDATE_ACTIVATION_ENV`.