summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Davis <smd.seandavis@gmail.com>2020-06-22 06:15:41 -0400
committerSean Davis <smd.seandavis@gmail.com>2020-06-22 06:15:41 -0400
commit33fdde12ed0d6a4e900d86422cf50fa1d33fa724 (patch)
tree25ff2fce336e299c2ff783553da43f0f619a8a4b
parent9c50d93d3c52623183e3562ed3f033533a672fbc (diff)
downloadlightdm-gtk-greeter-git-33fdde12ed0d6a4e900d86422cf50fa1d33fa724.tar.gz
Fix loading Unity and Ayatana indicators
-rw-r--r--configure.ac4
-rw-r--r--src/lightdm-gtk-greeter.c40
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]);