diff options
author | Marco Pesenti Gritti <marco@gnome.org> | 2004-11-25 14:13:38 +0000 |
---|---|---|
committer | Marco Pesenti Gritti <marco@src.gnome.org> | 2004-11-25 14:13:38 +0000 |
commit | 4545055bb8b0fa0745a873fe768d9647be31d515 (patch) | |
tree | c882c41ae54d41768ac30d52cd3531b2dd7add9e | |
parent | ad68e6cef5bf4ac36b71f0d108d1704769587c54 (diff) | |
download | nautilus-4545055bb8b0fa0745a873fe768d9647be31d515.tar.gz |
reviewed by: Alexander Larsson <alexl@redhat.com>
2004-11-25 Marco Pesenti Gritti <marco@gnome.org>
reviewed by: Alexander Larsson <alexl@redhat.com>
* configure.in:
Bump gnome-vfs required version
* libnautilus-private/nautilus-mime-actions.c:
(nautilus_mime_get_default_application_for_file),
(application_equal), (get_open_with_mime_applications),
(nautilus_mime_get_open_with_applications_for_file),
(nautilus_mime_get_applications_for_file),
(nautilus_mime_has_any_applications_for_file):
* libnautilus-private/nautilus-mime-actions.h:
* libnautilus-private/nautilus-program-choosing.c:
(nautilus_launch_show_file), (nautilus_launch_application):
* src/file-manager/fm-directory-view.c: (reset_open_with_menu),
(activate_check_mime_types):
* src/nautilus-information-panel.c: (command_button_callback),
(add_command_buttons), (nautilus_information_panel_update_buttons):
Remove all mime api deprecated calls and replace them with the
new API. Fix bug #159435.
-rw-r--r-- | ChangeLog | 25 | ||||
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | libnautilus-private/nautilus-mime-actions.c | 144 | ||||
-rw-r--r-- | libnautilus-private/nautilus-mime-actions.h | 17 | ||||
-rw-r--r-- | libnautilus-private/nautilus-program-choosing.c | 14 | ||||
-rw-r--r-- | src/file-manager/fm-directory-view.c | 9 | ||||
-rw-r--r-- | src/nautilus-information-panel.c | 66 |
7 files changed, 82 insertions, 195 deletions
@@ -1,3 +1,28 @@ +2004-11-25 Marco Pesenti Gritti <marco@gnome.org> + + reviewed by: Alexander Larsson <alexl@redhat.com> + + * configure.in: + + Bump gnome-vfs required version + + * libnautilus-private/nautilus-mime-actions.c: + (nautilus_mime_get_default_application_for_file), + (application_equal), (get_open_with_mime_applications), + (nautilus_mime_get_open_with_applications_for_file), + (nautilus_mime_get_applications_for_file), + (nautilus_mime_has_any_applications_for_file): + * libnautilus-private/nautilus-mime-actions.h: + * libnautilus-private/nautilus-program-choosing.c: + (nautilus_launch_show_file), (nautilus_launch_application): + * src/file-manager/fm-directory-view.c: (reset_open_with_menu), + (activate_check_mime_types): + * src/nautilus-information-panel.c: (command_button_callback), + (add_command_buttons), (nautilus_information_panel_update_buttons): + + Remove all mime api deprecated calls and replace them with the + new API. Fix bug #159435. + 2004-11-24 Alexander Larsson <alexl@redhat.com> * configure.in: diff --git a/configure.in b/configure.in index e4700c1d2..d144f5c57 100644 --- a/configure.in +++ b/configure.in @@ -11,7 +11,7 @@ GLIB_REQUIRED=2.3.0 GNOME_DESKTOP_REQUIRED=2.1.0 GNOME_REQUIRED=2.1.1 GNOME_UI_REQUIRED=2.6.0 -GNOME_VFS_REQUIRED=2.5.1 +GNOME_VFS_REQUIRED=2.9.1 ORBIT_REQUIRED=2.4.0 PANGO_REQUIRED=1.1.2 GTK_REQUIRED=2.3.0 diff --git a/libnautilus-private/nautilus-mime-actions.c b/libnautilus-private/nautilus-mime-actions.c index dad4a4e18..161928ee2 100644 --- a/libnautilus-private/nautilus-mime-actions.c +++ b/libnautilus-private/nautilus-mime-actions.c @@ -28,16 +28,8 @@ #include "nautilus-file-attributes.h" #include "nautilus-file.h" #include "nautilus-metadata.h" -#include <eel/eel-glib-extensions.h> -#include <eel/eel-string.h> -#include <libgnomevfs/gnome-vfs-application-registry.h> #include <libgnomevfs/gnome-vfs-mime-handlers.h> -#include <stdio.h> - -static int gnome_vfs_mime_application_has_id (GnomeVFSMimeApplication *application, - const char *id); -static gboolean application_supports_uri_scheme (gpointer data, - gpointer uri_scheme); +#include <string.h> static gboolean nautilus_mime_actions_check_if_minimum_attributes_ready (NautilusFile *file) @@ -92,59 +84,41 @@ nautilus_mime_actions_get_full_file_attributes (void) GnomeVFSMimeApplication * nautilus_mime_get_default_application_for_file (NautilusFile *file) { - char *mime_type; - GnomeVFSMimeApplication *result; - char *uri_scheme; + GnomeVFSMimeApplication *app; + char *uri, *mime_type; if (!nautilus_mime_actions_check_if_open_with_attributes_ready (file)) { return NULL; } - uri_scheme = nautilus_file_get_uri_scheme (file); - - /* TODO: this should maybe use gnome_vfs_mime_get_default_application_for_scheme, - but thats not public atm */ + uri = nautilus_file_get_uri (file); mime_type = nautilus_file_get_mime_type (file); - result = gnome_vfs_mime_get_default_application (mime_type); - if (result != NULL && !application_supports_uri_scheme (result, uri_scheme)) { - result = NULL; - } - - if (result == NULL) { - GList *all_applications, *l; - - all_applications = nautilus_mime_get_open_with_applications_for_file (file); - - for (l = all_applications; l != NULL; l = l->next) { - result = gnome_vfs_mime_application_copy (l->data); - if (result != NULL && !application_supports_uri_scheme (result, uri_scheme)) { - gnome_vfs_mime_application_free (result); - result = NULL; - } - if (result != NULL) - break; - } - gnome_vfs_mime_application_list_free (all_applications); - } + app = gnome_vfs_mime_get_default_application_for_uri (uri, mime_type); + g_free (uri); g_free (mime_type); + + return app; +} - g_free (uri_scheme); - - return result; +static int +application_equal (GnomeVFSMimeApplication *app_a, GnomeVFSMimeApplication *app_b) +{ + return gnome_vfs_mime_application_equal (app_a, app_b) ? 0 : 1; } static GList * get_open_with_mime_applications (NautilusFile *file) { char *guessed_mime_type; - char *mime_type; + char *mime_type, *uri; GList *result; guessed_mime_type = nautilus_file_get_guessed_mime_type (file); mime_type = nautilus_file_get_mime_type (file); + uri = nautilus_file_get_uri (file); - result = gnome_vfs_mime_get_all_applications (mime_type); + result = gnome_vfs_mime_get_all_applications_for_uri (uri, mime_type); if (strcmp (guessed_mime_type, mime_type) != 0) { GList *result_2; @@ -152,9 +126,8 @@ get_open_with_mime_applications (NautilusFile *file) result_2 = gnome_vfs_mime_get_all_applications (guessed_mime_type); for (l = result_2; l != NULL; l = l->next) { - if (!g_list_find_custom (result, - ((GnomeVFSMimeApplication*)l->data)->id, - (GCompareFunc) gnome_vfs_mime_application_has_id)) { + if (!g_list_find_custom (result, l->data, + (GCompareFunc) application_equal)) { result = g_list_prepend (result, l->data); } } @@ -162,6 +135,7 @@ get_open_with_mime_applications (NautilusFile *file) } g_free (mime_type); + g_free (uri); g_free (guessed_mime_type); return result; @@ -172,11 +146,9 @@ get_open_with_mime_applications (NautilusFile *file) * because this function will merge the lists of the fast and slow * mime types for the file */ GList * -nautilus_mime_get_open_with_applications_for_file (NautilusFile *file) +nautilus_mime_get_open_with_applications_for_file (NautilusFile *file) { - char *uri_scheme; GList *result; - GList *removed; if (!nautilus_mime_actions_check_if_open_with_attributes_ready (file)) { return NULL; @@ -184,19 +156,11 @@ nautilus_mime_get_open_with_applications_for_file (NautilusFile *file) result = get_open_with_mime_applications (file); - /* First remove applications that cannot support this location */ - uri_scheme = nautilus_file_get_uri_scheme (file); - g_assert (uri_scheme != NULL); - result = eel_g_list_partition (result, application_supports_uri_scheme, - uri_scheme, &removed); - gnome_vfs_mime_application_list_free (removed); - g_free (uri_scheme); - return g_list_reverse (result); } GList * -nautilus_mime_get_applications_for_file (NautilusFile *file) +nautilus_mime_get_applications_for_file (NautilusFile *file) { char *mime_type; @@ -208,59 +172,27 @@ nautilus_mime_get_applications_for_file (NautilusFile *file) return gnome_vfs_mime_get_all_applications (mime_type); } -static int -application_supports_uri_scheme_strcmp_style (gconstpointer application_data, - gconstpointer uri_scheme) -{ - return application_supports_uri_scheme - ((gpointer) application_data, - (gpointer) uri_scheme) ? 0 : 1; -} - gboolean -nautilus_mime_has_any_applications_for_file (NautilusFile *file) +nautilus_mime_has_any_applications_for_file (NautilusFile *file) { - GList *all_applications_for_mime_type, *application_that_can_access_uri; - char *uri_scheme; + GList *apps; + char *uri, *mime_type; gboolean result; - all_applications_for_mime_type = nautilus_mime_get_applications_for_file (file); - - uri_scheme = nautilus_file_get_uri_scheme (file); - application_that_can_access_uri = g_list_find_custom - (all_applications_for_mime_type, - uri_scheme, - application_supports_uri_scheme_strcmp_style); - g_free (uri_scheme); - - result = application_that_can_access_uri != NULL; - gnome_vfs_mime_application_list_free (all_applications_for_mime_type); + uri = nautilus_file_get_uri (file); + mime_type = nautilus_file_get_mime_type (file); + + apps = gnome_vfs_mime_get_all_applications_for_uri (uri, mime_type); + + if (apps) { + result = TRUE; + gnome_vfs_mime_application_list_free (apps); + } else { + result = FALSE; + } + + g_free (mime_type); + g_free (uri); return result; } - -static int -gnome_vfs_mime_application_has_id (GnomeVFSMimeApplication *application, - const char *id) -{ - return strcmp (application->id, id); -} - -static gboolean -application_supports_uri_scheme (gpointer data, - gpointer uri_scheme) -{ - GnomeVFSMimeApplication *application; - - g_assert (data != NULL); - application = (GnomeVFSMimeApplication *) data; - - /* The default supported uri scheme is "file" */ - if (application->supported_uri_schemes == NULL - && g_ascii_strcasecmp ((const char *) uri_scheme, "file") == 0) { - return TRUE; - } - return g_list_find_custom (application->supported_uri_schemes, - uri_scheme, - eel_strcasecmp_compare_func) != NULL; -} diff --git a/libnautilus-private/nautilus-mime-actions.h b/libnautilus-private/nautilus-mime-actions.h index 75ec57b45..f1035f387 100644 --- a/libnautilus-private/nautilus-mime-actions.h +++ b/libnautilus-private/nautilus-mime-actions.h @@ -29,18 +29,13 @@ #include <libnautilus-private/nautilus-file.h> +NautilusFileAttributes nautilus_mime_actions_get_minimum_file_attributes (void); +NautilusFileAttributes nautilus_mime_actions_get_full_file_attributes (void); -NautilusFileAttributes nautilus_mime_actions_get_minimum_file_attributes (void); -NautilusFileAttributes nautilus_mime_actions_get_full_file_attributes (void); +GnomeVFSMimeApplication *nautilus_mime_get_default_application_for_file (NautilusFile *file); +GList * nautilus_mime_get_open_with_applications_for_file (NautilusFile *file); +GList * nautilus_mime_get_applications_for_file (NautilusFile *file); -GnomeVFSMimeApplication *nautilus_mime_get_default_application_for_file (NautilusFile *file); -GList * nautilus_mime_get_open_with_applications_for_file (NautilusFile *file); -GList * nautilus_mime_get_applications_for_file (NautilusFile *file); - - -gboolean nautilus_mime_has_any_applications_for_file (NautilusFile *file); - -GnomeVFSResult nautilus_mime_set_default_application_for_file (NautilusFile *file, - const char *application_id); +gboolean nautilus_mime_has_any_applications_for_file (NautilusFile *file); #endif /* NAUTILUS_MIME_ACTIONS_H */ diff --git a/libnautilus-private/nautilus-program-choosing.c b/libnautilus-private/nautilus-program-choosing.c index 985383301..b47d08902 100644 --- a/libnautilus-private/nautilus-program-choosing.c +++ b/libnautilus-private/nautilus-program-choosing.c @@ -42,7 +42,6 @@ #include <libgnome/gnome-desktop-item.h> #include <libgnome/gnome-url.h> #include <libgnomeui/gnome-uidefs.h> -#include <libgnomevfs/gnome-vfs-application-registry.h> #include <libgnomevfs/gnome-vfs-mime-handlers.h> #include <libgnomevfs/gnome-vfs-utils.h> #include <stdlib.h> @@ -473,9 +472,7 @@ void nautilus_launch_show_file (NautilusFile *file, /* Only initiate notification if application supports it. */ if (application) { - startup_notify = gnome_vfs_application_registry_get_bool_value (application->id, - GNOME_VFS_APPLICATION_REGISTRY_STARTUP_NOTIFY, - NULL); + startup_notify = gnome_vfs_mime_application_supports_startup_notification (application); } else { startup_notify = FALSE; } @@ -516,7 +513,7 @@ void nautilus_launch_show_file (NautilusFile *file, timestamp = slowly_and_stupidly_obtain_timestamp (sn_display); - binary_name = application->command; + binary_name = gnome_vfs_mime_application_get_binary_name (application); sn_launcher_context_set_binary_name (sn_context, binary_name); @@ -711,9 +708,8 @@ nautilus_launch_application (GnomeVFSMimeApplication *application, /* Only initiate notification if application supports it. */ - if (gnome_vfs_application_registry_get_bool_value (application->id, - GNOME_VFS_APPLICATION_REGISTRY_STARTUP_NOTIFY, - NULL)) { + if (gnome_vfs_mime_application_supports_startup_notification (application)) + { char *name; char *icon; @@ -748,7 +744,7 @@ nautilus_launch_application (GnomeVFSMimeApplication *application, timestamp = slowly_and_stupidly_obtain_timestamp (sn_display); - binary_name = application->command; + binary_name = gnome_vfs_mime_application_get_binary_name (application); sn_launcher_context_set_binary_name (sn_context, binary_name); diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c index f7e0eba5f..f3f3db7ff 100644 --- a/src/file-manager/fm-directory-view.c +++ b/src/file-manager/fm-directory-view.c @@ -3904,7 +3904,7 @@ reset_open_with_menu (FMDirectoryView *view, GList *selection) application = node->data; - if (default_app && !strcmp (default_app->id, application->id)) { + if (default_app && gnome_vfs_mime_application_equal (default_app, application)) { continue; } @@ -4225,11 +4225,8 @@ activate_check_mime_types (FMDirectoryView *view, (mime_type); guessed_default_app = gnome_vfs_mime_get_default_application (guessed_mime_type); - if (default_app == NULL || - default_app->id == NULL || - guessed_default_app == NULL || - guessed_default_app->id == NULL || - strcmp (default_app->id, guessed_default_app->id) != 0) { + if (default_app == NULL || guessed_default_app == NULL || + !gnome_vfs_mime_application_equal (default_app, guessed_default_app)) { if (warn_on_mismatch) { warn_mismatched_mime_types (view, file); } diff --git a/src/nautilus-information-panel.c b/src/nautilus-information-panel.c index 0dbc59857..de4ed4426 100644 --- a/src/nautilus-information-panel.c +++ b/src/nautilus-information-panel.c @@ -45,7 +45,6 @@ #include <gtk/gtksignal.h> #include <libgnome/gnome-i18n.h> #include <libgnomeui/gnome-uidefs.h> -#include <libgnomevfs/gnome-vfs-application-registry.h> #include <libgnomevfs/gnome-vfs-mime-handlers.h> #include <libgnomevfs/gnome-vfs-types.h> #include <libgnomevfs/gnome-vfs-uri.h> @@ -852,7 +851,7 @@ command_button_callback (GtkWidget *button, char *id_str) information_panel = NAUTILUS_INFORMATION_PANEL (g_object_get_data (G_OBJECT (button), "user_data")); - application = gnome_vfs_application_registry_get_mime_application (id_str); + application = gnome_vfs_mime_application_new_from_desktop_id (id_str); if (application != NULL) { nautilus_launch_application (application, information_panel->details->file, @@ -873,48 +872,12 @@ metadata_button_callback (GtkWidget *button, const char *command_str) information_panel = NAUTILUS_INFORMATION_PANEL (g_object_get_data (G_OBJECT (button), "user_data")); } -#if NEW_MIME_COMPLETE -static void -nautilus_information_panel_chose_application_callback (GnomeVFSMimeApplication *application, - gpointer callback_data) -{ - NautilusInformationPanel *information_panel; - - information_panel = NAUTILUS_INFORMATION_PANEL (callback_data); - - if (application != NULL) { - nautilus_launch_application - (application, - information_panel->details->file, - nautilus_information_panel_get_window (information_panel)); - } -} -#endif - -static void -open_with_callback (GtkWidget *button, gpointer ignored) -{ -#if NEW_MIME_COMPLETE - NautilusInformationPanel *information_panel; - - information_panel = NAUTILUS_INFORMATION_PANEL (g_object_get_data (G_OBJECT (button), "user_data")); - - g_return_if_fail (information_panel->details->file != NULL); - - nautilus_choose_application_for_file - (information_panel->details->file, - GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (information_panel))), - nautilus_information_panel_chose_application_callback, - information_panel); -#endif -} - /* utility routine that allocates the command buttons from the command list */ static void add_command_buttons (NautilusInformationPanel *information_panel, GList *application_list) { - char *id_string, *temp_str, *file_path; + char *id_string, *temp_str; GList *p; GtkWidget *temp_button; GnomeVFSMimeApplication *application; @@ -933,16 +896,7 @@ add_command_buttons (NautilusInformationPanel *information_panel, GList *applica FALSE, FALSE, 0); - /* Get the local path, if there is one */ - file_path = gnome_vfs_get_local_path_from_uri (information_panel->details->uri); - if (file_path == NULL) { - file_path = g_strdup (information_panel->details->uri); - } - - temp_str = g_shell_quote (file_path); - id_string = eel_str_replace_substring (application->id, "%s", temp_str); - g_free (file_path); - g_free (temp_str); + id_string = g_strdup (gnome_vfs_mime_application_get_desktop_id (application)); eel_gtk_signal_connect_free_data (GTK_OBJECT (temp_button), "clicked", @@ -952,15 +906,6 @@ add_command_buttons (NautilusInformationPanel *information_panel, GList *applica gtk_widget_show (temp_button); } - - /* Catch-all button after all the others. */ - temp_button = gtk_button_new_with_label (_("Open with...")); - g_signal_connect (temp_button, "clicked", - G_CALLBACK (open_with_callback), NULL); - g_object_set_data (G_OBJECT (temp_button), "user_data", information_panel); - gtk_widget_show (temp_button); - gtk_box_pack_start (GTK_BOX (information_panel->details->button_box), - temp_button, FALSE, FALSE, 0); } /* utility to construct command buttons for the information_panel from the passed in metadata string */ @@ -1108,11 +1053,8 @@ nautilus_information_panel_update_buttons (NautilusInformationPanel *information g_signal_connect (temp_button, "clicked", G_CALLBACK (burn_cd_callback), NULL); } - - /* Make buttons for each item in short list + "Open with..." catchall, - * unless there aren't any applications at all in complete list. - */ + /* Make buttons for each application */ if (nautilus_mime_has_any_applications_for_file (information_panel->details->file)) { short_application_list = nautilus_mime_get_applications_for_file (information_panel->details->file); |