fix(focused): incorrectly clearing when unfocused window title changes (#556)

Fixes #544
This commit is contained in:
Jake Stanger 2024-04-24 21:29:44 +01:00 committed by GitHub
parent dffb3e5d54
commit ea2b20816d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -62,12 +62,16 @@ impl Module<gtk::Box> for FocusedModule {
let wl = context.client::<wayland::Client>();
spawn(async move {
let mut current = None;
let mut wlrx = wl.subscribe_toplevels();
let handles = wl.toplevel_info_all();
let focused = handles.into_iter().find(|info| info.focused);
if let Some(focused) = focused {
current = Some(focused.id);
try_send!(
tx,
ModuleUpdateEvent::Update(Some((focused.title.clone(), focused.app_id)))
@ -77,8 +81,12 @@ impl Module<gtk::Box> for FocusedModule {
while let Ok(event) = wlrx.recv().await {
match event {
ToplevelEvent::Update(info) => {
println!("{current:?} | {info:?}");
if info.focused {
debug!("Changing focus");
current = Some(info.id);
send_async!(
tx,
ModuleUpdateEvent::Update(Some((
@ -86,13 +94,16 @@ impl Module<gtk::Box> for FocusedModule {
info.app_id.clone()
)))
);
} else {
} else if info.id == current.unwrap_or_default() {
debug!("Clearing focus");
current = None;
send_async!(tx, ModuleUpdateEvent::Update(None));
}
}
ToplevelEvent::Remove(info) => {
if info.focused {
debug!("Clearing focus");
current = None;
send_async!(tx, ModuleUpdateEvent::Update(None));
}
}