diff --git a/Cargo.lock b/Cargo.lock index f2bc3294..53f4b8a9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -563,9 +563,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.107" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" +checksum = "8521a1b57e76b1ec69af7599e75e38e7b7fad6610f037db8c79b127201b5d119" [[package]] name = "linked-hash-map" @@ -1049,9 +1049,9 @@ checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088" [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "3c9613b5a66ab9ba26415184cfc41156594925a9cf3a2057e57f31ff145f6568" [[package]] name = "same-file" @@ -1526,8 +1526,7 @@ dependencies = [ [[package]] name = "winvd" version = "0.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bab2d5c745381b9c72797230150ec62244e693064fa0d654b5c4e6c75132a56" +source = "git+https://github.com/Ciantic/VirtualDesktopAccessor?branch=rust#11502c442f0cc0e6b5304e6a45022406ac502842" dependencies = [ "com", "crossbeam-channel", diff --git a/komorebi/Cargo.toml b/komorebi/Cargo.toml index 8cdb4b8f..0dbcea57 100644 --- a/komorebi/Cargo.toml +++ b/komorebi/Cargo.toml @@ -36,7 +36,7 @@ tracing-subscriber = { version = "0.3", features = ["env-filter"] } uds_windows = "1" which = "4" winput = "0.2" -winvd = "0.0.20" +winvd = { git = "https://github.com/Ciantic/VirtualDesktopAccessor", branch = "rust" } miow = "0.4" [dependencies.windows] diff --git a/komorebi/src/process_command.rs b/komorebi/src/process_command.rs index 78f3f41d..66d52227 100644 --- a/komorebi/src/process_command.rs +++ b/komorebi/src/process_command.rs @@ -68,7 +68,10 @@ pub fn listen_for_commands(wm: Arc>) { impl WindowManager { #[tracing::instrument(skip(self))] pub fn process_command(&mut self, message: SocketMessage) -> Result<()> { - self.validate_virtual_desktop_id(); + if let Err(error) = self.validate_virtual_desktop_id() { + tracing::info!("{}", error); + return Ok(()); + } match message { SocketMessage::Promote => self.promote_container_to_front()?, diff --git a/komorebi/src/process_event.rs b/komorebi/src/process_event.rs index cac1339b..da1c05f4 100644 --- a/komorebi/src/process_event.rs +++ b/komorebi/src/process_event.rs @@ -51,7 +51,10 @@ impl WindowManager { return Ok(()); } - self.validate_virtual_desktop_id(); + if let Err(error) = self.validate_virtual_desktop_id() { + tracing::info!("{}", error); + return Ok(()); + } // Make sure we have the most recently focused monitor from any event match event { diff --git a/komorebi/src/window_manager.rs b/komorebi/src/window_manager.rs index 0292a0cc..25c8262f 100644 --- a/komorebi/src/window_manager.rs +++ b/komorebi/src/window_manager.rs @@ -66,6 +66,7 @@ pub struct State { pub is_paused: bool, pub invisible_borders: Rect, pub resize_delta: i32, + pub virtual_desktop_id: Option, pub new_window_behaviour: WindowContainerBehaviour, pub work_area_offset: Option, pub focus_follows_mouse: Option, @@ -86,6 +87,7 @@ impl From<&WindowManager> for State { invisible_borders: wm.invisible_borders, work_area_offset: wm.work_area_offset, resize_delta: wm.resize_delta, + virtual_desktop_id: wm.virtual_desktop_id, new_window_behaviour: wm.window_container_behaviour, focus_follows_mouse: wm.focus_follows_mouse.clone(), mouse_follows_focus: wm.mouse_follows_focus, @@ -467,17 +469,21 @@ impl WindowManager { } #[tracing::instrument(skip(self))] - pub fn validate_virtual_desktop_id(&self) { + pub fn validate_virtual_desktop_id(&self) -> Result<()> { let virtual_desktop_id = winvd::helpers::get_current_desktop_number().ok(); if let (Some(id), Some(virtual_desktop_id)) = (virtual_desktop_id, self.virtual_desktop_id) { if id != virtual_desktop_id { - tracing::warn!( - "ignoring events while not on virtual desktop {}", + return Err(anyhow!( + "ignoring events and commands while not on virtual desktop {}", virtual_desktop_id - ); + )); } + } else { + tracing::warn!("unable to look up virtual desktop id, skipping validation"); } + + Ok(()) } #[tracing::instrument(skip(self))]