]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blobdiff - src/unity-system-compositor.c
Don't show guest session dialog in MATE
[sojka/lightdm.git] / src / unity-system-compositor.c
index 0b89d2c23f4e2324137196caf2af051f43fc9779..83eacbac055ef746e6f4e45c17559a310a7c95ed 100644 (file)
@@ -21,7 +21,7 @@
 #include "unity-system-compositor.h"
 #include "configuration.h"
 #include "process.h"
-#include "greeter.h"
+#include "greeter-session.h"
 #include "vt.h"
 
 struct UnitySystemCompositorPrivate
@@ -39,9 +39,6 @@ struct UnitySystemCompositorPrivate
     gint vt;
     gboolean have_vt_ref;
 
-    /* TRUE if should show hardware cursor */
-    gboolean enable_hardware_cursor;
-
     /* Pipes to communicate with compositor */
     int to_compositor_pipe[2];
     int from_compositor_pipe[2];
@@ -61,9 +58,16 @@ struct UnitySystemCompositorPrivate
 
     /* TRUE when received ready signal */
     gboolean is_ready;
+
+    /* Counters for Mir IDs to use */
+    int next_session_id;
+    int next_greeter_id;  
 };
 
-G_DEFINE_TYPE (UnitySystemCompositor, unity_system_compositor, DISPLAY_SERVER_TYPE);
+static void unity_system_compositor_logger_iface_init (LoggerInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (UnitySystemCompositor, unity_system_compositor, DISPLAY_SERVER_TYPE,
+                         G_IMPLEMENT_INTERFACE (LOGGER_TYPE, unity_system_compositor_logger_iface_init));               
 
 typedef enum
 {
@@ -122,13 +126,6 @@ unity_system_compositor_set_vt (UnitySystemCompositor *compositor, gint vt)
     }
 }
 
-void
-unity_system_compositor_set_enable_hardware_cursor (UnitySystemCompositor *compositor, gboolean enable_cursor)
-{
-    g_return_if_fail (compositor != NULL);
-    compositor->priv->enable_hardware_cursor = enable_cursor;
-}
-
 void
 unity_system_compositor_set_timeout (UnitySystemCompositor *compositor, gint timeout)
 {
@@ -182,17 +179,28 @@ static void
 unity_system_compositor_connect_session (DisplayServer *display_server, Session *session)
 {
     UnitySystemCompositor *compositor = UNITY_SYSTEM_COMPOSITOR (display_server);
-    const gchar *name;
 
     session_set_env (session, "XDG_SESSION_TYPE", "mir");
 
     if (compositor->priv->socket)
-        session_set_env (session, "MIR_SOCKET", compositor->priv->socket);
-    if (IS_GREETER (session))
-        name = "greeter-0";
-    else
-        name = "session-0";
-    session_set_env (session, "MIR_SERVER_NAME", name);
+        session_set_env (session, "MIR_SERVER_HOST_SOCKET", compositor->priv->socket);
+
+    if (!session_get_env (session, "MIR_SERVER_NAME"))
+    {
+        gchar *name;
+        if (IS_GREETER_SESSION (session))
+        {
+            name = g_strdup_printf ("greeter-%d", compositor->priv->next_greeter_id);
+            compositor->priv->next_greeter_id++;
+        }
+        else
+        {
+            name = g_strdup_printf ("session-%d", compositor->priv->next_session_id);
+            compositor->priv->next_session_id++;
+        }
+        session_set_env (session, "MIR_SERVER_NAME", name);
+        g_free (name);
+    }
 
     if (compositor->priv->vt >= 0)
     {
@@ -206,7 +214,7 @@ static void
 unity_system_compositor_disconnect_session (DisplayServer *display_server, Session *session)
 {
     session_unset_env (session, "XDG_SESSION_TYPE");
-    session_unset_env (session, "MIR_SOCKET");
+    session_unset_env (session, "MIR_SERVER_HOST_SOCKET");
     session_unset_env (session, "MIR_SERVER_NAME");
     session_unset_env (session, "XDG_VTNR");
 }
@@ -374,7 +382,7 @@ static gboolean
 unity_system_compositor_start (DisplayServer *server)
 {
     UnitySystemCompositor *compositor = UNITY_SYSTEM_COMPOSITOR (server);
-    gboolean result;
+    gboolean result, backup_logs;
     GString *command;
     gchar *dir, *log_file, *absolute_command, *value;
 
@@ -407,7 +415,8 @@ unity_system_compositor_start (DisplayServer *server)
 
     /* Setup environment */
     compositor->priv->process = process_new (run_cb, compositor);
-    process_set_log_file (compositor->priv->process, log_file, TRUE);
+    backup_logs = config_get_boolean (config_get_instance (), "LightDM", "backup-logs");
+    process_set_log_file (compositor->priv->process, log_file, TRUE, backup_logs ? LOG_MODE_BACKUP_AND_TRUNCATE : LOG_MODE_APPEND);
     g_free (log_file);
     process_set_clear_environment (compositor->priv->process, TRUE);
     process_set_env (compositor->priv->process, "XDG_SEAT", "seat0");
@@ -435,8 +444,6 @@ unity_system_compositor_start (DisplayServer *server)
     g_string_append_printf (command, " --from-dm-fd %d --to-dm-fd %d", compositor->priv->to_compositor_pipe[0], compositor->priv->from_compositor_pipe[1]);
     if (compositor->priv->vt > 0)
         g_string_append_printf (command, " --vt %d", compositor->priv->vt);
-    if (compositor->priv->enable_hardware_cursor)
-        g_string_append (command, " --enable-hardware-cursor=true");
     process_set_command (compositor->priv->process, command->str);
     g_string_free (command, TRUE);
 
@@ -446,9 +453,9 @@ unity_system_compositor_start (DisplayServer *server)
 
     /* Close compostor ends of the pipes */
     close (compositor->priv->to_compositor_pipe[0]);
-    compositor->priv->to_compositor_pipe[0] = 0;
+    compositor->priv->to_compositor_pipe[0] = -1;
     close (compositor->priv->from_compositor_pipe[1]);
-    compositor->priv->from_compositor_pipe[1] = 0;
+    compositor->priv->from_compositor_pipe[1] = -1;
 
     if (!result)
         return FALSE;
@@ -477,6 +484,10 @@ unity_system_compositor_init (UnitySystemCompositor *compositor)
     compositor->priv->command = g_strdup ("unity-system-compositor");
     compositor->priv->socket = g_strdup ("/run/mir_socket");
     compositor->priv->timeout = -1;
+    compositor->priv->to_compositor_pipe[0] = -1;
+    compositor->priv->to_compositor_pipe[1] = -1;
+    compositor->priv->from_compositor_pipe[0] = -1;
+    compositor->priv->from_compositor_pipe[1] = -1;
 }
 
 static void
@@ -522,3 +533,15 @@ unity_system_compositor_class_init (UnitySystemCompositorClass *klass)
 
     g_type_class_add_private (klass, sizeof (UnitySystemCompositorPrivate));
 }
+
+static gint
+unity_system_compositor_real_logprefix (Logger *self, gchar *buf, gulong buflen)
+{
+    return g_snprintf (buf, buflen, "Unity System Compositor: ");
+}
+
+static void
+unity_system_compositor_logger_iface_init (LoggerInterface *iface)
+{
+    iface->logprefix = &unity_system_compositor_real_logprefix;
+}