summaryrefslogtreecommitdiff
path: root/gui/greeter/greeter_session.c
diff options
context:
space:
mode:
Diffstat (limited to 'gui/greeter/greeter_session.c')
-rw-r--r--gui/greeter/greeter_session.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/gui/greeter/greeter_session.c b/gui/greeter/greeter_session.c
index e6889c7f..d4db8ef4 100644
--- a/gui/greeter/greeter_session.c
+++ b/gui/greeter/greeter_session.c
@@ -46,6 +46,13 @@ greeter_login_list_lookup (GSList *l, const gchar *data)
if (!list || !data)
return(FALSE);
+ /* FIXME: Hack, will support these builtin types later */
+ if (strcmp (data, GDM_SESSION_DEFAULT ".desktop") == 0 ||
+ strcmp (data, GDM_SESSION_CUSTOM ".desktop") == 0 ||
+ strcmp (data, GDM_SESSION_FAILSAFE ".desktop") == 0) {
+ return TRUE;
+ }
+
while (list) {
if (strcmp (list->data, data) == 0)
@@ -293,6 +300,8 @@ greeter_session_init (void)
char *name;
char *comment;
char *label;
+ char *tryexec;
+
/* ignore everything bug the .desktop files */
if (strstr (dent->d_name, ".desktop") == NULL) {
dent = readdir (sessdir);
@@ -303,6 +312,25 @@ greeter_session_init (void)
cfg = ve_config_new (s);
g_free (s);
+ if (ve_config_get_bool (cfg, "Desktop Entry/Hidden=false")) {
+ ve_config_destroy (cfg);
+ dent = readdir (sessdir);
+ continue;
+ }
+
+ tryexec = ve_config_get_string (cfg, "Desktop Entry/TryExec");
+ if ( ! ve_string_empty (tryexec)) {
+ char *full = g_find_program_in_path (tryexec);
+ if (full == NULL) {
+ g_free (tryexec);
+ ve_config_destroy (cfg);
+ dent = readdir (sessdir);
+ continue;
+ }
+ g_free (full);
+ }
+ g_free (tryexec);
+
exec = ve_config_get_string (cfg, "Desktop Entry/Exec");
name = ve_config_get_translated_string (cfg, "Desktop Entry/Name");
comment = ve_config_get_translated_string (cfg, "Desktop Entry/Comment");