diff options
author | Murray Cumming <murrayc@murrayc.com> | 2012-09-16 13:55:18 +0200 |
---|---|---|
committer | Murray Cumming <murrayc@murrayc.com> | 2012-09-16 13:58:30 +0200 |
commit | edca3b3b3da20baf9d79b4820a02bc15a08c207f (patch) | |
tree | 7b3a932e264c0bd013b15fa6d0bff0f42a8bdd47 /gio/src/dbusconnection.ccg | |
parent | 3990fbe43137ab174503140d922d5aed19432093 (diff) | |
download | glibmm-edca3b3b3da20baf9d79b4820a02bc15a08c207f.tar.gz |
Gio::DBus::Connection: Add
* gio/src/dbusconnection.[hg|ccg]: Add call(), call_with_unix_fd_finish(),
and call_finishcall_sync() method overloads that wrap
g_dbus_connection_call_with_unix_fd_list(),
g_dbus_connection_call_with_unix_fd_list_finish() and
g_dbus_connection_call_with_unix_fd_list_sync()
* tools/m4/convert_gio.m4: Add a necessary conversion.
Diffstat (limited to 'gio/src/dbusconnection.ccg')
-rw-r--r-- | gio/src/dbusconnection.ccg | 70 |
1 files changed, 62 insertions, 8 deletions
diff --git a/gio/src/dbusconnection.ccg b/gio/src/dbusconnection.ccg index 930097e0..5ae3ef41 100644 --- a/gio/src/dbusconnection.ccg +++ b/gio/src/dbusconnection.ccg @@ -725,9 +725,6 @@ Glib::VariantContainerBase Connection::call_sync( return Glib::VariantContainerBase(gvariant, false); //Dont' take an extra reference. } -//TODO: Re-add the following two methods when the call_finish() method with a -//UnixFDList exists. -#if 0 #ifdef G_OS_LINUX // With a UnixFDList. void Connection::call( @@ -741,8 +738,7 @@ void Connection::call( const Glib::ustring& bus_name, int timeout_msec, CallFlags flags, - const Glib::VariantType& reply_type -) + const Glib::VariantType& reply_type) { // Create a copy of the slot. // A pointer to it will be passed through the callback's data parameter @@ -767,8 +763,7 @@ void Connection::call( const Glib::ustring& bus_name, int timeout_msec, CallFlags flags, - const Glib::VariantType& reply_type -) + const Glib::VariantType& reply_type) { // Create a copy of the slot. // A pointer to it will be passed through the callback's data parameter @@ -782,7 +777,6 @@ void Connection::call( 0, &SignalProxy_async_callback, slot_copy); } #endif // G_OS_LINUX -#endif // 0 void Connection::emit_signal( const Glib::ustring& object_path, @@ -884,6 +878,66 @@ guint Connection::register_subtree(const Glib::ustring& object_path, return result; } + +Glib::VariantContainerBase Connection::call_sync(const Glib::ustring& object_path, const Glib::ustring& interface_name, const Glib::ustring& method_name, const Glib::VariantContainerBase& parameters, const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<UnixFDList>& fd_list, Glib::RefPtr<UnixFDList>& out_fd_list, const Glib::ustring& bus_name, int timeout_msec, CallFlags flags, const Glib::VariantType& reply_type) +{ + GError* gerror = 0; + GUnixFDList* cunixfdlist = 0; + Glib::VariantContainerBase retvalue = Glib::VariantContainerBase(g_dbus_connection_call_with_unix_fd_list_sync(gobj(), bus_name.c_str(), object_path.c_str(), interface_name.c_str(), method_name.c_str(), const_cast<GVariant*>((parameters).gobj()), (reply_type).gobj(), ((GDBusCallFlags)(flags)), timeout_msec, Glib::unwrap(fd_list), &cunixfdlist, const_cast<GCancellable*>(Glib::unwrap(cancellable)), &(gerror)), false); + + if(cunixfdlist) + out_fd_list = Glib::wrap(cunixfdlist); + + if(gerror) + ::Glib::Error::throw_exception(gerror); + + return retvalue; + +} + +Glib::VariantContainerBase Connection::call_sync(const Glib::ustring& object_path, const Glib::ustring& interface_name, const Glib::ustring& method_name, const Glib::VariantContainerBase& parameters, const Glib::RefPtr<UnixFDList>& fd_list, Glib::RefPtr<UnixFDList>& out_fd_list, const Glib::ustring& bus_name, int timeout_msec, CallFlags flags, const Glib::VariantType& reply_type) +{ + GError* gerror = 0; + GUnixFDList* cunixfdlist = 0; + Glib::VariantContainerBase retvalue = Glib::VariantContainerBase(g_dbus_connection_call_with_unix_fd_list_sync(gobj(), bus_name.c_str(), object_path.c_str(), interface_name.c_str(), method_name.c_str(), const_cast<GVariant*>((parameters).gobj()), (reply_type).gobj(), ((GDBusCallFlags)(flags)), timeout_msec, Glib::unwrap(fd_list), &cunixfdlist, 0, &(gerror)), false); + + if(cunixfdlist) + out_fd_list = Glib::wrap(cunixfdlist); + + if(gerror) + ::Glib::Error::throw_exception(gerror); + + return retvalue; + +} + +Glib::VariantContainerBase Connection::call_with_unix_fd_finish(const Glib::RefPtr<AsyncResult>& res, Glib::RefPtr<UnixFDList>& out_fd_list) +{ + GError* gerror = 0; + GUnixFDList* cunixfdlist = 0; + Glib::VariantContainerBase retvalue = Glib::VariantContainerBase(g_dbus_connection_call_with_unix_fd_list_finish(gobj(), &cunixfdlist, Glib::unwrap(res), &(gerror)), false); + + if(cunixfdlist) + out_fd_list = Glib::wrap(cunixfdlist); + + if(gerror) + ::Glib::Error::throw_exception(gerror); + + + return retvalue; +} + +Glib::VariantContainerBase Connection::call_with_unix_fd_finish(const Glib::RefPtr<AsyncResult>& res) +{ + GError* gerror = 0; + Glib::VariantContainerBase retvalue = Glib::VariantContainerBase(g_dbus_connection_call_with_unix_fd_list_finish(gobj(), 0, Glib::unwrap(res), &(gerror)), false); + + if(gerror) + ::Glib::Error::throw_exception(gerror); + + return retvalue; +} + } //namespace DBus } // namespace Gio |