summaryrefslogtreecommitdiff
path: root/daemon/gdm-display.c
diff options
context:
space:
mode:
authorWilliam Jon McCann <mccann@src.gnome.org>2007-06-15 21:11:40 +0000
committerWilliam Jon McCann <mccann@src.gnome.org>2007-06-15 21:11:40 +0000
commitdf894c228170ab2e2d8a9d0a56a986add1a11e27 (patch)
treed819bdb47231cb0ada17d80afe5b82d9c1a61fd3 /daemon/gdm-display.c
parented6447ee52895e4dbe8c1895a6fa1b3d3ac3f9c7 (diff)
downloadgdm-df894c228170ab2e2d8a9d0a56a986add1a11e27.tar.gz
Split the greeter proxy into a client and server part. Create new display subclasses for factory and product. Also create new slave subclasses and executables for the same.
svn path=/branches/mccann-gobject/; revision=4993
Diffstat (limited to 'daemon/gdm-display.c')
-rw-r--r--daemon/gdm-display.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
index 390e0de6..cb5b4f65 100644
--- a/daemon/gdm-display.c
+++ b/daemon/gdm-display.c
@@ -44,6 +44,8 @@ static guint32 display_serial = 1;
#define GDM_DISPLAY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_DISPLAY, GdmDisplayPrivate))
+#define DEFAULT_SLAVE_COMMAND LIBEXECDIR"/gdm-simple-slave"
+
struct GdmDisplayPrivate
{
char *id;
@@ -54,6 +56,7 @@ struct GdmDisplayPrivate
time_t creation_time;
char *x11_cookie;
char *x11_authority_file;
+ char *slave_command;
gboolean is_local;
@@ -70,6 +73,7 @@ enum {
PROP_X11_COOKIE,
PROP_X11_AUTHORITY_FILE,
PROP_IS_LOCAL,
+ PROP_SLAVE_COMMAND,
};
static void gdm_display_class_init (GdmDisplayClass *klass);
@@ -200,6 +204,8 @@ gdm_display_get_number (GdmDisplay *display,
static gboolean
gdm_display_real_manage (GdmDisplay *display)
{
+ char *command;
+
g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
g_debug ("GdmDisplay manage display");
@@ -208,7 +214,15 @@ gdm_display_real_manage (GdmDisplay *display)
g_assert (display->priv->slave_proxy == NULL);
- display->priv->slave_proxy = gdm_slave_proxy_new (display->priv->id);
+ display->priv->slave_proxy = gdm_slave_proxy_new ();
+
+ command = g_strdup_printf ("%s --display-id %s",
+ display->priv->slave_command,
+ display->priv->id);
+
+ gdm_slave_proxy_set_command (display->priv->slave_proxy, command);
+ g_free (command);
+
gdm_slave_proxy_start (display->priv->slave_proxy);
return TRUE;
@@ -362,6 +376,14 @@ _gdm_display_set_is_local (GdmDisplay *display,
}
static void
+_gdm_display_set_slave_command (GdmDisplay *display,
+ const char *command)
+{
+ g_free (display->priv->slave_command);
+ display->priv->slave_command = g_strdup (command);
+}
+
+static void
gdm_display_set_property (GObject *object,
guint prop_id,
const GValue *value,
@@ -393,6 +415,9 @@ gdm_display_set_property (GObject *object,
case PROP_IS_LOCAL:
_gdm_display_set_is_local (self, g_value_get_boolean (value));
break;
+ case PROP_SLAVE_COMMAND:
+ _gdm_display_set_slave_command (self, g_value_get_string (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -431,6 +456,9 @@ gdm_display_get_property (GObject *object,
case PROP_IS_LOCAL:
g_value_set_boolean (value, self->priv->is_local);
break;
+ case PROP_SLAVE_COMMAND:
+ g_value_set_string (value, self->priv->slave_command);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -567,6 +595,14 @@ gdm_display_class_init (GdmDisplayClass *klass)
TRUE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_SLAVE_COMMAND,
+ g_param_spec_string ("slave-command",
+ "slave command",
+ "slave command",
+ DEFAULT_SLAVE_COMMAND,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
g_type_class_add_private (klass, sizeof (GdmDisplayPrivate));
dbus_g_object_type_install_info (GDM_TYPE_DISPLAY, &dbus_glib_gdm_display_object_info);