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);
|
primary_action(&ctx, &conn2, &live, btn);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// mitt- och högerklick via egen gest
|
// mitt- och högerklick: en gest per knapp med connect_pressed —
|
||||||
let click = gtk::GestureClick::new();
|
// samma mönster som panelmenyns gest (connect_released på en
|
||||||
click.set_button(0);
|
// knapp-0-gest visade sig aldrig avfyras på GtkButton)
|
||||||
{
|
{
|
||||||
let ctx = ctx.clone();
|
let mid = gtk::GestureClick::new();
|
||||||
let item = item.clone();
|
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 btn2 = btn.clone();
|
||||||
let conn2 = connector.to_string();
|
let conn2 = connector.to_string();
|
||||||
click.connect_released(move |gesture, _, _, _| {
|
right.connect_pressed(move |gesture, _, _, _| {
|
||||||
let button = gesture.current_button();
|
debug!("högerklick-gest");
|
||||||
if button != 2 && button != 3 {
|
|
||||||
return; // vänsterklick sköts av knappen själv
|
|
||||||
}
|
|
||||||
gesture.set_state(gtk::EventSequenceState::Claimed);
|
gesture.set_state(gtk::EventSequenceState::Claimed);
|
||||||
let live = live_item(&ctx, &conn2, &item);
|
let live = live_item(&ctx2, &conn2, &item2);
|
||||||
match button {
|
menu::popup_item_menu(&ctx2, &live, &btn2);
|
||||||
2 => middle_action(&ctx, &conn2, &live),
|
|
||||||
3 => menu::popup_item_menu(&ctx, &live, &btn2),
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
btn.add_controller(right);
|
||||||
}
|
}
|
||||||
btn.add_controller(click);
|
|
||||||
|
|
||||||
// hover-popup för grupperade appar (om valt i configen)
|
// hover-popup för grupperade appar (om valt i configen)
|
||||||
if item.windows.len() > 1 && cfg.behavior.group_popup == GroupPopup::Hover {
|
if item.windows.len() > 1 && cfg.behavior.group_popup == GroupPopup::Hover {
|
||||||
|
|||||||
@@ -289,6 +289,7 @@ fn connector_of(ctx: &Rc<Ctx>, widget: >k::Button) -> String {
|
|||||||
|
|
||||||
/// Högerklicksmenyn på en app-ikon.
|
/// Högerklicksmenyn på en app-ikon.
|
||||||
pub fn popup_item_menu(ctx: &Rc<Ctx>, item: &Rc<Item>, anchor: >k::Button) {
|
pub fn popup_item_menu(ctx: &Rc<Ctx>, item: &Rc<Item>, anchor: >k::Button) {
|
||||||
|
log::debug!("högerklicksmeny: {} ({} fönster)", item.meta.display_name, item.windows.len());
|
||||||
let cfg = ctx.cfg.borrow();
|
let cfg = ctx.cfg.borrow();
|
||||||
let has_windows = !item.windows.is_empty();
|
let has_windows = !item.windows.is_empty();
|
||||||
let all_min = has_windows && item.windows.iter().all(|w| w.minimized);
|
let all_min = has_windows && item.windows.iter().all(|w| w.minimized);
|
||||||
@@ -527,7 +528,7 @@ pub fn popup_group_list(ctx: &Rc<Ctx>, item: &Rc<Item>, anchor: >k::Button) {
|
|||||||
let meta3 = item.meta.clone();
|
let meta3 = item.meta.clone();
|
||||||
let pinned3 = item.pinned;
|
let pinned3 = item.pinned;
|
||||||
let row3 = row.clone();
|
let row3 = row.clone();
|
||||||
rc.connect_released(move |gesture, _, _, _| {
|
rc.connect_pressed(move |gesture, _, _, _| {
|
||||||
gesture.set_state(gtk::EventSequenceState::Claimed);
|
gesture.set_state(gtk::EventSequenceState::Claimed);
|
||||||
let single = Rc::new(Item {
|
let single = Rc::new(Item {
|
||||||
meta: meta3.clone(),
|
meta: meta3.clone(),
|
||||||
|
|||||||
Reference in New Issue
Block a user