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);