Index: xfrun/xfrun-dialog.c =================================================================== --- xfrun/xfrun-dialog.c (revision 29549) +++ xfrun/xfrun-dialog.c (working copy) @@ -493,7 +493,7 @@ gpointer user_data) { XfrunDialog *dialog = XFRUN_DIALOG(user_data); - gchar *cmdline, **argv = NULL; + gchar *cmdline, *exo, **argv = NULL; gboolean in_terminal; GdkScreen *gscreen; GError *error = NULL; @@ -528,24 +528,44 @@ g_shell_parse_argv(cmdline, &argc, &argv, &error); } - if(argv && xfce_gdk_spawn_on_screen(gscreen, + gboolean ok; + ok = (argv && xfce_gdk_spawn_on_screen(gscreen, dialog->priv->working_directory, argv, NULL, G_SPAWN_SEARCH_PATH, xfrun_spawn_child_setup, NULL, NULL, - &error)) - { - xfrun_add_to_history(cmdline, in_terminal); - xfrun_dialog_delete_event(GTK_WIDGET(dialog), NULL); - } else { - gchar *primary = g_strdup_printf(_("The command \"%s\" failed to run:"), - cmdline); - xfce_message_dialog(GTK_WINDOW(dialog), _("Run Error"), - GTK_STOCK_DIALOG_ERROR, primary, - error ? error->message : _("Unknown Error"), - GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL); - g_free(primary); - if(error) - g_error_free(error); + &error)); + + + switch(ok) { + gchar *exo; + case TRUE: + xfrun_add_to_history(cmdline, in_terminal); + xfrun_dialog_delete_event(GTK_WIDGET(dialog), NULL); + break; + case FALSE: + /* we failed, try exo-open */ + exo = g_strdup_printf("%s %s", "exo-open", g_shell_quote(cmdline)); + g_shell_parse_argv(exo, &argc, &argv, &error); + g_free(exo); + if(argv && xfce_gdk_spawn_on_screen(gscreen, + dialog->priv->working_directory, + argv, NULL, G_SPAWN_SEARCH_PATH, + xfrun_spawn_child_setup, NULL, NULL, + &error)) + { + xfrun_add_to_history(cmdline, in_terminal); + xfrun_dialog_delete_event(GTK_WIDGET(dialog), NULL); + } else { + gchar *primary = g_strdup_printf(_("The command \"%s\" failed to run:"), + cmdline); + xfce_message_dialog(GTK_WINDOW(dialog), _("Run Error"), + GTK_STOCK_DIALOG_ERROR, primary, + error ? error->message : _("Unknown Error"), + GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL); + g_free(primary); + if(error) + g_error_free(error); + } } g_free(cmdline);