From 2a26d335613502b51ae33c778ab3c06ff0ebe695 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Sat, 20 Feb 2021 13:28:30 +0400 Subject: [PATCH] gtk: add scroll events MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marc-André Lureau --- qemu-display-listener/src/mouse.rs | 2 +- qemu-gtk4/src/console.rs | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/qemu-display-listener/src/mouse.rs b/qemu-display-listener/src/mouse.rs index 584d9bd..61ba3ad 100644 --- a/qemu-display-listener/src/mouse.rs +++ b/qemu-display-listener/src/mouse.rs @@ -3,7 +3,7 @@ use zbus::dbus_proxy; use zvariant::derive::Type; #[repr(u32)] -#[derive(Deserialize_repr, Serialize_repr, Type, Debug, PartialEq)] +#[derive(Deserialize_repr, Serialize_repr, Type, Debug, PartialEq, Clone, Copy)] pub enum MouseButton { Left, Middle, diff --git a/qemu-gtk4/src/console.rs b/qemu-gtk4/src/console.rs index 9948c17..73dff44 100644 --- a/qemu-gtk4/src/console.rs +++ b/qemu-gtk4/src/console.rs @@ -89,6 +89,25 @@ mod imp { let _ = c.mouse.release(button); })); + let ec = gtk::EventControllerScroll::new(gtk::EventControllerScrollFlags::BOTH_AXES); + self.area.add_controller(&ec); + ec.connect_scroll(clone!(@weak obj => move |_, _dx, dy| { + let c = obj.qemu_console(); + + let button = if dy >= 1.0 { + Some(MouseButton::WheelDown) + } else if dy <= -1.0 { + Some(MouseButton::WheelUp) + } else { + None + }; + if let Some(button) = button { + let _ = c.mouse.press(button); + let _ = c.mouse.release(button); + } + glib::signal::Inhibit(true) + })); + self.area.set_sensitive(true); self.area.set_focusable(true); self.area.set_focus_on_click(true);