From f74ef237fa2e40a1b22aff1a0901d32809e698ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Thu, 2 Oct 2025 11:01:51 +0200 Subject: [PATCH 01/14] Generate Gio.DBusObjectManagerClient --- gio/Gir.toml | 10 + gio/src/auto/dbus_object_manager_client.rs | 353 +++++++++++++++++++++ gio/src/auto/mod.rs | 4 + gio/src/dbus_object_manager_client.rs | 262 +++++++++++++++ gio/src/lib.rs | 1 + 5 files changed, 630 insertions(+) create mode 100644 gio/src/auto/dbus_object_manager_client.rs create mode 100644 gio/src/dbus_object_manager_client.rs diff --git a/gio/Gir.toml b/gio/Gir.toml index 578d7610b502..4a223f23daab 100644 --- a/gio/Gir.toml +++ b/gio/Gir.toml @@ -699,6 +699,16 @@ status = "generate" # https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4414 nullable = true +[[object]] +name = "Gio.DBusObjectManagerClient" +status = "generate" + [[object.function]] + name = "new" + manual = true + [[object.function]] + name = "new_for_bus" + manual = true + [[object]] name = "Gio.DBusProxy" status = "generate" diff --git a/gio/src/auto/dbus_object_manager_client.rs b/gio/src/auto/dbus_object_manager_client.rs new file mode 100644 index 000000000000..66c2ef8c1b1b --- /dev/null +++ b/gio/src/auto/dbus_object_manager_client.rs @@ -0,0 +1,353 @@ +// This file was generated by gir (https://github.com/gtk-rs/gir) +// from gir-files (https://github.com/gtk-rs/gir-files) +// DO NOT EDIT + +use crate::{ + ffi, AsyncInitable, AsyncResult, BusType, Cancellable, DBusConnection, DBusObjectManager, + DBusObjectManagerClientFlags, DBusObjectProxy, DBusProxy, Initable, +}; +use glib::{ + object::ObjectType as _, + prelude::*, + signal::{connect_raw, SignalHandlerId}, + translate::*, +}; +use std::boxed::Box as Box_; + +glib::wrapper! { + #[doc(alias = "GDBusObjectManagerClient")] + pub struct DBusObjectManagerClient(Object) @implements AsyncInitable, DBusObjectManager, Initable; + + match fn { + type_ => || ffi::g_dbus_object_manager_client_get_type(), + } +} + +impl DBusObjectManagerClient { + pub const NONE: Option<&'static DBusObjectManagerClient> = None; + + #[doc(alias = "g_dbus_object_manager_client_new_for_bus_sync")] + #[doc(alias = "new_for_bus_sync")] + pub fn for_bus_sync( + bus_type: BusType, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + get_proxy_type_func: Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + 'static, + >, + >, + cancellable: Option<&impl IsA>, + ) -> Result { + let get_proxy_type_func_data: Box_< + Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + > = Box_::new(get_proxy_type_func); + unsafe extern "C" fn get_proxy_type_func_func( + manager: *mut ffi::GDBusObjectManagerClient, + object_path: *const std::ffi::c_char, + interface_name: *const std::ffi::c_char, + data: glib::ffi::gpointer, + ) -> glib::ffi::GType { + let manager = from_glib_borrow(manager); + let object_path: Borrowed = from_glib_borrow(object_path); + let interface_name: Borrowed> = from_glib_borrow(interface_name); + let callback = &*(data as *mut Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >); + if let Some(ref callback) = *callback { + callback( + &manager, + object_path.as_str(), + (*interface_name).as_ref().map(|s| s.as_str()), + ) + } else { + panic!("cannot get closure...") + } + .into_glib() + } + let get_proxy_type_func = if get_proxy_type_func_data.is_some() { + Some(get_proxy_type_func_func as _) + } else { + None + }; + unsafe extern "C" fn get_proxy_type_destroy_notify_func(data: glib::ffi::gpointer) { + let _callback = Box_::from_raw( + data as *mut Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + ); + } + let destroy_call6 = Some(get_proxy_type_destroy_notify_func as _); + let super_callback0: Box_< + Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + > = get_proxy_type_func_data; + unsafe { + let mut error = std::ptr::null_mut(); + let ret = ffi::g_dbus_object_manager_client_new_for_bus_sync( + bus_type.into_glib(), + flags.into_glib(), + name.to_glib_none().0, + object_path.to_glib_none().0, + get_proxy_type_func, + Box_::into_raw(super_callback0) as *mut _, + destroy_call6, + cancellable.map(|p| p.as_ref()).to_glib_none().0, + &mut error, + ); + if error.is_null() { + Ok(from_glib_full(ret)) + } else { + Err(from_glib_full(error)) + } + } + } + + #[doc(alias = "g_dbus_object_manager_client_new_sync")] + pub fn new_sync( + connection: &DBusConnection, + flags: DBusObjectManagerClientFlags, + name: Option<&str>, + object_path: &str, + get_proxy_type_func: Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + 'static, + >, + >, + cancellable: Option<&impl IsA>, + ) -> Result { + let get_proxy_type_func_data: Box_< + Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + > = Box_::new(get_proxy_type_func); + unsafe extern "C" fn get_proxy_type_func_func( + manager: *mut ffi::GDBusObjectManagerClient, + object_path: *const std::ffi::c_char, + interface_name: *const std::ffi::c_char, + data: glib::ffi::gpointer, + ) -> glib::ffi::GType { + let manager = from_glib_borrow(manager); + let object_path: Borrowed = from_glib_borrow(object_path); + let interface_name: Borrowed> = from_glib_borrow(interface_name); + let callback = &*(data as *mut Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >); + if let Some(ref callback) = *callback { + callback( + &manager, + object_path.as_str(), + (*interface_name).as_ref().map(|s| s.as_str()), + ) + } else { + panic!("cannot get closure...") + } + .into_glib() + } + let get_proxy_type_func = if get_proxy_type_func_data.is_some() { + Some(get_proxy_type_func_func as _) + } else { + None + }; + unsafe extern "C" fn get_proxy_type_destroy_notify_func(data: glib::ffi::gpointer) { + let _callback = Box_::from_raw( + data as *mut Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + ); + } + let destroy_call6 = Some(get_proxy_type_destroy_notify_func as _); + let super_callback0: Box_< + Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + > = get_proxy_type_func_data; + unsafe { + let mut error = std::ptr::null_mut(); + let ret = ffi::g_dbus_object_manager_client_new_sync( + connection.to_glib_none().0, + flags.into_glib(), + name.to_glib_none().0, + object_path.to_glib_none().0, + get_proxy_type_func, + Box_::into_raw(super_callback0) as *mut _, + destroy_call6, + cancellable.map(|p| p.as_ref()).to_glib_none().0, + &mut error, + ); + if error.is_null() { + Ok(from_glib_full(ret)) + } else { + Err(from_glib_full(error)) + } + } + } +} + +impl std::fmt::Display for DBusObjectManagerClient { + #[inline] + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + f.write_str(&DBusObjectManagerClientExt::name(self)) + } +} + +pub trait DBusObjectManagerClientExt: IsA + 'static { + #[doc(alias = "g_dbus_object_manager_client_get_connection")] + #[doc(alias = "get_connection")] + fn connection(&self) -> DBusConnection { + unsafe { + from_glib_none(ffi::g_dbus_object_manager_client_get_connection( + self.as_ref().to_glib_none().0, + )) + } + } + + #[doc(alias = "g_dbus_object_manager_client_get_flags")] + #[doc(alias = "get_flags")] + fn flags(&self) -> DBusObjectManagerClientFlags { + unsafe { + from_glib(ffi::g_dbus_object_manager_client_get_flags( + self.as_ref().to_glib_none().0, + )) + } + } + + #[doc(alias = "g_dbus_object_manager_client_get_name")] + #[doc(alias = "get_name")] + fn name(&self) -> glib::GString { + unsafe { + from_glib_none(ffi::g_dbus_object_manager_client_get_name( + self.as_ref().to_glib_none().0, + )) + } + } + + #[doc(alias = "g_dbus_object_manager_client_get_name_owner")] + #[doc(alias = "get_name_owner")] + #[doc(alias = "name-owner")] + fn name_owner(&self) -> Option { + unsafe { + from_glib_full(ffi::g_dbus_object_manager_client_get_name_owner( + self.as_ref().to_glib_none().0, + )) + } + } + + //#[doc(alias = "get-proxy-type-destroy-notify")] + //fn get_proxy_type_destroy_notify(&self) -> /*Unimplemented*/Basic: Pointer { + // ObjectExt::property(self.as_ref(), "get-proxy-type-destroy-notify") + //} + + //#[doc(alias = "get-proxy-type-func")] + //fn get_proxy_type_func(&self) -> /*Unimplemented*/Basic: Pointer { + // ObjectExt::property(self.as_ref(), "get-proxy-type-func") + //} + + //#[doc(alias = "get-proxy-type-user-data")] + //fn get_proxy_type_user_data(&self) -> /*Unimplemented*/Basic: Pointer { + // ObjectExt::property(self.as_ref(), "get-proxy-type-user-data") + //} + + //#[doc(alias = "interface-proxy-properties-changed")] + //fn connect_interface_proxy_properties_changed(&self, f: F) -> SignalHandlerId { + // Empty ctype invalidated_properties: *.CArray TypeId { ns_id: 0, id: 28 } + //} + + #[doc(alias = "interface-proxy-signal")] + fn connect_interface_proxy_signal< + F: Fn(&Self, &DBusObjectProxy, &DBusProxy, &str, &str, &glib::Variant) + 'static, + >( + &self, + f: F, + ) -> SignalHandlerId { + unsafe extern "C" fn interface_proxy_signal_trampoline< + P: IsA, + F: Fn(&P, &DBusObjectProxy, &DBusProxy, &str, &str, &glib::Variant) + 'static, + >( + this: *mut ffi::GDBusObjectManagerClient, + object_proxy: *mut ffi::GDBusObjectProxy, + interface_proxy: *mut ffi::GDBusProxy, + sender_name: *mut std::ffi::c_char, + signal_name: *mut std::ffi::c_char, + parameters: *mut glib::ffi::GVariant, + f: glib::ffi::gpointer, + ) { + let f: &F = &*(f as *const F); + f( + DBusObjectManagerClient::from_glib_borrow(this).unsafe_cast_ref(), + &from_glib_borrow(object_proxy), + &from_glib_borrow(interface_proxy), + &glib::GString::from_glib_borrow(sender_name), + &glib::GString::from_glib_borrow(signal_name), + &from_glib_borrow(parameters), + ) + } + unsafe { + let f: Box_ = Box_::new(f); + connect_raw( + self.as_ptr() as *mut _, + c"interface-proxy-signal".as_ptr() as *const _, + Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>( + interface_proxy_signal_trampoline:: as *const (), + )), + Box_::into_raw(f), + ) + } + } + + #[doc(alias = "name-owner")] + fn connect_name_owner_notify(&self, f: F) -> SignalHandlerId { + unsafe extern "C" fn notify_name_owner_trampoline< + P: IsA, + F: Fn(&P) + 'static, + >( + this: *mut ffi::GDBusObjectManagerClient, + _param_spec: glib::ffi::gpointer, + f: glib::ffi::gpointer, + ) { + let f: &F = &*(f as *const F); + f(DBusObjectManagerClient::from_glib_borrow(this).unsafe_cast_ref()) + } + unsafe { + let f: Box_ = Box_::new(f); + connect_raw( + self.as_ptr() as *mut _, + c"notify::name-owner".as_ptr() as *const _, + Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>( + notify_name_owner_trampoline:: as *const (), + )), + Box_::into_raw(f), + ) + } + } +} + +impl> DBusObjectManagerClientExt for O {} diff --git a/gio/src/auto/mod.rs b/gio/src/auto/mod.rs index e8b3c5958f6c..96507da8639a 100644 --- a/gio/src/auto/mod.rs +++ b/gio/src/auto/mod.rs @@ -89,6 +89,9 @@ pub use self::dbus_object::DBusObject; mod dbus_object_manager; pub use self::dbus_object_manager::DBusObjectManager; +mod dbus_object_manager_client; +pub use self::dbus_object_manager_client::DBusObjectManagerClient; + mod dbus_object_manager_server; pub use self::dbus_object_manager_server::DBusObjectManagerServer; @@ -828,6 +831,7 @@ pub(crate) mod traits { pub use super::dbus_interface_skeleton::DBusInterfaceSkeletonExt; pub use super::dbus_object::DBusObjectExt; pub use super::dbus_object_manager::DBusObjectManagerExt; + pub use super::dbus_object_manager_client::DBusObjectManagerClientExt; pub use super::dbus_object_manager_server::DBusObjectManagerServerExt; pub use super::dbus_object_proxy::DBusObjectProxyExt; pub use super::dbus_object_skeleton::DBusObjectSkeletonExt; diff --git a/gio/src/dbus_object_manager_client.rs b/gio/src/dbus_object_manager_client.rs new file mode 100644 index 000000000000..c7153b66e4fe --- /dev/null +++ b/gio/src/dbus_object_manager_client.rs @@ -0,0 +1,262 @@ +// Take a look at the license at the top of the repository in the LICENSE file. + +use crate::{ + ffi, BusType, Cancellable, DBusConnection, DBusObjectManagerClient, + DBusObjectManagerClientFlags, GioFuture, +}; +use glib::object::IsA; +use glib::translate::{from_glib_borrow, from_glib_full, Borrowed, IntoGlib as _, ToGlibPtr as _}; +use std::future::Future; +use std::pin::Pin; + +type DBusProxyTypeFn = + Box) -> glib::types::Type + 'static>; + +impl DBusObjectManagerClient { + #[doc(alias = "g_dbus_object_manager_client_new")] + #[allow(clippy::new_ret_no_self)] + pub fn new) + 'static>( + connection: &DBusConnection, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + get_proxy_type_func: Option, + cancellable: Option<&impl IsA>, + callback: P, + ) { + let main_context = glib::MainContext::ref_thread_default(); + let is_main_context_owner = main_context.is_owner(); + let has_acquired_main_context = (!is_main_context_owner) + .then(|| main_context.acquire().ok()) + .flatten(); + assert!( + is_main_context_owner || has_acquired_main_context.is_some(), + "Async operations only allowed if the thread is owning the MainContext" + ); + + unsafe extern "C" fn get_proxy_type_func_func( + manager: *mut ffi::GDBusObjectManagerClient, + object_path: *const std::ffi::c_char, + interface_name: *const std::ffi::c_char, + data: glib::ffi::gpointer, + ) -> glib::ffi::GType { + let manager = from_glib_borrow(manager); + let object_path: Borrowed = from_glib_borrow(object_path); + let interface_name: Borrowed> = from_glib_borrow(interface_name); + let callback = &*(data as *mut Option); + if let Some(ref callback) = *callback { + callback( + &manager, + object_path.as_str(), + (*interface_name).as_ref().map(|s| s.as_str()), + ) + } else { + panic!("cannot get closure...") + } + .into_glib() + } + + unsafe extern "C" fn get_proxy_type_destroy_notify_func(data: glib::ffi::gpointer) { + let _callback = Box::from_raw(data as *mut Option); + } + + unsafe extern "C" fn new_trampoline< + P: FnOnce(Result) + 'static, + >( + _source_object: *mut glib::gobject_ffi::GObject, + res: *mut crate::ffi::GAsyncResult, + user_data: glib::ffi::gpointer, + ) { + let mut error = std::ptr::null_mut(); + let ret = ffi::g_dbus_object_manager_client_new_finish(res, &mut error); + let result = if error.is_null() { + Ok(from_glib_full(ret)) + } else { + Err(from_glib_full(error)) + }; + let callback: Box> = + Box::from_raw(user_data as *mut _); + let callback: P = callback.into_inner(); + callback(result); + } + + let get_proxy_type_user_data = Box::new(get_proxy_type_func); + let get_proxy_type_func = if get_proxy_type_user_data.is_some() { + Some(get_proxy_type_func_func as _) + } else { + None + }; + let get_proxy_type_destroy_notify = if get_proxy_type_user_data.is_some() { + Some(get_proxy_type_destroy_notify_func as _) + } else { + None + }; + + let user_data: Box> = + Box::new(glib::thread_guard::ThreadGuard::new(callback)); + let callback = new_trampoline::

