[gdm/wip/slave-connection: 32/34] libgdmgreeter: generate implementation



commit 517290811154031aacf0b76d5fddf7edeff0f17a
Author: Ray Strode <rstrode redhat com>
Date:   Sun May 20 01:13:00 2012 +0200

    libgdmgreeter: generate implementation
    
    GdmGreeterClient is the interface greeters use to communicate
    with their respective slaves. It will eventually also be
    useful as an interface for screensavers to do authentication.
    
    The actual GdmGreeterClient code is a just a thin wrapper around
    some libdbus calls. Something very similar can be automatically
    generated using gdbus-codegen.
    
    This commit:
    
        - updates the library to use the most up to date dbus
          interfaces provided by the daemon
        - replaces the hand rolled dbus code with generated code,
          leaving just a stub "client" object to get at the generated
          objects.
    
    Based on work by Giovanni Campagna <gcampagna src gnome org>
    
    https://bugzilla.gnome.org/show_bug.cgi?id=676381

 .gitignore                             |    4 +
 configure.ac                           |    7 +-
 gui/libgdmgreeter/Makefile.am          |   57 ++-
 gui/libgdmgreeter/gdm-greeter-client.c | 1219 ++++----------------------------
 gui/libgdmgreeter/gdm-greeter-client.h |   95 +--
 gui/libgdmgreeter/gdmgreeter.pc.in     |    8 +-
 6 files changed, 236 insertions(+), 1154 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index fc22e18..9bec5a9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -126,6 +126,10 @@ docs/gdm-oc.omf
 docs/gdm-ru.omf
 docs/gdm-sv.omf
 docs/gdm-uk.omf
+gui/libgdmgreeter/gdm-client-glue.h
+gui/libgdmgreeter/gdm-client-glue.c
+gui/libgdmgreeter/gdm-manager-glue.h
+gui/libgdmgreeter/gdm-manager-glue.c
 gui/simple-chooser/gdm-host-chooser
 gui/simple-chooser/gdm-simple-chooser
 gui/simple-greeter/gdm-simple-greeter
diff --git a/configure.ac b/configure.ac
index bee9437..d1f9e08 100644
--- a/configure.ac
+++ b/configure.ac
@@ -182,12 +182,9 @@ PKG_CHECK_MODULES(CHECK,
                   have_check=no)
 AM_CONDITIONAL([HAVE_CHECK],[test "x$CHECK_CFLAGS" != "x"])
 
-LIBGDMGREETER_LIBS="$SIMPLE_GREETER_LIBS"
-AC_SUBST(LIBGDMGREETER_LIBS)
-LIBGDMGREETER_CFLAGS="$SIMPLE_GREETER_CFLAGS"
-AC_SUBST(LIBGDMGREETER_CFLAGS)
+PKG_CHECK_MODULES(LIBGDMGREETER, glib-2.0 gio-2.0 gio-unix-2.0);
 GOBJECT_INTROSPECTION_CHECK([0.9.12])
-LIBGDMGREETER_GIR_INCLUDES="GLib-2.0 GObject-2.0 DBusGLib-1.0"
+LIBGDMGREETER_GIR_INCLUDES="GLib-2.0 GObject-2.0 Gio-2.0"
 AC_SUBST(LIBGDMGREETER_GIR_INCLUDES)
 
 dnl ---------------------------------------------------------------------------
diff --git a/gui/libgdmgreeter/Makefile.am b/gui/libgdmgreeter/Makefile.am
index f1e2a51..13cc9e3 100644
--- a/gui/libgdmgreeter/Makefile.am
+++ b/gui/libgdmgreeter/Makefile.am
@@ -1,12 +1,41 @@
 END_OF_LIST =
 
-BUILT_SOURCES = $(END_OF_LIST)
-CLEANFILES = $(END_OF_LIST)
+BUILT_SOURCES = gdm-manager-glue.h gdm-client-glue.h
+CLEANFILES =                    \
+        $(BUILT_SOURCES)        \
+        gdm-manager-glue.c      \
+        gdm-client-glue.c      \
+        $(END_OF_LIST)
+
+gdm-manager-glue.c gdm-manager-glue.h : $(top_srcdir)/daemon/gdm-manager.xml Makefile.am
+	$(AM_V_GEN)gdbus-codegen 					\
+		--c-namespace Gdm				\
+		--interface-prefix=org.gnome.DisplayManager		\
+		--generate-c-code=gdm-manager-glue			\
+		--annotate "org.gnome.DisplayManager.Manager"		\
+		           "org.gtk.GDBus.C.Name" Manager		\
+		$(top_srcdir)/daemon/gdm-manager.xml
+
+gdm-client-glue.c gdm-client-glue.h : $(top_srcdir)/daemon/gdm-session.xml Makefile.am
+	$(AM_V_GEN)gdbus-codegen 					\
+		--c-namespace Gdm				\
+		--interface-prefix=org.gnome.DisplayManager		\
+		--generate-c-code=gdm-client-glue			\
+		--annotate "org.gnome.DisplayManager.UserVerifier"	\
+		           "org.gtk.GDBus.C.Name" UserVerifier	\
+		--annotate "org.gnome.DisplayManager.Greeter"		\
+		           "org.gtk.GDBus.C.Name" Greeter		\
+		--annotate "org.gnome.DisplayManager.RemoteGreeter"	\
+		           "org.gtk.GDBus.C.Name" RemoteGreeter		\
+		--annotate "org.gnome.DisplayManager.Chooser"		\
+		           "org.gtk.GDBus.C.Name" Chooser		\
+		$(top_srcdir)/daemon/gdm-session.xml
 
 AM_CPPFLAGS = \
         -I.                                                                   \
         -I..                                                                  \
-        -DG_LOG_DOMAIN=\"GdmGreeter\"                                         \
+        -I$(srcdir)                                                           \
+        -DG_LOG_DOMAIN=\"Gdm\"                                         \
         -DDMCONFDIR=\""$(dmconfdir)"\"                                        \
         -DDATADIR=\""$(datadir)"\"                                            \
         $(END_OF_LIST)
@@ -15,10 +44,10 @@ lib_LTLIBRARIES =                                                             \
         libgdmgreeter.la                                                      \
         $(END_OF_LIST)
 
-libgdmgreeterdir = $(includedir)/gdm/greeter
+libgdmgreeterdir = $(includedir)/gdm
 libgdmgreeter_HEADERS =                                                       \
-        gdm-greeter-client.h                                                  \
-        gdm-greeter-sessions.h                                                \
+        gdm-greeter-client.h                                                   \
+        gdm-greeter-sessions.h                                                 \
         $(END_OF_LIST)
 
 libgdmgreeter_la_CFLAGS =                                                     \
@@ -40,6 +69,13 @@ libgdmgreeter_la_SOURCES =                                                    \
         gdm-greeter-sessions.c                                                \
         $(END_OF_LIST)
 
+nodist_libgdmgreeter_la_SOURCES = 	\
+	gdm-client-glue.c		\
+	gdm-client-glue.h		\
+	gdm-manager-glue.c		\
+	gdm-manager-glue.h		\
+	$(END_OF_LIST)
+
 pkgconfigdir = $(libdir)/pkgconfig
 dist_pkgconfig_DATA = gdmgreeter.pc
 
