Skroll-stegning i fönsterlistan + klick/launch-debugloggar
All checks were successful
check / check (push) Successful in 1m34s

Med en grupps lista öppen stegar skroll (på gruppikonen eller över
listan) markeringen mellan raderna — markerad rad får accentbakgrund
och triggar samma förhandsvisning som hover (peek/fokus enligt
list_hover). Funkar i både hover- och klickläge; utan öppen lista
beter sig skroll som förut (cykla fönster). Watchdogen räknar
stegning som aktivitet så listan inte stängs mitt i.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-30 00:53:16 +02:00
parent 6be8c6fe27
commit 1c6ed7815b
5 changed files with 147 additions and 47 deletions

View File

@@ -47,6 +47,8 @@ pub struct Ctx {
pub refresh_pending: Cell<bool>,
/// den enda popover som får vara öppen åt gången
pub current_popover: RefCell<Option<gtk::Popover>>,
/// öppen fönsterlista (för skroll-stegning från gruppikonen)
pub group_list: RefCell<Option<menu::GroupList>>,
}
pub struct Dock {
@@ -730,6 +732,17 @@ fn build_item_widget(ctx: &Rc<Ctx>, connector: &str, item: Rc<Item>) -> gtk::But
let item = item.clone();
let conn2 = connector.to_string();
scroll.connect_scroll(move |_, _, dy| {
// om den här gruppens lista är öppen: stega markeringen i den
let step = ctx
.group_list
.borrow()
.as_ref()
.filter(|h| h.key == item.meta.key && h.connector == conn2)
.map(|h| h.step.clone());
if let Some(step) = step {
step(dy);
return glib::Propagation::Stop;
}
if ctx.cfg.borrow().for_output(&conn2).behavior.scroll == ScrollAction::CycleWindows {
let live = live_item(&ctx, &conn2, &item);
cycle_windows(&ctx, &live, dy > 0.0);
@@ -745,6 +758,12 @@ fn build_item_widget(ctx: &Rc<Ctx>, connector: &str, item: Rc<Item>) -> gtk::But
}
fn primary_action(ctx: &Rc<Ctx>, connector: &str, item: &Rc<Item>, anchor: &gtk::Button) {
debug!(
"vänsterklick: {} ({} fönster, pinnad={})",
item.meta.display_name,
item.windows.len(),
item.pinned
);
let service = ctx.service.borrow();
let Some(service) = service.as_ref() else {
icons::launch(&item.meta);