diff --git a/Cargo.lock b/Cargo.lock index 700d14a..1d4e7a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1042,7 +1042,7 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "waydock" -version = "0.1.4" +version = "0.1.5" dependencies = [ "async-channel", "gtk4", diff --git a/Cargo.toml b/Cargo.toml index d8ac45a..1313730 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "waydock" -version = "0.1.4" +version = "0.1.5" edition = "2021" description = "Modern, resurssnål dock för Wayfire — transparent, JSON-konfigurerad, per-skärm" license = "MIT" diff --git a/src/dock.rs b/src/dock.rs index 7092ad4..e9878e8 100644 --- a/src/dock.rs +++ b/src/dock.rs @@ -468,7 +468,13 @@ fn set_dock_hidden(ctx: &Ctx, dock: &Rc, hidden: bool) { fn should_hide(ctx: &Ctx, dock: &Dock) -> bool { let cfg = ctx.cfg.borrow().for_output(&dock.connector); - if !cfg.autohide.enabled || dock.hover.get() || dock.sensor_hover.get() { + // en öppen meny/fönsterlista håller dockan uppe — pekaren i en popup + // (egen yta) räknas annars som "lämnat dockan" + if !cfg.autohide.enabled + || dock.hover.get() + || dock.sensor_hover.get() + || ctx.open_popovers.get() > 0 + { return false; } match cfg.autohide.mode { @@ -490,6 +496,13 @@ pub fn update_autohide(ctx: &Rc) { } } +/// Starta göm-fördröjningen för alla dockor (körs när sista menyn stängts). +pub fn schedule_hide_all(ctx: &Rc) { + for dock in ctx.docks.borrow().iter() { + schedule_hide(ctx, dock); + } +} + fn schedule_hide(ctx: &Rc, dock: &Rc) { let delay = ctx.cfg.borrow().for_output(&dock.connector).autohide.hide_delay_ms; let generation = dock.hide_generation.get() + 1; diff --git a/src/menu.rs b/src/menu.rs index 42961f0..c5faaba 100644 --- a/src/menu.rs +++ b/src/menu.rs @@ -198,8 +198,12 @@ fn register_popover(ctx: &Rc, popover: &impl IsA) { let ctx2 = ctx.clone(); glib::idle_add_local_once(move || { p.unparent(); - if ctx2.open_popovers.get() == 0 && ctx2.refresh_pending.get() { - crate::dock::refresh_items(&ctx2); + if ctx2.open_popovers.get() == 0 { + if ctx2.refresh_pending.get() { + crate::dock::refresh_items(&ctx2); + } + // sista menyn stängd: autohide får ta vid igen (med delay) + crate::dock::schedule_hide_all(&ctx2); } }); });