[accounts-dialog/gdbus: 1/5] Begin porting to gdbus
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [accounts-dialog/gdbus: 1/5] Begin porting to gdbus
- Date: Fri, 23 Jul 2010 01:05:35 +0000 (UTC)
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]