summaryrefslogtreecommitdiff
path: root/gio/src/dbusconnection.ccg
diff options
context:
space:
mode:
authorJosé Alburquerque <jaalburqu@svn.gnome.org>2011-01-07 12:43:17 -0500
committerJosé Alburquerque <jaalburqu@svn.gnome.org>2011-01-07 12:46:59 -0500
commit5b4a561aab473adf47c6b267ac4a69b310de777e (patch)
tree722158519aed52733ccb13749dfa5cdf99d703da /gio/src/dbusconnection.ccg
parent02cb6c80ee5e53f6f8dca175ef5c5c31b88b1e50 (diff)
downloadglibmm-5b4a561aab473adf47c6b267ac4a69b310de777e.tar.gz
DBusConnection: Callbacks: Return DBusError exceptions to caller.
* gio/src/dbusconnection.ccg: Modify the callbacks that deal with getting/setting properties for a DBus interface to set the GError* parameter if it is a DBus related GError. This should allow receiving DBus exceptions if the slot throws one with respect to not being able to successfully get/set a property.
Diffstat (limited to 'gio/src/dbusconnection.ccg')
-rw-r--r--gio/src/dbusconnection.ccg13
1 files changed, 11 insertions, 2 deletions
diff --git a/gio/src/dbusconnection.ccg b/gio/src/dbusconnection.ccg
index 20933dc4..c0305b58 100644
--- a/gio/src/dbusconnection.ccg
+++ b/gio/src/dbusconnection.ccg
@@ -21,6 +21,7 @@
#include <giomm/dbusauthobserver.h>
#include <giomm/dbusintrospection.h>
#include <giomm/dbusmethodinvocation.h>
+#include <giomm/error.h>
#include "slot_async.h"
namespace
@@ -107,7 +108,7 @@ static void DBusInterfaceVTable_MethodCall_giomm_callback(
static GVariant* DBusInterfaceVTable_GetProperty_giomm_callback(
GDBusConnection* connection, const char* sender, const char* object_path,
- const char* interface_name, const char* property_name, GError**,
+ const char* interface_name, const char* property_name, GError** error,
void* user_data)
{
Gio::DBusInterfaceVTable* vtable =
@@ -125,6 +126,10 @@ static GVariant* DBusInterfaceVTable_GetProperty_giomm_callback(
Glib::ustring(interface_name), Glib::ustring(property_name));
return result.gobj_copy();
}
+ catch(const Gio::DBusError& ex)
+ {
+ *error = const_cast<GError*>(ex.gobj());
+ }
catch(...)
{
Glib::exception_handlers_invoke();
@@ -136,7 +141,7 @@ static GVariant* DBusInterfaceVTable_GetProperty_giomm_callback(
static gboolean DBusInterfaceVTable_SetProperty_giomm_callback(
GDBusConnection* connection, const char* sender, const char* object_path,
const char* interface_name, const char* property_name, GVariant* value,
- GError**, void* user_data)
+ GError** error, void* user_data)
{
Gio::DBusInterfaceVTable* vtable =
static_cast<Gio::DBusInterfaceVTable*>(user_data);
@@ -151,6 +156,10 @@ static gboolean DBusInterfaceVTable_SetProperty_giomm_callback(
Glib::ustring(interface_name), Glib::ustring(property_name),
Glib::VariantBase(value, true)));
}
+ catch(const Gio::DBusError& ex)
+ {
+ *error = const_cast<GError*>(ex.gobj());
+ }
catch(...)
{
Glib::exception_handlers_invoke();