Index: xfrun/xfrun-dialog.c =================================================================== --- xfrun/xfrun-dialog.c (revision 22503) +++ xfrun/xfrun-dialog.c (working copy) @@ -607,27 +607,34 @@ gpointer user_data) { XfrunDialog *dialog = XFRUN_DIALOG(user_data); - gchar *entry_str, **argv; - gboolean in_terminal; + gchar *entry_str, **argv = NULL; + gboolean in_terminal, do_freev = FALSE; GdkScreen *gscreen; GError *error = NULL; - gint i = 0; + gint argc = 0; entry_str = gtk_editable_get_chars(GTK_EDITABLE(dialog->priv->entry), 0, -1); in_terminal = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->priv->terminal_chk)); gscreen = gtk_widget_get_screen(widget); - argv = g_new0(gchar *, 5); + if(dialog->priv->run_argument) { + gchar *c = g_strdup_printf("%s %s", entry_str, + dialog->priv->run_argument); + g_free (entry_str); + entry_str = c; + } if(in_terminal) { - argv[i++] = "xfterm4"; - argv[i++] = "-e"; + argv = g_new(gchar *, 4); + argv[0] = "xfterm4"; + argv[1] = "-e"; + argv[2] = entry_str; + argv[3] = NULL; + } else { + g_shell_parse_argv(entry_str, &argc, &argv, &error); + do_freev = TRUE; } - argv[i++] = entry_str; - if(dialog->priv->run_argument) - argv[i++] = dialog->priv->run_argument; - argv[i++] = NULL; if(xfce_gdk_spawn_on_screen(gscreen, dialog->priv->working_directory, argv, NULL, G_SPAWN_SEARCH_PATH, @@ -646,7 +653,11 @@ } g_free(entry_str); - g_free(argv); + + if(do_freev) + g_strfreev(argv); + else + g_free(argv); } static gboolean