summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@gnome.org>2004-11-25 14:13:38 +0000
committerMarco Pesenti Gritti <marco@src.gnome.org>2004-11-25 14:13:38 +0000
commit4545055bb8b0fa0745a873fe768d9647be31d515 (patch)
treec882c41ae54d41768ac30d52cd3531b2dd7add9e
parentad68e6cef5bf4ac36b71f0d108d1704769587c54 (diff)
downloadnautilus-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--ChangeLog25
-rw-r--r--configure.in2
-rw-r--r--libnautilus-private/nautilus-mime-actions.c144
-rw-r--r--libnautilus-private/nautilus-mime-actions.h17
-rw-r--r--libnautilus-private/nautilus-program-choosing.c14
-rw-r--r--src/file-manager/fm-directory-view.c9
-rw-r--r--src/nautilus-information-panel.c66
7 files changed, 82 insertions, 195 deletions
diff --git a/ChangeLog b/ChangeLog
index 284a41ef9..4cd8c3ae9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);