Fixa högerklicksmenyn: dedikerade pressed-gester för mitt/höger
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 <noreply@anthropic.com>
This commit is contained in:
43
src/dock.rs
43
src/dock.rs
@@ -691,29 +691,38 @@ fn build_item_widget(ctx: &Rc<Ctx>, connector: &str, item: Rc<Item>) -> 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 {
|
||||
|
||||
Reference in New Issue
Block a user