diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ba7406cf..483e7bc9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -82,7 +82,7 @@ jobs: run: | pacman-key --init pacman -Syu --noconfirm - pacman -S --noconfirm git meson clang wlroots0.19 libdrm libinput \ + pacman -S --noconfirm git meson clang wlroots0.20 libdrm libinput \ wayland-protocols cairo pango libxml2 xorg-xwayland librsvg \ libdisplay-info gdb ttf-dejavu foot libsfdo cmocka @@ -95,6 +95,7 @@ jobs: apt-get install -y git gcc clang gdb xwayland apt-get build-dep -y labwc apt-get build-dep -y libwlroots-0.19-dev + apt-get build-dep -y libxkbcommon-dev - name: Install FreeBSD dependencies if: matrix.name == 'FreeBSD' @@ -106,7 +107,7 @@ jobs: pkg set -yn pkg:mesa-dri # hack to skip llvm dependency pkg install -y git pcre2 meson gcc pkgconf cairo pango evdev-proto \ hwdata wayland-protocols libdisplay-info libepoll-shim \ - wlroots019 + wlroots020 run: echo "setup done" - name: Install Void Linux dependencies @@ -121,7 +122,7 @@ jobs: xbps-install -y git meson gcc clang pkg-config scdoc \ cairo-devel glib-devel libpng-devel librsvg-devel libxml2-devel \ pango-devel wlroots0.19-devel gdb bash xorg-server-xwayland \ - dejavu-fonts-ttf libsfdo-devel foot + dejavu-fonts-ttf libsfdo-devel foot hwids # These builds are executed on all runners - name: Build with gcc @@ -209,6 +210,19 @@ jobs: meson compile -C build-gcc-no-feature ' | $TARGET + # No backend build, run on Arch only + - name: Build with gcc - no-backends test + if: matrix.name == 'Arch' + run: | + echo ' + cd "$GITHUB_WORKSPACE" + export CC=gcc + meson setup build-gcc-no-backends \ + -Dwlroots:backends= -Dwlroots:session=disabled --werror \ + --force-fallback-for=wlroots + meson compile -C build-gcc-no-backends + ' | $TARGET + # Unit tests, run on Arch only - name: Build with gcc - unit test if: matrix.name == 'Arch' diff --git a/NEWS.md b/NEWS.md index 8787fef2..d721ed3b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -9,7 +9,7 @@ The format is based on [Keep a Changelog] | Date | All Changes | wlroots version | lines-of-code | |------------|---------------|-----------------|---------------| -| 2026-03-15 | [unreleased] | 0.19.2 | 29244 | +| 2026-03-31 | [unreleased] | 0.20.0 | 27402 | | 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 | @@ -115,8 +115,27 @@ There are some regression warnings worth noting for the switch to wlroots 0.19: [unreleased-commits] +The codebase has been ported to wlroots 0.20 [#2956] @Consolatis + +### Added + +- Add configuration option `` + to enable tablet tool pressure range libinput settings [#2916] @jp7677 +- Add `wl_fixes` interface [#2956] @kode54 + ### Fixed +- Gracefully handle missing XWayland packages, so that a labwc compositor which + has been built with XWayland support (which is optional) can be run even if + XWayland is not installed. [#3401] @quite +- Rework how XWayland window initial geometry is set to ensure that the natural + geometry does not exceed the usable output area when handling initial + maximize/fullscreen requests. [#3439] @jlindgren90. +- For XWayland windows, sync always-on-top state back to X.Org Server. This + makes `wmctrl -b toggle,above` work. [#3446] @jlindgren90 +- Fix missing title and icon with XWayland client override-redirect toggle. + There are no known issues with clients, so this is purely for preventative + purposes. [#3450] @jlindgren90 - Update titlebar title when set to empty and fix an associated issue causing the title to be misplaced outside of the titlebar when the window is resized. [#3443] @tokyo4j @@ -127,6 +146,10 @@ There are some regression warnings worth noting for the switch to wlroots 0.19: - Allow policy-based placement to apply when an initially-maximized/fullscreen view is restored to floating geometry. [#3387] @jlindgren90 +### Changed + +- Drop cosmic-workspace protocol [#3031] @tokyo4j + ## 0.9.6 - 2026-03-15 [0.9.6-commits] @@ -3098,6 +3121,7 @@ Compile with wlroots 0.12.0 and wayland-server >=1.16 [#2909]: https://github.com/labwc/labwc/pull/2909 [#2910]: https://github.com/labwc/labwc/pull/2910 [#2914]: https://github.com/labwc/labwc/pull/2914 +[#2916]: https://github.com/labwc/labwc/pull/2916 [#2933]: https://github.com/labwc/labwc/pull/2933 [#2937]: https://github.com/labwc/labwc/pull/2937 [#2939]: https://github.com/labwc/labwc/pull/2939 @@ -3105,6 +3129,7 @@ Compile with wlroots 0.12.0 and wayland-server >=1.16 [#2943]: https://github.com/labwc/labwc/pull/2943 [#2944]: https://github.com/labwc/labwc/pull/2944 [#2948]: https://github.com/labwc/labwc/pull/2948 +[#2956]: https://github.com/labwc/labwc/pull/2956 [#2965]: https://github.com/labwc/labwc/pull/2965 [#2967]: https://github.com/labwc/labwc/pull/2967 [#2970]: https://github.com/labwc/labwc/pull/2970 @@ -3122,6 +3147,7 @@ Compile with wlroots 0.12.0 and wayland-server >=1.16 [#3020]: https://github.com/labwc/labwc/pull/3020 [#3024]: https://github.com/labwc/labwc/pull/3024 [#3028]: https://github.com/labwc/labwc/pull/3028 +[#3031]: https://github.com/labwc/labwc/pull/3031 [#3033]: https://github.com/labwc/labwc/pull/3033 [#3039]: https://github.com/labwc/labwc/pull/3039 [#3042]: https://github.com/labwc/labwc/pull/3042 @@ -3189,6 +3215,7 @@ Compile with wlroots 0.12.0 and wayland-server >=1.16 [#3373]: https://github.com/labwc/labwc/pull/3373 [#3387]: https://github.com/labwc/labwc/pull/3387 [#3400]: https://github.com/labwc/labwc/pull/3400 +[#3401]: https://github.com/labwc/labwc/pull/3401 [#3406]: https://github.com/labwc/labwc/pull/3406 [#3410]: https://github.com/labwc/labwc/pull/3410 [#3411]: https://github.com/labwc/labwc/pull/3411 @@ -3198,7 +3225,10 @@ Compile with wlroots 0.12.0 and wayland-server >=1.16 [#3428]: https://github.com/labwc/labwc/pull/3428 [#3429]: https://github.com/labwc/labwc/pull/3429 [#3430]: https://github.com/labwc/labwc/pull/3430 +[#3439]: https://github.com/labwc/labwc/pull/3439 [#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 +[#3446]: https://github.com/labwc/labwc/pull/3446 +[#3450]: https://github.com/labwc/labwc/pull/3450 diff --git a/clients/labnag.c b/clients/labnag.c index 237ee958..82b6e8cd 100644 --- a/clients/labnag.c +++ b/clients/labnag.c @@ -206,6 +206,16 @@ static void get_text_size(cairo_t *cairo, const PangoFontDescription *desc, int *width, int *height, int *baseline, double scale, bool markup, const char *fmt, ...) { + if (width) { + *width = 0; + } + if (height) { + *height = 0; + } + if (baseline) { + *baseline = 0; + } + va_list args; va_start(args, fmt); gchar *buf = g_strdup_vprintf(fmt, args); diff --git a/clients/meson.build b/clients/meson.build index 467bc035..55a4c0e5 100644 --- a/clients/meson.build +++ b/clients/meson.build @@ -1,59 +1,61 @@ -wayland_client = dependency('wayland-client') -wayland_cursor = dependency('wayland-cursor') +if get_option('labnag').allowed() + wayland_client = dependency('wayland-client') + wayland_cursor = dependency('wayland-cursor') -nag_sources = files( - 'labnag.c', - 'pool-buffer.c', -) - -wl_protocol_dir = wayland_protos.get_variable('pkgdatadir') - -protocols = [ - wl_protocol_dir / 'stable/tablet/tablet-v2.xml', - wl_protocol_dir / 'stable/xdg-shell/xdg-shell.xml', - wl_protocol_dir / 'staging/cursor-shape/cursor-shape-v1.xml', - '../protocols/wlr-layer-shell-unstable-v1.xml', -] - -foreach xml : protocols - nag_sources += custom_target( - xml.underscorify() + '_c', - input: xml, - output: '@BASENAME@-protocol.c', - command: [wayland_scanner, 'private-code', '@INPUT@', '@OUTPUT@'], + nag_sources = files( + 'labnag.c', + 'pool-buffer.c', ) - nag_sources += custom_target( - xml.underscorify() + '_client_h', - input: xml, - output: '@BASENAME@-client-protocol.h', - command: [wayland_scanner, 'client-header', '@INPUT@', '@OUTPUT@'], - ) -endforeach -if host_machine.system() in ['freebsd', 'openbsd'] - # For signalfd() - epoll_dep = dependency('epoll-shim') -else - epoll_dep = [] + wl_protocol_dir = wayland_protos.get_variable('pkgdatadir') + + protocols = [ + wl_protocol_dir / 'stable/tablet/tablet-v2.xml', + wl_protocol_dir / 'stable/xdg-shell/xdg-shell.xml', + wl_protocol_dir / 'staging/cursor-shape/cursor-shape-v1.xml', + '../protocols/wlr-layer-shell-unstable-v1.xml', + ] + + foreach xml : protocols + nag_sources += custom_target( + xml.underscorify() + '_c', + input: xml, + output: '@BASENAME@-protocol.c', + command: [wayland_scanner, 'private-code', '@INPUT@', '@OUTPUT@'], + ) + nag_sources += custom_target( + xml.underscorify() + '_client_h', + input: xml, + output: '@BASENAME@-client-protocol.h', + command: [wayland_scanner, 'client-header', '@INPUT@', '@OUTPUT@'], + ) + endforeach + + if host_machine.system() in ['freebsd', 'openbsd'] + # For signalfd() + epoll_dep = dependency('epoll-shim') + else + epoll_dep = [] + endif + + executable( + 'labnag', + nag_sources, + dependencies: [ + cairo, + pangocairo, + glib, + wayland_client, + wayland_cursor, + wlroots, + server_protos, + epoll_dep, + xkbcommon, + ], + include_directories: [labwc_inc], + install: true, + ) endif -executable( - 'labnag', - nag_sources, - dependencies: [ - cairo, - pangocairo, - glib, - wayland_client, - wayland_cursor, - wlroots, - server_protos, - epoll_dep, - xkbcommon, - ], - include_directories: [labwc_inc], - install: true, -) - clients = files('lab-sensible-terminal') install_data(clients, install_dir: get_option('bindir')) diff --git a/docs/labwc-config.5.scd b/docs/labwc-config.5.scd index 03d5fc24..09f7b3eb 100644 --- a/docs/labwc-config.5.scd +++ b/docs/labwc-config.5.scd @@ -1090,7 +1090,8 @@ Note: To rotate touch events with output rotation, use the libinput ## TABLET TOOL ``` - + ``` ** [absolute|relative] @@ -1105,6 +1106,16 @@ Note: To rotate touch events with output rotation, use the libinput speed, using a value greater than 1.0 increases the speed of the cursor. The default is "1.0". +** +** + The pressure range of a tablet tool can be controlled by adjusting + *minPressure* and *maxPressure*. Setting the minimum pressure to + a value greater than zero requires more pressure for the tip + threshold, setting the maximum pressure to a value less than 1.0 + requires less pressure for the user before the maximum is reached. + The default is 0 for the minimum pressure and 1.0 for the maximum + pressure. + ## LIBINPUT ``` diff --git a/docs/rc.xml.all b/docs/rc.xml.all index bc9566fe..bbec9d0b 100644 --- a/docs/rc.xml.all +++ b/docs/rc.xml.all @@ -573,8 +573,11 @@ *relativeMotionSensitivity* controls the speed of the cursor. Using a value lower than 1.0 decreases the speed, using a value greater than 1.0 increases the speed of the cursor. + The pressure range of a tablet tool can be controlled by adjusting + *minPressure* and *maxPressure*. --> - +