diff options
Diffstat (limited to 'daemon/gdm-xdmcp-chooser-display.c')
-rw-r--r-- | daemon/gdm-xdmcp-chooser-display.c | 106 |
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); } |