From f4858eba43a94ee8f7c0e7287f8ed6e451f25703 Mon Sep 17 00:00:00 2001 From: isark Date: Sun, 16 Jul 2023 15:52:44 +0200 Subject: [PATCH] Fixed inconsistencies with focus_target happening when not checking cookie --- Cargo.toml | 2 +- src/linux/mod.rs | 25 ++++++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 52c1035..f38b522 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "Underlayer" -version = "0.2.1" +version = "0.2.2" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/linux/mod.rs b/src/linux/mod.rs index 1f0d1ee..bab9a66 100644 --- a/src/linux/mod.rs +++ b/src/linux/mod.rs @@ -5,8 +5,8 @@ use x11rb::{ connection::Connection, protocol::{ xproto::{ - Atom, AtomEnum, ChangeWindowAttributesAux, - ConnectionExt, EventMask, Window, InputFocus, ClientMessageData, ClientMessageEvent, self, + self, Atom, AtomEnum, ChangeWindowAttributesAux, ClientMessageData, ClientMessageEvent, + ConnectionExt, EventMask, Window, }, Event, }, @@ -66,7 +66,6 @@ pub fn focus_target() { if let Ok(target) = (*TARGET.load(std::sync::atomic::Ordering::SeqCst)).lock() { if *target != x11rb::NONE { if let Ok((conn, _screen_num)) = connect(None) { - let net_active_window = get_atom(&conn, "_NET_ACTIVE_WINDOW").unwrap(); let event = ClientMessageEvent { @@ -75,16 +74,20 @@ pub fn focus_target() { sequence: 0, window: *target, type_: net_active_window, - data: ClientMessageData::from([ - 1, - 0, - 0, - 0, - 0, - ]), + data: ClientMessageData::from([1, x11rb::CURRENT_TIME, 0, 0, 0]), }; - conn.send_event(false, conn.setup().roots[_screen_num].root, EventMask::SUBSTRUCTURE_NOTIFY | EventMask::SUBSTRUCTURE_REDIRECT, event).ok(); + if let Ok(cookie) = conn.send_event( + false, + conn.setup().roots[_screen_num].root, + EventMask::SUBSTRUCTURE_NOTIFY | EventMask::SUBSTRUCTURE_REDIRECT, + event, + ) { + if let Err(e) = cookie.check() { + log::error!("Error focusing target: {e:?}"); + } + } + conn.flush().ok(); } }