diff options
| author | srdusr <[email protected]> | 2026-01-31 14:21:00 +0200 |
|---|---|---|
| committer | srdusr <[email protected]> | 2026-01-31 14:21:00 +0200 |
| commit | 76031dd8809701e39d3709451809851ad063bf73 (patch) | |
| tree | aab1c9361da8f074037300497a1176fd15650cbd /crates/core/src | |
| parent | 2a51fb86e2a123ff9e810a0b4105c9fe5f85e3ae (diff) | |
| download | srdwm-76031dd8809701e39d3709451809851ad063bf73.tar.gz srdwm-76031dd8809701e39d3709451809851ad063bf73.zip | |
Fix zathura's double titlebar by broadening the CSD-detection heuristic
Reported live, found via a screenshot of the user's real open window:
srdwm's own server-side titlebar stacked on top of zathura's own
girara-drawn header, same class of bug Firefox/Nemo needed a fix for.
likely_draws_own_titlebar only matched org.gnome.* app ids; zathura's
app id (org.pwmt.zathura) fell through it entirely, with no rules.lua
entry to catch it either.
Broadened the heuristic to also match org.pwmt.* - PWMT's small
toolset (zathura the only one in common use) shares GNOME's own
"always draws its own header" property, on the same live evidence
that justified org.gnome.* in the first place. No rules.lua entry
needed; the heuristic catches it automatically now.
Reproduced and confirmed fixed in a disposable nested compositor
(built, tested double-decoration, then rebuilt with the fix and
retested clean) - never the live session itself.
Diffstat (limited to 'crates/core/src')
| -rw-r--r-- | crates/core/src/window.rs | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/crates/core/src/window.rs b/crates/core/src/window.rs index cc841b1..a3d48a2 100644 --- a/crates/core/src/window.rs +++ b/crates/core/src/window.rs @@ -140,8 +140,18 @@ pub fn classify_menu_source(gtk_menu_path: Option<String>, is_real_gtk_applicati /// GNOME's HIG mandate, so guessing from the app id alone there would /// misclassify plenty of ordinary, well-behaved server-side-decorated apps /// that also happen to use a reverse-DNS-style id. +/// +/// `org.pwmt.*` added the same way, on the same evidence: zathura +/// (`org.pwmt.zathura`) reported live as a double titlebar - confirmed in +/// a nested compositor, screenshotted, two stacked rows with visibly +/// different button styles (srdwm's own configured style on top, zathura's +/// own girara-drawn row underneath). PWMT's own small set of tools (girara- +/// based, zathura being the only one in common use) all share the same +/// always-draws-its-own-header behaviour Firefox/Nemo needed a rule for, +/// so the namespace is as safe a bet here as GNOME's own. pub fn likely_draws_own_titlebar(app_id: &str) -> bool { - app_id.to_ascii_lowercase().starts_with("org.gnome.") + let app_id = app_id.to_ascii_lowercase(); + app_id.starts_with("org.gnome.") || app_id.starts_with("org.pwmt.") } /// State of a single managed window. This is platform-independent: backends @@ -930,6 +940,22 @@ mod button_order_tests { mod tests { use super::*; + #[test] + fn likely_draws_own_titlebar_matches_both_known_namespaces_case_insensitively() { + assert!(likely_draws_own_titlebar("org.gnome.Nautilus")); + assert!(likely_draws_own_titlebar("ORG.GNOME.TextEditor")); + assert!(likely_draws_own_titlebar("org.pwmt.zathura")); + assert!(likely_draws_own_titlebar("Org.Pwmt.Zathura")); + } + + #[test] + fn likely_draws_own_titlebar_does_not_misclassify_unrelated_reverse_dns_ids() { + assert!(!likely_draws_own_titlebar("io.github.somebody.SomeApp")); + assert!(!likely_draws_own_titlebar("org.mozilla.firefox")); + assert!(!likely_draws_own_titlebar("firefox")); + assert!(!likely_draws_own_titlebar("")); + } + fn frame() -> Rect { Rect::new(100, 100, 400, 300) } |