]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Set $XDG_CURRENT_DESKTOP if specified in the xsession file
authorRobert Ancell <robert.ancell@canonical.com>
Mon, 19 Aug 2013 00:21:19 +0000 (12:21 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Mon, 19 Aug 2013 00:21:19 +0000 (12:21 +1200)
src/seat.c
src/session-config.c
src/session-config.h
tests/Makefile.am
tests/data/sessions/named.desktop [new file with mode: 0644]
tests/scripts/xdg-current-desktop.conf [new file with mode: 0644]
tests/src/test-session.c
tests/test-xdg-current-desktop [new file with mode: 0755]

index 11d95fc0e7f841772a4194a39b98fd83eb301261..b434e67cf6db7956661863d0132010b073bef48f 100644 (file)
@@ -774,12 +774,16 @@ create_user_session (Seat *seat, const gchar *username)
     g_free (sessions_dir);
     if (session_config)
     {
+        const gchar *desktop_name;
         gchar **argv;
 
         session = create_session (seat, TRUE);
         session_set_session_type (session, session_config_get_session_type (session_config));
         session_set_env (session, "DESKTOP_SESSION", session_name);
         session_set_env (session, "GDMSESSION", session_name);
+        desktop_name = session_config_get_desktop_name (session_config);
+        if (desktop_name)
+            session_set_env (session, "XDG_CURRENT_DESKTOP", desktop_name);
         if (language && language[0] != '\0')
         {
             session_set_env (session, "LANG", language);
index 5ad780fc8f1e20e3573cc396dfb40868c1a66415..d843605583f10bab2ab162ad362b739e3e371efb 100644 (file)
@@ -16,6 +16,9 @@ struct SessionConfigPrivate
     /* Session type */
     gchar *session_type;
 
+    /* Desktop name */
+    gchar *desktop_name;
+
     /* Command to run */
     gchar *command;
 };
@@ -47,6 +50,7 @@ session_config_new_from_file (const gchar *filename, GError **error)
     config->priv->session_type = g_key_file_get_string (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "X-LightDM-Session-Type", NULL);
     if (!config->priv->session_type)
         config->priv->session_type = g_strdup ("x");
+    config->priv->desktop_name = g_key_file_get_string (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "X-LightDM-DesktopName", NULL);
 
     g_key_file_free (desktop_file);
 
@@ -67,6 +71,13 @@ session_config_get_session_type (SessionConfig *config)
     return config->priv->session_type;
 }
 
+const gchar *
+session_config_get_desktop_name (SessionConfig *config)
+{
+    g_return_val_if_fail (config != NULL, NULL);
+    return config->priv->desktop_name;
+}
+
 static void
 session_config_init (SessionConfig *config)
 {
@@ -79,6 +90,7 @@ session_config_finalize (GObject *object)
     SessionConfig *self = SESSION_CONFIG (object);
 
     g_free (self->priv->session_type);
+    g_free (self->priv->desktop_name);
     g_free (self->priv->command);
 
     G_OBJECT_CLASS (session_config_parent_class)->finalize (object);
index c9387306868274f0e0806badda9449b162907db3..2fd0efec7081aa4b831392f0320ccf2ef81e4941 100644 (file)
@@ -42,6 +42,8 @@ const gchar *session_config_get_command (SessionConfig *config);
 
 const gchar *session_config_get_session_type (SessionConfig *config);
 
+const gchar *session_config_get_desktop_name (SessionConfig *config);
+
 G_END_DECLS
 
 #endif /* SESSION_CONFIG_H_ */
index 54f633ad2709a4f7d2355bdac2d667190c9a52ab..109b2ed8e26d480a88264ebe0484c2f063e7218f 100644 (file)
@@ -45,6 +45,7 @@ TESTS = \
        test-autologin-guest-logout \
        test-group-membership \
        test-session-env \
+       test-xdg-current-desktop \
        test-language-env \
        test-util-path \
        test-session-stdout \
@@ -421,6 +422,7 @@ EXTRA_DIST = \
        scripts/vnc-login.conf \
        scripts/vnc-open-file-descriptors.conf \
        scripts/xauthority.conf \
+       scripts/xdg-current-desktop.conf \
        scripts/xdmcp-client.conf \
        scripts/xdmcp-server-login.conf \
        scripts/xdmcp-server-open-file-descriptors.conf \
diff --git a/tests/data/sessions/named.desktop b/tests/data/sessions/named.desktop
new file mode 100644 (file)
index 0000000..3c0870d
--- /dev/null
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Name=Test Session
+Comment=LightDM test session
+Exec=test-session
+X-LightDM-DesktopName=TestDesktop
diff --git a/tests/scripts/xdg-current-desktop.conf b/tests/scripts/xdg-current-desktop.conf
new file mode 100644 (file)
index 0000000..2eae1a6
--- /dev/null
@@ -0,0 +1,28 @@
+#
+# Check XDG_CURRENT_DESKTOP is set for sessions that support it
+#
+
+[SeatDefaults]
+autologin-user=have-password1
+user-session=named
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Session starts
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_CURRENT_DESKTOP=TestDesktop USER=have-password1
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
index 22257339bef89a3aba16fcb43c737cc196e96884..1b2b78cc02b348f9c14080a5b871a74e1298afaf 100644 (file)
@@ -167,13 +167,14 @@ request_cb (const gchar *request)
 int
 main (int argc, char **argv)
 {
-    gchar *display, *xdg_seat, *xdg_vtnr, *xdg_session_cookie, *mir_socket, *mir_vt, *mir_id;
+    gchar *display, *xdg_seat, *xdg_vtnr, *xdg_current_desktop, *xdg_session_cookie, *mir_socket, *mir_vt, *mir_id;
     GString *status_text;
     int fd, open_max;
 
     display = getenv ("DISPLAY");
     xdg_seat = getenv ("XDG_SEAT");
     xdg_vtnr = getenv ("XDG_VTNR");
+    xdg_current_desktop = getenv ("XDG_CURRENT_DESKTOP");
     xdg_session_cookie = getenv ("XDG_SESSION_COOKIE");
     mir_socket = getenv ("MIR_SERVER_FILE");
     mir_vt = getenv ("MIR_SERVER_VT");
@@ -219,6 +220,8 @@ main (int argc, char **argv)
         g_string_append_printf (status_text, " XDG_SEAT=%s", xdg_seat);
     if (xdg_vtnr)
         g_string_append_printf (status_text, " XDG_VTNR=%s", xdg_vtnr);
+    if (xdg_current_desktop)
+        g_string_append_printf (status_text, " XDG_CURRENT_DESKTOP=%s", xdg_current_desktop);
     if (xdg_session_cookie)
         g_string_append_printf (status_text, " XDG_SESSION_COOKIE=%s", xdg_session_cookie);
     if (mir_vt > 0)
diff --git a/tests/test-xdg-current-desktop b/tests/test-xdg-current-desktop
new file mode 100755 (executable)
index 0000000..495f940
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner xdg-current-desktop test-gobject-greeter