; + + unsafe { + ffi::g_dbus_object_manager_client_new( + connection.to_glib_none().0, + flags.into_glib(), + name.to_glib_none().0, + object_path.to_glib_none().0, + get_proxy_type_func, + Box::into_raw(get_proxy_type_user_data) as *mut _, + get_proxy_type_destroy_notify, + cancellable.map(|p| p.as_ref()).to_glib_none().0, + Some(callback), + Box::into_raw(user_data) as *mut _, + ); + } + } + + pub fn new_future( + connection: &DBusConnection, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + get_proxy_type_func: Option, + ) -> Pin> + 'static>> { + let connection = connection.clone(); + let name = String::from(name); + let object_path = String::from(object_path); + Box::pin(GioFuture::new(&(), move |_obj, cancellable, send| { + Self::new( + &connection, + flags, + &name, + &object_path, + get_proxy_type_func, + Some(cancellable), + move |res| { + send.resolve(res); + }, + ); + })) + } + + #[doc(alias = "g_dbus_object_manager_client_new_for_bus")] + #[allow(clippy::new_ret_no_self)] + pub fn new_for_bus) + 'static>( + bus_type: BusType, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + get_proxy_type_func: Option, + cancellable: Option<&impl IsA>, + callback: P, + ) { + let main_context = glib::MainContext::ref_thread_default(); + let is_main_context_owner = main_context.is_owner(); + let has_acquired_main_context = (!is_main_context_owner) + .then(|| main_context.acquire().ok()) + .flatten(); + assert!( + is_main_context_owner || has_acquired_main_context.is_some(), + "Async operations only allowed if the thread is owning the MainContext" + ); + + unsafe extern "C" fn get_proxy_type_func_func( + manager: *mut ffi::GDBusObjectManagerClient, + object_path: *const std::ffi::c_char, + interface_name: *const std::ffi::c_char, + data: glib::ffi::gpointer, + ) -> glib::ffi::GType { + let manager = from_glib_borrow(manager); + let object_path: Borrowed = from_glib_borrow(object_path); + let interface_name: Borrowed> = from_glib_borrow(interface_name); + let callback = &*(data as *mut Option); + if let Some(ref callback) = *callback { + callback( + &manager, + object_path.as_str(), + (*interface_name).as_ref().map(|s| s.as_str()), + ) + } else { + panic!("cannot get closure...") + } + .into_glib() + } + + unsafe extern "C" fn get_proxy_type_destroy_notify_func(data: glib::ffi::gpointer) { + let _callback = Box::from_raw(data as *mut Option); + } + + unsafe extern "C" fn new_for_bus_trampoline< + P: FnOnce(Result) + 'static, + >( + _source_object: *mut glib::gobject_ffi::GObject, + res: *mut crate::ffi::GAsyncResult, + user_data: glib::ffi::gpointer, + ) { + let mut error = std::ptr::null_mut(); + let ret = ffi::g_dbus_object_manager_client_new_finish(res, &mut error); + let result = if error.is_null() { + Ok(from_glib_full(ret)) + } else { + Err(from_glib_full(error)) + }; + let callback: Box> = + Box::from_raw(user_data as *mut _); + let callback: P = callback.into_inner(); + callback(result); + } + + let get_proxy_type_user_data = Box::new(get_proxy_type_func); + let get_proxy_type_func = if get_proxy_type_user_data.is_some() { + Some(get_proxy_type_func_func as _) + } else { + None + }; + let get_proxy_type_destroy_notify = if get_proxy_type_user_data.is_some() { + Some(get_proxy_type_destroy_notify_func as _) + } else { + None + }; + + let user_data: Box> = + Box::new(glib::thread_guard::ThreadGuard::new(callback)); + let callback = new_for_bus_trampoline::

; + + unsafe { + ffi::g_dbus_object_manager_client_new_for_bus( + bus_type.into_glib(), + flags.into_glib(), + name.to_glib_none().0, + object_path.to_glib_none().0, + get_proxy_type_func, + Box::into_raw(get_proxy_type_user_data) as *mut _, + get_proxy_type_destroy_notify, + cancellable.map(|p| p.as_ref()).to_glib_none().0, + Some(callback), + Box::into_raw(user_data) as *mut _, + ); + } + } + + pub fn new_for_bus_future( + bus_type: BusType, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + get_proxy_type_func: Option, + ) -> Pin> + 'static>> { + let name = String::from(name); + let object_path = String::from(object_path); + Box::pin(GioFuture::new(&(), move |_obj, cancellable, send| { + Self::new_for_bus( + bus_type, + flags, + &name, + &object_path, + get_proxy_type_func, + Some(cancellable), + move |res| { + send.resolve(res); + }, + ); + })) + } +} diff --git a/gio/src/lib.rs b/gio/src/lib.rs index cc6e13f840d8..a8e0e9f43ca4 100644 --- a/gio/src/lib.rs +++ b/gio/src/lib.rs @@ -91,6 +91,7 @@ mod socket_control_message; mod socket_listener; mod socket_msg_flags; pub use socket_msg_flags::SocketMsgFlags; +mod dbus_object_manager_client; mod subprocess; mod subprocess_launcher; mod threaded_socket_service; From cfab0c1c31a0511a9511b9d09cc122ea46dd8626 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Thu, 2 Oct 2025 11:06:11 +0200 Subject: [PATCH 02/14] Move customized auto-generate code to manual --- gio/Gir.toml | 8 + gio/src/auto/dbus_object_manager_client.rs | 187 +-------------------- gio/src/dbus_object_manager_client.rs | 187 +++++++++++++++++++++ 3 files changed, 196 insertions(+), 186 deletions(-) diff --git a/gio/Gir.toml b/gio/Gir.toml index 4a223f23daab..950e46cb111e 100644 --- a/gio/Gir.toml +++ b/gio/Gir.toml @@ -708,6 +708,14 @@ status = "generate" [[object.function]] name = "new_for_bus" manual = true + [[object.function]] + name = "new_sync" + # cancellable param is not converted to ffi correctly + manual = true + [[object.function]] + name = "new_for_bus_sync" + # cancellable param is not converted to ffi correctly + manual = true [[object]] name = "Gio.DBusProxy" diff --git a/gio/src/auto/dbus_object_manager_client.rs b/gio/src/auto/dbus_object_manager_client.rs index 66c2ef8c1b1b..458cf5ae9d06 100644 --- a/gio/src/auto/dbus_object_manager_client.rs +++ b/gio/src/auto/dbus_object_manager_client.rs @@ -3,7 +3,7 @@ // DO NOT EDIT use crate::{ - ffi, AsyncInitable, AsyncResult, BusType, Cancellable, DBusConnection, DBusObjectManager, + ffi, AsyncInitable, AsyncResult, DBusConnection, DBusObjectManager, DBusObjectManagerClientFlags, DBusObjectProxy, DBusProxy, Initable, }; use glib::{ @@ -25,191 +25,6 @@ glib::wrapper! { impl DBusObjectManagerClient { pub const NONE: Option<&'static DBusObjectManagerClient> = None; - - #[doc(alias = "g_dbus_object_manager_client_new_for_bus_sync")] - #[doc(alias = "new_for_bus_sync")] - pub fn for_bus_sync( - bus_type: BusType, - flags: DBusObjectManagerClientFlags, - name: &str, - object_path: &str, - get_proxy_type_func: Option< - Box_< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + 'static, - >, - >, - cancellable: Option<&impl IsA>, - ) -> Result { - let get_proxy_type_func_data: Box_< - Option< - Box_< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + 'static, - >, - >, - > = Box_::new(get_proxy_type_func); - unsafe extern "C" fn get_proxy_type_func_func( - manager: *mut ffi::GDBusObjectManagerClient, - object_path: *const std::ffi::c_char, - interface_name: *const std::ffi::c_char, - data: glib::ffi::gpointer, - ) -> glib::ffi::GType { - let manager = from_glib_borrow(manager); - let object_path: Borrowed = from_glib_borrow(object_path); - let interface_name: Borrowed> = from_glib_borrow(interface_name); - let callback = &*(data as *mut Option< - Box_< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + 'static, - >, - >); - if let Some(ref callback) = *callback { - callback( - &manager, - object_path.as_str(), - (*interface_name).as_ref().map(|s| s.as_str()), - ) - } else { - panic!("cannot get closure...") - } - .into_glib() - } - let get_proxy_type_func = if get_proxy_type_func_data.is_some() { - Some(get_proxy_type_func_func as _) - } else { - None - }; - unsafe extern "C" fn get_proxy_type_destroy_notify_func(data: glib::ffi::gpointer) { - let _callback = Box_::from_raw( - data as *mut Option< - Box_< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + 'static, - >, - >, - ); - } - let destroy_call6 = Some(get_proxy_type_destroy_notify_func as _); - let super_callback0: Box_< - Option< - Box_< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + 'static, - >, - >, - > = get_proxy_type_func_data; - unsafe { - let mut error = std::ptr::null_mut(); - let ret = ffi::g_dbus_object_manager_client_new_for_bus_sync( - bus_type.into_glib(), - flags.into_glib(), - name.to_glib_none().0, - object_path.to_glib_none().0, - get_proxy_type_func, - Box_::into_raw(super_callback0) as *mut _, - destroy_call6, - cancellable.map(|p| p.as_ref()).to_glib_none().0, - &mut error, - ); - if error.is_null() { - Ok(from_glib_full(ret)) - } else { - Err(from_glib_full(error)) - } - } - } - - #[doc(alias = "g_dbus_object_manager_client_new_sync")] - pub fn new_sync( - connection: &DBusConnection, - flags: DBusObjectManagerClientFlags, - name: Option<&str>, - object_path: &str, - get_proxy_type_func: Option< - Box_< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + 'static, - >, - >, - cancellable: Option<&impl IsA>, - ) -> Result { - let get_proxy_type_func_data: Box_< - Option< - Box_< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + 'static, - >, - >, - > = Box_::new(get_proxy_type_func); - unsafe extern "C" fn get_proxy_type_func_func( - manager: *mut ffi::GDBusObjectManagerClient, - object_path: *const std::ffi::c_char, - interface_name: *const std::ffi::c_char, - data: glib::ffi::gpointer, - ) -> glib::ffi::GType { - let manager = from_glib_borrow(manager); - let object_path: Borrowed = from_glib_borrow(object_path); - let interface_name: Borrowed> = from_glib_borrow(interface_name); - let callback = &*(data as *mut Option< - Box_< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + 'static, - >, - >); - if let Some(ref callback) = *callback { - callback( - &manager, - object_path.as_str(), - (*interface_name).as_ref().map(|s| s.as_str()), - ) - } else { - panic!("cannot get closure...") - } - .into_glib() - } - let get_proxy_type_func = if get_proxy_type_func_data.is_some() { - Some(get_proxy_type_func_func as _) - } else { - None - }; - unsafe extern "C" fn get_proxy_type_destroy_notify_func(data: glib::ffi::gpointer) { - let _callback = Box_::from_raw( - data as *mut Option< - Box_< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + 'static, - >, - >, - ); - } - let destroy_call6 = Some(get_proxy_type_destroy_notify_func as _); - let super_callback0: Box_< - Option< - Box_< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + 'static, - >, - >, - > = get_proxy_type_func_data; - unsafe { - let mut error = std::ptr::null_mut(); - let ret = ffi::g_dbus_object_manager_client_new_sync( - connection.to_glib_none().0, - flags.into_glib(), - name.to_glib_none().0, - object_path.to_glib_none().0, - get_proxy_type_func, - Box_::into_raw(super_callback0) as *mut _, - destroy_call6, - cancellable.map(|p| p.as_ref()).to_glib_none().0, - &mut error, - ); - if error.is_null() { - Ok(from_glib_full(ret)) - } else { - Err(from_glib_full(error)) - } - } - } } impl std::fmt::Display for DBusObjectManagerClient { diff --git a/gio/src/dbus_object_manager_client.rs b/gio/src/dbus_object_manager_client.rs index c7153b66e4fe..5a459c5992e8 100644 --- a/gio/src/dbus_object_manager_client.rs +++ b/gio/src/dbus_object_manager_client.rs @@ -260,3 +260,190 @@ impl DBusObjectManagerClient { })) } } + +impl DBusObjectManagerClient { + #[doc(alias = "g_dbus_object_manager_client_new_for_bus_sync")] + #[doc(alias = "new_for_bus_sync")] + pub fn for_bus_sync( + bus_type: BusType, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + get_proxy_type_func: Option< + Box< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + 'static, + >, + >, + cancellable: Option<&impl IsA>, + ) -> Result { + let get_proxy_type_func_data: Box< + Option< + Box< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + > = Box::new(get_proxy_type_func); + unsafe extern "C" fn get_proxy_type_func_func( + manager: *mut ffi::GDBusObjectManagerClient, + object_path: *const std::ffi::c_char, + interface_name: *const std::ffi::c_char, + data: glib::ffi::gpointer, + ) -> glib::ffi::GType { + let manager = from_glib_borrow(manager); + let object_path: Borrowed = from_glib_borrow(object_path); + let interface_name: Borrowed> = from_glib_borrow(interface_name); + let callback = &*(data as *mut Option< + Box< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >); + if let Some(ref callback) = *callback { + callback( + &manager, + object_path.as_str(), + (*interface_name).as_ref().map(|s| s.as_str()), + ) + } else { + panic!("cannot get closure...") + } + .into_glib() + } + let get_proxy_type_func = if get_proxy_type_func_data.is_some() { + Some(get_proxy_type_func_func as _) + } else { + None + }; + unsafe extern "C" fn get_proxy_type_destroy_notify_func(data: glib::ffi::gpointer) { + let _callback = Box::from_raw( + data as *mut Option< + Box< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + ); + } + let destroy_call6 = Some(get_proxy_type_destroy_notify_func as _); + let super_callback0: Box< + Option< + Box< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + > = get_proxy_type_func_data; + unsafe { + let mut error = std::ptr::null_mut(); + let ret = ffi::g_dbus_object_manager_client_new_for_bus_sync( + bus_type.into_glib(), + flags.into_glib(), + name.to_glib_none().0, + object_path.to_glib_none().0, + get_proxy_type_func, + Box::into_raw(super_callback0) as *mut _, + destroy_call6, + cancellable.map(|p| p.as_ref()).to_glib_none().0, + &mut error, + ); + if error.is_null() { + Ok(from_glib_full(ret)) + } else { + Err(from_glib_full(error)) + } + } + } + + #[doc(alias = "g_dbus_object_manager_client_new_sync")] + pub fn new_sync( + connection: &DBusConnection, + flags: DBusObjectManagerClientFlags, + name: Option<&str>, + object_path: &str, + get_proxy_type_func: Option< + Box< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + 'static, + >, + >, + cancellable: Option<&impl IsA>, + ) -> Result { + let get_proxy_type_func_data: Box< + Option< + Box< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + > = Box::new(get_proxy_type_func); + unsafe extern "C" fn get_proxy_type_func_func( + manager: *mut ffi::GDBusObjectManagerClient, + object_path: *const std::ffi::c_char, + interface_name: *const std::ffi::c_char, + data: glib::ffi::gpointer, + ) -> glib::ffi::GType { + let manager = from_glib_borrow(manager); + let object_path: Borrowed = from_glib_borrow(object_path); + let interface_name: Borrowed> = from_glib_borrow(interface_name); + let callback = &*(data as *mut Option< + Box< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >); + if let Some(ref callback) = *callback { + callback( + &manager, + object_path.as_str(), + (*interface_name).as_ref().map(|s| s.as_str()), + ) + } else { + panic!("cannot get closure...") + } + .into_glib() + } + let get_proxy_type_func = if get_proxy_type_func_data.is_some() { + Some(get_proxy_type_func_func as _) + } else { + None + }; + unsafe extern "C" fn get_proxy_type_destroy_notify_func(data: glib::ffi::gpointer) { + let _callback = Box::from_raw( + data as *mut Option< + Box< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + ); + } + let destroy_call6 = Some(get_proxy_type_destroy_notify_func as _); + let super_callback0: Box< + Option< + Box< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + > = get_proxy_type_func_data; + unsafe { + let mut error = std::ptr::null_mut(); + let ret = ffi::g_dbus_object_manager_client_new_sync( + connection.to_glib_none().0, + flags.into_glib(), + name.to_glib_none().0, + object_path.to_glib_none().0, + get_proxy_type_func, + Box::into_raw(super_callback0) as *mut _, + destroy_call6, + cancellable.map(|p| p.as_ref()).to_glib_none().0, + &mut error, + ); + if error.is_null() { + Ok(from_glib_full(ret)) + } else { + Err(from_glib_full(error)) + } + } + } +} From 9d74f99f846972fcdb1243de57d1de449788d3ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Sat, 4 Oct 2025 21:23:51 +0200 Subject: [PATCH 03/14] Combine impls --- gio/src/dbus_object_manager_client.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/gio/src/dbus_object_manager_client.rs b/gio/src/dbus_object_manager_client.rs index 5a459c5992e8..0df365a126a7 100644 --- a/gio/src/dbus_object_manager_client.rs +++ b/gio/src/dbus_object_manager_client.rs @@ -259,9 +259,7 @@ impl DBusObjectManagerClient { ); })) } -} -impl DBusObjectManagerClient { #[doc(alias = "g_dbus_object_manager_client_new_for_bus_sync")] #[doc(alias = "new_for_bus_sync")] pub fn for_bus_sync( From 6d94ae78219c2f91fa4041c8cd18bf522a66f0c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Sat, 4 Oct 2025 21:29:46 +0200 Subject: [PATCH 04/14] Mark as send+sync --- gio/Gir.toml | 1 + gio/src/auto/dbus_object_manager_client.rs | 17 +++++++-- gio/src/dbus_object_manager_client.rs | 44 ++++++++++++++++++---- 3 files changed, 50 insertions(+), 12 deletions(-) diff --git a/gio/Gir.toml b/gio/Gir.toml index 950e46cb111e..dfc215e6b43e 100644 --- a/gio/Gir.toml +++ b/gio/Gir.toml @@ -702,6 +702,7 @@ status = "generate" [[object]] name = "Gio.DBusObjectManagerClient" status = "generate" +concurrency = "send+sync" [[object.function]] name = "new" manual = true diff --git a/gio/src/auto/dbus_object_manager_client.rs b/gio/src/auto/dbus_object_manager_client.rs index 458cf5ae9d06..a83921f8ae3c 100644 --- a/gio/src/auto/dbus_object_manager_client.rs +++ b/gio/src/auto/dbus_object_manager_client.rs @@ -34,6 +34,9 @@ impl std::fmt::Display for DBusObjectManagerClient { } } +unsafe impl Send for DBusObjectManagerClient {} +unsafe impl Sync for DBusObjectManagerClient {} + pub trait DBusObjectManagerClientExt: IsA + 'static { #[doc(alias = "g_dbus_object_manager_client_get_connection")] #[doc(alias = "get_connection")] @@ -98,14 +101,17 @@ pub trait DBusObjectManagerClientExt: IsA + 'static { #[doc(alias = "interface-proxy-signal")] fn connect_interface_proxy_signal< - F: Fn(&Self, &DBusObjectProxy, &DBusProxy, &str, &str, &glib::Variant) + 'static, + F: Fn(&Self, &DBusObjectProxy, &DBusProxy, &str, &str, &glib::Variant) + Send + Sync + 'static, >( &self, f: F, ) -> SignalHandlerId { unsafe extern "C" fn interface_proxy_signal_trampoline< P: IsA, - F: Fn(&P, &DBusObjectProxy, &DBusProxy, &str, &str, &glib::Variant) + 'static, + F: Fn(&P, &DBusObjectProxy, &DBusProxy, &str, &str, &glib::Variant) + + Send + + Sync + + 'static, >( this: *mut ffi::GDBusObjectManagerClient, object_proxy: *mut ffi::GDBusObjectProxy, @@ -139,10 +145,13 @@ pub trait DBusObjectManagerClientExt: IsA + 'static { } #[doc(alias = "name-owner")] - fn connect_name_owner_notify(&self, f: F) -> SignalHandlerId { + fn connect_name_owner_notify( + &self, + f: F, + ) -> SignalHandlerId { unsafe extern "C" fn notify_name_owner_trampoline< P: IsA, - F: Fn(&P) + 'static, + F: Fn(&P) + Send + Sync + 'static, >( this: *mut ffi::GDBusObjectManagerClient, _param_spec: glib::ffi::gpointer, diff --git a/gio/src/dbus_object_manager_client.rs b/gio/src/dbus_object_manager_client.rs index 0df365a126a7..115c314b925b 100644 --- a/gio/src/dbus_object_manager_client.rs +++ b/gio/src/dbus_object_manager_client.rs @@ -9,13 +9,17 @@ use glib::translate::{from_glib_borrow, from_glib_full, Borrowed, IntoGlib as _, use std::future::Future; use std::pin::Pin; -type DBusProxyTypeFn = - Box) -> glib::types::Type + 'static>; +type DBusProxyTypeFn = Box< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + + 'static, +>; impl DBusObjectManagerClient { #[doc(alias = "g_dbus_object_manager_client_new")] #[allow(clippy::new_ret_no_self)] - pub fn new) + 'static>( + pub fn new) + Send + Sync + 'static>( connection: &DBusConnection, flags: DBusObjectManagerClientFlags, name: &str, @@ -61,7 +65,7 @@ impl DBusObjectManagerClient { } unsafe extern "C" fn new_trampoline< - P: FnOnce(Result) + 'static, + P: FnOnce(Result) + Send + Sync + 'static, >( _source_object: *mut glib::gobject_ffi::GObject, res: *mut crate::ffi::GAsyncResult, @@ -139,7 +143,9 @@ impl DBusObjectManagerClient { #[doc(alias = "g_dbus_object_manager_client_new_for_bus")] #[allow(clippy::new_ret_no_self)] - pub fn new_for_bus) + 'static>( + pub fn new_for_bus< + P: FnOnce(Result) + Send + Sync + 'static, + >( bus_type: BusType, flags: DBusObjectManagerClientFlags, name: &str, @@ -185,7 +191,7 @@ impl DBusObjectManagerClient { } unsafe extern "C" fn new_for_bus_trampoline< - P: FnOnce(Result) + 'static, + P: FnOnce(Result) + Send + Sync + 'static, >( _source_object: *mut glib::gobject_ffi::GObject, res: *mut crate::ffi::GAsyncResult, @@ -269,7 +275,10 @@ impl DBusObjectManagerClient { object_path: &str, get_proxy_type_func: Option< Box< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + 'static, + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + + 'static, >, >, cancellable: Option<&impl IsA>, @@ -278,6 +287,8 @@ impl DBusObjectManagerClient { Option< Box< dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + 'static, >, >, @@ -294,6 +305,8 @@ impl DBusObjectManagerClient { let callback = &*(data as *mut Option< Box< dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + 'static, >, >); @@ -318,6 +331,8 @@ impl DBusObjectManagerClient { data as *mut Option< Box< dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + 'static, >, >, @@ -328,6 +343,8 @@ impl DBusObjectManagerClient { Option< Box< dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + 'static, >, >, @@ -361,7 +378,10 @@ impl DBusObjectManagerClient { object_path: &str, get_proxy_type_func: Option< Box< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + 'static, + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + + 'static, >, >, cancellable: Option<&impl IsA>, @@ -370,6 +390,8 @@ impl DBusObjectManagerClient { Option< Box< dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + 'static, >, >, @@ -386,6 +408,8 @@ impl DBusObjectManagerClient { let callback = &*(data as *mut Option< Box< dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + 'static, >, >); @@ -410,6 +434,8 @@ impl DBusObjectManagerClient { data as *mut Option< Box< dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + 'static, >, >, @@ -420,6 +446,8 @@ impl DBusObjectManagerClient { Option< Box< dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + 'static, >, >, From 627529de6871ea795e9dacaa907bac85a4b696ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Sat, 4 Oct 2025 21:34:27 +0200 Subject: [PATCH 05/14] Ignore C APIs --- gio/Gir.toml | 12 ++++++++++++ gio/src/auto/dbus_object_manager_client.rs | 15 --------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/gio/Gir.toml b/gio/Gir.toml index dfc215e6b43e..41216dd47433 100644 --- a/gio/Gir.toml +++ b/gio/Gir.toml @@ -717,6 +717,18 @@ concurrency = "send+sync" name = "new_for_bus_sync" # cancellable param is not converted to ffi correctly manual = true + [[object.property]] + name = "get-proxy-type-destroy-notify" + # C API + ignore = true + [[object.property]] + name = "get-proxy-type-func" + # C API + ignore = true + [[object.property]] + name = "get-proxy-type-user-data" + # C API + ignore = true [[object]] name = "Gio.DBusProxy" diff --git a/gio/src/auto/dbus_object_manager_client.rs b/gio/src/auto/dbus_object_manager_client.rs index a83921f8ae3c..223841737fe5 100644 --- a/gio/src/auto/dbus_object_manager_client.rs +++ b/gio/src/auto/dbus_object_manager_client.rs @@ -79,21 +79,6 @@ pub trait DBusObjectManagerClientExt: IsA + 'static { } } - //#[doc(alias = "get-proxy-type-destroy-notify")] - //fn get_proxy_type_destroy_notify(&self) -> /*Unimplemented*/Basic: Pointer { - // ObjectExt::property(self.as_ref(), "get-proxy-type-destroy-notify") - //} - - //#[doc(alias = "get-proxy-type-func")] - //fn get_proxy_type_func(&self) -> /*Unimplemented*/Basic: Pointer { - // ObjectExt::property(self.as_ref(), "get-proxy-type-func") - //} - - //#[doc(alias = "get-proxy-type-user-data")] - //fn get_proxy_type_user_data(&self) -> /*Unimplemented*/Basic: Pointer { - // ObjectExt::property(self.as_ref(), "get-proxy-type-user-data") - //} - //#[doc(alias = "interface-proxy-properties-changed")] //fn connect_interface_proxy_properties_changed(&self, f: F) -> SignalHandlerId { // Empty ctype invalidated_properties: *.CArray TypeId { ns_id: 0, id: 28 } From 9585bff91cc031aa57753f7f89b2037d2916d4ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Sat, 4 Oct 2025 16:06:52 +0200 Subject: [PATCH 06/14] Manually implement interface-proxy-properties-changed --- gio/Gir.toml | 5 ++ gio/src/auto/dbus_object_manager_client.rs | 5 -- gio/src/dbus_object_manager_client.rs | 55 ++++++++++++++++++++-- gio/src/prelude.rs | 10 ++-- 4 files changed, 62 insertions(+), 13 deletions(-) diff --git a/gio/Gir.toml b/gio/Gir.toml index 41216dd47433..4bd8fc45f48a 100644 --- a/gio/Gir.toml +++ b/gio/Gir.toml @@ -703,6 +703,7 @@ status = "generate" name = "Gio.DBusObjectManagerClient" status = "generate" concurrency = "send+sync" +manual_traits = ["DBusObjectManagerClientExtManual"] [[object.function]] name = "new" manual = true @@ -729,6 +730,10 @@ concurrency = "send+sync" name = "get-proxy-type-user-data" # C API ignore = true + [[object.signal]] + name = "interface-proxy-properties-changed" + # **libc::c_char not handled by generator + manual = true [[object]] name = "Gio.DBusProxy" diff --git a/gio/src/auto/dbus_object_manager_client.rs b/gio/src/auto/dbus_object_manager_client.rs index 223841737fe5..eac1d0ce5bab 100644 --- a/gio/src/auto/dbus_object_manager_client.rs +++ b/gio/src/auto/dbus_object_manager_client.rs @@ -79,11 +79,6 @@ pub trait DBusObjectManagerClientExt: IsA + 'static { } } - //#[doc(alias = "interface-proxy-properties-changed")] - //fn connect_interface_proxy_properties_changed(&self, f: F) -> SignalHandlerId { - // Empty ctype invalidated_properties: *.CArray TypeId { ns_id: 0, id: 28 } - //} - #[doc(alias = "interface-proxy-signal")] fn connect_interface_proxy_signal< F: Fn(&Self, &DBusObjectProxy, &DBusProxy, &str, &str, &glib::Variant) + Send + Sync + 'static, diff --git a/gio/src/dbus_object_manager_client.rs b/gio/src/dbus_object_manager_client.rs index 115c314b925b..f08c2bb855a6 100644 --- a/gio/src/dbus_object_manager_client.rs +++ b/gio/src/dbus_object_manager_client.rs @@ -2,10 +2,15 @@ use crate::{ ffi, BusType, Cancellable, DBusConnection, DBusObjectManagerClient, - DBusObjectManagerClientFlags, GioFuture, + DBusObjectManagerClientFlags, DBusObjectProxy, DBusProxy, GioFuture, }; -use glib::object::IsA; -use glib::translate::{from_glib_borrow, from_glib_full, Borrowed, IntoGlib as _, ToGlibPtr as _}; +use glib::object::{Cast as _, IsA}; +use glib::signal::connect_raw; +use glib::translate::{ + from_glib_borrow, from_glib_full, Borrowed, FromGlibPtrBorrow as _, IntoGlib as _, + ToGlibPtr as _, +}; +use glib::{SignalHandlerId, StrVRef}; use std::future::Future; use std::pin::Pin; @@ -473,3 +478,47 @@ impl DBusObjectManagerClient { } } } + +pub trait DBusObjectManagerClientExtManual: IsA + 'static { + #[doc(alias = "interface-proxy-properties-changed")] + fn connect_interface_proxy_properties_changed< + F: Fn(&Self, &DBusObjectProxy, &DBusProxy, &glib::Variant, &StrVRef) + Send + Sync + 'static, + >( + &self, + f: F, + ) -> SignalHandlerId { + unsafe extern "C" fn interface_proxy_properties_changed_trampoline< + P: IsA, + F: Fn(&P, &DBusObjectProxy, &DBusProxy, &glib::Variant, &StrVRef) + Send + Sync + 'static, + >( + this: *mut ffi::GDBusObjectManagerClient, + object_proxy: *mut ffi::GDBusObjectProxy, + interface_proxy: *mut ffi::GDBusProxy, + changed_properties: *mut glib::ffi::GVariant, + invalidated_properties: *const *const std::ffi::c_char, + f: glib::ffi::gpointer, + ) { + let f: &F = &*(f as *const F); + f( + DBusObjectManagerClient::from_glib_borrow(this).unsafe_cast_ref(), + &from_glib_borrow(object_proxy), + &from_glib_borrow(interface_proxy), + &from_glib_borrow(changed_properties), + StrVRef::from_glib_borrow(invalidated_properties), + ) + } + unsafe { + let f: Box = Box::new(f); + connect_raw( + self.as_ptr() as *mut _, + c"interface-proxy-properties-changed".as_ptr() as *const _, + Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>( + interface_proxy_properties_changed_trampoline:: as *const (), + )), + Box::into_raw(f), + ) + } + } +} + +impl> DBusObjectManagerClientExtManual for O {} diff --git a/gio/src/prelude.rs b/gio/src/prelude.rs index 1706dec803d1..edbe9ef35a7b 100644 --- a/gio/src/prelude.rs +++ b/gio/src/prelude.rs @@ -36,11 +36,11 @@ pub use crate::{ application_command_line::ApplicationCommandLineExtManual, auto::traits::*, cancellable::CancellableExtManual, converter::ConverterExtManual, data_input_stream::DataInputStreamExtManual, datagram_based::DatagramBasedExtManual, - dbus_connection::DBusMethodCall, dbus_proxy::DBusProxyExtManual, file::FileExtManual, - file_enumerator::FileEnumeratorExtManual, inet_address::InetAddressExtManual, - input_stream::InputStreamExtManual, io_stream::IOStreamExtManual, - list_model::ListModelExtManual, output_stream::OutputStreamExtManual, - pollable_input_stream::PollableInputStreamExtManual, + dbus_connection::DBusMethodCall, dbus_object_manager_client::DBusObjectManagerClientExtManual, + dbus_proxy::DBusProxyExtManual, file::FileExtManual, file_enumerator::FileEnumeratorExtManual, + inet_address::InetAddressExtManual, input_stream::InputStreamExtManual, + io_stream::IOStreamExtManual, list_model::ListModelExtManual, + output_stream::OutputStreamExtManual, pollable_input_stream::PollableInputStreamExtManual, pollable_output_stream::PollableOutputStreamExtManual, settings::SettingsExtManual, simple_proxy_resolver::SimpleProxyResolverExtManual, socket::SocketExtManual, socket_control_message::SocketControlMessageExtManual, From 5f915e2ff25ad83ed7532df69135613aee6eb8d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Sat, 4 Oct 2025 22:10:11 +0200 Subject: [PATCH 07/14] Suppress doc alias from checker --- gio/src/dbus_object_manager_client.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gio/src/dbus_object_manager_client.rs b/gio/src/dbus_object_manager_client.rs index f08c2bb855a6..e074103f310e 100644 --- a/gio/src/dbus_object_manager_client.rs +++ b/gio/src/dbus_object_manager_client.rs @@ -22,6 +22,8 @@ type DBusProxyTypeFn = Box< >; impl DBusObjectManagerClient { + // The checker tries to add a doc alias for `g_dbus_object_manager_client_new_finish`. + // checker-ignore-item #[doc(alias = "g_dbus_object_manager_client_new")] #[allow(clippy::new_ret_no_self)] pub fn new) + Send + Sync + 'static>( From dc00a1dfc8df01d1a74ebd43a3f904cb6a9516c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Sat, 4 Oct 2025 22:19:20 +0200 Subject: [PATCH 08/14] Split constructors to simplify signature --- gio/src/dbus_object_manager_client.rs | 60 +++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/gio/src/dbus_object_manager_client.rs b/gio/src/dbus_object_manager_client.rs index e074103f310e..cf8ef046ebff 100644 --- a/gio/src/dbus_object_manager_client.rs +++ b/gio/src/dbus_object_manager_client.rs @@ -128,6 +128,36 @@ impl DBusObjectManagerClient { flags: DBusObjectManagerClientFlags, name: &str, object_path: &str, + ) -> Pin> + 'static>> { + Self::new_future_impl(connection, flags, name, object_path, None) + } + + pub fn new_future_with_fn< + F: Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + + 'static, + >( + connection: &DBusConnection, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + get_proxy_type_func: F, + ) -> Pin> + 'static>> { + Self::new_future_impl( + connection, + flags, + name, + object_path, + Some(Box::new(get_proxy_type_func)), + ) + } + + fn new_future_impl( + connection: &DBusConnection, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, get_proxy_type_func: Option, ) -> Pin> + 'static>> { let connection = connection.clone(); @@ -254,6 +284,36 @@ impl DBusObjectManagerClient { flags: DBusObjectManagerClientFlags, name: &str, object_path: &str, + ) -> Pin> + 'static>> { + Self::new_for_bus_future_impl(bus_type, flags, name, object_path, None) + } + + pub fn new_for_bus_future_with_fn< + F: Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + + 'static, + >( + bus_type: BusType, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + get_proxy_type_func: F, + ) -> Pin> + 'static>> { + Self::new_for_bus_future_impl( + bus_type, + flags, + name, + object_path, + Some(Box::new(get_proxy_type_func)), + ) + } + + fn new_for_bus_future_impl( + bus_type: BusType, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, get_proxy_type_func: Option, ) -> Pin> + 'static>> { let name = String::from(name); From 1340b4b0635ae4476539883a648a6b2ab813fd6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Sat, 4 Oct 2025 22:21:51 +0200 Subject: [PATCH 09/14] Fix typo --- glib/tests/value.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glib/tests/value.rs b/glib/tests/value.rs index 1bcdf8fd7f0c..7c10d46a7d17 100644 --- a/glib/tests/value.rs +++ b/glib/tests/value.rs @@ -36,7 +36,7 @@ pub fn to_value_invariants() { ); } -// Test that `ToValue` and `FromValue` handle nexted boxed values correctly (as per the documentation) +// Test that `ToValue` and `FromValue` handle nested boxed values correctly (as per the documentation) #[test] pub fn to_value_boxed() { let x = 0i32.to_value(); From 720cd06db5bcca4a9478a5442334d8a53bf34a6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Sat, 4 Oct 2025 22:25:10 +0200 Subject: [PATCH 10/14] Update gir and no longer needed remove manual impls --- gio/Gir.toml | 8 - gio/src/auto/dbus_object_manager_client.rs | 187 ++++++++++++++++++- gio/src/auto/versions.txt | 2 +- gio/src/dbus_object_manager_client.rs | 207 --------------------- gio/sys/versions.txt | 2 +- gir | 2 +- 6 files changed, 189 insertions(+), 219 deletions(-) diff --git a/gio/Gir.toml b/gio/Gir.toml index 4bd8fc45f48a..962808af9156 100644 --- a/gio/Gir.toml +++ b/gio/Gir.toml @@ -710,14 +710,6 @@ manual_traits = ["DBusObjectManagerClientExtManual"] [[object.function]] name = "new_for_bus" manual = true - [[object.function]] - name = "new_sync" - # cancellable param is not converted to ffi correctly - manual = true - [[object.function]] - name = "new_for_bus_sync" - # cancellable param is not converted to ffi correctly - manual = true [[object.property]] name = "get-proxy-type-destroy-notify" # C API diff --git a/gio/src/auto/dbus_object_manager_client.rs b/gio/src/auto/dbus_object_manager_client.rs index eac1d0ce5bab..34e8d736d0de 100644 --- a/gio/src/auto/dbus_object_manager_client.rs +++ b/gio/src/auto/dbus_object_manager_client.rs @@ -3,7 +3,7 @@ // DO NOT EDIT use crate::{ - ffi, AsyncInitable, AsyncResult, DBusConnection, DBusObjectManager, + ffi, AsyncInitable, AsyncResult, BusType, Cancellable, DBusConnection, DBusObjectManager, DBusObjectManagerClientFlags, DBusObjectProxy, DBusProxy, Initable, }; use glib::{ @@ -25,6 +25,191 @@ glib::wrapper! { impl DBusObjectManagerClient { pub const NONE: Option<&'static DBusObjectManagerClient> = None; + + #[doc(alias = "g_dbus_object_manager_client_new_for_bus_sync")] + #[doc(alias = "new_for_bus_sync")] + pub fn for_bus_sync( + bus_type: BusType, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + get_proxy_type_func: Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + 'static, + >, + >, + cancellable: Option<&impl IsA>, + ) -> Result { + let get_proxy_type_func_data: Box_< + Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + > = Box_::new(get_proxy_type_func); + unsafe extern "C" fn get_proxy_type_func_func( + manager: *mut ffi::GDBusObjectManagerClient, + object_path: *const std::ffi::c_char, + interface_name: *const std::ffi::c_char, + data: glib::ffi::gpointer, + ) -> glib::ffi::GType { + let manager = from_glib_borrow(manager); + let object_path: Borrowed = from_glib_borrow(object_path); + let interface_name: Borrowed> = from_glib_borrow(interface_name); + let callback = &*(data as *mut Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >); + if let Some(ref callback) = *callback { + callback( + &manager, + object_path.as_str(), + (*interface_name).as_ref().map(|s| s.as_str()), + ) + } else { + panic!("cannot get closure...") + } + .into_glib() + } + let get_proxy_type_func = if get_proxy_type_func_data.is_some() { + Some(get_proxy_type_func_func as _) + } else { + None + }; + unsafe extern "C" fn get_proxy_type_destroy_notify_func(data: glib::ffi::gpointer) { + let _callback = Box_::from_raw( + data as *mut Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + ); + } + let destroy_call6 = Some(get_proxy_type_destroy_notify_func as _); + let super_callback0: Box_< + Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + > = get_proxy_type_func_data; + unsafe { + let mut error = std::ptr::null_mut(); + let ret = ffi::g_dbus_object_manager_client_new_for_bus_sync( + bus_type.into_glib(), + flags.into_glib(), + name.to_glib_none().0, + object_path.to_glib_none().0, + get_proxy_type_func, + Box_::into_raw(super_callback0) as *mut _, + destroy_call6, + cancellable.map(|p| p.as_ref()).to_glib_none().0, + &mut error, + ); + if error.is_null() { + Ok(from_glib_full(ret)) + } else { + Err(from_glib_full(error)) + } + } + } + + #[doc(alias = "g_dbus_object_manager_client_new_sync")] + pub fn new_sync( + connection: &DBusConnection, + flags: DBusObjectManagerClientFlags, + name: Option<&str>, + object_path: &str, + get_proxy_type_func: Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + 'static, + >, + >, + cancellable: Option<&impl IsA>, + ) -> Result { + let get_proxy_type_func_data: Box_< + Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + > = Box_::new(get_proxy_type_func); + unsafe extern "C" fn get_proxy_type_func_func( + manager: *mut ffi::GDBusObjectManagerClient, + object_path: *const std::ffi::c_char, + interface_name: *const std::ffi::c_char, + data: glib::ffi::gpointer, + ) -> glib::ffi::GType { + let manager = from_glib_borrow(manager); + let object_path: Borrowed = from_glib_borrow(object_path); + let interface_name: Borrowed> = from_glib_borrow(interface_name); + let callback = &*(data as *mut Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >); + if let Some(ref callback) = *callback { + callback( + &manager, + object_path.as_str(), + (*interface_name).as_ref().map(|s| s.as_str()), + ) + } else { + panic!("cannot get closure...") + } + .into_glib() + } + let get_proxy_type_func = if get_proxy_type_func_data.is_some() { + Some(get_proxy_type_func_func as _) + } else { + None + }; + unsafe extern "C" fn get_proxy_type_destroy_notify_func(data: glib::ffi::gpointer) { + let _callback = Box_::from_raw( + data as *mut Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + ); + } + let destroy_call6 = Some(get_proxy_type_destroy_notify_func as _); + let super_callback0: Box_< + Option< + Box_< + dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + 'static, + >, + >, + > = get_proxy_type_func_data; + unsafe { + let mut error = std::ptr::null_mut(); + let ret = ffi::g_dbus_object_manager_client_new_sync( + connection.to_glib_none().0, + flags.into_glib(), + name.to_glib_none().0, + object_path.to_glib_none().0, + get_proxy_type_func, + Box_::into_raw(super_callback0) as *mut _, + destroy_call6, + cancellable.map(|p| p.as_ref()).to_glib_none().0, + &mut error, + ); + if error.is_null() { + Ok(from_glib_full(ret)) + } else { + Err(from_glib_full(error)) + } + } + } } impl std::fmt::Display for DBusObjectManagerClient { diff --git a/gio/src/auto/versions.txt b/gio/src/auto/versions.txt index 14eea57bb513..ef84c0f9c835 100644 --- a/gio/src/auto/versions.txt +++ b/gio/src/auto/versions.txt @@ -1,2 +1,2 @@ -Generated by gir (https://github.com/gtk-rs/gir @ 7047e1b433e2) +Generated by gir (https://github.com/gtk-rs/gir @ c9947f8f47b6) from gir-files (https://github.com/gtk-rs/gir-files @ 1490bcc19dc8) diff --git a/gio/src/dbus_object_manager_client.rs b/gio/src/dbus_object_manager_client.rs index cf8ef046ebff..3426ae75f347 100644 --- a/gio/src/dbus_object_manager_client.rs +++ b/gio/src/dbus_object_manager_client.rs @@ -332,213 +332,6 @@ impl DBusObjectManagerClient { ); })) } - - #[doc(alias = "g_dbus_object_manager_client_new_for_bus_sync")] - #[doc(alias = "new_for_bus_sync")] - pub fn for_bus_sync( - bus_type: BusType, - flags: DBusObjectManagerClientFlags, - name: &str, - object_path: &str, - get_proxy_type_func: Option< - Box< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + Send - + Sync - + 'static, - >, - >, - cancellable: Option<&impl IsA>, - ) -> Result { - let get_proxy_type_func_data: Box< - Option< - Box< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + Send - + Sync - + 'static, - >, - >, - > = Box::new(get_proxy_type_func); - unsafe extern "C" fn get_proxy_type_func_func( - manager: *mut ffi::GDBusObjectManagerClient, - object_path: *const std::ffi::c_char, - interface_name: *const std::ffi::c_char, - data: glib::ffi::gpointer, - ) -> glib::ffi::GType { - let manager = from_glib_borrow(manager); - let object_path: Borrowed = from_glib_borrow(object_path); - let interface_name: Borrowed> = from_glib_borrow(interface_name); - let callback = &*(data as *mut Option< - Box< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + Send - + Sync - + 'static, - >, - >); - if let Some(ref callback) = *callback { - callback( - &manager, - object_path.as_str(), - (*interface_name).as_ref().map(|s| s.as_str()), - ) - } else { - panic!("cannot get closure...") - } - .into_glib() - } - let get_proxy_type_func = if get_proxy_type_func_data.is_some() { - Some(get_proxy_type_func_func as _) - } else { - None - }; - unsafe extern "C" fn get_proxy_type_destroy_notify_func(data: glib::ffi::gpointer) { - let _callback = Box::from_raw( - data as *mut Option< - Box< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + Send - + Sync - + 'static, - >, - >, - ); - } - let destroy_call6 = Some(get_proxy_type_destroy_notify_func as _); - let super_callback0: Box< - Option< - Box< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + Send - + Sync - + 'static, - >, - >, - > = get_proxy_type_func_data; - unsafe { - let mut error = std::ptr::null_mut(); - let ret = ffi::g_dbus_object_manager_client_new_for_bus_sync( - bus_type.into_glib(), - flags.into_glib(), - name.to_glib_none().0, - object_path.to_glib_none().0, - get_proxy_type_func, - Box::into_raw(super_callback0) as *mut _, - destroy_call6, - cancellable.map(|p| p.as_ref()).to_glib_none().0, - &mut error, - ); - if error.is_null() { - Ok(from_glib_full(ret)) - } else { - Err(from_glib_full(error)) - } - } - } - - #[doc(alias = "g_dbus_object_manager_client_new_sync")] - pub fn new_sync( - connection: &DBusConnection, - flags: DBusObjectManagerClientFlags, - name: Option<&str>, - object_path: &str, - get_proxy_type_func: Option< - Box< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + Send - + Sync - + 'static, - >, - >, - cancellable: Option<&impl IsA>, - ) -> Result { - let get_proxy_type_func_data: Box< - Option< - Box< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + Send - + Sync - + 'static, - >, - >, - > = Box::new(get_proxy_type_func); - unsafe extern "C" fn get_proxy_type_func_func( - manager: *mut ffi::GDBusObjectManagerClient, - object_path: *const std::ffi::c_char, - interface_name: *const std::ffi::c_char, - data: glib::ffi::gpointer, - ) -> glib::ffi::GType { - let manager = from_glib_borrow(manager); - let object_path: Borrowed = from_glib_borrow(object_path); - let interface_name: Borrowed> = from_glib_borrow(interface_name); - let callback = &*(data as *mut Option< - Box< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + Send - + Sync - + 'static, - >, - >); - if let Some(ref callback) = *callback { - callback( - &manager, - object_path.as_str(), - (*interface_name).as_ref().map(|s| s.as_str()), - ) - } else { - panic!("cannot get closure...") - } - .into_glib() - } - let get_proxy_type_func = if get_proxy_type_func_data.is_some() { - Some(get_proxy_type_func_func as _) - } else { - None - }; - unsafe extern "C" fn get_proxy_type_destroy_notify_func(data: glib::ffi::gpointer) { - let _callback = Box::from_raw( - data as *mut Option< - Box< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + Send - + Sync - + 'static, - >, - >, - ); - } - let destroy_call6 = Some(get_proxy_type_destroy_notify_func as _); - let super_callback0: Box< - Option< - Box< - dyn Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type - + Send - + Sync - + 'static, - >, - >, - > = get_proxy_type_func_data; - unsafe { - let mut error = std::ptr::null_mut(); - let ret = ffi::g_dbus_object_manager_client_new_sync( - connection.to_glib_none().0, - flags.into_glib(), - name.to_glib_none().0, - object_path.to_glib_none().0, - get_proxy_type_func, - Box::into_raw(super_callback0) as *mut _, - destroy_call6, - cancellable.map(|p| p.as_ref()).to_glib_none().0, - &mut error, - ); - if error.is_null() { - Ok(from_glib_full(ret)) - } else { - Err(from_glib_full(error)) - } - } - } } pub trait DBusObjectManagerClientExtManual: IsA + 'static { diff --git a/gio/sys/versions.txt b/gio/sys/versions.txt index 14eea57bb513..ef84c0f9c835 100644 --- a/gio/sys/versions.txt +++ b/gio/sys/versions.txt @@ -1,2 +1,2 @@ -Generated by gir (https://github.com/gtk-rs/gir @ 7047e1b433e2) +Generated by gir (https://github.com/gtk-rs/gir @ c9947f8f47b6) from gir-files (https://github.com/gtk-rs/gir-files @ 1490bcc19dc8) diff --git a/gir b/gir index 7047e1b433e2..c9947f8f47b6 160000 --- a/gir +++ b/gir @@ -1 +1 @@ -Subproject commit 7047e1b433e2ea39d96b25ae3242a2a780d2f59a +Subproject commit c9947f8f47b69d6884ad79738b77d6291fb63467 From d6c8f94a75fa0582a1df0e3e512b67cce28fa17a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Sat, 4 Oct 2025 22:27:41 +0200 Subject: [PATCH 11/14] Regen other crates --- gdk-pixbuf/src/auto/versions.txt | 2 +- gdk-pixbuf/sys/versions.txt | 2 +- glib/gobject-sys/versions.txt | 2 +- glib/src/auto/versions.txt | 2 +- glib/sys/versions.txt | 2 +- graphene/src/auto/versions.txt | 2 +- graphene/sys/versions.txt | 2 +- pango/src/auto/versions.txt | 2 +- pango/sys/versions.txt | 2 +- pangocairo/src/auto/versions.txt | 2 +- pangocairo/sys/versions.txt | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/gdk-pixbuf/src/auto/versions.txt b/gdk-pixbuf/src/auto/versions.txt index 14eea57bb513..ef84c0f9c835 100644 --- a/gdk-pixbuf/src/auto/versions.txt +++ b/gdk-pixbuf/src/auto/versions.txt @@ -1,2 +1,2 @@ -Generated by gir (https://github.com/gtk-rs/gir @ 7047e1b433e2) +Generated by gir (https://github.com/gtk-rs/gir @ c9947f8f47b6) from gir-files (https://github.com/gtk-rs/gir-files @ 1490bcc19dc8) diff --git a/gdk-pixbuf/sys/versions.txt b/gdk-pixbuf/sys/versions.txt index 14eea57bb513..ef84c0f9c835 100644 --- a/gdk-pixbuf/sys/versions.txt +++ b/gdk-pixbuf/sys/versions.txt @@ -1,2 +1,2 @@ -Generated by gir (https://github.com/gtk-rs/gir @ 7047e1b433e2) +Generated by gir (https://github.com/gtk-rs/gir @ c9947f8f47b6) from gir-files (https://github.com/gtk-rs/gir-files @ 1490bcc19dc8) diff --git a/glib/gobject-sys/versions.txt b/glib/gobject-sys/versions.txt index 14eea57bb513..ef84c0f9c835 100644 --- a/glib/gobject-sys/versions.txt +++ b/glib/gobject-sys/versions.txt @@ -1,2 +1,2 @@ -Generated by gir (https://github.com/gtk-rs/gir @ 7047e1b433e2) +Generated by gir (https://github.com/gtk-rs/gir @ c9947f8f47b6) from gir-files (https://github.com/gtk-rs/gir-files @ 1490bcc19dc8) diff --git a/glib/src/auto/versions.txt b/glib/src/auto/versions.txt index 14eea57bb513..ef84c0f9c835 100644 --- a/glib/src/auto/versions.txt +++ b/glib/src/auto/versions.txt @@ -1,2 +1,2 @@ -Generated by gir (https://github.com/gtk-rs/gir @ 7047e1b433e2) +Generated by gir (https://github.com/gtk-rs/gir @ c9947f8f47b6) from gir-files (https://github.com/gtk-rs/gir-files @ 1490bcc19dc8) diff --git a/glib/sys/versions.txt b/glib/sys/versions.txt index 14eea57bb513..ef84c0f9c835 100644 --- a/glib/sys/versions.txt +++ b/glib/sys/versions.txt @@ -1,2 +1,2 @@ -Generated by gir (https://github.com/gtk-rs/gir @ 7047e1b433e2) +Generated by gir (https://github.com/gtk-rs/gir @ c9947f8f47b6) from gir-files (https://github.com/gtk-rs/gir-files @ 1490bcc19dc8) diff --git a/graphene/src/auto/versions.txt b/graphene/src/auto/versions.txt index 14eea57bb513..ef84c0f9c835 100644 --- a/graphene/src/auto/versions.txt +++ b/graphene/src/auto/versions.txt @@ -1,2 +1,2 @@ -Generated by gir (https://github.com/gtk-rs/gir @ 7047e1b433e2) +Generated by gir (https://github.com/gtk-rs/gir @ c9947f8f47b6) from gir-files (https://github.com/gtk-rs/gir-files @ 1490bcc19dc8) diff --git a/graphene/sys/versions.txt b/graphene/sys/versions.txt index 14eea57bb513..ef84c0f9c835 100644 --- a/graphene/sys/versions.txt +++ b/graphene/sys/versions.txt @@ -1,2 +1,2 @@ -Generated by gir (https://github.com/gtk-rs/gir @ 7047e1b433e2) +Generated by gir (https://github.com/gtk-rs/gir @ c9947f8f47b6) from gir-files (https://github.com/gtk-rs/gir-files @ 1490bcc19dc8) diff --git a/pango/src/auto/versions.txt b/pango/src/auto/versions.txt index 14eea57bb513..ef84c0f9c835 100644 --- a/pango/src/auto/versions.txt +++ b/pango/src/auto/versions.txt @@ -1,2 +1,2 @@ -Generated by gir (https://github.com/gtk-rs/gir @ 7047e1b433e2) +Generated by gir (https://github.com/gtk-rs/gir @ c9947f8f47b6) from gir-files (https://github.com/gtk-rs/gir-files @ 1490bcc19dc8) diff --git a/pango/sys/versions.txt b/pango/sys/versions.txt index 14eea57bb513..ef84c0f9c835 100644 --- a/pango/sys/versions.txt +++ b/pango/sys/versions.txt @@ -1,2 +1,2 @@ -Generated by gir (https://github.com/gtk-rs/gir @ 7047e1b433e2) +Generated by gir (https://github.com/gtk-rs/gir @ c9947f8f47b6) from gir-files (https://github.com/gtk-rs/gir-files @ 1490bcc19dc8) diff --git a/pangocairo/src/auto/versions.txt b/pangocairo/src/auto/versions.txt index 14eea57bb513..ef84c0f9c835 100644 --- a/pangocairo/src/auto/versions.txt +++ b/pangocairo/src/auto/versions.txt @@ -1,2 +1,2 @@ -Generated by gir (https://github.com/gtk-rs/gir @ 7047e1b433e2) +Generated by gir (https://github.com/gtk-rs/gir @ c9947f8f47b6) from gir-files (https://github.com/gtk-rs/gir-files @ 1490bcc19dc8) diff --git a/pangocairo/sys/versions.txt b/pangocairo/sys/versions.txt index 14eea57bb513..ef84c0f9c835 100644 --- a/pangocairo/sys/versions.txt +++ b/pangocairo/sys/versions.txt @@ -1,2 +1,2 @@ -Generated by gir (https://github.com/gtk-rs/gir @ 7047e1b433e2) +Generated by gir (https://github.com/gtk-rs/gir @ c9947f8f47b6) from gir-files (https://github.com/gtk-rs/gir-files @ 1490bcc19dc8) From 23dac07d9bd25904866cf546e7f541cbfa7c2465 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Tue, 7 Oct 2025 17:39:03 +0200 Subject: [PATCH 12/14] Split sync methods into overloads with and without fn --- gio/Gir.toml | 8 +++ gio/src/auto/dbus_object_manager_client.rs | 7 ++- gio/src/dbus_object_manager_client.rs | 70 ++++++++++++++++++++++ 3 files changed, 83 insertions(+), 2 deletions(-) diff --git a/gio/Gir.toml b/gio/Gir.toml index 962808af9156..dfa27fdf57e1 100644 --- a/gio/Gir.toml +++ b/gio/Gir.toml @@ -704,6 +704,14 @@ name = "Gio.DBusObjectManagerClient" status = "generate" concurrency = "send+sync" manual_traits = ["DBusObjectManagerClientExtManual"] + [[object.function]] + name = "new_for_bus_sync" + visibility = "crate" + rename = "for_bus_sync_impl" + [[object.function]] + name = "new_sync" + visibility = "crate" + rename = "new_sync_impl" [[object.function]] name = "new" manual = true diff --git a/gio/src/auto/dbus_object_manager_client.rs b/gio/src/auto/dbus_object_manager_client.rs index 34e8d736d0de..9148f1d654bc 100644 --- a/gio/src/auto/dbus_object_manager_client.rs +++ b/gio/src/auto/dbus_object_manager_client.rs @@ -28,7 +28,8 @@ impl DBusObjectManagerClient { #[doc(alias = "g_dbus_object_manager_client_new_for_bus_sync")] #[doc(alias = "new_for_bus_sync")] - pub fn for_bus_sync( + #[allow(dead_code)] + pub(crate) fn for_bus_sync_impl( bus_type: BusType, flags: DBusObjectManagerClientFlags, name: &str, @@ -120,7 +121,9 @@ impl DBusObjectManagerClient { } #[doc(alias = "g_dbus_object_manager_client_new_sync")] - pub fn new_sync( + #[doc(alias = "new_sync")] + #[allow(dead_code)] + pub(crate) fn new_sync_impl( connection: &DBusConnection, flags: DBusObjectManagerClientFlags, name: Option<&str>, diff --git a/gio/src/dbus_object_manager_client.rs b/gio/src/dbus_object_manager_client.rs index 3426ae75f347..729b14a847b7 100644 --- a/gio/src/dbus_object_manager_client.rs +++ b/gio/src/dbus_object_manager_client.rs @@ -22,6 +22,76 @@ type DBusProxyTypeFn = Box< >; impl DBusObjectManagerClient { + #[doc(alias = "g_dbus_object_manager_client_new_sync")] + pub fn new_sync( + connection: &DBusConnection, + flags: DBusObjectManagerClientFlags, + name: Option<&str>, + object_path: &str, + cancellable: Option<&impl IsA>, + ) -> Result { + Self::new_sync_impl(connection, flags, name, object_path, None, cancellable) + } + + #[doc(alias = "g_dbus_object_manager_client_new_sync")] + pub fn new_sync_with_fn< + F: Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + + 'static, + >( + connection: &DBusConnection, + flags: DBusObjectManagerClientFlags, + name: Option<&str>, + object_path: &str, + get_proxy_type_func: F, + cancellable: Option<&impl IsA>, + ) -> Result { + Self::new_sync_impl( + connection, + flags, + name, + object_path, + Some(Box::new(get_proxy_type_func)), + cancellable, + ) + } + + #[doc(alias = "g_dbus_object_manager_client_new_for_bus_sync")] + pub fn for_bus_sync( + bus_type: BusType, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + cancellable: Option<&impl IsA>, + ) -> Result { + Self::for_bus_sync_impl(bus_type, flags, name, object_path, None, cancellable) + } + + #[doc(alias = "g_dbus_object_manager_client_new_for_bus_sync")] + pub fn for_bus_sync_with_fn< + F: Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + + 'static, + >( + bus_type: BusType, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + get_proxy_type_func: F, + cancellable: Option<&impl IsA>, + ) -> Result { + Self::for_bus_sync_impl( + bus_type, + flags, + name, + object_path, + Some(Box::new(get_proxy_type_func)), + cancellable, + ) + } + // The checker tries to add a doc alias for `g_dbus_object_manager_client_new_finish`. // checker-ignore-item #[doc(alias = "g_dbus_object_manager_client_new")] From 9728dcf9c484d4c8a4e676ade4130071a13e129e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Tue, 7 Oct 2025 17:43:30 +0200 Subject: [PATCH 13/14] Split async+callback methods into overloads with and without fn --- gio/src/dbus_object_manager_client.rs | 54 +++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/gio/src/dbus_object_manager_client.rs b/gio/src/dbus_object_manager_client.rs index 729b14a847b7..c3880c85317f 100644 --- a/gio/src/dbus_object_manager_client.rs +++ b/gio/src/dbus_object_manager_client.rs @@ -92,11 +92,57 @@ impl DBusObjectManagerClient { ) } - // The checker tries to add a doc alias for `g_dbus_object_manager_client_new_finish`. - // checker-ignore-item - #[doc(alias = "g_dbus_object_manager_client_new")] #[allow(clippy::new_ret_no_self)] + #[doc(alias = "g_dbus_object_manager_client_new")] pub fn new) + Send + Sync + 'static>( + connection: &DBusConnection, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + cancellable: Option<&impl IsA>, + callback: P, + ) { + Self::new_impl( + connection, + flags, + name, + object_path, + None, + cancellable, + callback, + ) + } + + #[allow(clippy::new_ret_no_self)] + #[doc(alias = "g_dbus_object_manager_client_new")] + pub fn new_with_fn< + P: FnOnce(Result) + Send + Sync + 'static, + F: Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + + 'static, + >( + connection: &DBusConnection, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + get_proxy_type_func: F, + cancellable: Option<&impl IsA>, + callback: P, + ) { + Self::new_impl( + connection, + flags, + name, + object_path, + Some(Box::new(get_proxy_type_func)), + cancellable, + callback, + ) + } + + #[allow(clippy::new_ret_no_self)] + fn new_impl) + Send + Sync + 'static>( connection: &DBusConnection, flags: DBusObjectManagerClientFlags, name: &str, @@ -234,7 +280,7 @@ impl DBusObjectManagerClient { let name = String::from(name); let object_path = String::from(object_path); Box::pin(GioFuture::new(&(), move |_obj, cancellable, send| { - Self::new( + Self::new_impl( &connection, flags, &name, From 3f86847a9ffa1800431a93075a1130da250e7ee6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Tue, 7 Oct 2025 17:52:06 +0200 Subject: [PATCH 14/14] Overloads for new_for_bus --- gio/src/dbus_object_manager_client.rs | 52 ++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/gio/src/dbus_object_manager_client.rs b/gio/src/dbus_object_manager_client.rs index c3880c85317f..3d953bc01c0e 100644 --- a/gio/src/dbus_object_manager_client.rs +++ b/gio/src/dbus_object_manager_client.rs @@ -298,6 +298,56 @@ impl DBusObjectManagerClient { #[allow(clippy::new_ret_no_self)] pub fn new_for_bus< P: FnOnce(Result) + Send + Sync + 'static, + >( + bus_type: BusType, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + cancellable: Option<&impl IsA>, + callback: P, + ) { + Self::new_for_bus_impl( + bus_type, + flags, + name, + object_path, + None, + cancellable, + callback, + ); + } + + #[doc(alias = "g_dbus_object_manager_client_new_for_bus")] + #[allow(clippy::new_ret_no_self)] + pub fn new_for_bus_with_fn< + P: FnOnce(Result) + Send + Sync + 'static, + F: Fn(&DBusObjectManagerClient, &str, Option<&str>) -> glib::types::Type + + Send + + Sync + + 'static, + >( + bus_type: BusType, + flags: DBusObjectManagerClientFlags, + name: &str, + object_path: &str, + get_proxy_type_func: F, + cancellable: Option<&impl IsA>, + callback: P, + ) { + Self::new_for_bus_impl( + bus_type, + flags, + name, + object_path, + Some(Box::new(get_proxy_type_func)), + cancellable, + callback, + ); + } + + #[allow(clippy::new_ret_no_self)] + fn new_for_bus_impl< + P: FnOnce(Result) + Send + Sync + 'static, >( bus_type: BusType, flags: DBusObjectManagerClientFlags, @@ -435,7 +485,7 @@ impl DBusObjectManagerClient { let name = String::from(name); let object_path = String::from(object_path); Box::pin(GioFuture::new(&(), move |_obj, cancellable, send| { - Self::new_for_bus( + Self::new_for_bus_impl( bus_type, flags, &name,