@@ -52,16 +88,17 @@ typelibsdir = $(libdir)/girepository-1.0
 typelibs_DATA = $(gir_DATA:.gir=.typelib)
 INTROSPECTION_GIRS = $(gir_DATA)
 
-GdmGreeter-1.0.gir:                                                      \
+GdmGreeter-1.0.gir:                                                           \
         $(INTROSPECTION_SCANNER)                                              \
         libgdmgreeter.la                                                      \
         Makefile                                                              \
         $(END_OF_LIST)
 
-GdmGreeter_1_0_gir_SCANNERFLAGS =                                        \
+GdmGreeter_1_0_gir_SCANNERFLAGS =                                             \
         --warn-all                                                            \
         --namespace=GdmGreeter                                                \
-        --identifier-prefix GdmGreeter                                        \
+        --identifier-prefix Gdm                                               \
+        $(AM_CPPFLAGS)                                                        \
         $(libgdmgreeter_la_CFLAGS)                                            \
         $(END_OF_LIST)
 
@@ -69,7 +106,7 @@ GdmGreeter_1_0_gir_INCLUDES = $(LIBGDMGREETER_GIR_INCLUDES)
 GdmGreeter_1_0_gir_LIBS = libgdmgreeter.la
 GdmGreeter_1_0_gir_FILES =                                                    \
         $(filter-out %-private.h, $(libgdmgreeter_la_SOURCES))                \
-        $(BUILT_SOURCES)                                                      \
+        $(filter-out %-private.h, $(nodist_libgdmgreeter_la_SOURCES))         \
         $(END_OF_LIST)
 
 CLEANFILES += $(gir_DATA) $(typelibs_DATA)
diff --git a/gui/libgdmgreeter/gdm-greeter-client.c b/gui/libgdmgreeter/gdm-greeter-client.c
index 6cf5b58..47e9a6d 100644
--- a/gui/libgdmgreeter/gdm-greeter-client.c
+++ b/gui/libgdmgreeter/gdm-greeter-client.c
@@ -1,6 +1,7 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
  *
- * Copyright (C) 2007 William Jon McCann <mccann jhu edu>
+ * Copyright (C) 2012 Red Hat, Inc.
+ * Copyright (C) 2012 Giovanni Campagna <scampa giovanni gmail com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -28,61 +29,31 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <glib-object.h>
-#define DBUS_API_SUBJECT_TO_CHANGE
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
 
 #include "gdm-greeter-client.h"
+#include "gdm-client-glue.h"
+#include "gdm-manager-glue.h"
 
 #define GDM_GREETER_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_GREETER_CLIENT, GdmGreeterClientPrivate))
 
-#define GREETER_SERVER_DBUS_PATH      "/org/gnome/DisplayManager/GreeterServer"
-#define GREETER_SERVER_DBUS_INTERFACE "org.gnome.DisplayManager.GreeterServer"
-
-#define GDM_DBUS_NAME              "org.gnome.DisplayManager"
-#define GDM_DBUS_DISPLAY_INTERFACE "org.gnome.DisplayManager.Display"
+#define SESSION_DBUS_PATH      "/org/gnome/DisplayManager/Session"
 
 struct GdmGreeterClientPrivate
 {
-        DBusConnection   *connection;
-        char             *address;
-
-        char             *display_id;
-        gboolean          display_is_local;
-
-        guint32           is_connected : 1;
-};
-
-enum {
-        PROP_0,
-        PROP_DISPLAY_IS_LOCAL
+        GdmManager         *manager;
+        GdmUserVerifier    *user_verifier;
+        GdmGreeter         *greeter;
+        GdmRemoteGreeter   *remote_greeter;
+        GdmChooser         *chooser;
+        GDBusConnection    *connection;
+        char               *address;
 };
 
-enum {
-        INFO,
-        PROBLEM,
-        INFO_QUERY,
-        SECRET_INFO_QUERY,
-        SERVICE_UNAVAILABLE,
-        READY,
-        CONVERSATION_STOPPED,
-        RESET,
-        AUTHENTICATION_FAILED,
-        SELECTED_USER_CHANGED,
-        DEFAULT_SESSION_CHANGED,
-        TIMED_LOGIN_REQUESTED,
-        SESSION_OPENED,
-        LAST_SIGNAL
-};
-
-static guint gdm_greeter_client_signals [LAST_SIGNAL];
-
 static void     gdm_greeter_client_class_init  (GdmGreeterClientClass *klass);
 static void     gdm_greeter_client_init        (GdmGreeterClient      *greeter_client);
 static void     gdm_greeter_client_finalize    (GObject              *object);
 
-G_DEFINE_TYPE (GdmGreeterClient, gdm_greeter_client, G_TYPE_OBJECT)
+G_DEFINE_TYPE (GdmGreeterClient, gdm_greeter_client, G_TYPE_OBJECT);
 
 static gpointer client_object = NULL;
 
@@ -98,946 +69,214 @@ gdm_greeter_client_error_quark (void)
 }
 
 /**
- * gdm_greeter_client_get_display_is_local:
- *
+ * gdm_greeter_client_open_connection_sync:
  * @client: a #GdmGreeterClient
+ * @cancellable: a #GCancellable
+ * @error: a #GError
+ *
+ * Initiates a connection to GDM daemon "slave" process.
+ *
+ * This function should be called before doing other calls.
  *
- * Returns: %TRUE if display is local display
+ * Returns: %TRUE if connected, or %FALSE if unavailable
  */
 gboolean
