[Xfce4-commits] <xfce-utils:master> Fallback to exo-open when failure (Bugs #4985 and #2506).
Jérôme Guelfucci
noreply at xfce.org
Mon Oct 25 14:46:07 CEST 2010
Updating branch refs/heads/master
to 10825a4404c659e7dd8664531ad5fdc7c5cecdd2 (commit)
from 8b8f55002b791f7f0b58dcb1f0dde076846ce485 (commit)
commit 10825a4404c659e7dd8664531ad5fdc7c5cecdd2
Author: Jérôme Guelfucci <jeromeg at xfce.org>
Date: Mon Oct 25 14:36:31 2010 +0200
Fallback to exo-open when failure (Bugs #4985 and #2506).
Based on original work from Miek Gieben. This allows to open URLs, files
and folder with the default handler.
xfrun/xfrun-dialog.c | 78 +++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 64 insertions(+), 14 deletions(-)
diff --git a/xfrun/xfrun-dialog.c b/xfrun/xfrun-dialog.c
index 2b89c72..9e7adfe 100644
--- a/xfrun/xfrun-dialog.c
+++ b/xfrun/xfrun-dialog.c
@@ -499,6 +499,7 @@ xfrun_run_clicked(GtkWidget *widget,
XfrunDialog *dialog = XFRUN_DIALOG(user_data);
GdkScreen *gscreen;
gboolean in_terminal;
+ gboolean result;
GError *error = NULL;
gchar **argv = NULL;
gchar *cmdline;
@@ -551,24 +552,73 @@ xfrun_run_clicked(GtkWidget *widget,
g_shell_parse_argv(cmdline, &argc, &argv, &error);
}
- if(argv && gdk_spawn_on_screen(gscreen,
- dialog->priv->working_directory,
- argv, NULL, G_SPAWN_SEARCH_PATH,
- xfrun_spawn_child_setup, NULL, NULL,
- &error))
+ DBG ("cmdline: %s", cmdline);
+
+ result = (argv && gdk_spawn_on_screen(gscreen,
+ dialog->priv->working_directory,
+ argv, NULL, G_SPAWN_SEARCH_PATH,
+ xfrun_spawn_child_setup, NULL, NULL,
+ &error));
+
+ if (result)
{
xfrun_add_to_history(original_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);
+ gchar *primary;
+ gboolean exo_opened = FALSE;
+
+ if (!in_terminal) {
+ /* Try to open with exo-open (for files, folders, uris...) */
+ gchar **exo_argv = NULL;
+ const gchar *exo_open;
+ const gchar *quoted_cmdline;
+ gint exo_argc;
+
+ quoted_cmdline = g_shell_quote (cmdline);
+ exo_open = g_strconcat ("exo-open ", quoted_cmdline, NULL);
+ DBG ("exo: %s", exo_open);
+ /* Don't handle errors, if any we will display the first one */
+ g_shell_parse_argv(exo_open, &exo_argc, &exo_argv, NULL);
+
+ if(exo_argv) {
+ if (gdk_spawn_on_screen(gscreen,
+ dialog->priv->working_directory,
+ exo_argv, NULL, G_SPAWN_SEARCH_PATH,
+ xfrun_spawn_child_setup, NULL, NULL,
+ NULL)) {
+ exo_opened = TRUE;
+ xfrun_add_to_history(original_cmdline, in_terminal);
+ xfrun_dialog_delete_event(GTK_WIDGET(dialog), NULL);
+ g_error_free(error);
+ }
+
+ g_strfreev(exo_argv);
+ }
+
+ if (!exo_opened) {
+ /* Display the first error */
+ 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);
+ }
+ }else {
+ 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);
More information about the Xfce4-commits
mailing list