From 7f71a383c4ec1a2cc31c3af6f64bb2215ff6f995 Mon Sep 17 00:00:00 2001 From: BowDown097 <42720004+BowDown097@users.noreply.github.com> Date: Sun, 15 Dec 2024 07:00:42 -0800 Subject: [PATCH] feat(launcher): open new window on middle-click --- src/modules/launcher/item.rs | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/modules/launcher/item.rs b/src/modules/launcher/item.rs index 1e2203b..3b2fa37 100644 --- a/src/modules/launcher/item.rs +++ b/src/modules/launcher/item.rs @@ -7,6 +7,7 @@ use crate::modules::launcher::{ItemEvent, LauncherUpdate}; use crate::modules::ModuleUpdateEvent; use crate::{read_lock, try_send}; use glib::Propagation; +use gtk::gdk::{BUTTON_MIDDLE, BUTTON_PRIMARY}; use gtk::prelude::*; use gtk::{Button, IconTheme, Image, Label, Orientation}; use indexmap::IndexMap; @@ -201,20 +202,27 @@ impl ItemButton { let app_id = item.app_id.clone(); let tx = controller_tx.clone(); let menu_state = menu_state.clone(); - button.connect_clicked(move |button| { - // lazy check :| TODO: Improve this - let style_context = button.style_context(); - if style_context.has_class("open") { - let menu_state = read_lock!(menu_state); - if style_context.has_class("focused") && menu_state.num_windows == 1 { - try_send!(tx, ItemEvent::MinimizeItem(app_id.clone())); + button.connect_button_release_event(move |button, event| { + if event.button() == BUTTON_PRIMARY { + // lazy check :| TODO: Improve this + let style_context = button.style_context(); + if style_context.has_class("open") { + let menu_state = read_lock!(menu_state); + + if style_context.has_class("focused") && menu_state.num_windows == 1 { + try_send!(tx, ItemEvent::MinimizeItem(app_id.clone())); + } else { + try_send!(tx, ItemEvent::FocusItem(app_id.clone())); + } } else { - try_send!(tx, ItemEvent::FocusItem(app_id.clone())); + try_send!(tx, ItemEvent::OpenItem(app_id.clone())); } - } else { + } else if event.button() == BUTTON_MIDDLE { try_send!(tx, ItemEvent::OpenItem(app_id.clone())); } + + Propagation::Proceed }); }