-gdm_greeter_client_get_display_is_local (GdmGreeterClient *client)
-{
-        g_return_val_if_fail (GDM_IS_GREETER_CLIENT (client), FALSE);
-
-        return client->priv->display_is_local;
-}
-
-static void
-emit_string_and_int_signal_for_message (GdmGreeterClient *client,
-                                        const char       *name,
-                                        DBusMessage      *message,
-                                        int               signal)
-{
-        DBusError   error;
-        const char *text;
-        int         number;
-        dbus_bool_t res;
-
-        dbus_error_init (&error);
-        res = dbus_message_get_args (message,
-                                     &error,
-                                     DBUS_TYPE_STRING, &text,
-                                     DBUS_TYPE_INT32, &number,
-                                     DBUS_TYPE_INVALID);
-        if (res) {
-
-                g_debug ("GdmGreeterClient: Received %s (%s %d)", name, text, number);
-
-                g_signal_emit (client,
-                               gdm_greeter_client_signals[signal],
-                               0, text, number);
-        } else {
-                g_warning ("Unable to get arguments: %s", error.message);
-                dbus_error_free (&error);
-        }
-}
-
-static void
-emit_string_and_string_signal_for_message (GdmGreeterClient *client,
-                                           const char       *name,
-                                           DBusMessage      *message,
-                                           int               signal)
-{
-        DBusError   error;
-        char *text1;
-        char *text2;
-        dbus_bool_t res;
-
-        dbus_error_init (&error);
-        res = dbus_message_get_args (message,
-                                     &error,
-                                     DBUS_TYPE_STRING, &text1,
-                                     DBUS_TYPE_STRING, &text2,
-                                     DBUS_TYPE_INVALID);
-        if (res) {
-
-                g_debug ("GdmGreeterClient: Received %s (%s, %s)", name, text1, text2);
-
-                g_signal_emit (client,
-                               gdm_greeter_client_signals[signal],
-                               0, text1, text2);
-        } else {
-                g_warning ("Unable to get arguments: %s", error.message);
-                dbus_error_free (&error);
-        }
-        dbus_error_free (&error);
-}
-
-static void
-emit_string_signal_for_message (GdmGreeterClient *client,
-                                const char       *name,
-                                DBusMessage      *message,
-                                int               signal)
-{
-        DBusError   error;
-        const char *text;
-        dbus_bool_t res;
-
-        dbus_error_init (&error);
-        res = dbus_message_get_args (message,
-                                     &error,
-                                     DBUS_TYPE_STRING, &text,
-                                     DBUS_TYPE_INVALID);
-        if (res) {
-
-                g_debug ("GdmGreeterClient: Received %s (%s)", name, text);
-
-                g_signal_emit (client,
-                               gdm_greeter_client_signals[signal],
-                               0, text);
-        } else {
-                g_warning ("Unable to get arguments: %s", error.message);
-                dbus_error_free (&error);
-        }
-}
-
-static void
-on_selected_user_changed (GdmGreeterClient *client,
-                          DBusMessage      *message)
-{
-        emit_string_signal_for_message (client, "SelectedUserChanged", message, SELECTED_USER_CHANGED);
-}
-
-static void
-on_default_session_changed (GdmGreeterClient *client,
-                            DBusMessage      *message)
-{
-        emit_string_signal_for_message (client, "DefaultSessionNameChanged", message, DEFAULT_SESSION_CHANGED);
-}
-
-static void
-on_timed_login_requested (GdmGreeterClient *client,
-                          DBusMessage      *message)
-{
-        emit_string_and_int_signal_for_message (client, "TimedLoginRequested", message, TIMED_LOGIN_REQUESTED);
-}
-
-static void
-on_session_opened (GdmGreeterClient *client,
-                   DBusMessage      *message)
-{
-        emit_string_signal_for_message (client, "SessionOpened", message, SESSION_OPENED);
-}
-
-static void
-on_info_query (GdmGreeterClient *client,
-               DBusMessage      *message)
-{
-        emit_string_and_string_signal_for_message (client, "InfoQuery", message, INFO_QUERY);
-}
-
-static void
-on_secret_info_query (GdmGreeterClient *client,
-                      DBusMessage      *message)
-{
-        emit_string_and_string_signal_for_message (client, "SecretInfoQuery", message, SECRET_INFO_QUERY);
-}
-
-static void
-on_info (GdmGreeterClient *client,
-         DBusMessage      *message)
-{
-        emit_string_and_string_signal_for_message (client, "Info", message, INFO);
-}
-
-static void
-on_problem (GdmGreeterClient *client,
-            DBusMessage      *message)
-{
-        emit_string_and_string_signal_for_message (client, "Problem", message, PROBLEM);
-}
-
-static void
-on_service_unavailable (GdmGreeterClient *client,
-                        DBusMessage      *message)
-{
-        emit_string_signal_for_message (client, "ServiceUnavailable", message, SERVICE_UNAVAILABLE);
-}
-
-static void
-on_ready (GdmGreeterClient *client,
-          DBusMessage      *message)
-{
-        emit_string_signal_for_message (client, "Ready", message, READY);
-}
-
-static void
-on_conversation_stopped (GdmGreeterClient *client,
-                         DBusMessage      *message)
-{
-        emit_string_signal_for_message (client, "ConversationStopped", message, CONVERSATION_STOPPED);
-}
-
-static void
-on_reset (GdmGreeterClient *client,
-          DBusMessage      *message)
-{
-        g_debug ("GdmGreeterClient: Reset");
-
-        g_signal_emit (client,
-                       gdm_greeter_client_signals[RESET],
-                       0);
-}
-
-static void
-on_authentication_failed (GdmGreeterClient *client,
-                          DBusMessage      *message)
-{
-        g_debug ("GdmGreeterClient: Authentication failed");
-
-        g_signal_emit (client,
-                       gdm_greeter_client_signals[AUTHENTICATION_FAILED],
-                       0);
-}
-
-static gboolean
-send_dbus_string_method (DBusConnection *connection,
-                         const char     *method,
-                         const char     *payload)
-{
-        DBusError       error;
-        DBusMessage    *message;
-        DBusMessage    *reply;
-        DBusMessageIter iter;
-        const char     *str;
-
-        if (payload != NULL) {
-                str = payload;
-        } else {
-                str = "";
-        }
-
-        g_debug ("GdmGreeterClient: Calling %s", method);
-        message = dbus_message_new_method_call (NULL,
-                                                GREETER_SERVER_DBUS_PATH,
-                                                GREETER_SERVER_DBUS_INTERFACE,
-                                                method);
-        if (message == NULL) {
-                g_warning ("Couldn't allocate the D-Bus message");
-                return FALSE;
-        }
-
-        dbus_message_iter_init_append (message, &iter);
-        dbus_message_iter_append_basic (&iter,
-                                        DBUS_TYPE_STRING,
-                                        &str);
-
-        dbus_error_init (&error);
-        reply = dbus_connection_send_with_reply_and_block (connection,
-                                                           message,
-                                                           -1,
-                                                           &error);
-
-        dbus_message_unref (message);
-
-        if (dbus_error_is_set (&error)) {
-                g_warning ("%s %s raised: %s\n",
-                           method,
-                           error.name,
-                           error.message);
-                return FALSE;
-        }
-        if (reply != NULL) {
-                dbus_message_unref (reply);
-        }
-        dbus_connection_flush (connection);
-
-        return TRUE;
-}
-
-static gboolean
-send_dbus_string_and_bool_method (DBusConnection *connection,
-                                  const char     *method,
-                                  const char     *string_payload,
-                                  gboolean        bool_payload)
-{
-        DBusMessage    *message;
-        DBusMessageIter iter;
-        const char     *str;
-
-        if (string_payload != NULL) {
-                str = string_payload;
-        } else {
-                str = "";
-        }
-
-        g_debug ("GdmGreeterClient: Calling %s", method);
-        message = dbus_message_new_method_call (NULL,
-                                                GREETER_SERVER_DBUS_PATH,
-                                                GREETER_SERVER_DBUS_INTERFACE,
-                                                method);
-        if (message == NULL) {
-                g_warning ("Couldn't allocate the D-Bus message");
-                return FALSE;
-        }
-
-        dbus_message_iter_init_append (message, &iter);
-        dbus_message_iter_append_basic (&iter,
-                                        DBUS_TYPE_STRING,
-                                        &str);
-
-        dbus_message_iter_append_basic (&iter,
-                                        DBUS_TYPE_BOOLEAN,
-                                        &bool_payload);
-        dbus_message_set_no_reply (message, TRUE);
-
-        dbus_connection_send (connection, message, NULL);
-
-        dbus_message_unref (message);
-
-        dbus_connection_flush (connection);
-
-        return TRUE;
-}
-
-static gboolean
-send_dbus_string_and_string_method (DBusConnection *connection,
-                                    const char     *method,
-                                    const char     *payload1,
-                                    const char     *payload2)
+gdm_greeter_client_open_connection_sync (GdmGreeterClient  *client,
+                                         GCancellable      *cancellable,
+                                         GError           **error)
 {
-        DBusError       error;
-        DBusMessage    *message;
-        DBusMessage    *reply;
-        DBusMessageIter iter;
-        const char     *str;
-
-        g_debug ("GdmGreeterClient: Calling %s", method);
-        message = dbus_message_new_method_call (NULL,
-                                                GREETER_SERVER_DBUS_PATH,
-                                                GREETER_SERVER_DBUS_INTERFACE,
-                                                method);
-        if (message == NULL) {
-                g_warning ("Couldn't allocate the D-Bus message");
-                return FALSE;
-        }
-
-        dbus_message_iter_init_append (message, &iter);
-
-        if (payload1 != NULL) {
-                str = payload1;
-        } else {
-                str = "";
-        }
-        dbus_message_iter_append_basic (&iter,
-                                        DBUS_TYPE_STRING,
-                                        &str);
-
-        if (payload2 != NULL) {
-                str = payload2;
-        } else {
-                str = "";
-        }
-        dbus_message_iter_append_basic (&iter,
-                                        DBUS_TYPE_STRING,
-                                        &str);
+        gboolean ret;
 
-        dbus_error_init (&error);
-        reply = dbus_connection_send_with_reply_and_block (connection,
-                                                           message,
-                                                           -1,
-                                                           &error);
+        g_return_val_if_fail (GDM_IS_GREETER_CLIENT (client), FALSE);
 
-        dbus_message_unref (message);
+        client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+                                                                    G_DBUS_PROXY_FLAGS_NONE,
+                                                                    "org.gnome.DisplayManager",
+                                                                    "/org/gnome/DisplayManager/Manager",
+                                                                    cancellable,
+                                                                    error);
 
