diff options
author | Sean Davis <smd.seandavis@gmail.com> | 2020-06-22 06:15:41 -0400 |
---|---|---|
committer | Sean Davis <smd.seandavis@gmail.com> | 2020-06-22 06:15:41 -0400 |
commit | 33fdde12ed0d6a4e900d86422cf50fa1d33fa724 (patch) | |
tree | 25ff2fce336e299c2ff783553da43f0f619a8a4b | |
parent | 9c50d93d3c52623183e3562ed3f033533a672fbc (diff) | |
download | lightdm-gtk-greeter-git-33fdde12ed0d6a4e900d86422cf50fa1d33fa724.tar.gz |
Fix loading Unity and Ayatana indicators
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | src/lightdm-gtk-greeter.c | 40 |
2 files changed, 42 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac index fbf4854..4a7cbaa 100644 --- a/configure.ac +++ b/configure.ac @@ -181,7 +181,7 @@ AC_ARG_ENABLE([at-spi-command], AS_IF([test "x$enable_at_spi_command" != "xno"], [ if test "x$enable_at_spi_command" = "xyes" || test "x$enable_at_spi_command" = "x"; then - enable_at_spi_command="/usr/lib/at-spi2-core/at-spi-bus-launcher --launch-immediately" + enable_at_spi_command="/usr/libexec/at-spi-bus-launcher --launch-immediately" fi AC_DEFINE_UNQUOTED([AT_SPI_COMMAND], ["$enable_at_spi_command"], [Command to start at-spi service]) ]) @@ -196,7 +196,7 @@ AC_ARG_ENABLE([indicator-services-command], AS_IF([test "x$enable_indicator_services_command" != "xno"], [ if test "x$enable_indicator_services_command" = "xyes" || test "x$enable_indicator_services_command" = "x"; then - enable_indicator_services_command="upstart --user --startup-event indicator-services-start" + enable_indicator_services_command="systemd --user indicator-services-start" fi AC_DEFINE_UNQUOTED([INDICATOR_SERVICES_COMMAND], ["$enable_indicator_services_command"], [Command to start indicators service]) ]) diff --git a/src/lightdm-gtk-greeter.c b/src/lightdm-gtk-greeter.c index 4c38e12..e2d248c 100644 --- a/src/lightdm-gtk-greeter.c +++ b/src/lightdm-gtk-greeter.c @@ -1507,6 +1507,41 @@ reassign_menu_item_accel (GtkWidget *item) gtk_container_foreach (GTK_CONTAINER (submenu), (GtkCallback)reassign_menu_item_accel, NULL); } +static gchar* +find_indicator_exec (const gchar *name) +{ + gchar *indicator; + gchar *desktop; + gchar *exec = NULL; + GKeyFile *keyfile; + + #ifdef HAVE_UNITY_LIBINDICATOR_NG + indicator = g_strdup_printf ("indicator-%s", name); + #else + indicator = g_strdup_printf ("ayatana-indicator-%s", name); + #endif + + desktop = g_strdup_printf ("/etc/xdg/autostart/%s.desktop", indicator); + + keyfile = g_key_file_new (); + if (g_key_file_load_from_file (keyfile, desktop, G_KEY_FILE_NONE, NULL)) { + exec = g_key_file_get_string (keyfile, "Desktop Entry", "Exec", NULL); + } else { + g_free (desktop); + + desktop = g_strdup_printf ("/usr/lib/systemd/user/%s.service", indicator); + + if (g_key_file_load_from_file (keyfile, desktop, G_KEY_FILE_NONE, NULL)) { + exec = g_key_file_get_string (keyfile, "Service", "ExecStart", NULL); + } + } + + g_key_file_free (keyfile); + g_free (desktop); + + return exec; +} + static void init_indicators (void) { @@ -1601,6 +1636,11 @@ init_indicators (void) #ifdef HAVE_LIBINDICATOR_NG else { /* service file */ + gchar *exec = find_indicator_exec (names[i]); + if (exec) { + spawn_line_pid (exec, G_SPAWN_SEARCH_PATH, NULL); + g_free (exec); + } #ifdef HAVE_UNITY_LIBINDICATOR_NG if (strchr (names[i], '.')) path = g_strdup_printf ("%s/%s", UNITY_INDICATOR_DIR, names[i]); |