From 740cef6d4bb38a635167de3ee0a335802e08079c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Fri, 26 Mar 2021 01:50:44 +0400 Subject: [PATCH] gtk: restore system shortcut on ungrab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marc-André Lureau --- qemu-gtk4/src/console.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/qemu-gtk4/src/console.rs b/qemu-gtk4/src/console.rs index 5de9f5d..ee61287 100644 --- a/qemu-gtk4/src/console.rs +++ b/qemu-gtk4/src/console.rs @@ -94,15 +94,16 @@ mod imp { let ec = gtk::EventControllerKey::new(); ec.set_propagation_phase(gtk::PropagationPhase::Capture); - ec.connect_key_pressed(clone!(@weak obj => @default-panic, move |ec, keyval, keycode, state| { + ec.connect_key_pressed(clone!(@weak obj, @weak toplevel => @default-panic, move |ec, keyval, keycode, state| { let priv_ = imp::QemuConsole::from_instance(&obj); if let Some(ref e) = ec.get_current_event() { if priv_.ungrab_shortcut.get().unwrap().trigger(e, false) == gdk::KeyMatch::Exact { //widget.remove_controller(ec); here crashes badly - glib::idle_add_local(clone!(@weak ec => @default-panic, move || { + glib::idle_add_local(clone!(@weak ec, @weak toplevel => @default-panic, move || { if let Some(widget) = ec.get_widget() { widget.remove_controller(&ec); } + toplevel.restore_system_shortcuts(); glib::Continue(false) })); } else {