From 18cc1d27c581f41b10ef01a611ebf2e9a944c46a Mon Sep 17 00:00:00 2001 From: Pietro Brenna Date: Sun, 10 May 2020 14:02:18 +0200 Subject: [PATCH] Menu stays open --- src/menu.rs | 13 +++++++++++-- src/tabs.rs | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/menu.rs b/src/menu.rs index a1e5f44..1a4d67b 100644 --- a/src/menu.rs +++ b/src/menu.rs @@ -2,9 +2,15 @@ use gdk::Atom; use glib::clone; use gtk::prelude::*; use gtk::{Menu, MenuItemBuilder}; +use std::ops::Deref; use vte::TerminalExt; -pub fn menu(widget: &vte::Terminal, btn: Option) -> bool { +pub fn menu(widget: &vte::Terminal, ev: Option<&gdk::EventButton>) -> bool { let clipboard = widget.get_clipboard(&Atom::intern("CLIPBOARD")); + let ev = if ev.is_some() { + Some(ev.unwrap().clone()) + } else { + None + }; clipboard.request_text(clone!(@weak widget => move |_clipboard, maybe_str| { let ctx_menu = Menu::new(); let cpy = MenuItemBuilder::new() @@ -25,7 +31,10 @@ pub fn menu(widget: &vte::Terminal, btn: Option) -> bool { })); ctx_menu.show_all(); ctx_menu.set_property_attach_widget(Some(&widget)); - ctx_menu.popup_easy(btn.unwrap_or(1), gtk::get_current_event_time()); + //let button = ev.map(|x|x.get_button()).unwrap_or(1); + let tmp; + let ev1 : Option<&gdk::Event> = if let Some(inner) = ev { tmp = inner; Some(tmp.deref()) } else {None}; + ctx_menu.popup_at_pointer(ev1); })); true } diff --git a/src/tabs.rs b/src/tabs.rs index b9b7b95..f3f3f59 100644 --- a/src/tabs.rs +++ b/src/tabs.rs @@ -47,7 +47,7 @@ pub fn build_tab( if ev.get_event_type() == gdk::EventType::ButtonPress && ev.get_button() == gdk_sys::GDK_BUTTON_SECONDARY as u32 { - crate::menu::menu(vte, Some(ev.get_button())); + crate::menu::menu(vte, Some(ev)); } gtk::Inhibit(false) });