diff --git a/gio/src/dbus_connection.rs b/gio/src/dbus_connection.rs index aaf26e5e7c07..9dc2b734870a 100644 --- a/gio/src/dbus_connection.rs +++ b/gio/src/dbus_connection.rs @@ -245,7 +245,7 @@ impl<'a> RegistrationBuilder<'a> { }) .to_glib_none() .0, - self.set_property + self.get_property .map(|f| { glib::Closure::new_local(move |args| { let conn = args[0].get::().unwrap(); @@ -253,21 +253,14 @@ impl<'a> RegistrationBuilder<'a> { let object_path = args[2].get::<&str>().unwrap(); let interface_name = args[3].get::<&str>().unwrap(); let property_name = args[4].get::<&str>().unwrap(); - let value = args[5].get::().unwrap(); - let result = f( - conn, - sender, - object_path, - interface_name, - property_name, - value, - ); + let result = + f(conn, sender, object_path, interface_name, property_name); Some(result.to_value()) }) }) .to_glib_none() .0, - self.get_property + self.set_property .map(|f| { glib::Closure::new_local(move |args| { let conn = args[0].get::().unwrap(); @@ -275,8 +268,15 @@ impl<'a> RegistrationBuilder<'a> { let object_path = args[2].get::<&str>().unwrap(); let interface_name = args[3].get::<&str>().unwrap(); let property_name = args[4].get::<&str>().unwrap(); - let result = - f(conn, sender, object_path, interface_name, property_name); + let value = args[5].get::().unwrap(); + let result = f( + conn, + sender, + object_path, + interface_name, + property_name, + value, + ); Some(result.to_value()) }) }) diff --git a/gio/tests/dbus_peer.rs b/gio/tests/dbus_peer.rs index 67e66b35bd90..1df590eb5626 100644 --- a/gio/tests/dbus_peer.rs +++ b/gio/tests/dbus_peer.rs @@ -13,6 +13,7 @@ fn test_gdbus_peer_connection() { const EXAMPLE_XML: &str = r#" + @@ -57,6 +58,7 @@ fn test_gdbus_peer_connection() { parameters, invocation| { dbg!( + "method_call", _sender, _object_path, _interface_name, @@ -69,6 +71,34 @@ fn test_gdbus_peer_connection() { invocation.return_value(Some(&(format!("Hello {name}!"),).to_variant())); }, ) + .property({ + |_connection, _sender, _object_path, _interface_name, _property_name| { + dbg!( + "get_property", + _sender, + _object_path, + _interface_name, + _property_name + ); + assert_eq!(_property_name, "Number"); + 123.to_variant() + } + }) + .set_property({ + |_connection, _sender, _object_path, _interface_name, _property_name, _value| { + dbg!( + "set_property", + _sender, + _object_path, + _interface_name, + _property_name, + &_value + ); + assert_eq!(_property_name, "Number"); + assert_eq!(_value, 456.to_variant()); + true + } + }) .build() .unwrap(); @@ -137,6 +167,42 @@ fn test_gdbus_peer_connection() { dbg!(&result); + dbg!("getting property"); + + let getresult = client + .call_future( + None, + "/com/github/gtk_rs", + "org.freedesktop.DBus.Properties", + "Get", + Some(&("com.github.gtk_rs", "Number").to_variant()), + Some(VariantTy::new("(v)").unwrap()), + gio::DBusCallFlags::NONE, + 10000, + ) + .await + .unwrap(); + + assert_eq!(getresult, (123.to_variant(),).to_variant()); + + dbg!("setting property"); + + let setresult = client + .call_future( + None, + "/com/github/gtk_rs", + "org.freedesktop.DBus.Properties", + "Set", + Some(&("com.github.gtk_rs", "Number", 456.to_variant()).to_variant()), + None, + gio::DBusCallFlags::NONE, + 10000, + ) + .await + .unwrap(); + + assert_eq!(setresult, ().to_variant()); + dbg!("closing client"); client.close_future().await.unwrap(); dbg!("closed client, closing server");