summary refs log blame commit diff
path: root/pkgs/development/libraries/glib/gnome-console-support.patch
blob: 7f6894a5cec9f7e95600bb1d6b27a703b86d7a03 (plain) (tree)






















































                                                                 
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;