Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package labwc for openSUSE:Factory checked in at 2026-03-16 14:17:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/labwc (Old) and /work/SRC/openSUSE:Factory/.labwc.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "labwc" Mon Mar 16 14:17:08 2026 rev:17 rq:1339180 version:0.9.6 Changes: -------- --- /work/SRC/openSUSE:Factory/labwc/labwc.changes 2026-03-05 17:18:13.874309244 +0100 +++ /work/SRC/openSUSE:Factory/.labwc.new.8177/labwc.changes 2026-03-16 14:20:22.860887851 +0100 @@ -1,0 +2,14 @@ +Sun Mar 15 21:30:07 UTC 2026 - Muhammad Akbar Yanuar Mantari <[email protected]> + +- Update to version 0.9.6: + * Disable outputs where all modes fail + * Fix regression in 0.9.4 that causes NextWindow action to + segfault when no outputs are connected. This fixes a + window-switcher crash with some Nvidia GPUs/drivers after + suspend + * Fix typo to allow xdg-dialog-v1 global + * Disallow X11 window always-on-top requests by default to fix an + issue whereby Alt+Tab cannot be used to switch to other + windows when using some XWayland Wine games + +------------------------------------------------------------------- Old: ---- labwc-0.9.5.tar.gz New: ---- labwc-0.9.6.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ labwc.spec ++++++ --- /var/tmp/diff_new_pack.pYKXYb/_old 2026-03-16 14:20:23.556916792 +0100 +++ /var/tmp/diff_new_pack.pYKXYb/_new 2026-03-16 14:20:23.560916959 +0100 @@ -24,7 +24,7 @@ %define slname libsfdo %define slver 0.1.4 Name: labwc -Version: 0.9.5 +Version: 0.9.6 Release: 0 Summary: A Wayland window-stacking compositor License: GPL-2.0-only ++++++ labwc-0.9.5.tar.gz -> labwc-0.9.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/labwc-0.9.5/NEWS.md new/labwc-0.9.6/NEWS.md --- old/labwc-0.9.5/NEWS.md 2026-03-04 21:56:03.000000000 +0100 +++ new/labwc-0.9.6/NEWS.md 2026-03-15 14:21:39.000000000 +0100 @@ -9,6 +9,7 @@ | Date | All Changes | wlroots version | lines-of-code | |------------|---------------|-----------------|---------------| +| 2026-03-15 | [0.9.6] | 0.19.2 | 29271 | | 2026-03-04 | [0.9.5] | 0.19.2 | 29251 | | 2026-02-27 | [0.9.4] | 0.19.2 | 29225 | | 2025-12-19 | [0.9.3] | 0.19.2 | 28968 | @@ -41,7 +42,7 @@ | 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.6]: NEWS.md#096---2026-03-15 [0.9.5]: NEWS.md#095---2026-03-04 [0.9.4]: NEWS.md#094---2026-02-27 [0.9.3]: NEWS.md#093---2025-12-19 @@ -108,9 +109,42 @@ [wlroots-5098]:https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/5098 [gtk-8792]: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/8792 -## unreleased +## 0.9.6 - 2026-03-15 -[unreleased-commits] +[0.9.6-commits] + +This is an earlier-than-usual release containing bug fixes only. It has been +done on a separate branch (0.9.5-maintenance) to avoid the inclusion of +refactoring and new features. + +``` + 0.9.6 <--- bug-fixes only + / + / +0.9.4--------0.9.5-------- <-- master +``` + +### Fixed + +- Disable outputs where all modes fail [#3428] [#3429] @Consolatis @kode54 +- Fix regression in `0.9.4` that causes `NextWindow` action to segfault when + no outputs are connected. This fixes a window-switcher crash with some + Nvidia GPUs/drivers after suspend [#3425] [#3430] @Consolatis +- Fix typo to allow `xdg-dialog-v1` global [#3426] @xi + +### Changed + +- Disallow X11 window always-on-top requests by default to fix an issue whereby + Alt+Tab cannot be used to switch to other windows when using some XWayland + Wine games [#3441]. Add window-rule property `allowAlwaysOnTop` to optionally + allow this always-on-top requests. Add the snippet below to the `rc.xml` file + to restore the previous behaviour. [#3445] @Consolatis + +``` +<windowRules> + <windowRule identifier="*" allowAlwaysOnTop="yes" /> +</windowRules> +``` ## 0.9.5 - 2026-03-04 @@ -2607,7 +2641,7 @@ ShowMenu [Keep a Changelog]: https://keepachangelog.com/en/1.0.0/ -[unreleased-commits]: https://github.com/labwc/labwc/compare/0.9.5...HEAD +[0.9.6-commits]: https://github.com/labwc/labwc/compare/0.9.5...0.9.6 [0.9.5-commits]: https://github.com/labwc/labwc/compare/0.9.4...0.9.5 [0.9.4-commits]: https://github.com/labwc/labwc/compare/0.9.3...0.9.4 [0.9.3-commits]: https://github.com/labwc/labwc/compare/0.9.2...0.9.3 @@ -3135,8 +3169,18 @@ [#3365]: https://github.com/labwc/labwc/pull/3365 [#3372]: https://github.com/labwc/labwc/pull/3372 [#3373]: https://github.com/labwc/labwc/pull/3373 +[#3387]: https://github.com/labwc/labwc/pull/3387 [#3400]: https://github.com/labwc/labwc/pull/3400 [#3406]: https://github.com/labwc/labwc/pull/3406 [#3410]: https://github.com/labwc/labwc/pull/3410 [#3411]: https://github.com/labwc/labwc/pull/3411 [#3412]: https://github.com/labwc/labwc/pull/3412 +[#3425]: https://github.com/labwc/labwc/pull/3425 +[#3426]: https://github.com/labwc/labwc/pull/3426 +[#3428]: https://github.com/labwc/labwc/pull/3428 +[#3429]: https://github.com/labwc/labwc/pull/3429 +[#3430]: https://github.com/labwc/labwc/pull/3430 +[#3440]: https://github.com/labwc/labwc/pull/3440 +[#3441]: https://github.com/labwc/labwc/pull/3441 +[#3443]: https://github.com/labwc/labwc/pull/3443 +[#3445]: https://github.com/labwc/labwc/pull/3445 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/labwc-0.9.5/docs/labwc-config.5.scd new/labwc-0.9.6/docs/labwc-config.5.scd --- old/labwc-0.9.5/docs/labwc-config.5.scd 2026-03-04 21:56:03.000000000 +0100 +++ new/labwc-0.9.6/docs/labwc-config.5.scd 2026-03-15 14:21:39.000000000 +0100 @@ -1354,6 +1354,13 @@ *ignoreConfigureRequest* prevents a X11 window to position and size itself. +*<windowRules><windowRule allowAlwaysOnTop="">* [yes|no|default] + *allowAlwaysOnTop* allows a X11 window to control its always-on-top + state ('above' in X11 terms). + + Note: X11 window always-on-top requests are disallowed by default. + This window rule offers a means of allowing it. + *<windowRules><windowRule fixedPosition="">* [yes|no|default] *fixedPosition* disallows interactive move/resize and prevents re-positioning in response to changes in reserved output space, which @@ -1429,9 +1436,25 @@ ## ENVIRONMENT VARIABLES -*XCURSOR_THEME* and *XCURSOR_SIZE* are supported to set cursor theme -and size respectively. The default size is 24. System cursor themes can -typically be found with a command such as: +*XCURSOR_PATH* + Specify a colon-separated list of paths to look for mouse cursors in. + Default + ~/.local/share/icons: + ~/.icons: + /usr/share/icons: + /usr/share/pixmaps: + ~/.cursors: + /usr/share/cursors/xorg-x11: + /usr/X11R6/lib/X11/icons: + +*XCURSOR_SIZE* + Specify an alternative mouse cursor size in pixels. Requires + XCURSOR_THEME to be set also. Default 24. + +*XCURSOR_THEME* + Specify a mouse cursor theme within XCURSOR_PATH. + +System cursor themes can typically be found with a command such as: ``` find /usr/share/icons/ -type d -name "cursors" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/labwc-0.9.5/docs/labwc.1.scd new/labwc-0.9.6/docs/labwc.1.scd --- old/labwc-0.9.5/docs/labwc.1.scd 2026-03-04 21:56:03.000000000 +0100 +++ new/labwc-0.9.6/docs/labwc.1.scd 2026-03-15 14:21:39.000000000 +0100 @@ -141,7 +141,7 @@ *LABWC_DEBUG_KEY_STATE* Enable logging of press and release events for bound keys (generally - key-combinations like *Ctrl-Alt-t*) + key-combinations like *Ctrl-Alt-t*). # SEE ALSO diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/labwc-0.9.5/include/window-rules.h new/labwc-0.9.6/include/window-rules.h --- old/labwc-0.9.5/include/window-rules.h 2026-03-04 21:56:03.000000000 +0100 +++ new/labwc-0.9.6/include/window-rules.h 2026-03-15 14:21:39.000000000 +0100 @@ -40,6 +40,7 @@ enum property ignore_configure_request; enum property fixed_position; enum property icon_prefer_client; + enum property allow_always_on_top; struct wl_list link; /* struct rcxml.window_rules */ }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/labwc-0.9.5/meson.build new/labwc-0.9.6/meson.build --- old/labwc-0.9.5/meson.build 2026-03-04 21:56:03.000000000 +0100 +++ new/labwc-0.9.6/meson.build 2026-03-15 14:21:39.000000000 +0100 @@ -1,7 +1,7 @@ project( 'labwc', 'c', - version: '0.9.5', + version: '0.9.6', license: 'GPL-2.0-only', meson_version: '>=0.59.0', default_options: [ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/labwc-0.9.5/src/config/rcxml.c new/labwc-0.9.6/src/config/rcxml.c --- old/labwc-0.9.5/src/config/rcxml.c 2026-03-04 21:56:03.000000000 +0100 +++ new/labwc-0.9.6/src/config/rcxml.c 2026-03-15 14:21:39.000000000 +0100 @@ -300,6 +300,8 @@ set_property(content, &window_rule->ignore_configure_request); } else if (!strcasecmp(key, "fixedPosition")) { set_property(content, &window_rule->fixed_position); + } else if (!strcasecmp(key, "allowAlwaysOnTop")) { + set_property(content, &window_rule->allow_always_on_top); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/labwc-0.9.5/src/cycle/cycle.c new/labwc-0.9.6/src/cycle/cycle.c --- old/labwc-0.9.5/src/cycle/cycle.c 2026-03-04 21:56:03.000000000 +0100 +++ new/labwc-0.9.6/src/cycle/cycle.c 2026-03-15 14:21:39.000000000 +0100 @@ -346,8 +346,10 @@ struct view *view; for_each_view(view, &server->views, criteria) { - if (!(cycle_outputs & view->output->id_bit)) { - continue; + if (filter.output != CYCLE_OUTPUT_ALL) { + if (!view->output || !(cycle_outputs & view->output->id_bit)) { + continue; + } } if (cycle_app_id && strcmp(view->app_id, cycle_app_id) != 0) { continue; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/labwc-0.9.5/src/output.c new/labwc-0.9.6/src/output.c --- old/labwc-0.9.5/src/output.c 2026-03-04 21:56:03.000000000 +0100 +++ new/labwc-0.9.6/src/output.c 2026-03-15 14:21:39.000000000 +0100 @@ -362,8 +362,10 @@ } /* Reset mode if none worked (we may still try to commit) */ - wlr_output_state_set_mode(state, NULL); - return false; + wlr_log(WLR_DEBUG, "no working fixed mode found for output %s", wlr_output->name); + state->committed &= ~WLR_OUTPUT_STATE_MODE; + + return wlr_output_test_state(wlr_output, state); } static void @@ -378,10 +380,8 @@ /* is_client_request */ false)) { wlr_log(WLR_INFO, "mode test failed for output %s", wlr_output->name); - /* - * Continue anyway. For some reason, the test fails when - * running nested, yet the following commit succeeds. - */ + wlr_output_state_set_enabled(&output->pending, false); + return; } if (rc.adaptive_sync == LAB_ADAPTIVE_SYNC_ENABLED) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/labwc-0.9.5/src/server.c new/labwc-0.9.6/src/server.c --- old/labwc-0.9.5/src/server.c 2026-03-04 21:56:03.000000000 +0100 +++ new/labwc-0.9.6/src/server.c 2026-03-15 14:21:39.000000000 +0100 @@ -277,7 +277,7 @@ "zxdg_importer_v1", "zxdg_importer_v2", "xdg_toplevel_icon_manager_v1", - "xdg_dialog_v1", + "xdg_wm_dialog_v1", /* plus */ "wp_alpha_modifier_v1", "wp_linux_drm_syncobj_manager_v1", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/labwc-0.9.5/src/view.c new/labwc-0.9.6/src/view.c --- old/labwc-0.9.5/src/view.c 2026-03-04 21:56:03.000000000 +0100 +++ new/labwc-0.9.6/src/view.c 2026-03-15 14:21:39.000000000 +0100 @@ -1541,6 +1541,9 @@ view_set_layer(struct view *view, enum view_layer layer) { assert(view); + if (view->layer == layer) { + return; + } view->layer = layer; wlr_scene_node_reparent(&view->scene_tree->node, view->workspace->view_trees[layer]); @@ -2499,9 +2502,6 @@ wl_list_remove(&view->set_title.link); wl_list_remove(&view->destroy.link); - zfree(view->title); - zfree(view->app_id); - if (view->foreign_toplevel) { foreign_toplevel_destroy(view->foreign_toplevel); view->foreign_toplevel = NULL; @@ -2556,6 +2556,9 @@ assert(wl_list_empty(&view->events.set_icon.listener_list)); assert(wl_list_empty(&view->events.destroy.listener_list)); + zfree(view->title); + zfree(view->app_id); + /* Remove view from server->views */ wl_list_remove(&view->link); free(view); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/labwc-0.9.5/src/window-rules.c new/labwc-0.9.6/src/window-rules.c --- old/labwc-0.9.5/src/window-rules.c 2026-03-04 21:56:03.000000000 +0100 +++ new/labwc-0.9.6/src/window-rules.c 2026-03-15 14:21:39.000000000 +0100 @@ -110,6 +110,10 @@ && !strcasecmp(property, "iconPreferClient")) { return rule->icon_prefer_client; } + if (rule->allow_always_on_top + && !strcasecmp(property, "allowAlwaysOnTop")) { + return rule->allow_always_on_top; + } } } return LAB_PROP_UNSPECIFIED; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/labwc-0.9.5/src/xwayland.c new/labwc-0.9.6/src/xwayland.c --- old/labwc-0.9.5/src/xwayland.c 2026-03-04 21:56:03.000000000 +0100 +++ new/labwc-0.9.6/src/xwayland.c 2026-03-15 14:21:39.000000000 +0100 @@ -431,6 +431,11 @@ wl_container_of(listener, xwayland_view, request_above); struct view *view = &xwayland_view->base; + if (window_rules_get_property(view, "allowAlwaysOnTop") != LAB_PROP_TRUE) { + wlr_log(WLR_INFO, "X11 client side always on top request rejected"); + return; + } + view_set_layer(view, xwayland_view->xwayland_surface->above ? VIEW_LAYER_ALWAYS_ON_TOP : VIEW_LAYER_NORMAL); } @@ -727,8 +732,11 @@ axis |= VIEW_AXIS_VERTICAL; } view_maximize(view, axis); - view_set_layer(view, xsurface->above - ? VIEW_LAYER_ALWAYS_ON_TOP : VIEW_LAYER_NORMAL); + + if (window_rules_get_property(view, "allowAlwaysOnTop") == LAB_PROP_TRUE) { + view_set_layer(view, xsurface->above + ? VIEW_LAYER_ALWAYS_ON_TOP : VIEW_LAYER_NORMAL); + } /* * We could also call set_initial_position() here, but it's not * really necessary until the view is actually mapped (and at
