diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | embed/mozilla/ContentHandler.cpp | 11 | ||||
-rw-r--r-- | lib/ephy-file-helpers.c | 176 | ||||
-rw-r--r-- | lib/ephy-file-helpers.h | 4 |
4 files changed, 14 insertions, 185 deletions
@@ -1,5 +1,13 @@ 2003-10-31 Marco Pesenti Gritti <marco@gnome.org> + * embed/mozilla/ContentHandler.cpp: + * lib/ephy-file-helpers.c: + * lib/ephy-file-helpers.h: + + Use gnomevfs helper to open applications, drop our own. + +2003-10-31 Marco Pesenti Gritti <marco@gnome.org> + * lib/egg/egg-editable-toolbar.c: (set_drag_cursor): * lib/egg/egg-toolbar-editor.c: (set_drag_cursor): diff --git a/embed/mozilla/ContentHandler.cpp b/embed/mozilla/ContentHandler.cpp index f1fdec95c..f79aa43bd 100644 --- a/embed/mozilla/ContentHandler.cpp +++ b/embed/mozilla/ContentHandler.cpp @@ -391,13 +391,14 @@ NS_METHOD GContentHandler::LaunchHelperApp (void) const nsCString &document = (mUrlHelper) ? mUrl : aFileName; char *param = g_strdup (document.get()); - ephy_file_launch_application (mHelperApp->command, - param, - mHelperApp->requires_terminal); - - if(mUrlHelper) mLauncher->Cancel(); + GList *params = NULL; + params = g_list_append (params, param); + gnome_vfs_mime_application_launch (mHelperApp, params); g_free (param); + g_list_free (params); + + if(mUrlHelper) mLauncher->Cancel(); } else { diff --git a/lib/ephy-file-helpers.c b/lib/ephy-file-helpers.c index a14068ec9..d847ab523 100644 --- a/lib/ephy-file-helpers.c +++ b/lib/ephy-file-helpers.c @@ -137,182 +137,6 @@ ephy_file_helpers_shutdown (void) g_free (dot_dir); } -static void -gul_general_gnome_shell_execute (const char *command) -{ - GError *error = NULL; - if (!g_spawn_command_line_async (command, &error)) { - g_warning ("Error starting command '%s': %s\n", command, error->message); - g_error_free (error); - } -} - -/* Return a command string containing the path to a terminal on this system. */ - -static char * -try_terminal_command (const char *program, - const char *args) -{ - char *program_in_path, *quoted, *result; - - if (program == NULL) { - return NULL; - } - - program_in_path = g_find_program_in_path (program); - if (program_in_path == NULL) { - return NULL; - } - - quoted = g_shell_quote (program_in_path); - if (args == NULL || args[0] == '\0') { - return quoted; - } - result = g_strconcat (quoted, " ", args, NULL); - g_free (quoted); - return result; -} - -static char * -try_terminal_command_argv (int argc, - char **argv) -{ - GString *string; - int i; - char *quoted, *result; - - if (argc == 0) { - return NULL; - } - - if (argc == 1) { - return try_terminal_command (argv[0], NULL); - } - - string = g_string_new (argv[1]); - for (i = 2; i < argc; i++) { - quoted = g_shell_quote (argv[i]); - g_string_append_c (string, ' '); - g_string_append (string, quoted); - g_free (quoted); - } - result = try_terminal_command (argv[0], string->str); - g_string_free (string, TRUE); - - return result; -} - -static char * -get_terminal_command_prefix (gboolean for_command) -{ - int argc; - char **argv; - char *command; - guint i; - static const char *const commands[][3] = { - { "gnome-terminal", "-x", "" }, - { "dtterm", "-e", "-ls" }, - { "nxterm", "-e", "-ls" }, - { "color-xterm", "-e", "-ls" }, - { "rxvt", "-e", "-ls" }, - { "xterm", "-e", "-ls" }, - }; - - /* Try the terminal from preferences. Use without any - * arguments if we are just doing a standalone terminal. - */ - argc = 0; - argv = g_new0 (char *, 1); - gnome_prepend_terminal_to_vector (&argc, &argv); - - command = NULL; - if (argc != 0) { - if (for_command) { - command = try_terminal_command_argv (argc, argv); - } else { - /* Strip off the arguments in a lame attempt - * to make it be an interactive shell. - */ - command = try_terminal_command (argv[0], NULL); - } - } - - while (argc != 0) { - g_free (argv[--argc]); - } - g_free (argv); - - if (command != NULL) { - return command; - } - - /* Try well-known terminal applications in same order that gmc did. */ - for (i = 0; i < G_N_ELEMENTS (commands); i++) { - command = try_terminal_command (commands[i][0], - commands[i][for_command ? 1 : 2]); - if (command != NULL) { - break; - } - } - - return command; -} - -static char * -gul_general_gnome_make_terminal_command (const char *command) -{ - char *prefix, *quoted, *terminal_command; - - if (command == NULL) { - return get_terminal_command_prefix (FALSE); - } - prefix = get_terminal_command_prefix (TRUE); - quoted = g_shell_quote (command); - terminal_command = g_strconcat (prefix, " /bin/sh -c ", quoted, NULL); - g_free (prefix); - g_free (quoted); - return terminal_command; -} - -static void -gul_general_gnome_open_terminal (const char *command) -{ - char *command_line; - - command_line = gul_general_gnome_make_terminal_command (command); - if (command_line == NULL) { - g_message ("Could not start a terminal"); - return; - } - gul_general_gnome_shell_execute (command_line); - g_free (command_line); -} - -void -ephy_file_launch_application (const char *command_string, - const char *parameter, - gboolean use_terminal) -{ - char *full_command; - char *quoted_parameter; - - if (parameter != NULL) { - quoted_parameter = g_shell_quote (parameter); - full_command = g_strconcat (command_string, " ", quoted_parameter, NULL); - g_free (quoted_parameter); - } else { - full_command = g_strdup (command_string); - } - - if (use_terminal) { - gul_general_gnome_open_terminal (full_command); - } else { - gul_general_gnome_shell_execute (full_command); - } - - g_free (full_command); -} - void ephy_ensure_dir_exists (const char *dir) { diff --git a/lib/ephy-file-helpers.h b/lib/ephy-file-helpers.h index cd29f9ec4..6b2d17cfe 100644 --- a/lib/ephy-file-helpers.h +++ b/lib/ephy-file-helpers.h @@ -34,10 +34,6 @@ void ephy_file_helpers_init (void); void ephy_file_helpers_shutdown (void); -void ephy_file_launch_application (const char *command_string, - const char *parameter, - gboolean use_terminal); - char *ephy_file_tmp_filename (const char *base, const char *extension); |