diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c index 60d6debb2..a441bfec9 100644 --- a/gio/gdesktopappinfo.c +++ b/gio/gdesktopappinfo.c @@ -2627,6 +2627,7 @@ prepend_terminal_to_vector (int *argc, int i, j; char **term_argv = NULL; int term_argc = 0; + gboolean pass_cmd_as_single_arg = FALSE; char *check; char **the_argv; @@ -2672,6 +2673,11 @@ prepend_terminal_to_vector (int *argc, } else { + if (check == NULL) { + check = g_find_program_in_path ("kgx"); + if (check != NULL) + pass_cmd_as_single_arg = TRUE; + } if (check == NULL) check = g_find_program_in_path ("tilix"); if (check == NULL) @@ -2697,14 +2703,27 @@ prepend_terminal_to_vector (int *argc, } } - real_argc = term_argc + *argc; + real_argc = term_argc + (pass_cmd_as_single_arg ? 1 : *argc); real_argv = g_new (char *, real_argc + 1); for (i = 0; i < term_argc; i++) real_argv[i] = term_argv[i]; - for (j = 0; j < *argc; j++, i++) - real_argv[i] = (char *)the_argv[j]; + if (pass_cmd_as_single_arg) { + char **quoted_argv = g_new (char *, *argc + 1); + + for (j = 0; j < *argc; j++) { + quoted_argv[j] = g_shell_quote (the_argv[j]); + g_free (the_argv[j]); + } + quoted_argv[j] = NULL; + + real_argv[i++] = g_strjoinv (" ", quoted_argv); + g_strfreev (quoted_argv); + } else { + for (j = 0; j < *argc; j++, i++) + real_argv[i] = (char *)the_argv[j]; + } real_argv[i] = NULL;