Menu stays open
parent
6ef031d577
commit
18cc1d27c5
13
src/menu.rs
13
src/menu.rs
|
|
@ -2,9 +2,15 @@ use gdk::Atom;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk::{Menu, MenuItemBuilder};
|
use gtk::{Menu, MenuItemBuilder};
|
||||||
|
use std::ops::Deref;
|
||||||
use vte::TerminalExt;
|
use vte::TerminalExt;
|
||||||
pub fn menu(widget: &vte::Terminal, btn: Option<u32>) -> bool {
|
pub fn menu(widget: &vte::Terminal, ev: Option<&gdk::EventButton>) -> bool {
|
||||||
let clipboard = widget.get_clipboard(&Atom::intern("CLIPBOARD"));
|
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| {
|
clipboard.request_text(clone!(@weak widget => move |_clipboard, maybe_str| {
|
||||||
let ctx_menu = Menu::new();
|
let ctx_menu = Menu::new();
|
||||||
let cpy = MenuItemBuilder::new()
|
let cpy = MenuItemBuilder::new()
|
||||||
|
|
@ -25,7 +31,10 @@ pub fn menu(widget: &vte::Terminal, btn: Option<u32>) -> bool {
|
||||||
}));
|
}));
|
||||||
ctx_menu.show_all();
|
ctx_menu.show_all();
|
||||||
ctx_menu.set_property_attach_widget(Some(&widget));
|
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
|
true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ pub fn build_tab(
|
||||||
if ev.get_event_type() == gdk::EventType::ButtonPress
|
if ev.get_event_type() == gdk::EventType::ButtonPress
|
||||||
&& ev.get_button() == gdk_sys::GDK_BUTTON_SECONDARY as u32
|
&& 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)
|
gtk::Inhibit(false)
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue