From 0512ac3d4e15ce1483722525f0d2da1f85b14bb2 Mon Sep 17 00:00:00 2001 From: abgironne Date: Wed, 18 Feb 2026 14:42:16 -0500 Subject: [PATCH] fix: prioritize GNOME/KDE watchers and add environment check for COSMIC --- watchers/src/watchers.rs | 21 +++++++++---------- .../watchers/wl_cosmic_toplevel_management.rs | 11 ++++++++++ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/watchers/src/watchers.rs b/watchers/src/watchers.rs index 2012126..459e79f 100644 --- a/watchers/src/watchers.rs +++ b/watchers/src/watchers.rs @@ -99,6 +99,16 @@ async fn filter_first_supported( )); } WatcherType::ActiveWindow => { + #[cfg(feature = "gnome")] + watch!(create_watcher::( + client, + "Gnome window (extension)" + )); + #[cfg(feature = "kwin_window")] + watch!(create_watcher::( + client, + "KWin window (script)" + )); watch!(create_watcher::< wl_foreign_toplevel_management::WindowWatcher, >( @@ -111,17 +121,6 @@ async fn filter_first_supported( "Cosmic Wayland window (cosmic-toplevel-info-unstable-v1)" ) ); - // XWayland gives _NET_WM_NAME on some windows in KDE, but not on others - #[cfg(feature = "kwin_window")] - watch!(create_watcher::( - client, - "KWin window (script)" - )); - #[cfg(feature = "gnome")] - watch!(create_watcher::( - client, - "Gnome window (extension)" - )); watch!(create_watcher::( client, "X11 window" diff --git a/watchers/src/watchers/wl_cosmic_toplevel_management.rs b/watchers/src/watchers/wl_cosmic_toplevel_management.rs index 72331e8..e8f768e 100644 --- a/watchers/src/watchers/wl_cosmic_toplevel_management.rs +++ b/watchers/src/watchers/wl_cosmic_toplevel_management.rs @@ -29,9 +29,20 @@ struct ToplevelState { sender: mpsc::Sender, } +fn is_cosmic() -> bool { + if let Ok(de) = std::env::var("XDG_CURRENT_DESKTOP") { + de.to_lowercase().contains("cosmic") + } else { + false + } +} + fn initialize_state( sender: mpsc::Sender, ) -> anyhow::Result<(ToplevelState, EventQueue)> { + if !is_cosmic() { + return Err(anyhow!("Not in COSMIC environment")); + } let conn = Connection::connect_to_env()?; let (globals, event_queue) = registry_queue_init(&conn)?; let qh: QueueHandle = event_queue.handle();