Repository navigation
Mast v0.7.5: working titlebar on KDE Wayland - #54
Merged
Merged
Conversation
On Plasma under Wayland the titlebar's minimise, maximise and close did nothing — no hover, no click — and the bar stood taller than every other window's. Neither was GTK's doing: tao 0.35 replaced the window's titlebar on Wayland with its own GTK header bar, wrapped in an event box set above its children, so every pointer event landed on the box and none reached the buttons. Dragging still worked only because the window handles that itself. And being a header bar, it asked for client-side decorations, so KWin never drew its own. tao 0.36 (tauri-apps/tao#1218) dropped that header bar and leaves the choice to GTK, which asks for server-side decorations through KDE's protocol wherever the compositor offers it. Tauri 2.12 carries tao 0.37, so this moves Tauri to 2.12.3 and @tauri-apps/api with it — the release build refuses mismatched Rust and JS minors. Run against this Plasma session with WAYLAND_DEBUG, 0.7.4 sends request_mode(1), client-side; this build sends request_mode(2) and KWin answers mode(2), drawing a Breeze titlebar over a window whose geometry is now the content alone. Desktops that tile still lose the titlebar via linux_env::wants_no_titlebar, whose comment claimed GTK3 had no server-side decoration support on Wayland at all — it does, and the comment now says who draws the bar where.
CI's stable toolchain moved to Rust 1.99, whose new double_must_use lint fires on the #[must_use] async-trait 0.1.91 puts on every generated method — six errors at RuntimeAdapter's attribute, none of them in code written here, and enough to stop clippy before it reached any crate that depends on mast-docker. async-trait 0.1.92 exists to resolve exactly that lint (dtolnay/async-trait#303). With it, clippy 1.99 runs clean across the whole workspace with -D warnings.
This was referenced Oct 14, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
EventBoxwithabove_child = true, so every pointer event went to the box and none reached the buttons. Dragging worked only because the window handles drags itself. Because it was a header bar, the window also asked for client-side decorations, so KWin never drew its own titlebar.@tauri-apps/apimoves to 2.12.3 as well, because the release build rejects mismatched Rust and JS minor versions.linux_env::wants_no_titlebar. That function's comment wrongly said GTK3 has no server-side decoration support on Wayland. It now says which side draws the bar on which desktop.double_must_uselint fails on the#[must_use]that async-trait 0.1.91 generates (six errors atRuntimeAdapter), which would turnmainred too. 0.1.92 exists to resolve that lint (dtolnay/async-trait#303).Verified
WAYLAND_DEBUG=1:org_kde_kwin_server_decoration.request_mode(1), which is client-side.request_mode(2), and KWin repliesmode(2).cargo clippy --workspace --all-targets -D warningsis clean on Rust 1.96 and on 1.99 (CI's current stable).vp checkis clean, andvp testpasses 192 tests.cargo test --workspacepasses, apart from one failure ofproject_removal_blocks_new_commands_until_shutdown_finisheswhile the machine was under load. It passed on four reruns of the full engine suite.mast-engine's dependency tree is identical tomain, so that failure isn't caused by this change.set_decorations(false)after the window is created.