summaryrefslogtreecommitdiff
path: root/daemon/gdm-xdmcp-chooser-display.c
diff options
context:
space:
mode:
authorGiovanni Campagna <gcampagna@src.gnome.org>2012-05-03 18:29:00 +0200
committerRay Strode <rstrode@redhat.com>2012-07-17 03:38:10 -0400
commitdddeab1c9223cc5d8427217846faa2b40e45c116 (patch)
tree552269cc906a717cc98124296653cd6a26902471 /daemon/gdm-xdmcp-chooser-display.c
parent0478d42218f7ba14db4d6952d4f92701d673ba9c (diff)
downloadgdm-dddeab1c9223cc5d8427217846faa2b40e45c116.tar.gz
daemon: Port display handling to GDBus
This is one big commit because it uses generated code both in the daemon and in the slaves, so we need to port both at the same time. https://bugzilla.gnome.org/show_bug.cgi?id=622888
Diffstat (limited to 'daemon/gdm-xdmcp-chooser-display.c')
-rw-r--r--daemon/gdm-xdmcp-chooser-display.c106
1 files changed, 51 insertions, 55 deletions
diff --git a/daemon/gdm-xdmcp-chooser-display.c b/daemon/gdm-xdmcp-chooser-display.c
index ba6c48bc..efdcdf18 100644
--- a/daemon/gdm-xdmcp-chooser-display.c
+++ b/daemon/gdm-xdmcp-chooser-display.c
@@ -37,21 +37,23 @@
#include "gdm-display.h"
#include "gdm-xdmcp-chooser-display.h"
-#include "gdm-xdmcp-chooser-display-glue.h"
+#include "gdm-xdmcp-display-glue.h"
+#include "gdm-xdmcp-chooser-slave-glue.h"
#include "gdm-common.h"
#include "gdm-address.h"
#define DEFAULT_SLAVE_COMMAND LIBEXECDIR"/gdm-xdmcp-chooser-slave"
-#define GDM_DBUS_NAME "/org/gnome/DisplayManager"
-#define GDM_XDMCP_CHOOSER_SLAVE_DBUS_INTERFACE "org.gnome.DisplayManager.XdmcpChooserSlave"
+
+#define GDM_SLAVE_PATH "/org/gnome/DisplayManager/Slave"
#define GDM_XDMCP_CHOOSER_DISPLAY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_XDMCP_CHOOSER_DISPLAY, GdmXdmcpChooserDisplayPrivate))
struct GdmXdmcpChooserDisplayPrivate
{
- DBusGProxy *slave_proxy;
+ GdmDBusXdmcpDisplay *skeleton;
+ GdmDBusXdmcpChooserSlave *slave_proxy;
};
enum {
@@ -69,9 +71,9 @@ static gboolean gdm_xdmcp_chooser_display_finish (GdmDisplay *display);
G_DEFINE_TYPE (GdmXdmcpChooserDisplay, gdm_xdmcp_chooser_display, GDM_TYPE_XDMCP_DISPLAY)
static void
-on_hostname_selected (DBusGProxy *proxy,
- const char *hostname,
- GdmXdmcpChooserDisplay *display)
+on_hostname_selected (GdmDBusXdmcpChooserSlave *proxy,
+ const char *hostname,
+ GdmXdmcpChooserDisplay *display)
{
g_debug ("GdmXdmcpChooserDisplay: hostname selected: %s", hostname);
g_signal_emit (display, signals [HOSTNAME_SELECTED], 0, hostname);
@@ -82,63 +84,40 @@ gdm_xdmcp_chooser_display_set_slave_bus_name (GdmDisplay *display,
const char *name,
GError **error)
{
- char *display_id;
- const char *slave_num;
- char *slave_id;
- DBusGConnection *connection;
+ GDBusConnection *connection;
GError *local_error;
GdmXdmcpChooserDisplay *chooser_display;
- display_id = NULL;
- slave_id = NULL;
- slave_num = NULL;
-
chooser_display = GDM_XDMCP_CHOOSER_DISPLAY (display);
- if (chooser_display->priv->slave_proxy != NULL) {
- g_object_unref (chooser_display->priv->slave_proxy);
- }
-
- g_object_get (display, "id", &display_id, NULL);
-
- if (g_str_has_prefix (display_id, "/org/gnome/DisplayManager/Display")) {
- slave_num = display_id + strlen ("/org/gnome/DisplayManager/Display");
- }
-
- slave_id = g_strdup_printf ("/org/gnome/DisplayManager/Slave%s", slave_num);
+ g_clear_object (&chooser_display->priv->slave_proxy);
local_error = NULL;
- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &local_error);
+ connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &local_error);
if (connection == NULL) {
- if (local_error != NULL) {
- g_critical ("error getting system bus: %s", local_error->message);
- g_error_free (local_error);
- }
+ g_critical ("error getting system bus: %s", local_error->message);
+ g_error_free (local_error);
}
- g_debug ("GdmXdmcpChooserDisplay: creating proxy for %s on %s", slave_id, name);
+ g_debug ("GdmXdmcpChooserDisplay: creating proxy for slave on %s" , name);
- chooser_display->priv->slave_proxy = dbus_g_proxy_new_for_name (connection,
- name,
- slave_id,
- GDM_XDMCP_CHOOSER_SLAVE_DBUS_INTERFACE);
+ chooser_display->priv->slave_proxy = GDM_DBUS_XDMCP_CHOOSER_SLAVE (
+ gdm_dbus_xdmcp_chooser_slave_proxy_new_sync (connection,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
+ name,
+ GDM_SLAVE_PATH,
+ NULL,
+ &local_error));
if (chooser_display->priv->slave_proxy == NULL) {
- g_warning ("Failed to connect to the slave object");
+ g_warning ("Failed to connect to the slave object: %s", local_error->message);
+ g_error_free (local_error);
goto out;
}
- dbus_g_proxy_add_signal (chooser_display->priv->slave_proxy,
- "HostnameSelected",
- G_TYPE_STRING,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (chooser_display->priv->slave_proxy,
- "HostnameSelected",
- G_CALLBACK (on_hostname_selected),
- display,
- NULL);
- out:
-
- g_free (display_id);
- g_free (slave_id);
+ g_signal_connect (chooser_display->priv->slave_proxy,
+ "hostname-selected",
+ G_CALLBACK (on_hostname_selected),
+ display);
+ out:
return GDM_DISPLAY_CLASS (gdm_xdmcp_chooser_display_parent_class)->set_slave_bus_name (display, name, error);
}
@@ -152,12 +131,32 @@ gdm_xdmcp_chooser_display_manage (GdmDisplay *display)
return TRUE;
}
+static GObject *
+gdm_xdmcp_chooser_display_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_properties)
+{
+ GdmXdmcpChooserDisplay *display;
+
+ display = GDM_XDMCP_CHOOSER_DISPLAY (G_OBJECT_CLASS (gdm_xdmcp_chooser_display_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_properties));
+
+ display->priv->skeleton = GDM_DBUS_XDMCP_DISPLAY (gdm_dbus_xdmcp_display_skeleton_new ());
+
+ g_dbus_object_skeleton_add_interface (gdm_display_get_object_skeleton (GDM_DISPLAY (display)),
+ G_DBUS_INTERFACE_SKELETON (display->priv->skeleton));
+
+ return G_OBJECT (display);
+}
+
static void
gdm_xdmcp_chooser_display_class_init (GdmXdmcpChooserDisplayClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GdmDisplayClass *display_class = GDM_DISPLAY_CLASS (klass);
+ object_class->constructor = gdm_xdmcp_chooser_display_constructor;
object_class->finalize = gdm_xdmcp_chooser_display_finalize;
display_class->manage = gdm_xdmcp_chooser_display_manage;
@@ -177,8 +176,6 @@ gdm_xdmcp_chooser_display_class_init (GdmXdmcpChooserDisplayClass *klass)
G_TYPE_STRING);
g_type_class_add_private (klass, sizeof (GdmXdmcpChooserDisplayPrivate));
-
- dbus_g_object_type_install_info (GDM_TYPE_XDMCP_CHOOSER_DISPLAY, &dbus_glib_gdm_xdmcp_chooser_display_object_info);
}
static void
@@ -200,9 +197,8 @@ gdm_xdmcp_chooser_display_finalize (GObject *object)
g_return_if_fail (chooser_display->priv != NULL);
- if (chooser_display->priv->slave_proxy != NULL) {
- g_object_unref (chooser_display->priv->slave_proxy);
- }
+ g_clear_object (&chooser_display->priv->slave_proxy);
+ g_clear_object (&chooser_display->priv->skeleton);
G_OBJECT_CLASS (gdm_xdmcp_chooser_display_parent_class)->finalize (object);
}