1 Commits

Author SHA1 Message Date
c6b69dcec2 v0.1.5: öppna menyer håller dockan uppe
All checks were successful
check / check (push) Successful in 1m36s
release / build-release (push) Successful in 2m9s
Pekaren i en fönsterlista/meny (egen Wayland-yta) räknades som att den
lämnat dockan, så dodge gömde dockan under en öppen popup. Nu blockerar
öppna popovers autohide helt; när sista menyn stängs startar
göm-fördröjningen om. Bekräftat av Björn.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 15:38:14 +02:00
4 changed files with 22 additions and 5 deletions

2
Cargo.lock generated
View File

@@ -1042,7 +1042,7 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "waydock"
version = "0.1.4"
version = "0.1.5"
dependencies = [
"async-channel",
"gtk4",

View File

@@ -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"

View File

@@ -468,7 +468,13 @@ fn set_dock_hidden(ctx: &Ctx, dock: &Rc<Dock>, 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<Ctx>) {
}
}
/// 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<Ctx>) {
for dock in ctx.docks.borrow().iter() {
schedule_hide(ctx, dock);
}
}
fn schedule_hide(ctx: &Rc<Ctx>, dock: &Rc<Dock>) {
let delay = ctx.cfg.borrow().for_output(&dock.connector).autohide.hide_delay_ms;
let generation = dock.hide_generation.get() + 1;

View File

@@ -198,8 +198,12 @@ fn register_popover(ctx: &Rc<Ctx>, popover: &impl IsA<gtk::Popover>) {
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);
}
});
});