nixpkgs/pkgs/development/libraries/glib/gnome-console-support.patch

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

56 lines
1.5 KiB
Diff
Raw Normal View History

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;