]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blobdiff - src/display-server.c
Load all users only when really needed
[sojka/lightdm.git] / src / display-server.c
index fc7eec92a61c0549d83c58bd5da58d1a8907f742..cc319c8d87000da6c0bda2dc1e32bbc85eaf1685 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 2010-2011 Robert Ancell.
  * Author: Robert Ancell <robert.ancell@canonical.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 the Free Software
  * Foundation, either version 3 of the License, or (at your option) any later
@@ -22,8 +22,8 @@ static guint signals[LAST_SIGNAL] = { 0 };
 
 struct DisplayServerPrivate
 {
-    /* Unique name for this display server */
-    gchar *name;
+    /* TRUE when started */
+    gboolean is_ready;
 
     /* TRUE when being stopped */
     gboolean stopping;
@@ -32,26 +32,47 @@ struct DisplayServerPrivate
     gboolean stopped;
 };
 
-G_DEFINE_TYPE (DisplayServer, display_server, G_TYPE_OBJECT);
+static void display_server_logger_iface_init (LoggerInterface *iface);
 
-void
-display_server_set_name (DisplayServer *server, const gchar *name)
+G_DEFINE_TYPE_WITH_CODE (DisplayServer, display_server, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (LOGGER_TYPE, display_server_logger_iface_init));
+
+const gchar *
+display_server_get_session_type (DisplayServer *server)
 {
-    g_return_if_fail (server != NULL);
-    g_free (server->priv->name);
-    server->priv->name = g_strdup (name);
+    return DISPLAY_SERVER_GET_CLASS (server)->get_session_type (server);
 }
 
-const gchar *
-display_server_get_name (DisplayServer *server)
+DisplayServer *
+display_server_get_parent (DisplayServer *server)
 {
     g_return_val_if_fail (server != NULL, NULL);
-    return server->priv->name;
+    return DISPLAY_SERVER_GET_CLASS (server)->get_parent (server);
+}
+
+static DisplayServer *
+display_server_real_get_parent (DisplayServer *server)
+{
+    return NULL;
+}
+
+gboolean
+display_server_get_can_share (DisplayServer *server)
+{
+    g_return_val_if_fail (server != NULL, FALSE);
+    return DISPLAY_SERVER_GET_CLASS (server)->get_can_share (server);
+}
+
+static gboolean
+display_server_real_get_can_share (DisplayServer *server)
+{
+    return FALSE;
 }
 
 gint
 display_server_get_vt (DisplayServer *server)
 {
+    g_return_val_if_fail (server != NULL, -1);
     return DISPLAY_SERVER_GET_CLASS (server)->get_vt (server);
 }
 
@@ -68,9 +89,17 @@ display_server_start (DisplayServer *server)
     return DISPLAY_SERVER_GET_CLASS (server)->start (server);
 }
 
+gboolean
+display_server_get_is_ready (DisplayServer *server)
+{
+    g_return_val_if_fail (server != NULL, FALSE);
+    return server->priv->is_ready;
+}
+
 static gboolean
 display_server_real_start (DisplayServer *server)
 {
+    server->priv->is_ready = TRUE;
     g_signal_emit (server, signals[READY], 0);
     return TRUE;
 }
@@ -131,6 +160,8 @@ display_server_init (DisplayServer *server)
 static void
 display_server_class_init (DisplayServerClass *klass)
 {
+    klass->get_parent = display_server_real_get_parent;  
+    klass->get_can_share = display_server_real_get_can_share;
     klass->get_vt = display_server_real_get_vt;
     klass->start = display_server_real_start;
     klass->connect_session = display_server_real_connect_session;
@@ -140,7 +171,7 @@ display_server_class_init (DisplayServerClass *klass)
     g_type_class_add_private (klass, sizeof (DisplayServerPrivate));
 
     signals[READY] =
-        g_signal_new ("ready",
+        g_signal_new (DISPLAY_SERVER_SIGNAL_READY,
                       G_TYPE_FROM_CLASS (klass),
                       G_SIGNAL_RUN_LAST,
                       G_STRUCT_OFFSET (DisplayServerClass, ready),
@@ -148,7 +179,7 @@ display_server_class_init (DisplayServerClass *klass)
                       NULL,
                       G_TYPE_NONE, 0);
     signals[STOPPED] =
-        g_signal_new ("stopped",
+        g_signal_new (DISPLAY_SERVER_SIGNAL_STOPPED,
                       G_TYPE_FROM_CLASS (klass),
                       G_SIGNAL_RUN_LAST,
                       G_STRUCT_OFFSET (DisplayServerClass, stopped),
@@ -156,3 +187,15 @@ display_server_class_init (DisplayServerClass *klass)
                       NULL,
                       G_TYPE_NONE, 0);
 }
+
+static gint
+display_server_real_logprefix (Logger *self, gchar *buf, gulong buflen)
+{
+    return g_snprintf (buf, buflen, "DisplayServer: ");
+}
+
+static void
+display_server_logger_iface_init (LoggerInterface *iface)
+{
+    iface->logprefix = &display_server_real_logprefix;
+}