summaryrefslogtreecommitdiff
path: root/mate-panel/libpanel-util/panel-launch.c
diff options
context:
space:
mode:
Diffstat (limited to 'mate-panel/libpanel-util/panel-launch.c')
-rw-r--r--mate-panel/libpanel-util/panel-launch.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/mate-panel/libpanel-util/panel-launch.c b/mate-panel/libpanel-util/panel-launch.c
index c332d09a..28824269 100644
--- a/mate-panel/libpanel-util/panel-launch.c
+++ b/mate-panel/libpanel-util/panel-launch.c
@@ -221,6 +221,15 @@ panel_launch_desktop_file (const char *desktop_file,
return retval;
}
+/*
+ * Set the DISPLAY variable, to be use by g_spawn_async.
+ */
+static void
+set_environment (gpointer display)
+{
+ g_setenv ("DISPLAY", display, TRUE);
+}
+
gboolean
panel_launch_desktop_file_with_fallback (const char *desktop_file,
const char *fallback_exec,
@@ -231,6 +240,9 @@ panel_launch_desktop_file_with_fallback (const char *desktop_file,
GError *local_error;
gboolean retval;
GPid pid;
+#if GTK_CHECK_VERSION (3, 0, 0)
+ char *display;
+#endif
g_return_val_if_fail (desktop_file != NULL, FALSE);
g_return_val_if_fail (fallback_exec != NULL, FALSE);
@@ -247,9 +259,22 @@ panel_launch_desktop_file_with_fallback (const char *desktop_file,
local_error = NULL;
}
+#if GTK_CHECK_VERSION (3, 0, 0)
+ display = gdk_screen_make_display_name (screen);
+ retval = g_spawn_async (NULL, /* working directory */
+ argv,
+ NULL, /* envp */
+ G_SPAWN_SEARCH_PATH,
+ set_environment,
+ &display,
+ NULL,
+ &local_error);
+ g_free (display);
+#else
retval = gdk_spawn_on_screen (screen, NULL, argv, NULL,
G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
NULL, NULL, &pid, &local_error);
+#endif
if (local_error == NULL && retval == TRUE) {
g_child_watch_add (pid, dummy_child_watch, NULL);