-        if (dbus_error_is_set (&error)) {
-                g_warning ("%s %s raised: %s\n",
-                           method,
-                           error.name,
-                           error.message);
-                return FALSE;
-        }
-        if (reply != NULL) {
-                dbus_message_unref (reply);
+        if (client->priv->manager == NULL) {
+                goto out;
         }
-        dbus_connection_flush (connection);
-
-        return TRUE;
-}
 
-static gboolean
-send_dbus_void_method (DBusConnection *connection,
-                       const char     *method)
-{
-        DBusError       error;
-        DBusMessage    *message;
-        DBusMessage    *reply;
+        ret = gdm_manager_call_open_session_sync (client->priv->manager,
+                                                  &client->priv->address,
+                                                  cancellable,
+                                                  error);
 
-        g_debug ("GdmGreeterClient: Calling %s", method);
-        message = dbus_message_new_method_call (NULL,
-                                                GREETER_SERVER_DBUS_PATH,
-                                                GREETER_SERVER_DBUS_INTERFACE,
-                                                method);
-        if (message == NULL) {
-                g_warning ("Couldn't allocate the D-Bus message");
-                return FALSE;
+        if (!ret) {
+                g_clear_object (&client->priv->manager);
+                goto out;
         }
 
-        dbus_error_init (&error);
-        reply = dbus_connection_send_with_reply_and_block (connection,
-                                                           message,
-                                                           -1,
-                                                           &error);
+        g_debug ("GdmGreeterClient: connecting to address: %s", client->priv->address);
 
-        dbus_message_unref (message);
+        client->priv->connection = g_dbus_connection_new_for_address_sync (client->priv->address,
+                                                                           G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
+                                                                           NULL,
+                                                                           cancellable,
+                                                                           error);
 
-        if (dbus_error_is_set (&error)) {
-                g_warning ("%s %s raised: %s\n",
-                           method,
-                           error.name,
-                           error.message);
-                return FALSE;
-        }
-        if (reply != NULL) {
-                dbus_message_unref (reply);
+        if (client->priv->connection == NULL) {
+                g_clear_object (&client->priv->manager);
+                g_clear_pointer (&client->priv->address, g_free);
+                goto out;
         }
-        dbus_connection_flush (connection);
-
-        return TRUE;
-}
 
-/**
- * gdm_greeter_call_start_conversation:
- *
- * @client: a #GdmGreeterClient
- * @service_name: PAM service name
- *
- * Tells GDM to prepare to start a PAM conversation with
- * the specified PAM service.
- *
- * Normally, this would get called when the greeter first
- * starts up, either one call to the "gdm" service or one
- * for each auth method (say "gdm-password", "gdm-fingerprint",
- * "gdm-smartcard")
- *
- * After the conversation has been started, the ready signal
- * will be emitted.
- */
-void
-gdm_greeter_client_call_start_conversation (GdmGreeterClient *client,
-                                            const char       *service_name)
-{
-        send_dbus_string_method (client->priv->connection,
-                                 "StartConversation", service_name);
+ out:
+        return client->priv->connection != NULL;
 }
-
 /**
- * gdm_greeter_call_begin_auto_login:
- *
+ * gdm_greeter_client_close_connection_sync:
  * @client: a #GdmGreeterClient
- * @username: user to auto login or %NULL to use the configured default
+ * @cancellable: a #GCancellable
+ * @error: a #GError
  *
- * Tells GDM to log the user in without first authenticating.
+ * Closes a connection to the GDM daemon "slave" process.
  *
- * Normally, this would get called after a timed-login-requested
- * signal once the time out has been reached.
+ * Returns: %TRUE if disconnected, or %FALSE if failed
  */
-void
-gdm_greeter_client_call_begin_auto_login (GdmGreeterClient *client,
-                                          const char       *username)
+gboolean
+gdm_greeter_client_close_connection_sync (GdmGreeterClient  *client,
+                                          GCancellable      *cancellable,
+                                          GError           **error)
 {
-        if (username == NULL) {
-                username = "__auto";
-        }
-
-        send_dbus_string_method (client->priv->connection,
-                                 "BeginAutoLogin", username);
-}
+        g_return_val_if_fail (GDM_IS_GREETER_CLIENT (client), FALSE);
 
-/**
- * gdm_greeter_call_begin_verification:
- *
- * @client: a #GdmGreeterClient
- * @service_name: PAM service name
- *
- * Tells GDM to start the PAM authentication process with no specified
- * user name.
- *
- * This should only be called after the ready signal is emitted for
- * @service_name.
- *
- * Normally, this would get called if the greeter has no user list, or
- * if the user clicks "Other" or "Not Listed?" in the user list.
- */
-void
-gdm_greeter_client_call_begin_verification (GdmGreeterClient *client,
-                                            const char       *service_name)
-{
-        send_dbus_string_method (client->priv->connection,
-                                 "BeginVerification", service_name);
-}
+        g_clear_object (&client->priv->user_verifier);
+        g_clear_object (&client->priv->greeter);
+        g_clear_object (&client->priv->remote_greeter);
+        g_clear_object (&client->priv->chooser);
+        g_clear_object (&client->priv->manager);
+        g_clear_object (&client->priv->connection);
 
-/**
- * gdm_greeter_call_begin_verification_for_user:
- *
- * @client: a #GdmGreeterClient
- * @service_name: PAM service name
- * @username: user to start verification process for
- *
- * Tells GDM to start the PAM authentication process with the @username
- * user name.
- *
- * This should only be called after the ready signal is emitted for
- * @service_name.
- *
- * Normally, this would get called in reponse to a user getting selected
- * from the user list.  If the greeter doesn't have a user list, it's
- * better to call gdm_greeter_client_call_begin_verification() and let
- * the PAM service handle asking for a username, than using this function.
- */
-void
-gdm_greeter_client_call_begin_verification_for_user (GdmGreeterClient *client,
-                                                     const char       *service_name,
-                                                     const char       *username)
-{
-        send_dbus_string_and_string_method (client->priv->connection,
-                                            "BeginVerificationForUser",
-                                            service_name,
-                                            username);
+        return TRUE;
 }
 
 /**
- * gdm_greeter_call_answer_query:
- *
+ * gdm_greeter_client_get_user_verifier_sync:
  * @client: a #GdmGreeterClient
- * @service_name: PAM service name
- * @answer: The answer to the currently pending PAM question.
+ * @cancellable: a #GCancellable
+ * @error: a #GError
  *
- * Responds to GDM's pending request for information.
+ * Gets a #GdmUserVerifier object that can be used to
+ * verify a user's local account.
  *
- * This should only be called after the info-query or secret-info-query signal is
- * emitted for * @service_name.
- *
- * Normally, this would get called after the user types in an answer.
+ * Returns: (transfer full): #GdmUserVerifier or %NULL if not connected
  */
-void
-gdm_greeter_client_call_answer_query (GdmGreeterClient *client,
-                                      const char       *service_name,
-                                      const char       *answer)
+GdmUserVerifier *
+gdm_greeter_client_get_user_verifier_sync (GdmGreeterClient  *client,
+                                           GCancellable      *cancellable,
+                                           GError           **error)
 {
-        send_dbus_string_and_string_method (client->priv->connection,
-                                            "AnswerQuery",
-                                            service_name,
-                                            answer);
-}
+        if (client->priv->user_verifier != NULL) {
+                return g_object_ref (client->priv->user_verifier);
+        }
 
-/**
- * gdm_greeter_call_start_session_when_ready:
- *
- * @client: a #GdmGreeterClient
- * @service_name: PAM service name
- * @should_start_session: whether to block the login process
- *
- * After the user has successfully interacted with PAM, GDM waits
- * for a final go ahead before finishing the login process and starting the
- * users session.
- *
- * This call gives that go ahead.
- *
- * Normally, you would call this after the user has had a chance to interact
- * with any important, non-login related information on the login screen
- * (like a session selector).
- */
-void
-gdm_greeter_client_call_start_session_when_ready  (GdmGreeterClient *client,
-                                                   const char       *service_name,
-                                                   gboolean          should_start_session)
-{
-        send_dbus_string_and_bool_method (client->priv->connection,
-                                          "StartSessionWhenReady",
-                                          service_name,
-                                          should_start_session);
-}
+        client->priv->user_verifier = gdm_user_verifier_proxy_new_sync (client->priv->connection,
+                                                                        G_DBUS_PROXY_FLAGS_NONE,
+                                                                        NULL,
+                                                                        SESSION_DBUS_PATH,
+                                                                        cancellable,
+                                                                        error);
 
-/**
- * gdm_greeter_call_select_session:
- *
- * @client: a #GdmGreeterClient
- * @session: session from /usr/share/xsessions to start
- *
- * Select a session for the user to login with.
- *
- * Normally, you would call this if the user selects a specific session in
- * a list on screen somewhere.
- */
-void
-gdm_greeter_client_call_select_session (GdmGreeterClient *client,
-                                        const char       *session)
-{
-        send_dbus_string_method (client->priv->connection,
-                                 "SelectSession",
-                                 session);
+        return g_object_ref (client->priv->user_verifier);
 }
 
 /**
- * gdm_greeter_call_select_user:
- *
+ * gdm_greeter_client_get_greeter_sync:
  * @client: a #GdmGreeterClient
- * @user:  a user name
+ * @cancellable: a #GCancellable
+ * @error: a #GError
  *
- * Select a user to login with.
+ * Gets a #GdmGreeter object that can be used
+ * to do do various login screen related tasks, such
+ * as selecting a users session, and starting that
+ * session.
  *
- * Normally, you would call this if the user selects a specific session in
- * a list on screen somewhere.
+ * Returns: (transfer full): #GdmGreeter or %NULL if caller is not a greeter
  */
-void
-gdm_greeter_client_call_select_user (GdmGreeterClient *client,
-                                     const char       *user)
+GdmGreeter *
+gdm_greeter_client_get_greeter_sync (GdmGreeterClient  *client,
+                                     GCancellable      *cancellable,
+                                     GError           **error)
 {
-        send_dbus_string_method (client->priv->connection,
-                                 "SelectUser",
-                                 user);
-}
+        if (client->priv->greeter != NULL) {
+                return g_object_ref (client->priv->greeter);
+        }
 
-/**
- * gdm_greeter_call_select_hostname:
- *
- * @client: a #GdmGreeterClient
- * @hostname:  a hostname
- *
- * Select a user to login with.
- *
- * Normally, you would call this from a chooser to select a specific host.
- */
-void
-gdm_greeter_client_call_select_hostname (GdmGreeterClient *client,
-                                         const char       *hostname)
-{
-        send_dbus_string_method (client->priv->connection,
-                                 "SelectHostname",
-                                 hostname);
-}
+        client->priv->greeter = gdm_greeter_proxy_new_sync (client->priv->connection,
+                                                            G_DBUS_PROXY_FLAGS_NONE,
+                                                            NULL,
+                                                            SESSION_DBUS_PATH,
+                                                            cancellable,
+                                                            error);
 
-/**
- * gdm_greeter_call_canel:
- *
- * @client: a #GdmGreeterClient
- *
- * Cancel all pending PAM conversations.
- *
- * Normally you would call this if the user hits a Cancel button when
- * asked a question they don't want to answer.
- */
-void
-gdm_greeter_client_call_cancel (GdmGreeterClient *client)
-{
-        send_dbus_void_method (client->priv->connection,
-                               "Cancel");
+        return g_object_ref (client->priv->greeter);
 }
 
 /**
- * gdm_greeter_call_disconnect:
- *
+ * gdm_greeter_client_get_remote_greeter_sync:
  * @client: a #GdmGreeterClient
+ * @cancellable: a #GCancellable
+ * @error: a #GError
  *
- * Disconnect from gdm slave.
+ * Gets a #GdmRemoteGreeter object that can be used
+ * to do do various remote login screen related tasks,
+ * such as disconnecting.
  *
- * You shouldn't call this unless the connection
- * is remote.
+ * Returns: (transfer full): #GdmRemoteGreeter or %NULL if caller is not remote
  */
-void
-gdm_greeter_client_call_disconnect (GdmGreeterClient *client)
-{
-        g_return_if_fail (gdm_greeter_client_get_display_is_local (client) == FALSE);
-
-        send_dbus_void_method (client->priv->connection,
-                               "Disconnect");
-}
-
-static gboolean
-send_get_display_id (GdmGreeterClient *client,
-                     const char       *method,
-                     char            **answerp)
+GdmRemoteGreeter *
+gdm_greeter_client_get_remote_greeter_sync (GdmGreeterClient  *client,
+                                            GCancellable      *cancellable,
+                                            GError           **error)
 {
-        DBusError       error;
-        DBusMessage    *message;
-        DBusMessage    *reply;
-        DBusMessageIter iter;
-        gboolean        ret;
-        const char     *answer;
-
-        ret = FALSE;
-
-        g_debug ("GdmGreeterClient: Calling %s", method);
-        message = dbus_message_new_method_call (NULL,
-                                                GREETER_SERVER_DBUS_PATH,
-                                                GREETER_SERVER_DBUS_INTERFACE,
-                                                method);
-        if (message == NULL) {
-                g_warning ("Couldn't allocate the D-Bus message");
-                return FALSE;
-        }
-
-        dbus_error_init (&error);
-        reply = dbus_connection_send_with_reply_and_block (client->priv->connection,
-                                                           message,
-                                                           -1,
-                                                           &error);
-        dbus_message_unref (message);
-
-        if (dbus_error_is_set (&error)) {
-                g_warning ("%s %s raised: %s\n",
-                           method,
-                           error.name,
-                           error.message);
-                goto out;
-        }
-
-        dbus_message_iter_init (reply, &iter);
-        dbus_message_iter_get_basic (&iter, &answer);
-        if (answerp != NULL) {
-                *answerp = g_strdup (answer);
+        if (client->priv->remote_greeter != NULL) {
+                return g_object_ref (client->priv->remote_greeter);
         }
-        ret = TRUE;
 
-        dbus_message_unref (reply);
-        dbus_connection_flush (client->priv->connection);
+        client->priv->remote_greeter = gdm_remote_greeter_proxy_new_sync (client->priv->connection,
+                                                                          G_DBUS_PROXY_FLAGS_NONE,
+                                                                          NULL,
+                                                                          SESSION_DBUS_PATH,
+                                                                          cancellable,
+                                                                          error);
 
- out:
-
-        return ret;
-}
-
-
-static char *
-gdm_greeter_client_call_get_display_id (GdmGreeterClient *client)
-{
-        char *display_id;
-
-        display_id = NULL;
-        send_get_display_id (client,
-                             "GetDisplayId",
-                             &display_id);
-
-        return display_id;
-}
-
-static void
-cache_display_values (GdmGreeterClient *client)
-{
-        DBusGProxy      *display_proxy;
-        DBusGConnection *connection;
-        GError          *error;
-        gboolean         res;
-
-        g_free (client->priv->display_id);
-        client->priv->display_id = gdm_greeter_client_call_get_display_id (client);
-        if (client->priv->display_id == NULL) {
-                return;
-        }
-
-        error = NULL;
-        connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
-        if (connection == NULL) {
-                if (error != NULL) {
-                        g_critical ("error getting system bus: %s", error->message);
-                        g_error_free (error);
-                }
-                return;
-        }
-
-        g_debug ("GdmGreeterClient: Creating proxy for %s", client->priv->display_id);
-        display_proxy = dbus_g_proxy_new_for_name (connection,
-                                                   GDM_DBUS_NAME,
-                                                   client->priv->display_id,
-                                                   GDM_DBUS_DISPLAY_INTERFACE);
-        /* cache some values up front */
-        error = NULL;
-        res = dbus_g_proxy_call (display_proxy,
-                                 "IsLocal",
-                                 &error,
-                                 G_TYPE_INVALID,
-                                 G_TYPE_BOOLEAN, &client->priv->display_is_local,
-                                 G_TYPE_INVALID);
-        if (! res) {
-                if (error != NULL) {
-                        g_warning ("Failed to get value: %s", error->message);
-                        g_error_free (error);
-                } else {
-                        g_warning ("Failed to get value");
-                }
-        }
-}
-
-static DBusHandlerResult
-client_dbus_handle_message (DBusConnection *connection,
-                            DBusMessage    *message,
-                            void           *user_data,
-                            dbus_bool_t     local_interface)
-{
-        GdmGreeterClient *client = GDM_GREETER_CLIENT (user_data);
-
-        g_return_val_if_fail (connection != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
-        g_return_val_if_fail (message != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
-
-        if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "InfoQuery")) {
-                on_info_query (client, message);
-        } else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "SecretInfoQuery")) {
-                on_secret_info_query (client, message);
-        } else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "Info")) {
-                on_info (client, message);
-        } else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "Problem")) {
-                on_problem (client, message);
-        } else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "ServiceUnavailable")) {
-                on_service_unavailable (client, message);
-        } else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "Ready")) {
-                on_ready (client, message);
-        } else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "ConversationStopped")) {
-                on_conversation_stopped (client, message);
-        } else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "Reset")) {
-                on_reset (client, message);
-        } else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "AuthenticationFailed")) {
-                on_authentication_failed (client, message);
-        } else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "SelectedUserChanged")) {
-                on_selected_user_changed (client, message);
-        } else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "DefaultSessionNameChanged")) {
-                on_default_session_changed (client, message);
-        } else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "TimedLoginRequested")) {
-                on_timed_login_requested (client, message);
-        } else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "SessionOpened")) {
-                on_session_opened (client, message);
-        } else {
-                return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-        }
-
-        return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static DBusHandlerResult
-client_dbus_filter_function (DBusConnection *connection,
-                             DBusMessage    *message,
-                             void           *user_data)
-{
-        GdmGreeterClient *client = GDM_GREETER_CLIENT (user_data);
-        const char       *path;
-
-        path = dbus_message_get_path (message);
-
-        g_debug ("GdmGreeterClient: obj_path=%s interface=%s method=%s",
-                 dbus_message_get_path (message),
-                 dbus_message_get_interface (message),
-                 dbus_message_get_member (message));
-
-        if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected")
-            && strcmp (path, DBUS_PATH_LOCAL) == 0) {
-
-                g_message ("Got disconnected from the session message bus");
-
-                dbus_connection_unref (connection);
-                client->priv->connection = NULL;
-
-        } else if (dbus_message_is_signal (message,
-                                           DBUS_INTERFACE_DBUS,
-                                           "NameOwnerChanged")) {
-                g_debug ("GdmGreeterClient: Name owner changed?");
-        } else {
-                return client_dbus_handle_message (connection, message, user_data, FALSE);
-        }
-
-        return DBUS_HANDLER_RESULT_HANDLED;
+        return g_object_ref (client->priv->remote_greeter);
 }
 
 /**
- * gdm_greeter_client_open_connection:
- *
+ * gdm_greeter_client_get_chooser_sync:
  * @client: a #GdmGreeterClient
+ * @cancellable: a #GCancellable
+ * @error: a #GError
  *
- * Initiates a connection to GDM daemon "slave" process.
+ * Gets a #GdmChooser object that can be used
+ * to do do various XDMCP chooser related tasks, such
+ * as selecting a host or disconnecting.
  *
- * This function should be called before doing other calls.
- *
- * Returns: %TRUE if connected, or %FALSE if unavailable
+ * Returns: (transfer full): #GdmChooser or %NULL if caller is not a chooser
  */
