diff --git a/qemu-display/src/console.rs b/qemu-display/src/console.rs index 8677fe9..aea8d34 100644 --- a/qemu-display/src/console.rs +++ b/qemu-display/src/console.rs @@ -9,7 +9,10 @@ use uds_windows::UnixStream; use zbus::zvariant::Fd; use zbus::{zvariant::ObjectPath, Connection}; -use crate::{util, ConsoleListener, ConsoleListenerHandler, KeyboardProxy, MouseProxy, Result}; +use crate::{ + util, ConsoleListener, ConsoleListenerHandler, KeyboardProxy, MouseProxy, MultiTouchProxy, + Result, +}; #[cfg(windows)] use crate::{ ConsoleListenerD3d11, ConsoleListenerD3d11Handler, ConsoleListenerMap, @@ -58,6 +61,8 @@ pub struct Console { pub keyboard: KeyboardProxy<'static>, #[derivative(Debug = "ignore")] pub mouse: MouseProxy<'static>, + #[derivative(Debug = "ignore")] + pub multi_touch: MultiTouchProxy<'static>, listener: RwLock>, #[cfg(windows)] peer_pid: u32, @@ -72,10 +77,15 @@ impl Console { .build() .await?; let mouse = MouseProxy::builder(conn).path(&obj_path)?.build().await?; + let multi_touch = MultiTouchProxy::builder(conn) + .path(&obj_path)? + .build() + .await?; Ok(Self { proxy, keyboard, mouse, + multi_touch, listener: RwLock::new(None), #[cfg(windows)] peer_pid, diff --git a/qemu-display/src/lib.rs b/qemu-display/src/lib.rs index ed2f9f1..271ee1a 100644 --- a/qemu-display/src/lib.rs +++ b/qemu-display/src/lib.rs @@ -36,6 +36,9 @@ pub use mouse::*; mod display; pub use display::*; +mod multi_touch; +pub use multi_touch::*; + #[cfg(unix)] mod usbredir; #[cfg(unix)] diff --git a/qemu-display/src/multi_touch.rs b/qemu-display/src/multi_touch.rs new file mode 100644 index 0000000..e7bc24b --- /dev/null +++ b/qemu-display/src/multi_touch.rs @@ -0,0 +1,22 @@ +use serde::{Deserialize, Serialize}; +use zbus::zvariant::Type; + +#[repr(u32)] +#[derive(Type, Debug, PartialEq, Copy, Clone, Eq, Serialize, Deserialize)] +pub enum TouchEventKind { + Begin = 0, + Update = 1, + End = 2, + Cancel = 3, +} + +#[zbus::proxy( + default_service = "org.qemu", + interface = "org.qemu.Display1.MultiTouch" +)] +pub trait MultiTouch { + fn send_event(&self, kind: TouchEventKind, num_slot: u64, x: f64, y: f64) -> zbus::Result<()>; + + #[dbus_proxy(property)] + fn max_slots(&self) -> zbus::Result; +}