From cf6029cbbcd6609c11d92eecfb222a91de775f06 Mon Sep 17 00:00:00 2001 From: claude Date: Sun, 30 Aug 2026 01:29:09 +0200 Subject: [PATCH] =?UTF-8?q?Fixa=20h=C3=B6gerklicksmenyn:=20dedikerade=20pr?= =?UTF-8?q?essed-gester=20f=C3=B6r=20mitt/h=C3=B6ger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit connect_released på en knapp-0-GestureClick avfyrades aldrig på GtkButton (varken för knapp 2 eller 3) — därför visades aldrig app-/gruppmenyn. Nu kör mitt- och högerklick varsin gest med set_button + connect_pressed, samma mönster som panelmenyns gest som hela tiden fungerat. Radernas högerklicksgest bytt likadant. Verifierat live: gest → meny → mapped=true, bekräftat av Björn. Co-Authored-By: Claude Fable 5 --- src/dock.rs | 43 ++++++++++++++++++++++++++----------------- src/menu.rs | 3 ++- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/dock.rs b/src/dock.rs index 5713671..81134d3 100644 --- a/src/dock.rs +++ b/src/dock.rs @@ -691,29 +691,38 @@ fn build_item_widget(ctx: &Rc, connector: &str, item: Rc) -> gtk::But primary_action(&ctx, &conn2, &live, btn); }); } - // mitt- och högerklick via egen gest - let click = gtk::GestureClick::new(); - click.set_button(0); + // mitt- och högerklick: en gest per knapp med connect_pressed — + // samma mönster som panelmenyns gest (connect_released på en + // knapp-0-gest visade sig aldrig avfyras på GtkButton) { - let ctx = ctx.clone(); - let item = item.clone(); + let mid = gtk::GestureClick::new(); + mid.set_button(2); + let ctx2 = ctx.clone(); + let item2 = item.clone(); + let conn2 = connector.to_string(); + mid.connect_pressed(move |gesture, _, _, _| { + debug!("mittklick-gest"); + gesture.set_state(gtk::EventSequenceState::Claimed); + let live = live_item(&ctx2, &conn2, &item2); + middle_action(&ctx2, &conn2, &live); + }); + btn.add_controller(mid); + } + { + let right = gtk::GestureClick::new(); + right.set_button(3); + let ctx2 = ctx.clone(); + let item2 = item.clone(); let btn2 = btn.clone(); let conn2 = connector.to_string(); - click.connect_released(move |gesture, _, _, _| { - let button = gesture.current_button(); - if button != 2 && button != 3 { - return; // vänsterklick sköts av knappen själv - } + right.connect_pressed(move |gesture, _, _, _| { + debug!("högerklick-gest"); gesture.set_state(gtk::EventSequenceState::Claimed); - let live = live_item(&ctx, &conn2, &item); - match button { - 2 => middle_action(&ctx, &conn2, &live), - 3 => menu::popup_item_menu(&ctx, &live, &btn2), - _ => {} - } + let live = live_item(&ctx2, &conn2, &item2); + menu::popup_item_menu(&ctx2, &live, &btn2); }); + btn.add_controller(right); } - btn.add_controller(click); // hover-popup för grupperade appar (om valt i configen) if item.windows.len() > 1 && cfg.behavior.group_popup == GroupPopup::Hover { diff --git a/src/menu.rs b/src/menu.rs index dfc1b85..42961f0 100644 --- a/src/menu.rs +++ b/src/menu.rs @@ -289,6 +289,7 @@ fn connector_of(ctx: &Rc, widget: >k::Button) -> String { /// Högerklicksmenyn på en app-ikon. pub fn popup_item_menu(ctx: &Rc, item: &Rc, anchor: >k::Button) { + log::debug!("högerklicksmeny: {} ({} fönster)", item.meta.display_name, item.windows.len()); let cfg = ctx.cfg.borrow(); let has_windows = !item.windows.is_empty(); let all_min = has_windows && item.windows.iter().all(|w| w.minimized); @@ -527,7 +528,7 @@ pub fn popup_group_list(ctx: &Rc, item: &Rc, anchor: >k::Button) { let meta3 = item.meta.clone(); let pinned3 = item.pinned; let row3 = row.clone(); - rc.connect_released(move |gesture, _, _, _| { + rc.connect_pressed(move |gesture, _, _, _| { gesture.set_state(gtk::EventSequenceState::Claimed); let single = Rc::new(Item { meta: meta3.clone(),