summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSean Davis <smd.seandavis@gmail.com>2020-06-22 06:53:35 -0400
committerSean Davis <smd.seandavis@gmail.com>2020-06-22 06:53:35 -0400
commitd797072d729dce47d7cff155ca8c15756db6f6f8 (patch)
treef77247a736bfca2b537801887a250d880286c158 /src
parent33fdde12ed0d6a4e900d86422cf50fa1d33fa724 (diff)
downloadlightdm-gtk-greeter-git-d797072d729dce47d7cff155ca8c15756db6f6f8.tar.gz
Respect XDG autostart paths
Diffstat (limited to 'src')
-rw-r--r--src/lightdm-gtk-greeter.c44
1 files changed, 42 insertions, 2 deletions
diff --git a/src/lightdm-gtk-greeter.c b/src/lightdm-gtk-greeter.c
index e2d248c..73b7120 100644
--- a/src/lightdm-gtk-greeter.c
+++ b/src/lightdm-gtk-greeter.c
@@ -1507,6 +1507,46 @@ reassign_menu_item_accel (GtkWidget *item)
gtk_container_foreach (GTK_CONTAINER (submenu), (GtkCallback)reassign_menu_item_accel, NULL);
}
+gboolean
+greeter_g_key_file_load_from_config_dirs (GKeyFile *key_file,
+ const gchar *file,
+ gchar **full_path,
+ GKeyFileFlags flags,
+ GError **error)
+{
+ gchar **all_config_dirs;
+ const gchar * user_config_dir;
+ const gchar * const * system_config_dirs;
+ gsize i, j;
+ gboolean found_file;
+
+ g_return_val_if_fail (key_file != NULL, FALSE);
+ g_return_val_if_fail (!g_path_is_absolute (file), FALSE);
+
+ user_config_dir = g_get_user_config_dir ();
+ system_config_dirs = g_get_system_config_dirs ();
+ all_config_dirs = g_new (gchar *, g_strv_length ((gchar **)system_config_dirs) + 2);
+
+ i = 0;
+ all_config_dirs[i++] = g_strdup (user_config_dir);
+
+ j = 0;
+ while (system_config_dirs[j] != NULL)
+ all_config_dirs[i++] = g_strdup (system_config_dirs[j++]);
+ all_config_dirs[i] = NULL;
+
+ found_file = g_key_file_load_from_dirs (key_file,
+ file,
+ (const gchar **)all_config_dirs,
+ full_path,
+ flags,
+ error);
+
+ g_strfreev (all_config_dirs);
+
+ return found_file;
+}
+
static gchar*
find_indicator_exec (const gchar *name)
{
@@ -1521,10 +1561,10 @@ find_indicator_exec (const gchar *name)
indicator = g_strdup_printf ("ayatana-indicator-%s", name);
#endif
- desktop = g_strdup_printf ("/etc/xdg/autostart/%s.desktop", indicator);
+ desktop = g_strdup_printf ("autostart/%s.desktop", indicator);
keyfile = g_key_file_new ();
- if (g_key_file_load_from_file (keyfile, desktop, G_KEY_FILE_NONE, NULL)) {
+ if (greeter_g_key_file_load_from_config_dirs (keyfile, desktop, NULL, G_KEY_FILE_NONE, NULL)) {
exec = g_key_file_get_string (keyfile, "Desktop Entry", "Exec", NULL);
} else {
g_free (desktop);