diff options
author | Christian Neumair <chris@gnome-de.org> | 2006-01-11 19:33:35 +0000 |
---|---|---|
committer | Christian Neumair <cneumair@src.gnome.org> | 2006-01-11 19:33:35 +0000 |
commit | 8f7c1824dc0a226166dc5c199934d6158ca75e62 (patch) | |
tree | da7a238dcaaacc3b3fadb27da1db786c4dd6c946 /libnautilus-private/nautilus-program-choosing.c | |
parent | 6f55ef202be4a67d530e199071948dca35d49aae (diff) | |
download | nautilus-8f7c1824dc0a226166dc5c199934d6158ca75e62.tar.gz |
Add file list helpers for getting associated applications.
2006-01-11 Christian Neumair <chris@gnome-de.org>
* libnautilus-private/nautilus-mime-actions.c:
(nautilus_mime_get_default_application_for_files),
(intersect_application_lists),
(nautilus_mime_get_open_with_applications_for_files),
(nautilus_mime_has_any_applications_for_files):
* libnautilus-private/nautilus-mime-actions.h:
Add file list helpers for getting associated applications.
* libnautilus-private/nautilus-program-choosing.c:
* libnautilus-private/nautilus-program-choosing.h:
(nautilus_launch_application):
Allow to pass multiple files per application launch.
* src/nautilus-information-panel.c:
(command_button_callback):
Port to new API.
* src/file-manager/fm-directory-view.c:
(application_launch_parameters_new),
(application_launch_parameters_free),
(fm_directory_view_launch_application),
(fm_directory_view_chose_application_callback),
(application_selected_cb),
(open_with_launch_application_callback),
(add_application_to_open_with_menu), (reset_open_with_menu),
(real_update_menus), (list_to_parameters_foreach),
(mime_application_hash),
(fm_directory_view_make_activation_parameters),
(activate_callback):
Support activation of multiple files at once, correctly figure out
their associated applications. Fixes #105653.
* src/file-manager/fm-directory-view.c:
(activate_callback):
ref/unref the view before/after operating on it. Fixes #326231.
Diffstat (limited to 'libnautilus-private/nautilus-program-choosing.c')
-rw-r--r-- | libnautilus-private/nautilus-program-choosing.c | 79 |
1 files changed, 52 insertions, 27 deletions
diff --git a/libnautilus-private/nautilus-program-choosing.c b/libnautilus-private/nautilus-program-choosing.c index 98782877b..fbe7e1c8b 100644 --- a/libnautilus-private/nautilus-program-choosing.c +++ b/libnautilus-private/nautilus-program-choosing.c @@ -664,18 +664,19 @@ void nautilus_launch_show_file (NautilusFile *file, * parameter. Provide a parent window for error dialogs. * * @application: The application to be launched. - * @file: The file whose location should be passed as a parameter to the application + * @files: The files whose locations should be passed as a parameter to the application. * @parent_window: A window to use as the parent for any error dialogs. */ void nautilus_launch_application (GnomeVFSMimeApplication *application, - NautilusFile *file, + GList *files, GtkWindow *parent_window) { GdkScreen *screen; char *uri; char *uri_scheme; - GList uris; + GList *uris, *l; + NautilusFile *file; char **envp; GnomeVFSResult result; #ifdef HAVE_STARTUP_NOTIFICATION @@ -683,19 +684,26 @@ nautilus_launch_application (GnomeVFSMimeApplication *application, SnDisplay *sn_display; #endif - uri = NULL; - if (nautilus_file_is_nautilus_link (file)) { - uri = nautilus_file_get_activation_uri (file); - } - - if (uri == NULL) { - uri = nautilus_file_get_uri (file); + g_assert (files != NULL); + + uris = NULL; + for (l = files; l != NULL; l = l->next) { + file = NAUTILUS_FILE (l->data); + + uri = NULL; + + if (nautilus_file_is_nautilus_link (file)) { + uri = nautilus_file_get_activation_uri (file); + } + + if (uri == NULL) { + uri = nautilus_file_get_uri (file); + } + + uris = g_list_prepend (uris, uri); } + uris = g_list_reverse (uris); - uris.next = NULL; - uris.prev = NULL; - uris.data = uri; - screen = gtk_window_get_screen (parent_window); envp = my_gdk_spawn_make_environment_for_screen (screen, NULL); @@ -709,27 +717,44 @@ nautilus_launch_application (GnomeVFSMimeApplication *application, if (gnome_vfs_mime_application_supports_startup_notification (application)) { char *name; + char *description; char *icon; + int files_count; + + file = NAUTILUS_FILE (files->data); sn_context = sn_launcher_context_new (sn_display, screen ? gdk_screen_get_number (screen) : DefaultScreen (gdk_display)); - - name = nautilus_file_get_display_name (file); - if (name != NULL) { - char *description; - - sn_launcher_context_set_name (sn_context, name); - + + files_count = g_list_length (files); + if (files_count == 1) { + name = nautilus_file_get_display_name (file); description = g_strdup_printf (_("Opening %s"), name); - - sn_launcher_context_set_description (sn_context, description); + } else { + name = NULL; + description = g_strdup_printf (ngettext ("Opening %d Item", + "Opening %d Items", + files_count), + files_count); + } + if (name != NULL) { + sn_launcher_context_set_name (sn_context, name); g_free (name); + } + + if (description != NULL) { + sn_launcher_context_set_description (sn_context, description); g_free (description); } icon = nautilus_icon_factory_get_icon_for_file (file, FALSE); + + if (icon == NULL) { + icon = g_strdup (gnome_vfs_mime_application_get_icon (application)); + } + if (icon != NULL) { sn_launcher_context_set_icon_name (sn_context, icon); g_free (icon); @@ -761,7 +786,7 @@ nautilus_launch_application (GnomeVFSMimeApplication *application, } #endif /* HAVE_STARTUP_NOTIFICATION */ - result = gnome_vfs_mime_application_launch_with_env (application, &uris, envp); + result = gnome_vfs_mime_application_launch_with_env (application, uris, envp); #ifdef HAVE_STARTUP_NOTIFICATION if (sn_context != NULL) { @@ -783,7 +808,7 @@ nautilus_launch_application (GnomeVFSMimeApplication *application, break; case GNOME_VFS_ERROR_NOT_SUPPORTED: - uri_scheme = nautilus_file_get_uri_scheme (file); + uri_scheme = nautilus_file_get_uri_scheme (NAUTILUS_FILE (files->data)); application_cannot_open_location (application, file, uri_scheme, @@ -800,8 +825,8 @@ nautilus_launch_application (GnomeVFSMimeApplication *application, #endif break; } - - g_free (uri); + + eel_g_list_free_deep (uris); g_strfreev (envp); } |