diff --git a/qemu-gtk4/Cargo.toml b/qemu-gtk4/Cargo.toml index c32b77c..286d1bf 100644 --- a/qemu-gtk4/Cargo.toml +++ b/qemu-gtk4/Cargo.toml @@ -25,14 +25,11 @@ gst-audio = { package = "gstreamer-audio", version = "0.16.5" } [dependencies.gtk] package = "gtk4" git = "https://github.com/gtk-rs/gtk4-rs" -rev = "c43025157b12dba1112fad55962966769908a269" [dependencies.gdk-wl] package = "gdk4-wayland" git = "https://github.com/gtk-rs/gtk4-rs" -rev = "c43025157b12dba1112fad55962966769908a269" [dependencies.gdk-x11] package = "gdk4-x11" git = "https://github.com/gtk-rs/gtk4-rs" -rev = "c43025157b12dba1112fad55962966769908a269" diff --git a/qemu-gtk4/src/application.rs b/qemu-gtk4/src/application.rs index 776ac1f..ac0a0a2 100644 --- a/qemu-gtk4/src/application.rs +++ b/qemu-gtk4/src/application.rs @@ -17,9 +17,8 @@ use zbus::Connection; mod imp { use super::*; - use glib::subclass; - #[derive(Debug)] + #[derive(Debug, Default)] pub struct QemuApplication { pub window: OnceCell>, pub conn: OnceCell, @@ -27,24 +26,11 @@ mod imp { pub audio: OnceCell, } + #[glib::object_subclass] impl ObjectSubclass for QemuApplication { const NAME: &'static str = "QemuApplication"; type Type = super::QemuApplication; type ParentType = gtk::Application; - type Interfaces = (); - type Instance = subclass::simple::InstanceStruct; - type Class = subclass::simple::ClassStruct; - - glib::object_subclass!(); - - fn new() -> Self { - Self { - window: OnceCell::new(), - conn: OnceCell::new(), - addr: OnceCell::new(), - audio: OnceCell::new(), - } - } } impl ObjectImpl for QemuApplication {} diff --git a/qemu-gtk4/src/console.rs b/qemu-gtk4/src/console.rs index 3eee907..e0549b0 100644 --- a/qemu-gtk4/src/console.rs +++ b/qemu-gtk4/src/console.rs @@ -12,7 +12,6 @@ use qemu_display_listener::{Console, ConsoleEvent as Event, MouseButton}; mod imp { use super::*; - use glib::subclass; use gtk::subclass::prelude::*; #[derive(Debug, CompositeTemplate, Default)] @@ -26,25 +25,17 @@ mod imp { pub wait_rendering: Cell, } + #[glib::object_subclass] impl ObjectSubclass for QemuConsole { const NAME: &'static str = "QemuConsole"; type Type = super::QemuConsole; type ParentType = gtk::Widget; - type Interfaces = (); - type Instance = subclass::simple::InstanceStruct; - type Class = subclass::simple::ClassStruct; - - glib::object_subclass!(); - - fn new() -> Self { - Self::default() - } fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); } - fn instance_init(obj: &glib::subclass::InitializingObject) { + fn instance_init(obj: &glib::subclass::InitializingObject) { obj.init_template(); } } @@ -190,7 +181,7 @@ impl QemuConsole { priv_.area.attach_buffers(); let _ = unsafe { glib::Object::from_glib_borrow(priv_.area.as_ptr() as *mut glib::gobject_ffi::GObject) - .emit("render", &[&priv_.area.get_context().as_ref()]) + .emit_by_name("render", &[&priv_.area.get_context().as_ref()]) .unwrap() }; priv_.area.queue_draw(); diff --git a/qemu-gtk4/src/console_area.rs b/qemu-gtk4/src/console_area.rs index a68fd57..b519066 100644 --- a/qemu-gtk4/src/console_area.rs +++ b/qemu-gtk4/src/console_area.rs @@ -14,9 +14,9 @@ use qemu_display_listener::{Scanout, ScanoutDMABUF, Update}; mod imp { use super::*; - use glib::subclass; use gtk::subclass::prelude::*; + #[derive(Default)] pub struct QemuConsoleArea { pub tex_id: Cell, pub texture_blit_vao: Cell, @@ -26,26 +26,11 @@ mod imp { pub scanout_size: Cell<(u32, u32)>, } + #[glib::object_subclass] impl ObjectSubclass for QemuConsoleArea { const NAME: &'static str = "QemuConsoleArea"; type Type = super::QemuConsoleArea; type ParentType = gtk::GLArea; - type Interfaces = (); - type Instance = subclass::simple::InstanceStruct; - type Class = subclass::simple::ClassStruct; - - glib::object_subclass!(); - - fn new() -> Self { - Self { - tex_id: Cell::new(0), - texture_blit_vao: Cell::new(0), - texture_blit_prog: Cell::new(0), - texture_blit_flip_prog: Cell::new(0), - scanout: Cell::new(None), - scanout_size: Cell::new((0, 0)), - } - } fn class_init(_klass: &mut Self::Class) { // GL loading could be done earlier? diff --git a/qemu-gtk4/src/window.rs b/qemu-gtk4/src/window.rs index 05cbb28..b736e98 100644 --- a/qemu-gtk4/src/window.rs +++ b/qemu-gtk4/src/window.rs @@ -11,7 +11,6 @@ use qemu_display_listener::Console; mod imp { use super::*; - use glib::subclass; #[derive(Debug, CompositeTemplate)] #[template(resource = "/org/qemu/gtk4/window.ui")] @@ -23,15 +22,11 @@ mod imp { pub settings: gio::Settings, } + #[glib::object_subclass] impl ObjectSubclass for QemuApplicationWindow { const NAME: &'static str = "QemuApplicationWindow"; type Type = super::QemuApplicationWindow; type ParentType = gtk::ApplicationWindow; - type Interfaces = (); - type Instance = subclass::simple::InstanceStruct; - type Class = subclass::simple::ClassStruct; - - glib::object_subclass!(); fn new() -> Self { Self { @@ -46,7 +41,7 @@ mod imp { } // You must call `Widget`'s `init_template()` within `instance_init()`. - fn instance_init(obj: &glib::subclass::InitializingObject) { + fn instance_init(obj: &glib::subclass::InitializingObject) { obj.init_template(); } }