/* 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
{
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 (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)
{
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");
}
/* 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;
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
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;
+}