From 1553374b9c5db3db8232738dc8fa747684b070d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= Date: Fri, 30 Apr 2021 15:58:22 +0200 Subject: [PATCH] Fix killing gjs --- src/gnome-screensaver.c | 22 +++++++++++----------- src/gs-listener-dbus.c | 29 ++++++++++++----------------- 2 files changed, 23 insertions(+), 28 deletions(-) diff --git a/src/gnome-screensaver.c b/src/gnome-screensaver.c index d2ccae3..96a7d49 100644 --- a/src/gnome-screensaver.c +++ b/src/gnome-screensaver.c @@ -82,17 +82,17 @@ main (int argc, exit (1); } - gchar** env_vars = g_get_environ(); // Get our list of environment variables - gchar* desktop = g_environ_getenv(env_vars, "XDG_CURRENT_DESKTOP"); // Get the current desktop value - - if (desktop != NULL) { // Got a value - if (!g_str_has_prefix(desktop, "Budgie")) { // Does not start with Budgie - g_message("Not running under Budgie, exiting."); - exit(1); - } - } - - g_strfreev(env_vars); // Free our environment variables + if (g_find_program_in_path("pkill") != NULL) { // Have pkill + g_spawn_command_line_sync("pkill -9 -f '/usr/bin/gjs /usr/share/gnome-shell/org.gnome.ScreenSaver'", + NULL, + NULL, + NULL, + &error); + if (error) { + g_warning("Failed to kill gjs: %s", error->message); + g_error_free (error); + } + } gs_debug_init (debug, FALSE); gs_debug ("initializing budgie-screensaver %s", VERSION); diff --git a/src/gs-listener-dbus.c b/src/gs-listener-dbus.c index 124d83a..f667127 100644 --- a/src/gs-listener-dbus.c +++ b/src/gs-listener-dbus.c @@ -1334,6 +1334,14 @@ gs_listener_acquire (GSListener *listener, _("not connected to the message bus")); return FALSE; } + if (screensaver_is_running (listener->priv->connection)) { + g_set_error (error, + GS_LISTENER_ERROR, + GS_LISTENER_ERROR_ACQUISITION_FAILURE, + "%s", + _("screensaver already running in this session")); + return FALSE; + } dbus_error_init (&buserror); @@ -1345,23 +1353,10 @@ gs_listener_acquire (GSListener *listener, return FALSE; } - if (g_find_program_in_path("pkill") != NULL) { // Have pkill - char *argv[5]; - argv[0] = "pkill"; - argv[1] = "-9"; - argv[2] = "-f"; - argv[3] = "'/usr/bin/gjs /usr/share/gnome-shell/org.gnome.ScreenSaver'"; - argv[4] = NULL; - - g_autoptr(GError) error = NULL; - gboolean kill_ret = g_spawn_sync(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL, NULL, &error); - - if (!kill_ret) { - g_warning("Failed to kill gjs: %s", error->message); - } - } - - res = dbus_bus_request_name (listener->priv->connection, GS_SERVICE, DBUS_NAME_FLAG_REPLACE_EXISTING, &buserror); + res = dbus_bus_request_name (listener->priv->connection, + GS_SERVICE, + DBUS_NAME_FLAG_DO_NOT_QUEUE | DBUS_NAME_FLAG_ALLOW_REPLACEMENT, + &buserror); if (dbus_error_is_set (&buserror)) { g_set_error (error, GS_LISTENER_ERROR, -- 2.31.1