[accounts-dialog/gdbus: 1/5] Begin porting to gdbus



commit f0ca28cec232b04ff5181d366725dcfd5061937c
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Jul 21 01:51:59 2010 -0400

    Begin porting to gdbus

 src/um-fingerprint-dialog.c |  252 +++++++++++++++++++++++++++++--------------
 src/um-login-options.c      |   49 +++++----
 2 files changed, 197 insertions(+), 104 deletions(-)
---
diff --git a/src/um-fingerprint-dialog.c b/src/um-fingerprint-dialog.c
index ea06a09..ed37366 100644
--- a/src/um-fingerprint-dialog.c
+++ b/src/um-fingerprint-dialog.c
@@ -22,7 +22,6 @@
 #include <stdlib.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <dbus/dbus-glib-bindings.h>
 
 #include "um-fingerprint-dialog.h"
 
@@ -34,8 +33,7 @@
 /* This must match the number of images on the 2nd page in the UI file */
 #define MAX_ENROLL_STAGES 3
 
-static DBusGProxy *manager = NULL;
-static DBusGConnection *connection = NULL;
+static GDBusProxy *manager = NULL;
 static gboolean is_disable = FALSE;
 
 enum {
@@ -51,7 +49,7 @@ typedef struct {
         GtkWidget *ass;
         GtkBuilder *dialog;
 
-        DBusGProxy *device;
+        GDBusProxy *device;
         gboolean is_swipe;
         int num_enroll_stages;
         int num_stages_done;
@@ -64,35 +62,46 @@ static void create_manager (void)
 {
         GError *error = NULL;
 
-        connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
-        if (connection == NULL) {
-                g_warning ("Failed to connect to session bus: %s", error->message);
-                return;
+        manager = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+                                                 G_DBUS_PROXY_FLAGS_NONE,
+                                                 NULL,
+                                                 "net.reactivated.Fprint",
+                                                 "/net/reactivated/Fprint/Manager",
+                                                 "net.reactivated.Fprint.Manager",
+                                                 NULL,
+                                                 &error);
+        if (manager == NULL) {
+                g_warning ("Failed to connect to fprintd: %s", error->message);
+                g_error_free (error);
         }
-
-        manager = dbus_g_proxy_new_for_name (connection,
-                                             "net.reactivated.Fprint",
-                                             "/net/reactivated/Fprint/Manager",
-                                             "net.reactivated.Fprint.Manager");
 }
 
-static DBusGProxy *
+static GDBusProxy *
 get_first_device (void)
 {
-        DBusGProxy *device;
-        char *device_str;
-
-        if (!dbus_g_proxy_call (manager, "GetDefaultDevice", NULL, G_TYPE_INVALID,
-                                DBUS_TYPE_G_OBJECT_PATH, &device_str, G_TYPE_INVALID)) {
+        GDBusProxy *device;
+        GVariant *res;
+
+        res = g_dbus_proxy_call_sync (manager,
+                                      "GetDefaultDevice",
+                                      NULL,
+                                      G_DBUS_CALL_FLAGS_NONE,
+                                      -1,
+                                      NULL,
+                                      NULL);
+        if (res == NULL) {
                 return NULL;
         }
 
-        device = dbus_g_proxy_new_for_name(connection,
-                                           "net.reactivated.Fprint",
-                                           device_str,
-                                           "net.reactivated.Fprint.Device");
+        device = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+                                                G_DBUS_PROXY_FLAGS_NONE,
+                                                NULL,
+                                                "net.reactivated.Fprint",
+                                                g_variant_get_string (res, NULL),
+                                                "net.reactivated.Fprint.Device",                                                NULL,
+                                                NULL);
 
-        g_free (device_str);
+        g_variant_unref (res);
 
         return device;
 }
@@ -146,8 +155,9 @@ set_fingerprint_label (GtkWidget *label1,
                        GtkWidget *label2)
 {
         char **fingers;
-        DBusGProxy *device;
+        GDBusProxy *device;
         GError *error = NULL;
+        GVariant *res;
 
         if (manager == NULL) {
                 create_manager ();
@@ -160,14 +170,27 @@ set_fingerprint_label (GtkWidget *label1,
         if (device == NULL)
                 return FALSE;
 
-        if (!dbus_g_proxy_call (device, "ListEnrolledFingers", &error, G_TYPE_STRING, "", G_TYPE_INVALID,
-                                G_TYPE_STRV, &fingers, G_TYPE_INVALID)) {
-                if (dbus_g_error_has_name (error, "net.reactivated.Fprint.Error.NoEnrolledPrints") == FALSE) {
+        res = g_dbus_proxy_call_sync (device,
+                                      "ListEnrolledFingers",
+                                      g_variant_new ("(s)", ""),
+                                      G_DBUS_CALL_FLAGS_NONE,
+                                      -1,
+                                      NULL,
+                                      &error);
+        if (res == NULL) {
+                gchar *err;
+                err = g_dbus_error_get_remote_error (error);
+                if (g_strcmp0 (err, "net.reactivated.Fprint.Error.NoEnrolledPrints") != 0) {
                         g_object_unref (device);
+                        g_free (err);
                         return FALSE;
                 }
+                g_free (err);
                 fingers = NULL;
         }
+        else {
+                fingers = (char**)g_variant_get_strv (res, NULL);
+        }
 
         if (fingers == NULL || g_strv_length (fingers) == 0) {
                 is_disable = FALSE;
@@ -179,8 +202,9 @@ set_fingerprint_label (GtkWidget *label1,
                 gtk_label_set_text (GTK_LABEL (label2), _("Enabled"));
         }
 
-        g_strfreev (fingers);
+        g_free (fingers);
         g_object_unref (device);
+        g_variant_unref (res);
 
         return TRUE;
 }
@@ -188,7 +212,8 @@ set_fingerprint_label (GtkWidget *label1,
 static void
 delete_fingerprints (void)
 {
-        DBusGProxy *device;
+        GDBusProxy *device;
+        GVariant *res;
 
         if (manager == NULL) {
                 create_manager ();
@@ -200,7 +225,15 @@ delete_fingerprints (void)
         if (device == NULL)
                 return;
 
-        dbus_g_proxy_call (device, "DeleteEnrolledFingers", NULL, G_TYPE_STRING, "", G_TYPE_INVALID, G_TYPE_INVALID);
+        res = g_dbus_proxy_call_sync (device,
+                                      "DeleteEnrolledFingers",
+                                      g_variant_new ("(s)", ""),
+                                      G_DBUS_CALL_FLAGS_NONE,
+                                      -1,
+                                      NULL,
+                                      NULL);
+        if (res)
+                g_variant_unref (res);
 
         g_object_unref (device);
 }
@@ -246,12 +279,26 @@ delete_fingerprints_question (GtkWindow *parent,
 static void
 enroll_data_destroy (EnrollData *data)
 {
+        GVariant *res;
+
         switch (data->state) {
         case STATE_ENROLLING:
-                dbus_g_proxy_call(data->device, "EnrollStop", NULL, G_TYPE_INVALID, G_TYPE_INVALID);
+                res = g_dbus_proxy_call_sync (data->device,
+                                              "EnrollStop",
+                                              NULL,
+                                              G_DBUS_CALL_FLAGS_NONE,
+                                              -1, NULL, NULL);
+                if (res)
+                        g_variant_unref (res);
                 /* fall-through */
         case STATE_CLAIMED:
-                dbus_g_proxy_call(data->device, "Release", NULL, G_TYPE_INVALID, G_TYPE_INVALID);
+                res = g_dbus_proxy_call_sync (data->device,
+                                              "Release",
+                                              NULL,
+                                              G_DBUS_CALL_FLAGS_NONE,
+                                              -1, NULL, NULL);
+                if (res)
+                        g_variant_unref (res);
                 /* fall-through */
         case STATE_NONE:
                 g_free (data->name);
@@ -345,6 +392,7 @@ enroll_result (GObject *object, const char *result, gboolean done, EnrollData *d
 {
         GtkBuilder *dialog = data->dialog;
         char *msg;
+        GVariant *res;
 
         if (g_str_equal (result, "enroll-completed") || g_str_equal (result, "enroll-stage-passed")) {
                 char *name, *path;
@@ -362,11 +410,24 @@ enroll_result (GObject *object, const char *result, gboolean done, EnrollData *d
         }
 
         if (done != FALSE) {
-                dbus_g_proxy_call(data->device, "EnrollStop", NULL, G_TYPE_INVALID, G_TYPE_INVALID);
+                res = g_dbus_proxy_call_sync (data->device,
+                                              "EnrollStop",
+                                              NULL,
+                                              G_DBUS_CALL_FLAGS_NONE,
+                                              -1, NULL, NULL);
+                if (res != NULL)
+                        g_variant_unref (res);
                 data->state = STATE_CLAIMED;
                 if (g_str_equal (result, "enroll-completed") == FALSE) {
                         /* The enrollment failed, restart it */
-                        dbus_g_proxy_call(data->device, "EnrollStart", NULL, G_TYPE_STRING, data->finger, G_TYPE_INVALID, G_TYPE_INVALID);
+                        res = g_dbus_proxy_call_sync (data->device,
+                                                      "EnrollStart",
+                                                       g_variant_new ("(s)",
+                                                                      data->finger),
+                                                       G_DBUS_CALL_FLAGS_NONE,
+                                                       -1, NULL, NULL);
+                        if (res)
+                                g_variant_unref (res);
                         data->state = STATE_ENROLLING;
                         result = "enroll-retry-scan";
                 } else {
@@ -380,31 +441,57 @@ enroll_result (GObject *object, const char *result, gboolean done, EnrollData *d
 }
 
 static void
+on_signal (GDBusProxy *proxy,
+           gchar      *sender_name,
+           gchar      *signal_name,
+           GVariant   *parameters,
+           gpointer    user_data)
+{
+        EnrollData *data = user_data;
+        gchar *result;
+        gboolean done;
+
+        if (strcmp (signal_name, "EnrollStatus") != 0)
+                return;
+
+        g_variant_get (parameters, "&sb", &result, &done);
+
+        enroll_result ((GObject*)proxy, result, done, data);
+}
+
+static void
 assistant_prepare (GtkAssistant *ass, GtkWidget *page, EnrollData *data)
 {
         const char *name;
+        GVariant *res;
 
         name = g_object_get_data (G_OBJECT (page), "name");
         if (name == NULL)
                 return;
 
         if (g_str_equal (name, "enroll")) {
-                DBusGProxy *p;
                 GError *error = NULL;
                 GtkBuilder *dialog = data->dialog;
                 char *path;
                 guint i;
-                GValue value = { 0, };
 
-                if (!dbus_g_proxy_call (data->device, "Claim", &error, G_TYPE_STRING, "", G_TYPE_INVALID, G_TYPE_INVALID)) {
+                res = g_dbus_proxy_call_sync (data->device,
+                                              "Claim",
+                                              g_variant_new ("(s)", ""),
+                                              G_DBUS_CALL_FLAGS_NONE,
+                                              -1, NULL, &error);
+                if (res == NULL) {
                         GtkWidget *d;
                         char *msg;
+                        char *err;
 
                         /* translators:
                          * The variable is the name of the device, for example:
                          * "Could you not access "Digital Persona U.are.U 4000/4000B" device */
                         msg = g_strdup_printf (_("Could not access '%s' device"), data->name);
-                        d = get_error_dialog (msg, dbus_g_error_get_name (error), GTK_WINDOW (data->ass));
+                        err = g_dbus_error_get_remote_error (error);
+                        d = get_error_dialog (msg, err, GTK_WINDOW (ass));
+                        g_free (err);
                         g_error_free (error);
                         gtk_dialog_run (GTK_DIALOG (d));
                         gtk_widget_destroy (d);
@@ -414,31 +501,14 @@ assistant_prepare (GtkAssistant *ass, GtkWidget *page, EnrollData *data)
 
                         return;
                 }
-                data->state = STATE_CLAIMED;
-
-                p = dbus_g_proxy_new_from_proxy (data->device, "org.freedesktop.DBus.Properties", NULL);
-                if (!dbus_g_proxy_call (p, "Get", NULL, G_TYPE_STRING, "net.reactivated.Fprint.Device", G_TYPE_STRING, "num-enroll-stages", G_TYPE_INVALID,
-                                       G_TYPE_VALUE, &value, G_TYPE_INVALID) || g_value_get_int (&value) < 1) {
-                        GtkWidget *d;
-                        char *msg;
-
-                        /* translators:
-                         * The variable is the name of the device, for example:
-                         * "Could you not access "Digital Persona U.are.U 4000/4000B" device */
-                        msg = g_strdup_printf (_("Could not access '%s' device"), data->name);
-                        d = get_error_dialog (msg, "net.reactivated.Fprint.Error.Internal", GTK_WINDOW (data->ass));
-                        gtk_dialog_run (GTK_DIALOG (d));
-                        gtk_widget_destroy (d);
-                        g_free (msg);
-
-                        enroll_data_destroy (data);
-
-                        g_object_unref (p);
-                        return;
+                else {
+                        g_variant_unref (res);
                 }
-                g_object_unref (p);
+                data->state = STATE_CLAIMED;
 
-                data->num_enroll_stages = g_value_get_int (&value);
+                res = g_dbus_proxy_get_cached_property (data->device, "num-enroll-stages");
+                data->num_enroll_stages = g_variant_get_int32 (res);
+                g_variant_unref (res);
 
                 /* Hide the extra "bulbs" if not needed */
                 for (i = MAX_ENROLL_STAGES; i > data->num_enroll_stages; i--) {
@@ -464,18 +534,27 @@ assistant_prepare (GtkAssistant *ass, GtkWidget *page, EnrollData *data)
                 }
                 g_free (path);
 
-                dbus_g_proxy_add_signal(data->device, "EnrollStatus", G_TYPE_STRING, G_TYPE_BOOLEAN, NULL);
-                dbus_g_proxy_connect_signal(data->device, "EnrollStatus", G_CALLBACK(enroll_result), data, NULL);
+                g_signal_connect (data->device, "g-signal",
+                                  G_CALLBACK (on_signal), data);
 
-                if (!dbus_g_proxy_call(data->device, "EnrollStart", &error, G_TYPE_STRING, data->finger, G_TYPE_INVALID, G_TYPE_INVALID)) {
+                res = g_dbus_proxy_call_sync (data->device,
+                                              "EnrollStart",
+                                              g_variant_new ("(s)",
+                                                             data->finger),
+                                              G_DBUS_CALL_FLAGS_NONE,
+                                              -1, NULL, &error);
+                if (res == NULL) {
                         GtkWidget *d;
                         char *msg;
+                        char *err;
 
                         /* translators:
                          * The variable is the name of the device, for example:
                          * "Could you not access "Digital Persona U.are.U 4000/4000B" device */
                         msg = g_strdup_printf (_("Could not start finger capture on '%s' device"), data->name);
-                        d = get_error_dialog (msg, dbus_g_error_get_name (error), GTK_WINDOW (data->ass));
+                        err = g_dbus_error_get_remote_error (error);
+                        d = get_error_dialog (msg, err, GTK_WINDOW (data->ass));
+                        g_free (err);
                         g_error_free (error);
                         gtk_dialog_run (GTK_DIALOG (d));
                         gtk_widget_destroy (d);
@@ -485,14 +564,28 @@ assistant_prepare (GtkAssistant *ass, GtkWidget *page, EnrollData *data)
 
                         return;
                 }
+                else {
+                        g_variant_unref (res);
+                }
                 data->state = STATE_ENROLLING;;
         } else {
                 if (data->state == STATE_ENROLLING) {
-                        dbus_g_proxy_call(data->device, "EnrollStop", NULL, G_TYPE_INVALID, G_TYPE_INVALID);
+                        res = g_dbus_proxy_call_sync (data->device,
+                                                      "EnrollStop",
+                                                      NULL,
+                                                      G_DBUS_CALL_FLAGS_NONE,
+                                                      -1, NULL, NULL);
+                        g_variant_unref (res);
+
                         data->state = STATE_CLAIMED;
                 }
                 if (data->state == STATE_CLAIMED) {
-                        dbus_g_proxy_call(data->device, "Release", NULL, G_TYPE_INVALID, G_TYPE_INVALID);
+                        res = g_dbus_proxy_call_sync (data->device,
+                                                      "Release",
+                                                      NULL,
+                                                      G_DBUS_CALL_FLAGS_NONE,
+                                                      -1, NULL, NULL);
+                        g_variant_unref (res);
                         data->state = STATE_NONE;
                 }
         }
@@ -519,8 +612,7 @@ enroll_fingerprints (GtkWindow *parent,
                      GtkWidget *label2,
                      UmUser    *user)
 {
-        DBusGProxy *device, *p;
-        GHashTable *props;
+        GDBusProxy *device;
         GtkBuilder *dialog;
         EnrollData *data;
         GtkWidget *ass;
@@ -530,6 +622,7 @@ enroll_fingerprints (GtkWindow *parent,
         GdkPixbuf *pixbuf;
         gchar *title;
         GtkStyle *style;
+        GVariant *res;
 
         device = NULL;
 
@@ -557,18 +650,13 @@ enroll_fingerprints (GtkWindow *parent,
         data->label1 = label1;
         data->label2 = label2;
 
-        /* Get some details about the device */
-        p = dbus_g_proxy_new_from_proxy (device, "org.freedesktop.DBus.Properties", NULL);
-        if (dbus_g_proxy_call (p, "GetAll", NULL, G_TYPE_STRING, "net.reactivated.Fprint.Device", G_TYPE_INVALID,
-                               dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), &props, G_TYPE_INVALID)) {
-                const char *scan_type;
-                data->name = g_value_dup_string (g_hash_table_lookup (props, "name"));
-                scan_type = g_value_dup_string (g_hash_table_lookup (props, "scan-type"));
-                if (g_str_equal (scan_type, "swipe"))
-                        data->is_swipe = TRUE;
-                g_hash_table_destroy (props);
-        }
-        g_object_unref (p);
+        res = g_dbus_proxy_get_cached_property (device, "name");
+        data->name = g_variant_dup_string (res, NULL);
+        g_variant_unref (res);
+        res = g_dbus_proxy_get_cached_property (device, "scan-type");
+        if (g_str_equal (g_variant_get_string (res, NULL), "swipe"))
+                data->is_swipe = TRUE;
+        g_variant_unref (res);
 
         dialog = gtk_builder_new ();
         filename = UIDIR "/account-fingerprint.ui";
diff --git a/src/um-login-options.c b/src/um-login-options.c
index 9fa74ed..ed35b98 100644
--- a/src/um-login-options.c
+++ b/src/um-login-options.c
@@ -48,8 +48,7 @@ struct _UmLoginOptions {
 
         UmUserManager *manager;
 
-        DBusGProxy *proxy;
-        DBusGConnection *connection;
+        GDBusProxy *proxy;
 };
 
 enum {
@@ -249,6 +248,7 @@ update_login_options (GtkWidget      *widget,
         GConfValue *value;
         const gchar *key = NULL;
         gchar *value_string;
+        GVariant *res;
 
         if (widget == d->userlist_check ||
             widget == d->power_check) {
@@ -260,19 +260,26 @@ update_login_options (GtkWidget      *widget,
                 return;
         }
 
-        error = NULL;
         value = gconf_value_new (GCONF_VALUE_BOOL);
         gconf_value_set_bool (value, !active);
         value_string = gconf_value_encode (value);
-        if (!dbus_g_proxy_call (d->proxy, "SetMandatoryValue",
-                                &error,
-                                G_TYPE_STRING, key,
-                                G_TYPE_STRING, value_string,
-                                G_TYPE_INVALID,
-                                G_TYPE_INVALID)) {
+        error = NULL;
+        res = g_dbus_g_proxy_call (d->proxy,
+                                   "SetMandatoryValue",
+                                   g_variant_new ("(ss)",
+                                                  key,
+                                                  value_string),
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   NULL,
+                                   &error);
+       if (res == NULL) {
                g_warning ("error calling SetMandatoryValue: %s\n", error->message);
                g_error_free (error);
        }
+       else {
+                g_variant_unref (res);
+       }
        g_free (value_string);
        gconf_value_free (value);
        update_boolean_from_gconf (widget, d);
@@ -397,19 +404,19 @@ um_login_options_new (GtkBuilder *builder)
         um->lock_button = widget;
 
         error = NULL;
-        um->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
-        if (error != NULL) {
-                g_warning ("Failed to get system bus connection: %s", error->message);
-                g_error_free (error);
-        }
-
-        um->proxy = dbus_g_proxy_new_for_name (um->connection,
-                                               "org.gnome.GConf.Defaults",
-                                               "/",
-                                               "org.gnome.GConf.Defaults");
+        um->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+                                                   G_DBUS_PROXY_FLAGS_NONE,
+                                                   NULL,
+                                                   "org.gnome.GConf.Defaults",
+                                                   "/",
+                                                   "org.gnome.GConf.Defaults",
+                                                   NULL,
+                                                   &error);
 
         if (um->proxy == NULL) {
-                g_warning ("Cannot connect to GConf defaults mechanism");
+                g_warning ("Cannot connect to GConf defaults mechanism: %s",
+                           error->message);
+                g_error_free (error);
         }
 
         return um;
@@ -422,8 +429,6 @@ um_login_options_free (UmLoginOptions *um)
     g_object_unref (um->manager);
   if (um->proxy)
     g_object_unref (um->proxy);
-  if (um->connection)
-    dbus_g_connection_unref (um->connection);
 
   g_free (um);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]