at 23.05-pre 55 lines 1.6 kB view raw
1diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c 2index 60d6debb2..a441bfec9 100644 3--- a/gio/gdesktopappinfo.c 4+++ b/gio/gdesktopappinfo.c 5@@ -2627,6 +2627,7 @@ prepend_terminal_to_vector (int *argc, 6 int i, j; 7 char **term_argv = NULL; 8 int term_argc = 0; 9+ gboolean pass_cmd_as_single_arg = FALSE; 10 char *check; 11 char **the_argv; 12 13@@ -2672,6 +2673,11 @@ prepend_terminal_to_vector (int *argc, 14 } 15 else 16 { 17+ if (check == NULL) { 18+ check = g_find_program_in_path ("kgx"); 19+ if (check != NULL) 20+ pass_cmd_as_single_arg = TRUE; 21+ } 22 if (check == NULL) 23 check = g_find_program_in_path ("tilix"); 24 if (check == NULL) 25@@ -2697,14 +2703,27 @@ prepend_terminal_to_vector (int *argc, 26 } 27 } 28 29- real_argc = term_argc + *argc; 30+ real_argc = term_argc + (pass_cmd_as_single_arg ? 1 : *argc); 31 real_argv = g_new (char *, real_argc + 1); 32 33 for (i = 0; i < term_argc; i++) 34 real_argv[i] = term_argv[i]; 35 36- for (j = 0; j < *argc; j++, i++) 37- real_argv[i] = (char *)the_argv[j]; 38+ if (pass_cmd_as_single_arg) { 39+ char **quoted_argv = g_new (char *, *argc + 1); 40+ 41+ for (j = 0; j < *argc; j++) { 42+ quoted_argv[j] = g_shell_quote (the_argv[j]); 43+ g_free (the_argv[j]); 44+ } 45+ quoted_argv[j] = NULL; 46+ 47+ real_argv[i++] = g_strjoinv (" ", quoted_argv); 48+ g_strfreev (quoted_argv); 49+ } else { 50+ for (j = 0; j < *argc; j++, i++) 51+ real_argv[i] = (char *)the_argv[j]; 52+ } 53 54 real_argv[i] = NULL; 55