Fixa dött vänsterklick + setting för skroll på ej startad app
All checks were successful
check / check (push) Successful in 1m37s
All checks were successful
check / check (push) Successful in 1m37s
Vänsterklick nådde ALDRIG fram: GtkButtons interna klickgest claimar knapp 1 före vår GestureClick, så released-callbacken avfyrades bara för mitt/höger. Primäraktionen går nu via knappens clicked-signal (gesten hanterar bara knapp 2/3). Därmed funkar fokus/minimera, grupplista-vid-klick och start av pinnade appar. Ny setting behavior.scroll_stopped (none|launch): vad skroll gör på en app utan fönster — som du bad om, eget beteende för ej startade appar. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
36
src/dock.rs
36
src/dock.rs
@@ -17,7 +17,7 @@ use log::{debug, info};
|
||||
|
||||
use crate::config::{
|
||||
Alignment, AutohideMode, ClickAction, Config, GroupPopup, Layer as CfgLayer,
|
||||
MiddleClick, Position, ScrollAction, SharedConfig,
|
||||
MiddleClick, Position, ScrollAction, ScrollStopped, SharedConfig,
|
||||
};
|
||||
use crate::icons::{self, AppMeta};
|
||||
use crate::menu;
|
||||
@@ -679,7 +679,19 @@ fn build_item_widget(ctx: &Rc<Ctx>, connector: &str, item: Rc<Item>) -> gtk::But
|
||||
});
|
||||
}
|
||||
|
||||
// klick: vänster/mitt/höger
|
||||
// vänsterklick: via knappens egna clicked-signal — GtkButtons interna
|
||||
// gest claimar vänsterknappen, så en egen GestureClick för knapp 1
|
||||
// avfyras aldrig (buggen som gjorde vänsterklick dött)
|
||||
{
|
||||
let ctx = ctx.clone();
|
||||
let item = item.clone();
|
||||
let conn2 = connector.to_string();
|
||||
btn.connect_clicked(move |btn| {
|
||||
let live = live_item(&ctx, &conn2, &item);
|
||||
primary_action(&ctx, &conn2, &live, btn);
|
||||
});
|
||||
}
|
||||
// mitt- och högerklick via egen gest
|
||||
let click = gtk::GestureClick::new();
|
||||
click.set_button(0);
|
||||
{
|
||||
@@ -688,10 +700,13 @@ fn build_item_widget(ctx: &Rc<Ctx>, connector: &str, item: Rc<Item>) -> gtk::But
|
||||
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
|
||||
}
|
||||
gesture.set_state(gtk::EventSequenceState::Claimed);
|
||||
let live = live_item(&ctx, &conn2, &item);
|
||||
match gesture.current_button() {
|
||||
1 => primary_action(&ctx, &conn2, &live, &btn2),
|
||||
match button {
|
||||
2 => middle_action(&ctx, &conn2, &live),
|
||||
3 => menu::popup_item_menu(&ctx, &live, &btn2),
|
||||
_ => {}
|
||||
@@ -743,8 +758,17 @@ fn build_item_widget(ctx: &Rc<Ctx>, connector: &str, item: Rc<Item>) -> gtk::But
|
||||
step(dy);
|
||||
return glib::Propagation::Stop;
|
||||
}
|
||||
if ctx.cfg.borrow().for_output(&conn2).behavior.scroll == ScrollAction::CycleWindows {
|
||||
let live = live_item(&ctx, &conn2, &item);
|
||||
let behavior = ctx.cfg.borrow().for_output(&conn2).behavior;
|
||||
let live = live_item(&ctx, &conn2, &item);
|
||||
if live.windows.is_empty() {
|
||||
// egen setting för appar som inte är igång
|
||||
if behavior.scroll_stopped == ScrollStopped::Launch {
|
||||
icons::launch(&live.meta);
|
||||
return glib::Propagation::Stop;
|
||||
}
|
||||
return glib::Propagation::Proceed;
|
||||
}
|
||||
if behavior.scroll == ScrollAction::CycleWindows {
|
||||
cycle_windows(&ctx, &live, dy > 0.0);
|
||||
glib::Propagation::Stop
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user