-gboolean
-gdm_greeter_client_open_connection (GdmGreeterClient  *client,
-                                    GError           **error)
+GdmChooser *
+gdm_greeter_client_get_chooser_sync (GdmGreeterClient  *client,
+                                     GCancellable      *cancellable,
+                                     GError           **error)
 {
-        DBusError local_error;
-
-        g_return_val_if_fail (GDM_IS_GREETER_CLIENT (client), FALSE);
-        g_return_val_if_fail (!client->priv->is_connected, TRUE);
-
-        if (client->priv->address == NULL) {
-                g_warning ("GDM_GREETER_DBUS_ADDRESS not set");
-                g_set_error (error,
-                             GDM_GREETER_CLIENT_ERROR,
-                             GDM_GREETER_CLIENT_ERROR_GENERIC,
-                             "GDM_GREETER_DBUS_ADDRESS not set");
-                goto out;
-        }
-
-        g_debug ("GdmGreeterClient: connecting to address: %s", client->priv->address);
 
-        dbus_error_init (&local_error);
-        client->priv->connection = dbus_connection_open (client->priv->address, &local_error);
-        if (client->priv->connection == NULL) {
-                if (dbus_error_is_set (&local_error)) {
-                        g_warning ("error opening connection: %s", local_error.message);
-                        g_set_error (error,
-                                     GDM_GREETER_CLIENT_ERROR,
-                                     GDM_GREETER_CLIENT_ERROR_GENERIC,
-                                     "%s", local_error.message);
-                        dbus_error_free (&local_error);
-                } else {
-                        g_warning ("Unable to open connection");
-                }
-                goto out;
+        if (client->priv->chooser != NULL) {
+                return g_object_ref (client->priv->chooser);
         }
 
-        dbus_connection_setup_with_g_main (client->priv->connection, NULL);
-        dbus_connection_set_exit_on_disconnect (client->priv->connection, TRUE);
-
-        dbus_connection_add_filter (client->priv->connection,
-                                    client_dbus_filter_function,
-                                    client,
-                                    NULL);
-
-        cache_display_values (client);
+        client->priv->chooser = gdm_chooser_proxy_new_sync (client->priv->connection,
+                                                            G_DBUS_PROXY_FLAGS_NONE,
+                                                            NULL,
+                                                            SESSION_DBUS_PATH,
+                                                            cancellable,
+                                                            error);
 
-
-        client->priv->is_connected = TRUE;
-
- out:
-        return client->priv->is_connected;
-}
-
-static void
-gdm_greeter_client_set_property (GObject      *object,
-                                 guint         prop_id,
-                                 const GValue *value,
-                                 GParamSpec   *pspec)
-{
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-}
-
-static void
-gdm_greeter_client_get_property (GObject    *object,
-                                 guint       prop_id,
-                                 GValue     *value,
-                                 GParamSpec *pspec)
-{
-        GdmGreeterClient *self;
-
-        self = GDM_GREETER_CLIENT (object);
-
-        switch (prop_id) {
-        case PROP_DISPLAY_IS_LOCAL:
-                g_value_set_boolean (value, self->priv->display_is_local);
-                break;
-        default:
-                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-                break;
-        }
+        return g_object_ref (client->priv->chooser);
 }
 
 static void
@@ -1045,161 +284,10 @@ gdm_greeter_client_class_init (GdmGreeterClientClass *klass)
 {
         GObjectClass   *object_class = G_OBJECT_CLASS (klass);
 
-        object_class->get_property = gdm_greeter_client_get_property;
-        object_class->set_property = gdm_greeter_client_set_property;
         object_class->finalize = gdm_greeter_client_finalize;
 
         g_type_class_add_private (klass, sizeof (GdmGreeterClientPrivate));
 
-        gdm_greeter_client_signals[INFO_QUERY] =
-                g_signal_new ("info-query",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_LAST,
-                              G_STRUCT_OFFSET (GdmGreeterClientClass, info_query),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_generic,
-                              G_TYPE_NONE,
-                              2,
-                              G_TYPE_STRING, G_TYPE_STRING);
-
-        gdm_greeter_client_signals[SECRET_INFO_QUERY] =
-                g_signal_new ("secret-info-query",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_LAST,
-                              G_STRUCT_OFFSET (GdmGreeterClientClass, secret_info_query),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_generic,
-                              G_TYPE_NONE,
-                              2,
-                              G_TYPE_STRING, G_TYPE_STRING);
-
-        gdm_greeter_client_signals[INFO] =
-                g_signal_new ("info",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_FIRST,
-                              G_STRUCT_OFFSET (GdmGreeterClientClass, info),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_generic,
-                              G_TYPE_NONE,
-                              2,
-                              G_TYPE_STRING, G_TYPE_STRING);
-
-        gdm_greeter_client_signals[PROBLEM] =
-                g_signal_new ("problem",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_FIRST,
-                              G_STRUCT_OFFSET (GdmGreeterClientClass, problem),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_generic,
-                              G_TYPE_NONE,
-                              2,
-                              G_TYPE_STRING, G_TYPE_STRING);
-
-        gdm_greeter_client_signals[SERVICE_UNAVAILABLE] =
-                g_signal_new ("service-unavailable",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_FIRST,
-                              G_STRUCT_OFFSET (GdmGreeterClientClass, service_unavailable),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_generic,
-                              G_TYPE_NONE, 1, G_TYPE_STRING);
-
-        gdm_greeter_client_signals[READY] =
-                g_signal_new ("ready",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_FIRST,
-                              G_STRUCT_OFFSET (GdmGreeterClientClass, ready),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_generic,
-                              G_TYPE_NONE,
-                              1, G_TYPE_STRING);
-
-        gdm_greeter_client_signals[CONVERSATION_STOPPED] =
-                g_signal_new ("conversation-stopped",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_FIRST,
-                              G_STRUCT_OFFSET (GdmGreeterClientClass, conversation_stopped),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_generic,
-                              G_TYPE_NONE,
-                              1, G_TYPE_STRING);
-
-        gdm_greeter_client_signals[RESET] =
-                g_signal_new ("reset",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_FIRST,
-                              G_STRUCT_OFFSET (GdmGreeterClientClass, reset),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_generic,
-                              G_TYPE_NONE,
-                              0);
-        gdm_greeter_client_signals[AUTHENTICATION_FAILED] =
-                g_signal_new ("authentication-failed",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_FIRST,
-                              G_STRUCT_OFFSET (GdmGreeterClientClass, authentication_failed),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_generic,
-                              G_TYPE_NONE,
-                              0);
-        gdm_greeter_client_signals[SELECTED_USER_CHANGED] =
-                g_signal_new ("selected-user-changed",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_FIRST,
-                              G_STRUCT_OFFSET (GdmGreeterClientClass, selected_user_changed),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_generic,
-                              G_TYPE_NONE,
-                              1, G_TYPE_STRING);
-        gdm_greeter_client_signals[DEFAULT_SESSION_CHANGED] =
-                g_signal_new ("default-session-changed",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_FIRST,
-                              G_STRUCT_OFFSET (GdmGreeterClientClass, default_session_changed),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_generic,
-                              G_TYPE_NONE,
-                              1, G_TYPE_STRING);
-        gdm_greeter_client_signals[TIMED_LOGIN_REQUESTED] =
-                g_signal_new ("timed-login-requested",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_FIRST,
-                              G_STRUCT_OFFSET (GdmGreeterClientClass, timed_login_requested),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_generic,
-                              G_TYPE_NONE,
-                              2, G_TYPE_STRING, G_TYPE_INT);
-
-        gdm_greeter_client_signals[SESSION_OPENED] =
-                g_signal_new ("session-opened",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_FIRST,
-                              G_STRUCT_OFFSET (GdmGreeterClientClass, session_opened),
-                              NULL,
-                              NULL,
-                              g_cclosure_marshal_generic,
-                              G_TYPE_NONE,
-                              1, G_TYPE_STRING);
-
-        g_object_class_install_property (object_class,
-                                         PROP_DISPLAY_IS_LOCAL,
-                                         g_param_spec_boolean ("display-is-local",
-                                                               "display is local",
-                                                               "display is local",
-                                                               FALSE,
-                                                               G_PARAM_READABLE));
 }
 
 static void
@@ -1207,8 +295,6 @@ gdm_greeter_client_init (GdmGreeterClient *client)
 {
 
         client->priv = GDM_GREETER_CLIENT_GET_PRIVATE (client);
-
-        client->priv->address = g_strdup (g_getenv ("GDM_GREETER_DBUS_ADDRESS"));
 }
 
 static void
@@ -1223,6 +309,7 @@ gdm_greeter_client_finalize (GObject *object)
 
         g_return_if_fail (client->priv != NULL);
 
+        gdm_greeter_client_close_connection_sync (client, NULL, NULL);
         g_free (client->priv->address);
 
         G_OBJECT_CLASS (gdm_greeter_client_parent_class)->finalize (object);
diff --git a/gui/libgdmgreeter/gdm-greeter-client.h b/gui/libgdmgreeter/gdm-greeter-client.h
index 7fa3aaa..20f0b2e 100644
--- a/gui/libgdmgreeter/gdm-greeter-client.h
+++ b/gui/libgdmgreeter/gdm-greeter-client.h
@@ -1,6 +1,7 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
  *
- * Copyright (C) 2007 William Jon McCann <mccann jhu edu>
+ * Copyright (C) 2012 Red Hat, Inc.
+ * Copyright (C) 2012 Giovanni Campagna <scampa giovanni gmail com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -22,6 +23,7 @@
 #define __GDM_GREETER_CLIENT_H
 
 #include <glib-object.h>
+#include "gdm-client-glue.h"
 
 G_BEGIN_DECLS
 
@@ -44,38 +46,6 @@ typedef struct
 {
         GObjectClass   parent_class;
 
-        void (* info_query)              (GdmGreeterClient  *client,
-                                          const char        *service_name,
-                                          const char        *query_text);
-
-        void (* secret_info_query)       (GdmGreeterClient  *client,
-                                          const char        *service_name,
-                                          const char        *query_text);
-
-        void (* info)                    (GdmGreeterClient  *client,
-                                          const char        *service_name,
-                                          const char        *info);
-
-        void (* problem)                 (GdmGreeterClient  *client,
-                                          const char        *service_name,
-                                          const char        *problem);
-        void (* service_unavailable)     (GdmGreeterClient  *client,
-                                          const char        *service_name);
-        void (* ready)                   (GdmGreeterClient  *client,
-                                          const char        *service_name);
-        void (* conversation_stopped)    (GdmGreeterClient  *client,
-                                          const char        *service_name);
-        void (* reset)                   (GdmGreeterClient  *client);
-        void (* authentication_failed)   (GdmGreeterClient  *client);
-        void (* selected_user_changed)   (GdmGreeterClient  *client,
-                                          const char        *username);
-        void (* default_session_changed) (GdmGreeterClient  *client,
-                                          const char        *session_id);
-        void (* timed_login_requested)   (GdmGreeterClient  *client,
-                                          const char        *username,
-                                          int                delay);
-        void (* session_opened)          (GdmGreeterClient  *client,
-                                          const char        *service_name);
 } GdmGreeterClientClass;
 
 #define GDM_GREETER_CLIENT_ERROR (gdm_greeter_client_error_quark ())
@@ -84,42 +54,29 @@ typedef enum _GdmGreeterClientError {
         GDM_GREETER_CLIENT_ERROR_GENERIC = 0,
 } GdmGreeterClientError;
 
-GType              gdm_greeter_client_get_type                       (void);
-GQuark             gdm_greeter_client_error_quark                    (void);
-
-GdmGreeterClient * gdm_greeter_client_new                            (void);
-
-gboolean           gdm_greeter_client_open_connection                (GdmGreeterClient *client,
-                                                                      GError          **error);
-gboolean           gdm_greeter_client_get_display_is_local           (GdmGreeterClient *client);
-
-void               gdm_greeter_client_call_start_conversation        (GdmGreeterClient *client,
-                                                                      const char       *service_name);
-void               gdm_greeter_client_call_begin_auto_login          (GdmGreeterClient *client,
-                                                                      const char       *username);
-void               gdm_greeter_client_call_begin_verification        (GdmGreeterClient *client,
-                                                                      const char       *service_name);
-void               gdm_greeter_client_call_begin_verification_for_user (GdmGreeterClient *client,
-                                                                        const char       *service_name,
-                                                                        const char       *username);
-void               gdm_greeter_client_call_cancel                    (GdmGreeterClient *client);
-void               gdm_greeter_client_call_disconnect                (GdmGreeterClient *client);
-void               gdm_greeter_client_call_select_hostname           (GdmGreeterClient *client,
-                                                                      const char       *text);
-void               gdm_greeter_client_call_select_user               (GdmGreeterClient *client,
-                                                                      const char       *text);
-void               gdm_greeter_client_call_select_language           (GdmGreeterClient *client,
-                                                                      const char       *text);
-void               gdm_greeter_client_call_select_session            (GdmGreeterClient *client,
-                                                                      const char       *text);
-void               gdm_greeter_client_call_answer_query              (GdmGreeterClient *client,
-                                                                      const char       *service_name,
-                                                                      const char       *text);
-
-void               gdm_greeter_client_call_start_session_when_ready  (GdmGreeterClient *client,
-                                                                      const char       *service_name,
-                                                                      gboolean          should_start_session);
-
+GType              gdm_greeter_client_get_type                 (void);
+GQuark             gdm_greeter_client_error_quark              (void);
+
+GdmGreeterClient  * gdm_greeter_client_new                     (void);
+
+gboolean           gdm_greeter_client_open_connection_sync     (GdmGreeterClient *client,
+                                                                GCancellable     *cancellable,
+                                                                GError          **error);
+gboolean           gdm_greeter_client_close_connection_sync    (GdmGreeterClient *client,
+                                                                GCancellable     *cancellable,
+                                                                GError          **error);
+GdmUserVerifier   *gdm_greeter_client_get_user_verifier_sync   (GdmGreeterClient *client,
+                                                                GCancellable     *cancellable,
+                                                                GError          **error);
+GdmGreeter        *gdm_greeter_client_get_greeter_sync         (GdmGreeterClient *client,
+                                                                GCancellable     *cancellable,
+                                                                GError          **error);
+GdmRemoteGreeter  *gdm_greeter_client_get_remote_greeter_sync  (GdmGreeterClient *client,
+                                                                GCancellable     *cancellable,
+                                                                GError          **error);
+GdmChooser        *gdm_greeter_client_get_chooser_sync         (GdmGreeterClient *client,
+                                                                GCancellable     *cancellable,
+                                                                GError          **error);
 
 G_END_DECLS
 
diff --git a/gui/libgdmgreeter/gdmgreeter.pc.in b/gui/libgdmgreeter/gdmgreeter.pc.in
index b1c6802..9570d8c 100644
--- a/gui/libgdmgreeter/gdmgreeter.pc.in
+++ b/gui/libgdmgreeter/gdmgreeter.pc.in
@@ -3,8 +3,8 @@ exec_prefix= exec_prefix@
 libdir= libdir@
 includedir= includedir@
 
-Name: GDM Greeter Library
-Description: Client Library for communicating with GDM greeter server
+Name: GDM Client Library
+Description: Client Library for communicating with GDM daemon
 Version: @VERSION@
-Libs: -L${libdir} -lgdmgreeter
-Cflags: -I${includedir}/gdm/greeter
+Libs: -L${libdir} -lgdm
+Cflags: -I${includedir}/gdm



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