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);
/* Session type */
gchar *session_type;
+ /* Desktop name */
+ gchar *desktop_name;
+
/* Command to run */
gchar *command;
};
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);
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)
{
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);
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_ */
test-autologin-guest-logout \
test-group-membership \
test-session-env \
+ test-xdg-current-desktop \
test-language-env \
test-util-path \
test-session-stdout \
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 \
--- /dev/null
+[Desktop Entry]
+Name=Test Session
+Comment=LightDM test session
+Exec=test-session
+X-LightDM-DesktopName=TestDesktop
--- /dev/null
+#
+# 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
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");
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)
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner xdg-current-desktop test-gobject-greeter