summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej Stachowiak <mstachow@src.gnome.org>2000-10-18 21:57:19 +0000
committerMaciej Stachowiak <mstachow@src.gnome.org>2000-10-18 21:57:19 +0000
commit6179da4f6ff128650c7b244213fd8f5f10e1df27 (patch)
tree742850118b3e9e32645925b99fe6b9d3a1250f40
parente5483a3a3c4bff78a57b7621f1b3832949426948 (diff)
downloadnautilus-6179da4f6ff128650c7b244213fd8f5f10e1df27.tar.gz
Fixed bugzilla.eazel.com bugs 2222, 3177, 3468, 3650, 3788
(some vestiges of wait_until_ready remain in the farther reaches of the UI). * libnautilus-extensions/nautilus-mime-actions.h, libnautilus-extensions/nautilus-mime-actions.c (nautilus_mime_actions_check_if_required_attributes_ready, nautilus_mime_actions_get_required_file_attributes, nautilus_mime_actions_wait_for_required_file_attributes): New functions to help with monitoring or waiting for required attributes for the nautilus mime API. (nautilus_mime_get_default_action_type_for_file, nautilus_mime_get_default_action_for_file, nautilus_mime_get_default_application_for_file_internal, nautilus_mime_get_default_application_for_file, nautilus_mime_is_default_application_for_file_user_chosen, nautilus_mime_get_default_component_for_file_internal, nautilus_mime_get_default_component_for_file, nautilus_mime_is_default_component_for_file_user_chosen, nautilus_mime_get_short_list_applications_for_file, nautilus_mime_get_short_list_components_for_file, nautilus_mime_get_short_list_methods_for_file, nautilus_mime_get_all_applications_for_file, nautilus_mime_has_any_applications_for_file, nautilus_mime_get_all_components_for_file, nautilus_mime_has_any_components_for_file, nautilus_mime_set_default_action_type_for_file, nautilus_mime_set_default_application_for_file, nautilus_mime_set_default_component_for_file, nautilus_mime_set_short_list_applications_for_file, nautilus_mime_set_short_list_components_for_file, nautilus_mime_add_application_to_short_list_for_file, nautilus_mime_remove_application_from_short_list_for_file, nautilus_mime_add_component_to_short_list_for_file, nautilus_mime_remove_component_from_short_list_for_file, nautilus_mime_extend_all_applications_for_file, nautilus_mime_remove_from_all_applications_for_file, mime_type_get_supertype): Don't `nautilus_file_wait_until_ready' for the required attributes; instead assert (Well, return_if_fail) that they are available using `nautilus_file_check_if_ready'. Also, use `nautilus_file_get_uri_scheme' where possible. * libnautilus-extensions/nautilus-directory-async.c (mime_list_callback): Correct some coding mistakes. * libnautilus-extensions/nautilus-wait-until-ready.h, libnautilus-extensions/nautilus-directory.c: Remove `nautilus_directory_wait_until_ready'. * libnautilus-extensions/nautilus-file.h, libnautilus-extensions/nautilus-file.c (nautilus_file_get_uri_scheme): new convenience function. * libnautilus-extensions/nautilus-program-chooser.c: (repopulate_program_list, is_application_default_for_file, is_component_default_for_file, is_component_in_short_list_for_file, is_application_in_short_list_for_file, program_file_pair_is_default_for_file, program_file_pair_is_in_short_list_for_file, add_to_short_list_for_file, remove_from_short_list_for_file, remove_default_for_item, set_default_for_item): wait_until_ready for required file attributes. * libnautilus-extensions/nautilus-program-choosing.c: (any_programs_available_for_file): wait_until_ready for required file attributes. * src/file-manager/fm-directory-view.c: (switch_location_and_view, create_open_with_gtk_menu, reset_bonobo_open_with_menu, activate_callback): Wait for the right file attributes. * src/nautilus-applicable-views.c: (got_file_info_callback), (nautilus_navigation_info_new): Wait for the right file attributes. (no wait_until_ready). * src/nautilus-sidebar.c: (nautilus_sidebar_destroy, nautilus_sidebar_update_buttons, nautilus_sidebar_update_all), nautilus_sidebar_set_uri): Monitor the file the sidebar is displaying, and update when it's attributes change. * src/nautilus-window-manage-views.c (nautilus_window_set_content_view): Wait for the right file attributes. (no wait_until_ready). * src/nautilus-window.c: (nautilus_window_destroy, view_menu_choose_view_callback, view_menu_vfs_method_callback, nautilus_window_real_load_content_view_menu, nautilus_window_load_content_view_menu): Wait for the right attributes. (no wait_until_ready in this chain). * test/test-nautilus-mime-actions-set.c (main): Wait for the right attributes. * test/test-nautilus-mime-actions.c (main): Wait for the right attributes.
-rw-r--r--ChangeLog97
-rw-r--r--libnautilus-extensions/nautilus-directory-async.c2
-rw-r--r--libnautilus-extensions/nautilus-directory.c35
-rw-r--r--libnautilus-extensions/nautilus-file.c28
-rw-r--r--libnautilus-extensions/nautilus-file.h1
-rw-r--r--libnautilus-extensions/nautilus-mime-actions.c250
-rw-r--r--libnautilus-extensions/nautilus-mime-actions.h74
-rw-r--r--libnautilus-extensions/nautilus-program-chooser.c122
-rw-r--r--libnautilus-extensions/nautilus-program-choosing.c11
-rw-r--r--libnautilus-extensions/nautilus-wait-until-ready.h4
-rw-r--r--libnautilus-private/nautilus-directory-async.c2
-rw-r--r--libnautilus-private/nautilus-directory.c35
-rw-r--r--libnautilus-private/nautilus-file.c28
-rw-r--r--libnautilus-private/nautilus-file.h1
-rw-r--r--libnautilus-private/nautilus-mime-actions.c250
-rw-r--r--libnautilus-private/nautilus-mime-actions.h74
-rw-r--r--libnautilus-private/nautilus-program-chooser.c122
-rw-r--r--libnautilus-private/nautilus-program-choosing.c11
-rw-r--r--libnautilus-private/nautilus-wait-until-ready.h4
-rw-r--r--src/file-manager/fm-directory-view.c22
-rw-r--r--src/nautilus-applicable-views.c8
-rw-r--r--src/nautilus-information-panel.c77
-rw-r--r--src/nautilus-navigation-window.c62
-rw-r--r--src/nautilus-object-window.c62
-rw-r--r--src/nautilus-sidebar.c77
-rw-r--r--src/nautilus-spatial-window.c62
-rw-r--r--src/nautilus-window-manage-views.c2
-rw-r--r--src/nautilus-window.c62
-rw-r--r--test/test-nautilus-mime-actions-set.c16
-rw-r--r--test/test-nautilus-mime-actions.c16
30 files changed, 900 insertions, 717 deletions
diff --git a/ChangeLog b/ChangeLog
index 13bc956a0..4f1944d75 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,100 @@
+2000-10-17 Maciej Stachowiak <mjs@eazel.com>
+
+ Fixed bugzilla.eazel.com bugs 2222, 3177, 3468, 3650, 3788
+ (some vestiges of wait_until_ready remain in the farther reaches
+ of the UI).
+
+ * libnautilus-extensions/nautilus-mime-actions.h,
+ libnautilus-extensions/nautilus-mime-actions.c
+ (nautilus_mime_actions_check_if_required_attributes_ready,
+ nautilus_mime_actions_get_required_file_attributes,
+ nautilus_mime_actions_wait_for_required_file_attributes): New
+ functions to help with monitoring or waiting for required
+ attributes for the nautilus mime API.
+ (nautilus_mime_get_default_action_type_for_file,
+ nautilus_mime_get_default_action_for_file,
+ nautilus_mime_get_default_application_for_file_internal,
+ nautilus_mime_get_default_application_for_file,
+ nautilus_mime_is_default_application_for_file_user_chosen,
+ nautilus_mime_get_default_component_for_file_internal,
+ nautilus_mime_get_default_component_for_file,
+ nautilus_mime_is_default_component_for_file_user_chosen,
+ nautilus_mime_get_short_list_applications_for_file,
+ nautilus_mime_get_short_list_components_for_file,
+ nautilus_mime_get_short_list_methods_for_file,
+ nautilus_mime_get_all_applications_for_file,
+ nautilus_mime_has_any_applications_for_file,
+ nautilus_mime_get_all_components_for_file,
+ nautilus_mime_has_any_components_for_file,
+ nautilus_mime_set_default_action_type_for_file,
+ nautilus_mime_set_default_application_for_file,
+ nautilus_mime_set_default_component_for_file,
+ nautilus_mime_set_short_list_applications_for_file,
+ nautilus_mime_set_short_list_components_for_file,
+ nautilus_mime_add_application_to_short_list_for_file,
+ nautilus_mime_remove_application_from_short_list_for_file,
+ nautilus_mime_add_component_to_short_list_for_file,
+ nautilus_mime_remove_component_from_short_list_for_file,
+ nautilus_mime_extend_all_applications_for_file,
+ nautilus_mime_remove_from_all_applications_for_file,
+ mime_type_get_supertype): Don't `nautilus_file_wait_until_ready'
+ for the required attributes; instead assert (Well, return_if_fail)
+ that they are available using
+ `nautilus_file_check_if_ready'. Also, use
+ `nautilus_file_get_uri_scheme' where possible.
+
+ * libnautilus-extensions/nautilus-directory-async.c
+ (mime_list_callback): Correct some coding mistakes.
+
+ * libnautilus-extensions/nautilus-wait-until-ready.h,
+ libnautilus-extensions/nautilus-directory.c: Remove
+ `nautilus_directory_wait_until_ready'.
+
+ * libnautilus-extensions/nautilus-file.h,
+ libnautilus-extensions/nautilus-file.c
+ (nautilus_file_get_uri_scheme): new convenience function.
+
+ * libnautilus-extensions/nautilus-program-chooser.c:
+ (repopulate_program_list, is_application_default_for_file,
+ is_component_default_for_file,
+ is_component_in_short_list_for_file,
+ is_application_in_short_list_for_file,
+ program_file_pair_is_default_for_file,
+ program_file_pair_is_in_short_list_for_file,
+ add_to_short_list_for_file, remove_from_short_list_for_file,
+ remove_default_for_item, set_default_for_item): wait_until_ready
+ for required file attributes.
+
+ * libnautilus-extensions/nautilus-program-choosing.c:
+ (any_programs_available_for_file): wait_until_ready for required
+ file attributes.
+
+ * src/file-manager/fm-directory-view.c: (switch_location_and_view,
+ create_open_with_gtk_menu, reset_bonobo_open_with_menu,
+ activate_callback): Wait for the right file attributes.
+
+ * src/nautilus-applicable-views.c: (got_file_info_callback),
+ (nautilus_navigation_info_new): Wait for the right file
+ attributes. (no wait_until_ready).
+
+ * src/nautilus-sidebar.c: (nautilus_sidebar_destroy,
+ nautilus_sidebar_update_buttons, nautilus_sidebar_update_all),
+ nautilus_sidebar_set_uri): Monitor the file the sidebar is
+ displaying, and update when it's attributes change.
+
+ * src/nautilus-window-manage-views.c
+ (nautilus_window_set_content_view): Wait for the right file
+ attributes. (no wait_until_ready).
+
+ * src/nautilus-window.c: (nautilus_window_destroy,
+ view_menu_choose_view_callback, view_menu_vfs_method_callback,
+ nautilus_window_real_load_content_view_menu,
+ nautilus_window_load_content_view_menu): Wait for the right
+ attributes. (no wait_until_ready in this chain).
+
+ * test/test-nautilus-mime-actions-set.c (main): Wait for the right attributes.
+ * test/test-nautilus-mime-actions.c (main): Wait for the right attributes.
+
2000-10-18 Darin Adler <darin@eazel.com>
* components/notes/nautilus-notes.c: (make_notes_view):
diff --git a/libnautilus-extensions/nautilus-directory-async.c b/libnautilus-extensions/nautilus-directory-async.c
index eef169ab4..045ca697e 100644
--- a/libnautilus-extensions/nautilus-directory-async.c
+++ b/libnautilus-extensions/nautilus-directory-async.c
@@ -2443,8 +2443,10 @@ mime_list_callback (GnomeVFSAsyncHandle *handle,
file->details->directory_count_failed = TRUE;
nautilus_g_list_free_deep (file->details->mime_list);
file->details->mime_list = NULL;
+ file->details->mime_list_status = NAUTILUS_REQUEST_NOT_STARTED;
} else {
file->details->got_mime_list = TRUE;
+ file->details->mime_list_status = NAUTILUS_REQUEST_DONE;
}
g_free (directory->details->mime_list_uri);
diff --git a/libnautilus-extensions/nautilus-directory.c b/libnautilus-extensions/nautilus-directory.c
index be028c644..904a8f229 100644
--- a/libnautilus-extensions/nautilus-directory.c
+++ b/libnautilus-extensions/nautilus-directory.c
@@ -1180,41 +1180,6 @@ nautilus_directory_call_when_ready (NautilusDirectory *directory,
callback, callback_data));
}
-typedef struct {
- gboolean done;
- GList *files_return;
-} WaitUntilReadyCallbackData;
-
-static void
-wait_until_ready_callback (NautilusDirectory *directory,
- GList *files,
- gpointer callback_data)
-{
- WaitUntilReadyCallbackData *data;
-
- data = callback_data;
- data->done = TRUE;
- data->files_return = nautilus_file_list_copy (files);
-}
-
-GList *
-nautilus_directory_wait_until_ready (NautilusDirectory *directory,
- GList *file_attributes)
-{
- WaitUntilReadyCallbackData data;
-
- data.done = FALSE;
- data.files_return = NULL;
-
- nautilus_directory_call_when_ready
- (directory, file_attributes,
- wait_until_ready_callback, &data);
- while (!data.done) {
- gtk_main_iteration ();
- }
-
- return data.files_return;
-}
void
nautilus_directory_cancel_callback (NautilusDirectory *directory,
diff --git a/libnautilus-extensions/nautilus-file.c b/libnautilus-extensions/nautilus-file.c
index 28435c20d..69da59daf 100644
--- a/libnautilus-extensions/nautilus-file.c
+++ b/libnautilus-extensions/nautilus-file.c
@@ -1819,6 +1819,33 @@ nautilus_file_get_uri (NautilusFile *file)
NULL);
}
+
+
+
+char *
+nautilus_file_get_uri_scheme (NautilusFile *file)
+{
+ char *colon;
+
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+
+ if (file->details->directory == NULL ||
+ file->details->directory->details->uri == NULL) {
+ return NULL;
+ }
+
+ colon = strchr (file->details->directory->details->uri, ':');
+
+ if (colon == NULL) {
+ return NULL;
+ }
+
+ return g_strndup (file->details->directory->details->uri,
+ colon - file->details->directory->details->uri);
+}
+
+
+
/**
* nautilus_file_get_date_as_string:
*
@@ -4289,3 +4316,4 @@ nautilus_self_check_file (void)
}
#endif /* !NAUTILUS_OMIT_SELF_CHECK */
+
diff --git a/libnautilus-extensions/nautilus-file.h b/libnautilus-extensions/nautilus-file.h
index a2d625d00..f22fb55e8 100644
--- a/libnautilus-extensions/nautilus-file.h
+++ b/libnautilus-extensions/nautilus-file.h
@@ -115,6 +115,7 @@ gboolean nautilus_file_check_if_ready (NautilusFile *file,
/* Basic attributes for file objects. */
char * nautilus_file_get_name (NautilusFile *file);
char * nautilus_file_get_uri (NautilusFile *file);
+char * nautilus_file_get_uri_scheme (NautilusFile *file);
char * nautilus_file_get_parent_uri (NautilusFile *file);
char * nautilus_file_get_parent_uri_for_display (NautilusFile *file);
GnomeVFSFileSize nautilus_file_get_size (NautilusFile *file);
diff --git a/libnautilus-extensions/nautilus-mime-actions.c b/libnautilus-extensions/nautilus-mime-actions.c
index 125647a2a..983f2da21 100644
--- a/libnautilus-extensions/nautilus-mime-actions.c
+++ b/libnautilus-extensions/nautilus-mime-actions.c
@@ -51,7 +51,6 @@ static char *extract_prefix_add_suffix (const char
const char *separator,
const char *suffix);
static char *mime_type_get_supertype (const char *mime_type);
-static char *uri_string_get_scheme (const char *uri_string);
static GList *get_explicit_content_view_iids_from_metafile (NautilusFile *file);
static char *make_oaf_query_for_explicit_content_view_iids (GList *view_iids);
static char *make_oaf_query_with_known_mime_type (const char *mime_type,
@@ -96,22 +95,25 @@ is_known_mime_type (const char *mime_type)
return TRUE;
}
-static void
-nautilus_file_wait_for_metadata (NautilusFile *file)
+
+
+static gboolean
+nautilus_mime_actions_check_if_required_attributes_ready (NautilusFile *file)
{
GList *attributes;
+ gboolean ready;
- attributes = NULL;
- attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_METADATA);
- attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_SLOW_MIME_TYPE);
- nautilus_file_wait_until_ready (file, attributes);
+ attributes = nautilus_mime_actions_get_required_file_attributes ();
+ ready = nautilus_file_check_if_ready (file, attributes);
g_list_free (attributes);
+
+ return ready;
}
-static void
-nautilus_file_wait_for_mime_action_attributes (NautilusFile *file)
+GList *
+nautilus_mime_actions_get_required_file_attributes ()
{
GList *attributes;
@@ -119,21 +121,33 @@ nautilus_file_wait_for_mime_action_attributes (NautilusFile *file)
attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_METADATA);
attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_SLOW_MIME_TYPE);
attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES);
- nautilus_file_wait_until_ready (file, attributes);
- g_list_free (attributes);
+
+ return attributes;
}
+void
+nautilus_mime_actions_wait_for_required_file_attributes (NautilusFile *file)
+{
+ GList *attributes;
+
+ attributes = nautilus_mime_actions_get_required_file_attributes ();
+
+ nautilus_file_wait_until_ready (file, attributes);
+
+ g_list_free (attributes);
+}
GnomeVFSMimeActionType
-nautilus_mime_get_default_action_type_for_uri (NautilusFile *file)
+nautilus_mime_get_default_action_type_for_file (NautilusFile *file)
{
char *mime_type;
char *action_type_string;
GnomeVFSMimeActionType action_type;
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_MIME_ACTION_TYPE_NONE);
action_type_string = nautilus_file_get_metadata
(file, NAUTILUS_METADATA_KEY_DEFAULT_ACTION_TYPE, NULL);
@@ -155,18 +169,21 @@ nautilus_mime_get_default_action_type_for_uri (NautilusFile *file)
}
GnomeVFSMimeAction *
-nautilus_mime_get_default_action_for_uri (NautilusFile *file)
+nautilus_mime_get_default_action_for_file (NautilusFile *file)
{
GnomeVFSMimeAction *action;
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
+
action = g_new0 (GnomeVFSMimeAction, 1);
- action->action_type = nautilus_mime_get_default_action_type_for_uri (file);
+ action->action_type = nautilus_mime_get_default_action_type_for_file (file);
switch (action->action_type) {
case GNOME_VFS_MIME_ACTION_TYPE_APPLICATION:
action->action.application =
- nautilus_mime_get_default_application_for_uri (file);
+ nautilus_mime_get_default_application_for_file (file);
if (action->action.application == NULL) {
g_free (action);
action = NULL;
@@ -174,7 +191,7 @@ nautilus_mime_get_default_action_for_uri (NautilusFile *file)
break;
case GNOME_VFS_MIME_ACTION_TYPE_COMPONENT:
action->action.component =
- nautilus_mime_get_default_component_for_uri (file);
+ nautilus_mime_get_default_component_for_file (file);
if (action->action.component == NULL) {
g_free (action);
action = NULL;
@@ -192,7 +209,7 @@ nautilus_mime_get_default_action_for_uri (NautilusFile *file)
static GnomeVFSMimeApplication *
-nautilus_mime_get_default_application_for_uri_internal (NautilusFile *file,
+nautilus_mime_get_default_application_for_file_internal (NautilusFile *file,
gboolean *user_chosen)
{
char *mime_type;
@@ -200,9 +217,11 @@ nautilus_mime_get_default_application_for_uri_internal (NautilusFile *file,
char *default_application_string;
gboolean used_user_chosen_info;
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
+
used_user_chosen_info = TRUE;
- nautilus_file_wait_for_metadata (file);
default_application_string = nautilus_file_get_metadata
(file, NAUTILUS_METADATA_KEY_DEFAULT_APPLICATION, NULL);
@@ -223,18 +242,18 @@ nautilus_mime_get_default_application_for_uri_internal (NautilusFile *file,
}
GnomeVFSMimeApplication *
-nautilus_mime_get_default_application_for_uri (NautilusFile *file)
+nautilus_mime_get_default_application_for_file (NautilusFile *file)
{
- return nautilus_mime_get_default_application_for_uri_internal (file, NULL);
+ return nautilus_mime_get_default_application_for_file_internal (file, NULL);
}
gboolean
-nautilus_mime_is_default_application_for_uri_user_chosen (NautilusFile *file)
+nautilus_mime_is_default_application_for_file_user_chosen (NautilusFile *file)
{
GnomeVFSMimeApplication *application;
gboolean user_chosen;
- application = nautilus_mime_get_default_application_for_uri_internal (file, &user_chosen);
+ application = nautilus_mime_get_default_application_for_file_internal (file, &user_chosen);
/* Doesn't count as user chosen if the user-specified data is bogus and doesn't
* result in an actual application.
@@ -250,13 +269,12 @@ nautilus_mime_is_default_application_for_uri_user_chosen (NautilusFile *fil
static OAF_ServerInfo *
-nautilus_mime_get_default_component_for_uri_internal (NautilusFile *file,
+nautilus_mime_get_default_component_for_file_internal (NautilusFile *file,
gboolean *user_chosen)
{
GList *info_list;
OAF_ServerInfo *mime_default;
char *default_component_string;
- char *uri;
char *mime_type;
char *uri_scheme;
GList *item_mime_types;
@@ -270,19 +288,17 @@ nautilus_mime_get_default_component_for_uri_internal (NautilusFile *file,
GList *p;
char *prev;
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
+
used_user_chosen_info = TRUE;
CORBA_exception_init (&ev);
mime_type = nautilus_file_get_slow_mime_type (file);
- uri = nautilus_file_get_uri (file);
-
- uri_scheme = uri_string_get_scheme (uri);
+ uri_scheme = nautilus_file_get_uri_scheme (file);
- g_free (uri);
-
- nautilus_file_wait_for_mime_action_attributes (file);
explicit_iids = get_explicit_content_view_iids_from_metafile (file);
nautilus_file_get_directory_item_mime_types (file, &item_mime_types);
@@ -318,7 +334,7 @@ nautilus_mime_get_default_component_for_uri_internal (NautilusFile *file,
/* Prefer something from the short list */
- short_list = nautilus_mime_get_short_list_components_for_uri (file);
+ short_list = nautilus_mime_get_short_list_components_for_file (file);
if (short_list != NULL) {
sort_conditions[1] = g_strdup ("has (['");
@@ -394,18 +410,18 @@ nautilus_mime_get_default_component_for_uri_internal (NautilusFile *file,
OAF_ServerInfo *
-nautilus_mime_get_default_component_for_uri (NautilusFile *file)
+nautilus_mime_get_default_component_for_file (NautilusFile *file)
{
- return nautilus_mime_get_default_component_for_uri_internal (file, NULL);
+ return nautilus_mime_get_default_component_for_file_internal (file, NULL);
}
gboolean
-nautilus_mime_is_default_component_for_uri_user_chosen (NautilusFile *file)
+nautilus_mime_is_default_component_for_file_user_chosen (NautilusFile *file)
{
OAF_ServerInfo *component;
gboolean user_chosen;
- component = nautilus_mime_get_default_component_for_uri_internal (file, &user_chosen);
+ component = nautilus_mime_get_default_component_for_file_internal (file, &user_chosen);
/* Doesn't count as user chosen if the user-specified data is bogus and doesn't
* result in an actual component.
@@ -421,7 +437,7 @@ nautilus_mime_is_default_component_for_uri_user_chosen (NautilusFile *file)
GList *
-nautilus_mime_get_short_list_applications_for_uri (NautilusFile *file)
+nautilus_mime_get_short_list_applications_for_file (NautilusFile *file)
{
char *mime_type;
GList *result;
@@ -432,9 +448,11 @@ nautilus_mime_get_short_list_applications_for_uri (NautilusFile *file)
GnomeVFSMimeApplication *application;
CORBA_Environment ev;
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
+
CORBA_exception_init (&ev);
- nautilus_file_wait_for_metadata (file);
metadata_application_add_ids = nautilus_file_get_metadata_list
(file,
NAUTILUS_METADATA_KEY_SHORT_LIST_APPLICATION_ADD,
@@ -474,9 +492,8 @@ nautilus_mime_get_short_list_applications_for_uri (NautilusFile *file)
}
GList *
-nautilus_mime_get_short_list_components_for_uri (NautilusFile *file)
+nautilus_mime_get_short_list_components_for_file (NautilusFile *file)
{
- char *uri;
char *mime_type;
char *uri_scheme;
GList *item_mime_types;
@@ -493,15 +510,13 @@ nautilus_mime_get_short_list_components_for_uri (NautilusFile *file)
char *extra_requirements;
char *prev;
- CORBA_exception_init (&ev);
-
- uri = nautilus_file_get_uri (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
- uri_scheme = uri_string_get_scheme (uri);
+ CORBA_exception_init (&ev);
- g_free (uri);
+ uri_scheme = nautilus_file_get_uri_scheme (file);
- nautilus_file_wait_for_mime_action_attributes (file);
explicit_iids = get_explicit_content_view_iids_from_metafile (file);
nautilus_file_get_directory_item_mime_types (file, &item_mime_types);
@@ -574,12 +589,14 @@ nautilus_mime_get_short_list_components_for_uri (NautilusFile *file)
/* FIXME: we should disable this for 1.0 I think */
char *
-nautilus_mime_get_short_list_methods_for_uri (NautilusFile *file)
+nautilus_mime_get_short_list_methods_for_file (NautilusFile *file)
{
char *mime_type;
const char *method;
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
+
mime_type = nautilus_file_get_slow_mime_type (file);
method = gnome_vfs_mime_get_value (mime_type, "vfs-method");
g_free (mime_type);
@@ -587,7 +604,7 @@ nautilus_mime_get_short_list_methods_for_uri (NautilusFile *file)
}
GList *
-nautilus_mime_get_all_applications_for_uri (NautilusFile *file)
+nautilus_mime_get_all_applications_for_file (NautilusFile *file)
{
char *mime_type;
GList *result;
@@ -595,7 +612,9 @@ nautilus_mime_get_all_applications_for_uri (NautilusFile *file)
GList *p;
GnomeVFSMimeApplication *application;
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
+
metadata_application_ids = nautilus_file_get_metadata_list
(file,
NAUTILUS_METADATA_KEY_EXPLICIT_APPLICATION,
@@ -622,12 +641,12 @@ nautilus_mime_get_all_applications_for_uri (NautilusFile *file)
}
gboolean
-nautilus_mime_has_any_applications_for_uri (NautilusFile *file)
+nautilus_mime_has_any_applications_for_file (NautilusFile *file)
{
GList *list;
gboolean result;
- list = nautilus_mime_get_all_applications_for_uri (file);
+ list = nautilus_mime_get_all_applications_for_file (file);
result = list != NULL;
gnome_vfs_mime_application_list_free (list);
@@ -635,9 +654,8 @@ nautilus_mime_has_any_applications_for_uri (NautilusFile *file)
}
GList *
-nautilus_mime_get_all_components_for_uri (NautilusFile *file)
+nautilus_mime_get_all_components_for_file (NautilusFile *file)
{
- char *uri;
char *mime_type;
char *uri_scheme;
GList *item_mime_types;
@@ -645,13 +663,12 @@ nautilus_mime_get_all_components_for_uri (NautilusFile *file)
GList *explicit_iids;
CORBA_Environment ev;
- CORBA_exception_init (&ev);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
- uri = nautilus_file_get_uri (file);
- uri_scheme = uri_string_get_scheme (uri);
- g_free (uri);
+ CORBA_exception_init (&ev);
- nautilus_file_wait_for_mime_action_attributes (file);
+ uri_scheme = nautilus_file_get_uri_scheme (file);
mime_type = nautilus_file_get_slow_mime_type (file);
explicit_iids = get_explicit_content_view_iids_from_metafile (file);
@@ -667,12 +684,12 @@ nautilus_mime_get_all_components_for_uri (NautilusFile *file)
}
gboolean
-nautilus_mime_has_any_components_for_uri (NautilusFile *file)
+nautilus_mime_has_any_components_for_file (NautilusFile *file)
{
GList *list;
gboolean result;
- list = nautilus_mime_get_all_components_for_uri (file);
+ list = nautilus_mime_get_all_components_for_file (file);
result = list != NULL;
gnome_vfs_mime_component_list_free (list);
@@ -680,8 +697,8 @@ nautilus_mime_has_any_components_for_uri (NautilusFile *file)
}
GnomeVFSResult
-nautilus_mime_set_default_action_type_for_uri (NautilusFile *file,
- GnomeVFSMimeActionType action_type)
+nautilus_mime_set_default_action_type_for_file (NautilusFile *file,
+ GnomeVFSMimeActionType action_type)
{
const char *action_string;
@@ -697,7 +714,6 @@ nautilus_mime_set_default_action_type_for_uri (NautilusFile *file,
action_string = "none";
}
- nautilus_file_wait_for_metadata (file);
nautilus_file_set_metadata
(file, NAUTILUS_METADATA_KEY_DEFAULT_ACTION_TYPE, NULL, action_string);
@@ -705,42 +721,46 @@ nautilus_mime_set_default_action_type_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_set_default_application_for_uri (NautilusFile *file,
- const char *application_id)
+nautilus_mime_set_default_application_for_file (NautilusFile *file,
+ const char *application_id)
{
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
nautilus_file_set_metadata
(file, NAUTILUS_METADATA_KEY_DEFAULT_APPLICATION, NULL, application_id);
/* If there's no default action type, set it to match this. */
if (application_id != NULL &&
- nautilus_mime_get_default_action_type_for_uri (file) == GNOME_VFS_MIME_ACTION_TYPE_NONE) {
- return nautilus_mime_set_default_action_type_for_uri (file, GNOME_VFS_MIME_ACTION_TYPE_APPLICATION);
+ nautilus_mime_get_default_action_type_for_file (file) == GNOME_VFS_MIME_ACTION_TYPE_NONE) {
+ return nautilus_mime_set_default_action_type_for_file (file, GNOME_VFS_MIME_ACTION_TYPE_APPLICATION);
}
return GNOME_VFS_OK;
}
GnomeVFSResult
-nautilus_mime_set_default_component_for_uri (NautilusFile *file,
- const char *component_iid)
+nautilus_mime_set_default_component_for_file (NautilusFile *file,
+ const char *component_iid)
{
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
nautilus_file_set_metadata
(file, NAUTILUS_METADATA_KEY_DEFAULT_COMPONENT, NULL, component_iid);
/* If there's no default action type, set it to match this. */
if (component_iid != NULL &&
- nautilus_mime_get_default_action_type_for_uri (file) == GNOME_VFS_MIME_ACTION_TYPE_NONE) {
- return nautilus_mime_set_default_action_type_for_uri (file, GNOME_VFS_MIME_ACTION_TYPE_COMPONENT);
+ nautilus_mime_get_default_action_type_for_file (file) == GNOME_VFS_MIME_ACTION_TYPE_NONE) {
+ return nautilus_mime_set_default_action_type_for_file (file, GNOME_VFS_MIME_ACTION_TYPE_COMPONENT);
}
return GNOME_VFS_OK;
}
GnomeVFSResult
-nautilus_mime_set_short_list_applications_for_uri (NautilusFile *file,
- GList *applications)
+nautilus_mime_set_short_list_applications_for_file (NautilusFile *file,
+ GList *applications)
{
GList *add_list;
GList *remove_list;
@@ -749,6 +769,9 @@ nautilus_mime_set_short_list_applications_for_uri (NautilusFile *file,
GList *p;
char *mime_type;
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
/* get per-mime short list */
mime_type = nautilus_file_get_slow_mime_type (file);
@@ -765,7 +788,6 @@ nautilus_mime_set_short_list_applications_for_uri (NautilusFile *file,
add_list = str_list_difference (applications, normal_short_list_ids);
remove_list = str_list_difference (normal_short_list_ids, applications);
- nautilus_file_wait_for_metadata (file);
nautilus_file_set_metadata_list
(file,
NAUTILUS_METADATA_KEY_SHORT_LIST_APPLICATION_ADD,
@@ -785,8 +807,8 @@ nautilus_mime_set_short_list_applications_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_set_short_list_components_for_uri (NautilusFile *file,
- GList *components)
+nautilus_mime_set_short_list_components_for_file (NautilusFile *file,
+ GList *components)
{
GList *add_list;
GList *remove_list;
@@ -795,8 +817,10 @@ nautilus_mime_set_short_list_components_for_uri (NautilusFile *file,
GList *p;
char *mime_type;
- /* get per-mime short list */
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+ /* get per-mime short list */
mime_type = nautilus_file_get_slow_mime_type (file);
normal_short_list = gnome_vfs_mime_get_short_list_components (mime_type);
g_free (mime_type);
@@ -811,7 +835,6 @@ nautilus_mime_set_short_list_components_for_uri (NautilusFile *file,
add_list = str_list_difference (components, normal_short_list_ids);
remove_list = str_list_difference (normal_short_list_ids, components);
- nautilus_file_wait_for_metadata (file);
nautilus_file_set_metadata_list
(file,
NAUTILUS_METADATA_KEY_SHORT_LIST_COMPONENT_ADD,
@@ -831,20 +854,23 @@ nautilus_mime_set_short_list_components_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_add_application_to_short_list_for_uri (NautilusFile *file,
- const char *application_id)
+nautilus_mime_add_application_to_short_list_for_file (NautilusFile *file,
+ const char *application_id)
{
GList *old_list, *new_list;
GnomeVFSResult result;
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
result = GNOME_VFS_OK;
- old_list = nautilus_mime_get_short_list_applications_for_uri (file);
+ old_list = nautilus_mime_get_short_list_applications_for_file (file);
if (!gnome_vfs_mime_id_in_application_list (application_id, old_list)) {
new_list = g_list_append (gnome_vfs_mime_id_list_from_application_list (old_list),
g_strdup (application_id));
- result = nautilus_mime_set_short_list_applications_for_uri (file, new_list);
+ result = nautilus_mime_set_short_list_applications_for_file (file, new_list);
nautilus_g_list_free_deep (new_list);
}
@@ -854,14 +880,17 @@ nautilus_mime_add_application_to_short_list_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_remove_application_from_short_list_for_uri (NautilusFile *file,
- const char *application_id)
+nautilus_mime_remove_application_from_short_list_for_file (NautilusFile *file,
+ const char *application_id)
{
GList *old_list, *new_list;
gboolean was_in_list;
GnomeVFSResult result;
- old_list = nautilus_mime_get_short_list_applications_for_uri (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
+ old_list = nautilus_mime_get_short_list_applications_for_file (file);
old_list = gnome_vfs_mime_remove_application_from_list
(old_list, application_id, &was_in_list);
@@ -869,7 +898,7 @@ nautilus_mime_remove_application_from_short_list_for_uri (NautilusFile *fil
result = GNOME_VFS_OK;
} else {
new_list = gnome_vfs_mime_id_list_from_application_list (old_list);
- result = nautilus_mime_set_short_list_applications_for_uri (file, new_list);
+ result = nautilus_mime_set_short_list_applications_for_file (file, new_list);
nautilus_g_list_free_deep (new_list);
}
@@ -879,20 +908,23 @@ nautilus_mime_remove_application_from_short_list_for_uri (NautilusFile *fil
}
GnomeVFSResult
-nautilus_mime_add_component_to_short_list_for_uri (NautilusFile *file,
- const char *iid)
+nautilus_mime_add_component_to_short_list_for_file (NautilusFile *file,
+ const char *iid)
{
GList *old_list, *new_list;
GnomeVFSResult result;
- old_list = nautilus_mime_get_short_list_components_for_uri (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
+ old_list = nautilus_mime_get_short_list_components_for_file (file);
if (gnome_vfs_mime_id_in_component_list (iid, old_list)) {
result = GNOME_VFS_OK;
} else {
new_list = g_list_append (gnome_vfs_mime_id_list_from_component_list (old_list),
g_strdup (iid));
- result = nautilus_mime_set_short_list_components_for_uri (file, new_list);
+ result = nautilus_mime_set_short_list_components_for_file (file, new_list);
nautilus_g_list_free_deep (new_list);
}
@@ -902,14 +934,17 @@ nautilus_mime_add_component_to_short_list_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_remove_component_from_short_list_for_uri (NautilusFile *file,
- const char *iid)
+nautilus_mime_remove_component_from_short_list_for_file (NautilusFile *file,
+ const char *iid)
{
GList *old_list, *new_list;
gboolean was_in_list;
GnomeVFSResult result;
- old_list = nautilus_mime_get_short_list_components_for_uri (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
+ old_list = nautilus_mime_get_short_list_components_for_file (file);
old_list = gnome_vfs_mime_remove_component_from_list
(old_list, iid, &was_in_list);
@@ -917,7 +952,7 @@ nautilus_mime_remove_component_from_short_list_for_uri (NautilusFile *file,
result = GNOME_VFS_OK;
} else {
new_list = gnome_vfs_mime_id_list_from_component_list (old_list);
- result = nautilus_mime_set_short_list_components_for_uri (file, new_list);
+ result = nautilus_mime_set_short_list_components_for_file (file, new_list);
nautilus_g_list_free_deep (new_list);
}
@@ -927,14 +962,15 @@ nautilus_mime_remove_component_from_short_list_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_extend_all_applications_for_uri (NautilusFile *file,
- GList *applications)
+nautilus_mime_extend_all_applications_for_file (NautilusFile *file,
+ GList *applications)
{
GList *metadata_application_ids;
GList *extras;
GList *final_applications;
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
metadata_application_ids = nautilus_file_get_metadata_list
(file,
@@ -955,13 +991,14 @@ nautilus_mime_extend_all_applications_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_remove_from_all_applications_for_uri (NautilusFile *file,
- GList *applications)
+nautilus_mime_remove_from_all_applications_for_file (NautilusFile *file,
+ GList *applications)
{
GList *metadata_application_ids;
GList *final_applications;
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
metadata_application_ids = nautilus_file_get_metadata_list
(file,
@@ -1041,13 +1078,6 @@ mime_type_get_supertype (const char *mime_type)
return extract_prefix_add_suffix (mime_type, "/", "/*");
}
-static char *
-uri_string_get_scheme (const char *uri_string)
-{
- return extract_prefix_add_suffix (uri_string, ":", "");
-}
-
-
/*
* The following routine uses metadata associated with the current url
diff --git a/libnautilus-extensions/nautilus-mime-actions.h b/libnautilus-extensions/nautilus-mime-actions.h
index b24a6c14f..fd76cd161 100644
--- a/libnautilus-extensions/nautilus-mime-actions.h
+++ b/libnautilus-extensions/nautilus-mime-actions.h
@@ -30,46 +30,50 @@
#include <libnautilus-extensions/nautilus-file.h>
+GList *nautilus_mime_actions_get_required_file_attributes (void);
-GnomeVFSMimeActionType nautilus_mime_get_default_action_type_for_uri (NautilusFile *file);
-GnomeVFSMimeAction * nautilus_mime_get_default_action_for_uri (NautilusFile *file);
-GnomeVFSMimeApplication *nautilus_mime_get_default_application_for_uri (NautilusFile *file);
-gboolean nautilus_mime_is_default_application_for_uri_user_chosen (NautilusFile *file);
-OAF_ServerInfo * nautilus_mime_get_default_component_for_uri (NautilusFile *file);
-gboolean nautilus_mime_is_default_component_for_uri_user_chosen (NautilusFile *file);
-GList * nautilus_mime_get_short_list_applications_for_uri (NautilusFile *file);
-GList * nautilus_mime_get_short_list_components_for_uri (NautilusFile *file);
-gchar * nautilus_mime_get_short_list_methods_for_uri (NautilusFile *file);
-GList * nautilus_mime_get_all_applications_for_uri (NautilusFile *file);
-GList * nautilus_mime_get_all_components_for_uri (NautilusFile *file);
-gboolean nautilus_mime_has_any_components_for_uri (NautilusFile *file);
-gboolean nautilus_mime_has_any_applications_for_uri (NautilusFile *file);
-GnomeVFSResult nautilus_mime_set_default_action_type_for_uri (NautilusFile *file,
- GnomeVFSMimeActionType action_type);
-GnomeVFSResult nautilus_mime_set_default_application_for_uri (NautilusFile *file,
- const char *application_id);
-GnomeVFSResult nautilus_mime_set_default_component_for_uri (NautilusFile *file,
- const char *component_iid);
+void nautilus_mime_actions_wait_for_required_file_attributes (NautilusFile *file);
+
+
+GnomeVFSMimeActionType nautilus_mime_get_default_action_type_for_file (NautilusFile *file);
+GnomeVFSMimeAction * nautilus_mime_get_default_action_for_file (NautilusFile *file);
+GnomeVFSMimeApplication *nautilus_mime_get_default_application_for_file (NautilusFile *file);
+gboolean nautilus_mime_is_default_application_for_file_user_chosen (NautilusFile *file);
+OAF_ServerInfo * nautilus_mime_get_default_component_for_file (NautilusFile *file);
+gboolean nautilus_mime_is_default_component_for_file_user_chosen (NautilusFile *file);
+GList * nautilus_mime_get_short_list_applications_for_file (NautilusFile *file);
+GList * nautilus_mime_get_short_list_components_for_file (NautilusFile *file);
+gchar * nautilus_mime_get_short_list_methods_for_file (NautilusFile *file);
+GList * nautilus_mime_get_all_applications_for_file (NautilusFile *file);
+GList * nautilus_mime_get_all_components_for_file (NautilusFile *file);
+gboolean nautilus_mime_has_any_components_for_file (NautilusFile *file);
+gboolean nautilus_mime_has_any_applications_for_file (NautilusFile *file);
+GnomeVFSResult nautilus_mime_set_default_action_type_for_file (NautilusFile *file,
+ GnomeVFSMimeActionType action_type);
+GnomeVFSResult nautilus_mime_set_default_application_for_file (NautilusFile *file,
+ const char *application_id);
+GnomeVFSResult nautilus_mime_set_default_component_for_file (NautilusFile *file,
+ const char *component_iid);
/* Stored as delta to current user level */
-GnomeVFSResult nautilus_mime_set_short_list_applications_for_uri (NautilusFile *file,
- GList *components);
-GnomeVFSResult nautilus_mime_add_application_to_short_list_for_uri (NautilusFile *file,
- const char *application_id);
-GnomeVFSResult nautilus_mime_remove_application_from_short_list_for_uri (NautilusFile *file,
- const char *application_id);
-GnomeVFSResult nautilus_mime_set_short_list_components_for_uri (NautilusFile *file,
- GList *components);
-GnomeVFSResult nautilus_mime_add_component_to_short_list_for_uri (NautilusFile *file,
- const char *iid);
-GnomeVFSResult nautilus_mime_remove_component_from_short_list_for_uri (NautilusFile *file,
- const char *iid);
+GnomeVFSResult nautilus_mime_set_short_list_applications_for_file (NautilusFile *file,
+ GList *components);
+GnomeVFSResult nautilus_mime_add_application_to_short_list_for_file (NautilusFile *file,
+ const char *application_id);
+GnomeVFSResult nautilus_mime_remove_application_from_short_list_for_file (NautilusFile *file,
+ const char *application_id);
+GnomeVFSResult nautilus_mime_set_short_list_components_for_file (NautilusFile *file,
+ GList *components);
+GnomeVFSResult nautilus_mime_add_component_to_short_list_for_file (NautilusFile *file,
+ const char *iid);
+GnomeVFSResult nautilus_mime_remove_component_from_short_list_for_file (NautilusFile *file,
+ const char *iid);
/* No way to override system list; can only add. */
-GnomeVFSResult nautilus_mime_extend_all_applications_for_uri (NautilusFile *file,
- GList *applications);
+GnomeVFSResult nautilus_mime_extend_all_applications_for_file (NautilusFile *file,
+ GList *applications);
/* Only "user" entries may be removed. */
-GnomeVFSResult nautilus_mime_remove_from_all_applications_for_uri (NautilusFile *file,
- GList *applications);
+GnomeVFSResult nautilus_mime_remove_from_all_applications_for_file (NautilusFile *file,
+ GList *applications);
/* No way to add to all components; oafinfo database assumed trusted in this regard. */
diff --git a/libnautilus-extensions/nautilus-program-chooser.c b/libnautilus-extensions/nautilus-program-chooser.c
index f00b1db67..3458c78e0 100644
--- a/libnautilus-extensions/nautilus-program-chooser.c
+++ b/libnautilus-extensions/nautilus-program-chooser.c
@@ -310,23 +310,22 @@ repopulate_program_list (GnomeDialog *program_chooser,
GtkCList *clist)
{
char **text;
- char *uri;
GList *programs, *program;
ProgramFilePair *pair;
int new_row;
GnomeVFSMimeActionType type;
+ nautilus_mime_actions_wait_for_required_file_attributes (file);
+
type = nautilus_program_chooser_get_type (program_chooser);
g_assert (type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT
|| type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION);
-
- uri = nautilus_file_get_uri (file);
- g_free (uri);
+
programs = type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT
- ? nautilus_mime_get_all_components_for_uri (file)
- : nautilus_mime_get_all_applications_for_uri (file);
+ ? nautilus_mime_get_all_components_for_file (file)
+ : nautilus_mime_get_all_applications_for_file (file);
gtk_clist_clear (clist);
@@ -481,19 +480,16 @@ is_component_default_for_type (NautilusViewIdentifier *identifier, const char *m
}
static gboolean
-is_application_default_for_uri (GnomeVFSMimeApplication *application, const char *uri)
+is_application_default_for_file (GnomeVFSMimeApplication *application,
+ NautilusFile *file)
{
GnomeVFSMimeApplication *default_application;
gboolean result;
- NautilusFile *file;
g_assert (application != NULL);
- file = nautilus_file_get (uri);
-
- default_application = nautilus_mime_get_default_application_for_uri (file);
+ default_application = nautilus_mime_get_default_application_for_file (file);
result = (default_application != NULL && strcmp (default_application->id, application->id) == 0);
- nautilus_file_unref (file);
gnome_vfs_mime_application_free (default_application);
@@ -501,21 +497,18 @@ is_application_default_for_uri (GnomeVFSMimeApplication *application, const char
}
static gboolean
-is_component_default_for_uri (NautilusViewIdentifier *identifier, const char *uri)
+is_component_default_for_file (NautilusViewIdentifier *identifier, NautilusFile *file)
{
OAF_ServerInfo *default_component;
gboolean result;
- NautilusFile *file;
g_assert (identifier != NULL);
- file = nautilus_file_get (uri);
+ nautilus_mime_actions_wait_for_required_file_attributes (file);
- default_component = nautilus_mime_get_default_component_for_uri (file);
+ default_component = nautilus_mime_get_default_component_for_file (file);
result = (default_component != NULL && strcmp (default_component->iid, identifier->iid) == 0);
- nautilus_file_unref (file);
-
CORBA_free (default_component);
return result;
@@ -538,23 +531,19 @@ is_component_in_short_list (NautilusViewIdentifier *identifier, const char *mime
}
static gboolean
-is_component_in_short_list_for_uri (NautilusViewIdentifier *identifier, const char *uri)
+is_component_in_short_list_for_file (NautilusViewIdentifier *identifier,
+ NautilusFile *file)
{
GList *list;
gboolean result;
- NautilusFile *file;
-
- file = nautilus_file_get (uri);
- list = nautilus_mime_get_short_list_components_for_uri (file);
+ list = nautilus_mime_get_short_list_components_for_file (file);
result = g_list_find_custom (list,
identifier,
(GCompareFunc)compare_component_with_view)
!= NULL;
gnome_vfs_mime_component_list_free (list);
- nautilus_file_unref (file);
-
return result;
}
@@ -575,24 +564,17 @@ is_application_in_short_list (GnomeVFSMimeApplication *application, const char *
}
static gboolean
-is_application_in_short_list_for_uri (GnomeVFSMimeApplication *application, const char *uri)
+is_application_in_short_list_for_file (GnomeVFSMimeApplication *application, NautilusFile *file)
{
GList *list;
gboolean result;
- NautilusFile *file;
-
- file = nautilus_file_get (uri);
-
- list = nautilus_mime_get_short_list_applications_for_uri (file);
+ list = nautilus_mime_get_short_list_applications_for_file (file);
result = g_list_find_custom (list,
application,
(GCompareFunc)compare_mime_applications)
!= NULL;
gnome_vfs_mime_application_list_free (list);
-
-
- nautilus_file_unref (file);
return result;
}
@@ -626,26 +608,23 @@ program_file_pair_is_default_for_file_type (ProgramFilePair *pair)
static gboolean
program_file_pair_is_default_for_file (ProgramFilePair *pair)
{
- char *uri;
gboolean result;
g_assert (pair != NULL);
g_assert (NAUTILUS_IS_FILE (pair->file));
- uri = nautilus_file_get_uri (pair->file);
+ nautilus_mime_actions_wait_for_required_file_attributes (pair->file);
- if (pair->action_type != nautilus_mime_get_default_action_type_for_uri (pair->file)) {
+ if (pair->action_type != nautilus_mime_get_default_action_type_for_file (pair->file)) {
return FALSE;
}
if (pair->action_type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT) {
- result = is_component_default_for_uri (pair->view_identifier, uri);
+ result = is_component_default_for_file (pair->view_identifier, pair->file);
} else {
- result = is_application_default_for_uri (pair->application, uri);
+ result = is_application_default_for_file (pair->application, pair->file);
}
- g_free (uri);
-
return result;
}
@@ -674,22 +653,19 @@ program_file_pair_is_in_short_list_for_file_type (ProgramFilePair *pair)
static gboolean
program_file_pair_is_in_short_list_for_file (ProgramFilePair *pair)
{
- char *uri;
gboolean result;
g_assert (pair != NULL);
g_assert (NAUTILUS_IS_FILE (pair->file));
- uri = nautilus_file_get_uri (pair->file);
+ nautilus_mime_actions_wait_for_required_file_attributes (pair->file);
if (pair->action_type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT) {
- result = is_component_in_short_list_for_uri (pair->view_identifier, uri);
+ result = is_component_in_short_list_for_file (pair->view_identifier, pair->file);
} else {
- result = is_application_in_short_list_for_uri (pair->application, uri);
+ result = is_application_in_short_list_for_file (pair->application, pair->file);
}
- g_free (uri);
-
return result;
}
@@ -799,33 +775,25 @@ pack_radio_button (GtkBox *box, const char *label_text, GtkRadioButton *group)
static void
add_to_short_list_for_file (ProgramFilePair *pair)
{
- char *uri;
-
- uri = nautilus_file_get_uri (pair->file);
+ nautilus_mime_actions_wait_for_required_file_attributes (pair->file);
if (pair->action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION) {
- nautilus_mime_add_application_to_short_list_for_uri (pair->file, pair->application->id);
+ nautilus_mime_add_application_to_short_list_for_file (pair->file, pair->application->id);
} else {
- nautilus_mime_add_component_to_short_list_for_uri (pair->file, pair->view_identifier->iid);
+ nautilus_mime_add_component_to_short_list_for_file (pair->file, pair->view_identifier->iid);
}
-
- g_free (uri);
}
static void
remove_from_short_list_for_file (ProgramFilePair *pair)
{
- char *uri;
-
- uri = nautilus_file_get_uri (pair->file);
+ nautilus_mime_actions_wait_for_required_file_attributes (pair->file);
if (pair->action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION) {
- nautilus_mime_remove_application_from_short_list_for_uri (pair->file, pair->application->id);
+ nautilus_mime_remove_application_from_short_list_for_file (pair->file, pair->application->id);
} else {
- nautilus_mime_remove_component_from_short_list_for_uri (pair->file, pair->view_identifier->iid);
+ nautilus_mime_remove_component_from_short_list_for_file (pair->file, pair->view_identifier->iid);
}
-
- g_free (uri);
}
static void
@@ -883,31 +851,27 @@ remove_default_for_type (ProgramFilePair *pair)
static void
remove_default_for_item (ProgramFilePair *pair)
{
- char *uri;
+ nautilus_mime_actions_wait_for_required_file_attributes (pair->file);
- uri = nautilus_file_get_uri (pair->file);
-
if (pair->action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION) {
/* If the default is just falling through to the default for this type,
* don't do anything here.
*/
- if (nautilus_mime_is_default_application_for_uri_user_chosen (pair->file)) {
- if (is_application_default_for_uri (pair->application, uri)) {
- nautilus_mime_set_default_application_for_uri (pair->file, NULL);
+ if (nautilus_mime_is_default_application_for_file_user_chosen (pair->file)) {
+ if (is_application_default_for_file (pair->application, pair->file)) {
+ nautilus_mime_set_default_application_for_file (pair->file, NULL);
}
}
} else {
/* If the default is just falling through to the default for this type,
* don't do anything here.
*/
- if (nautilus_mime_is_default_component_for_uri_user_chosen (pair->file)) {
- if (is_component_default_for_uri (pair->view_identifier, uri)) {
- nautilus_mime_set_default_component_for_uri (pair->file, NULL);
+ if (nautilus_mime_is_default_component_for_file_user_chosen (pair->file)) {
+ if (is_component_default_for_file (pair->view_identifier, pair->file)) {
+ nautilus_mime_set_default_component_for_file (pair->file, NULL);
}
}
}
-
- g_free (uri);
}
static void
@@ -931,21 +895,15 @@ set_default_for_type (ProgramFilePair *pair)
static void
set_default_for_item (ProgramFilePair *pair)
{
- char *uri;
-
- uri = nautilus_file_get_uri (pair->file);
-
- uri = nautilus_file_get_uri (pair->file);
+ nautilus_mime_actions_wait_for_required_file_attributes (pair->file);
if (pair->action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION) {
- nautilus_mime_set_default_application_for_uri (pair->file, pair->application->id);
+ nautilus_mime_set_default_application_for_file (pair->file, pair->application->id);
} else {
- nautilus_mime_set_default_component_for_uri (pair->file, pair->view_identifier->iid);
+ nautilus_mime_set_default_component_for_file (pair->file, pair->view_identifier->iid);
}
- nautilus_mime_set_default_action_type_for_uri (pair->file, pair->action_type);
-
- g_free (uri);
+ nautilus_mime_set_default_action_type_for_file (pair->file, pair->action_type);
}
static void
diff --git a/libnautilus-extensions/nautilus-program-choosing.c b/libnautilus-extensions/nautilus-program-choosing.c
index d3c4f3ddc..b3acd1ab4 100644
--- a/libnautilus-extensions/nautilus-program-choosing.c
+++ b/libnautilus-extensions/nautilus-program-choosing.c
@@ -40,19 +40,16 @@ static gboolean
any_programs_available_for_file (GnomeVFSMimeActionType action_type, NautilusFile *file)
{
gboolean result;
- char *uri;
-
- uri = nautilus_file_get_uri (file);
+
+ nautilus_mime_actions_wait_for_required_file_attributes (file);
if (action_type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT) {
- result = nautilus_mime_has_any_components_for_uri (file);
+ result = nautilus_mime_has_any_components_for_file (file);
} else {
g_assert (action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION);
- result = nautilus_mime_has_any_applications_for_uri (file);
+ result = nautilus_mime_has_any_applications_for_file (file);
}
- g_free (uri);
-
return result;
}
diff --git a/libnautilus-extensions/nautilus-wait-until-ready.h b/libnautilus-extensions/nautilus-wait-until-ready.h
index 640e6c6b1..61ae49254 100644
--- a/libnautilus-extensions/nautilus-wait-until-ready.h
+++ b/libnautilus-extensions/nautilus-wait-until-ready.h
@@ -33,9 +33,5 @@
* is deprecated! Do not use these calls in new code!
*/
-GList * nautilus_directory_wait_until_ready (NautilusDirectory *directory,
- GList *file_attributes);
-
-
void nautilus_file_wait_until_ready (NautilusFile *file,
GList *attributes);
diff --git a/libnautilus-private/nautilus-directory-async.c b/libnautilus-private/nautilus-directory-async.c
index eef169ab4..045ca697e 100644
--- a/libnautilus-private/nautilus-directory-async.c
+++ b/libnautilus-private/nautilus-directory-async.c
@@ -2443,8 +2443,10 @@ mime_list_callback (GnomeVFSAsyncHandle *handle,
file->details->directory_count_failed = TRUE;
nautilus_g_list_free_deep (file->details->mime_list);
file->details->mime_list = NULL;
+ file->details->mime_list_status = NAUTILUS_REQUEST_NOT_STARTED;
} else {
file->details->got_mime_list = TRUE;
+ file->details->mime_list_status = NAUTILUS_REQUEST_DONE;
}
g_free (directory->details->mime_list_uri);
diff --git a/libnautilus-private/nautilus-directory.c b/libnautilus-private/nautilus-directory.c
index be028c644..904a8f229 100644
--- a/libnautilus-private/nautilus-directory.c
+++ b/libnautilus-private/nautilus-directory.c
@@ -1180,41 +1180,6 @@ nautilus_directory_call_when_ready (NautilusDirectory *directory,
callback, callback_data));
}
-typedef struct {
- gboolean done;
- GList *files_return;
-} WaitUntilReadyCallbackData;
-
-static void
-wait_until_ready_callback (NautilusDirectory *directory,
- GList *files,
- gpointer callback_data)
-{
- WaitUntilReadyCallbackData *data;
-
- data = callback_data;
- data->done = TRUE;
- data->files_return = nautilus_file_list_copy (files);
-}
-
-GList *
-nautilus_directory_wait_until_ready (NautilusDirectory *directory,
- GList *file_attributes)
-{
- WaitUntilReadyCallbackData data;
-
- data.done = FALSE;
- data.files_return = NULL;
-
- nautilus_directory_call_when_ready
- (directory, file_attributes,
- wait_until_ready_callback, &data);
- while (!data.done) {
- gtk_main_iteration ();
- }
-
- return data.files_return;
-}
void
nautilus_directory_cancel_callback (NautilusDirectory *directory,
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index 28435c20d..69da59daf 100644
--- a/libnautilus-private/nautilus-file.c
+++ b/libnautilus-private/nautilus-file.c
@@ -1819,6 +1819,33 @@ nautilus_file_get_uri (NautilusFile *file)
NULL);
}
+
+
+
+char *
+nautilus_file_get_uri_scheme (NautilusFile *file)
+{
+ char *colon;
+
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+
+ if (file->details->directory == NULL ||
+ file->details->directory->details->uri == NULL) {
+ return NULL;
+ }
+
+ colon = strchr (file->details->directory->details->uri, ':');
+
+ if (colon == NULL) {
+ return NULL;
+ }
+
+ return g_strndup (file->details->directory->details->uri,
+ colon - file->details->directory->details->uri);
+}
+
+
+
/**
* nautilus_file_get_date_as_string:
*
@@ -4289,3 +4316,4 @@ nautilus_self_check_file (void)
}
#endif /* !NAUTILUS_OMIT_SELF_CHECK */
+
diff --git a/libnautilus-private/nautilus-file.h b/libnautilus-private/nautilus-file.h
index a2d625d00..f22fb55e8 100644
--- a/libnautilus-private/nautilus-file.h
+++ b/libnautilus-private/nautilus-file.h
@@ -115,6 +115,7 @@ gboolean nautilus_file_check_if_ready (NautilusFile *file,
/* Basic attributes for file objects. */
char * nautilus_file_get_name (NautilusFile *file);
char * nautilus_file_get_uri (NautilusFile *file);
+char * nautilus_file_get_uri_scheme (NautilusFile *file);
char * nautilus_file_get_parent_uri (NautilusFile *file);
char * nautilus_file_get_parent_uri_for_display (NautilusFile *file);
GnomeVFSFileSize nautilus_file_get_size (NautilusFile *file);
diff --git a/libnautilus-private/nautilus-mime-actions.c b/libnautilus-private/nautilus-mime-actions.c
index 125647a2a..983f2da21 100644
--- a/libnautilus-private/nautilus-mime-actions.c
+++ b/libnautilus-private/nautilus-mime-actions.c
@@ -51,7 +51,6 @@ static char *extract_prefix_add_suffix (const char
const char *separator,
const char *suffix);
static char *mime_type_get_supertype (const char *mime_type);
-static char *uri_string_get_scheme (const char *uri_string);
static GList *get_explicit_content_view_iids_from_metafile (NautilusFile *file);
static char *make_oaf_query_for_explicit_content_view_iids (GList *view_iids);
static char *make_oaf_query_with_known_mime_type (const char *mime_type,
@@ -96,22 +95,25 @@ is_known_mime_type (const char *mime_type)
return TRUE;
}
-static void
-nautilus_file_wait_for_metadata (NautilusFile *file)
+
+
+static gboolean
+nautilus_mime_actions_check_if_required_attributes_ready (NautilusFile *file)
{
GList *attributes;
+ gboolean ready;
- attributes = NULL;
- attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_METADATA);
- attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_SLOW_MIME_TYPE);
- nautilus_file_wait_until_ready (file, attributes);
+ attributes = nautilus_mime_actions_get_required_file_attributes ();
+ ready = nautilus_file_check_if_ready (file, attributes);
g_list_free (attributes);
+
+ return ready;
}
-static void
-nautilus_file_wait_for_mime_action_attributes (NautilusFile *file)
+GList *
+nautilus_mime_actions_get_required_file_attributes ()
{
GList *attributes;
@@ -119,21 +121,33 @@ nautilus_file_wait_for_mime_action_attributes (NautilusFile *file)
attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_METADATA);
attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_SLOW_MIME_TYPE);
attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES);
- nautilus_file_wait_until_ready (file, attributes);
- g_list_free (attributes);
+
+ return attributes;
}
+void
+nautilus_mime_actions_wait_for_required_file_attributes (NautilusFile *file)
+{
+ GList *attributes;
+
+ attributes = nautilus_mime_actions_get_required_file_attributes ();
+
+ nautilus_file_wait_until_ready (file, attributes);
+
+ g_list_free (attributes);
+}
GnomeVFSMimeActionType
-nautilus_mime_get_default_action_type_for_uri (NautilusFile *file)
+nautilus_mime_get_default_action_type_for_file (NautilusFile *file)
{
char *mime_type;
char *action_type_string;
GnomeVFSMimeActionType action_type;
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_MIME_ACTION_TYPE_NONE);
action_type_string = nautilus_file_get_metadata
(file, NAUTILUS_METADATA_KEY_DEFAULT_ACTION_TYPE, NULL);
@@ -155,18 +169,21 @@ nautilus_mime_get_default_action_type_for_uri (NautilusFile *file)
}
GnomeVFSMimeAction *
-nautilus_mime_get_default_action_for_uri (NautilusFile *file)
+nautilus_mime_get_default_action_for_file (NautilusFile *file)
{
GnomeVFSMimeAction *action;
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
+
action = g_new0 (GnomeVFSMimeAction, 1);
- action->action_type = nautilus_mime_get_default_action_type_for_uri (file);
+ action->action_type = nautilus_mime_get_default_action_type_for_file (file);
switch (action->action_type) {
case GNOME_VFS_MIME_ACTION_TYPE_APPLICATION:
action->action.application =
- nautilus_mime_get_default_application_for_uri (file);
+ nautilus_mime_get_default_application_for_file (file);
if (action->action.application == NULL) {
g_free (action);
action = NULL;
@@ -174,7 +191,7 @@ nautilus_mime_get_default_action_for_uri (NautilusFile *file)
break;
case GNOME_VFS_MIME_ACTION_TYPE_COMPONENT:
action->action.component =
- nautilus_mime_get_default_component_for_uri (file);
+ nautilus_mime_get_default_component_for_file (file);
if (action->action.component == NULL) {
g_free (action);
action = NULL;
@@ -192,7 +209,7 @@ nautilus_mime_get_default_action_for_uri (NautilusFile *file)
static GnomeVFSMimeApplication *
-nautilus_mime_get_default_application_for_uri_internal (NautilusFile *file,
+nautilus_mime_get_default_application_for_file_internal (NautilusFile *file,
gboolean *user_chosen)
{
char *mime_type;
@@ -200,9 +217,11 @@ nautilus_mime_get_default_application_for_uri_internal (NautilusFile *file,
char *default_application_string;
gboolean used_user_chosen_info;
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
+
used_user_chosen_info = TRUE;
- nautilus_file_wait_for_metadata (file);
default_application_string = nautilus_file_get_metadata
(file, NAUTILUS_METADATA_KEY_DEFAULT_APPLICATION, NULL);
@@ -223,18 +242,18 @@ nautilus_mime_get_default_application_for_uri_internal (NautilusFile *file,
}
GnomeVFSMimeApplication *
-nautilus_mime_get_default_application_for_uri (NautilusFile *file)
+nautilus_mime_get_default_application_for_file (NautilusFile *file)
{
- return nautilus_mime_get_default_application_for_uri_internal (file, NULL);
+ return nautilus_mime_get_default_application_for_file_internal (file, NULL);
}
gboolean
-nautilus_mime_is_default_application_for_uri_user_chosen (NautilusFile *file)
+nautilus_mime_is_default_application_for_file_user_chosen (NautilusFile *file)
{
GnomeVFSMimeApplication *application;
gboolean user_chosen;
- application = nautilus_mime_get_default_application_for_uri_internal (file, &user_chosen);
+ application = nautilus_mime_get_default_application_for_file_internal (file, &user_chosen);
/* Doesn't count as user chosen if the user-specified data is bogus and doesn't
* result in an actual application.
@@ -250,13 +269,12 @@ nautilus_mime_is_default_application_for_uri_user_chosen (NautilusFile *fil
static OAF_ServerInfo *
-nautilus_mime_get_default_component_for_uri_internal (NautilusFile *file,
+nautilus_mime_get_default_component_for_file_internal (NautilusFile *file,
gboolean *user_chosen)
{
GList *info_list;
OAF_ServerInfo *mime_default;
char *default_component_string;
- char *uri;
char *mime_type;
char *uri_scheme;
GList *item_mime_types;
@@ -270,19 +288,17 @@ nautilus_mime_get_default_component_for_uri_internal (NautilusFile *file,
GList *p;
char *prev;
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
+
used_user_chosen_info = TRUE;
CORBA_exception_init (&ev);
mime_type = nautilus_file_get_slow_mime_type (file);
- uri = nautilus_file_get_uri (file);
-
- uri_scheme = uri_string_get_scheme (uri);
+ uri_scheme = nautilus_file_get_uri_scheme (file);
- g_free (uri);
-
- nautilus_file_wait_for_mime_action_attributes (file);
explicit_iids = get_explicit_content_view_iids_from_metafile (file);
nautilus_file_get_directory_item_mime_types (file, &item_mime_types);
@@ -318,7 +334,7 @@ nautilus_mime_get_default_component_for_uri_internal (NautilusFile *file,
/* Prefer something from the short list */
- short_list = nautilus_mime_get_short_list_components_for_uri (file);
+ short_list = nautilus_mime_get_short_list_components_for_file (file);
if (short_list != NULL) {
sort_conditions[1] = g_strdup ("has (['");
@@ -394,18 +410,18 @@ nautilus_mime_get_default_component_for_uri_internal (NautilusFile *file,
OAF_ServerInfo *
-nautilus_mime_get_default_component_for_uri (NautilusFile *file)
+nautilus_mime_get_default_component_for_file (NautilusFile *file)
{
- return nautilus_mime_get_default_component_for_uri_internal (file, NULL);
+ return nautilus_mime_get_default_component_for_file_internal (file, NULL);
}
gboolean
-nautilus_mime_is_default_component_for_uri_user_chosen (NautilusFile *file)
+nautilus_mime_is_default_component_for_file_user_chosen (NautilusFile *file)
{
OAF_ServerInfo *component;
gboolean user_chosen;
- component = nautilus_mime_get_default_component_for_uri_internal (file, &user_chosen);
+ component = nautilus_mime_get_default_component_for_file_internal (file, &user_chosen);
/* Doesn't count as user chosen if the user-specified data is bogus and doesn't
* result in an actual component.
@@ -421,7 +437,7 @@ nautilus_mime_is_default_component_for_uri_user_chosen (NautilusFile *file)
GList *
-nautilus_mime_get_short_list_applications_for_uri (NautilusFile *file)
+nautilus_mime_get_short_list_applications_for_file (NautilusFile *file)
{
char *mime_type;
GList *result;
@@ -432,9 +448,11 @@ nautilus_mime_get_short_list_applications_for_uri (NautilusFile *file)
GnomeVFSMimeApplication *application;
CORBA_Environment ev;
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
+
CORBA_exception_init (&ev);
- nautilus_file_wait_for_metadata (file);
metadata_application_add_ids = nautilus_file_get_metadata_list
(file,
NAUTILUS_METADATA_KEY_SHORT_LIST_APPLICATION_ADD,
@@ -474,9 +492,8 @@ nautilus_mime_get_short_list_applications_for_uri (NautilusFile *file)
}
GList *
-nautilus_mime_get_short_list_components_for_uri (NautilusFile *file)
+nautilus_mime_get_short_list_components_for_file (NautilusFile *file)
{
- char *uri;
char *mime_type;
char *uri_scheme;
GList *item_mime_types;
@@ -493,15 +510,13 @@ nautilus_mime_get_short_list_components_for_uri (NautilusFile *file)
char *extra_requirements;
char *prev;
- CORBA_exception_init (&ev);
-
- uri = nautilus_file_get_uri (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
- uri_scheme = uri_string_get_scheme (uri);
+ CORBA_exception_init (&ev);
- g_free (uri);
+ uri_scheme = nautilus_file_get_uri_scheme (file);
- nautilus_file_wait_for_mime_action_attributes (file);
explicit_iids = get_explicit_content_view_iids_from_metafile (file);
nautilus_file_get_directory_item_mime_types (file, &item_mime_types);
@@ -574,12 +589,14 @@ nautilus_mime_get_short_list_components_for_uri (NautilusFile *file)
/* FIXME: we should disable this for 1.0 I think */
char *
-nautilus_mime_get_short_list_methods_for_uri (NautilusFile *file)
+nautilus_mime_get_short_list_methods_for_file (NautilusFile *file)
{
char *mime_type;
const char *method;
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
+
mime_type = nautilus_file_get_slow_mime_type (file);
method = gnome_vfs_mime_get_value (mime_type, "vfs-method");
g_free (mime_type);
@@ -587,7 +604,7 @@ nautilus_mime_get_short_list_methods_for_uri (NautilusFile *file)
}
GList *
-nautilus_mime_get_all_applications_for_uri (NautilusFile *file)
+nautilus_mime_get_all_applications_for_file (NautilusFile *file)
{
char *mime_type;
GList *result;
@@ -595,7 +612,9 @@ nautilus_mime_get_all_applications_for_uri (NautilusFile *file)
GList *p;
GnomeVFSMimeApplication *application;
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
+
metadata_application_ids = nautilus_file_get_metadata_list
(file,
NAUTILUS_METADATA_KEY_EXPLICIT_APPLICATION,
@@ -622,12 +641,12 @@ nautilus_mime_get_all_applications_for_uri (NautilusFile *file)
}
gboolean
-nautilus_mime_has_any_applications_for_uri (NautilusFile *file)
+nautilus_mime_has_any_applications_for_file (NautilusFile *file)
{
GList *list;
gboolean result;
- list = nautilus_mime_get_all_applications_for_uri (file);
+ list = nautilus_mime_get_all_applications_for_file (file);
result = list != NULL;
gnome_vfs_mime_application_list_free (list);
@@ -635,9 +654,8 @@ nautilus_mime_has_any_applications_for_uri (NautilusFile *file)
}
GList *
-nautilus_mime_get_all_components_for_uri (NautilusFile *file)
+nautilus_mime_get_all_components_for_file (NautilusFile *file)
{
- char *uri;
char *mime_type;
char *uri_scheme;
GList *item_mime_types;
@@ -645,13 +663,12 @@ nautilus_mime_get_all_components_for_uri (NautilusFile *file)
GList *explicit_iids;
CORBA_Environment ev;
- CORBA_exception_init (&ev);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ NULL);
- uri = nautilus_file_get_uri (file);
- uri_scheme = uri_string_get_scheme (uri);
- g_free (uri);
+ CORBA_exception_init (&ev);
- nautilus_file_wait_for_mime_action_attributes (file);
+ uri_scheme = nautilus_file_get_uri_scheme (file);
mime_type = nautilus_file_get_slow_mime_type (file);
explicit_iids = get_explicit_content_view_iids_from_metafile (file);
@@ -667,12 +684,12 @@ nautilus_mime_get_all_components_for_uri (NautilusFile *file)
}
gboolean
-nautilus_mime_has_any_components_for_uri (NautilusFile *file)
+nautilus_mime_has_any_components_for_file (NautilusFile *file)
{
GList *list;
gboolean result;
- list = nautilus_mime_get_all_components_for_uri (file);
+ list = nautilus_mime_get_all_components_for_file (file);
result = list != NULL;
gnome_vfs_mime_component_list_free (list);
@@ -680,8 +697,8 @@ nautilus_mime_has_any_components_for_uri (NautilusFile *file)
}
GnomeVFSResult
-nautilus_mime_set_default_action_type_for_uri (NautilusFile *file,
- GnomeVFSMimeActionType action_type)
+nautilus_mime_set_default_action_type_for_file (NautilusFile *file,
+ GnomeVFSMimeActionType action_type)
{
const char *action_string;
@@ -697,7 +714,6 @@ nautilus_mime_set_default_action_type_for_uri (NautilusFile *file,
action_string = "none";
}
- nautilus_file_wait_for_metadata (file);
nautilus_file_set_metadata
(file, NAUTILUS_METADATA_KEY_DEFAULT_ACTION_TYPE, NULL, action_string);
@@ -705,42 +721,46 @@ nautilus_mime_set_default_action_type_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_set_default_application_for_uri (NautilusFile *file,
- const char *application_id)
+nautilus_mime_set_default_application_for_file (NautilusFile *file,
+ const char *application_id)
{
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
nautilus_file_set_metadata
(file, NAUTILUS_METADATA_KEY_DEFAULT_APPLICATION, NULL, application_id);
/* If there's no default action type, set it to match this. */
if (application_id != NULL &&
- nautilus_mime_get_default_action_type_for_uri (file) == GNOME_VFS_MIME_ACTION_TYPE_NONE) {
- return nautilus_mime_set_default_action_type_for_uri (file, GNOME_VFS_MIME_ACTION_TYPE_APPLICATION);
+ nautilus_mime_get_default_action_type_for_file (file) == GNOME_VFS_MIME_ACTION_TYPE_NONE) {
+ return nautilus_mime_set_default_action_type_for_file (file, GNOME_VFS_MIME_ACTION_TYPE_APPLICATION);
}
return GNOME_VFS_OK;
}
GnomeVFSResult
-nautilus_mime_set_default_component_for_uri (NautilusFile *file,
- const char *component_iid)
+nautilus_mime_set_default_component_for_file (NautilusFile *file,
+ const char *component_iid)
{
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
nautilus_file_set_metadata
(file, NAUTILUS_METADATA_KEY_DEFAULT_COMPONENT, NULL, component_iid);
/* If there's no default action type, set it to match this. */
if (component_iid != NULL &&
- nautilus_mime_get_default_action_type_for_uri (file) == GNOME_VFS_MIME_ACTION_TYPE_NONE) {
- return nautilus_mime_set_default_action_type_for_uri (file, GNOME_VFS_MIME_ACTION_TYPE_COMPONENT);
+ nautilus_mime_get_default_action_type_for_file (file) == GNOME_VFS_MIME_ACTION_TYPE_NONE) {
+ return nautilus_mime_set_default_action_type_for_file (file, GNOME_VFS_MIME_ACTION_TYPE_COMPONENT);
}
return GNOME_VFS_OK;
}
GnomeVFSResult
-nautilus_mime_set_short_list_applications_for_uri (NautilusFile *file,
- GList *applications)
+nautilus_mime_set_short_list_applications_for_file (NautilusFile *file,
+ GList *applications)
{
GList *add_list;
GList *remove_list;
@@ -749,6 +769,9 @@ nautilus_mime_set_short_list_applications_for_uri (NautilusFile *file,
GList *p;
char *mime_type;
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
/* get per-mime short list */
mime_type = nautilus_file_get_slow_mime_type (file);
@@ -765,7 +788,6 @@ nautilus_mime_set_short_list_applications_for_uri (NautilusFile *file,
add_list = str_list_difference (applications, normal_short_list_ids);
remove_list = str_list_difference (normal_short_list_ids, applications);
- nautilus_file_wait_for_metadata (file);
nautilus_file_set_metadata_list
(file,
NAUTILUS_METADATA_KEY_SHORT_LIST_APPLICATION_ADD,
@@ -785,8 +807,8 @@ nautilus_mime_set_short_list_applications_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_set_short_list_components_for_uri (NautilusFile *file,
- GList *components)
+nautilus_mime_set_short_list_components_for_file (NautilusFile *file,
+ GList *components)
{
GList *add_list;
GList *remove_list;
@@ -795,8 +817,10 @@ nautilus_mime_set_short_list_components_for_uri (NautilusFile *file,
GList *p;
char *mime_type;
- /* get per-mime short list */
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+ /* get per-mime short list */
mime_type = nautilus_file_get_slow_mime_type (file);
normal_short_list = gnome_vfs_mime_get_short_list_components (mime_type);
g_free (mime_type);
@@ -811,7 +835,6 @@ nautilus_mime_set_short_list_components_for_uri (NautilusFile *file,
add_list = str_list_difference (components, normal_short_list_ids);
remove_list = str_list_difference (normal_short_list_ids, components);
- nautilus_file_wait_for_metadata (file);
nautilus_file_set_metadata_list
(file,
NAUTILUS_METADATA_KEY_SHORT_LIST_COMPONENT_ADD,
@@ -831,20 +854,23 @@ nautilus_mime_set_short_list_components_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_add_application_to_short_list_for_uri (NautilusFile *file,
- const char *application_id)
+nautilus_mime_add_application_to_short_list_for_file (NautilusFile *file,
+ const char *application_id)
{
GList *old_list, *new_list;
GnomeVFSResult result;
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
result = GNOME_VFS_OK;
- old_list = nautilus_mime_get_short_list_applications_for_uri (file);
+ old_list = nautilus_mime_get_short_list_applications_for_file (file);
if (!gnome_vfs_mime_id_in_application_list (application_id, old_list)) {
new_list = g_list_append (gnome_vfs_mime_id_list_from_application_list (old_list),
g_strdup (application_id));
- result = nautilus_mime_set_short_list_applications_for_uri (file, new_list);
+ result = nautilus_mime_set_short_list_applications_for_file (file, new_list);
nautilus_g_list_free_deep (new_list);
}
@@ -854,14 +880,17 @@ nautilus_mime_add_application_to_short_list_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_remove_application_from_short_list_for_uri (NautilusFile *file,
- const char *application_id)
+nautilus_mime_remove_application_from_short_list_for_file (NautilusFile *file,
+ const char *application_id)
{
GList *old_list, *new_list;
gboolean was_in_list;
GnomeVFSResult result;
- old_list = nautilus_mime_get_short_list_applications_for_uri (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
+ old_list = nautilus_mime_get_short_list_applications_for_file (file);
old_list = gnome_vfs_mime_remove_application_from_list
(old_list, application_id, &was_in_list);
@@ -869,7 +898,7 @@ nautilus_mime_remove_application_from_short_list_for_uri (NautilusFile *fil
result = GNOME_VFS_OK;
} else {
new_list = gnome_vfs_mime_id_list_from_application_list (old_list);
- result = nautilus_mime_set_short_list_applications_for_uri (file, new_list);
+ result = nautilus_mime_set_short_list_applications_for_file (file, new_list);
nautilus_g_list_free_deep (new_list);
}
@@ -879,20 +908,23 @@ nautilus_mime_remove_application_from_short_list_for_uri (NautilusFile *fil
}
GnomeVFSResult
-nautilus_mime_add_component_to_short_list_for_uri (NautilusFile *file,
- const char *iid)
+nautilus_mime_add_component_to_short_list_for_file (NautilusFile *file,
+ const char *iid)
{
GList *old_list, *new_list;
GnomeVFSResult result;
- old_list = nautilus_mime_get_short_list_components_for_uri (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
+ old_list = nautilus_mime_get_short_list_components_for_file (file);
if (gnome_vfs_mime_id_in_component_list (iid, old_list)) {
result = GNOME_VFS_OK;
} else {
new_list = g_list_append (gnome_vfs_mime_id_list_from_component_list (old_list),
g_strdup (iid));
- result = nautilus_mime_set_short_list_components_for_uri (file, new_list);
+ result = nautilus_mime_set_short_list_components_for_file (file, new_list);
nautilus_g_list_free_deep (new_list);
}
@@ -902,14 +934,17 @@ nautilus_mime_add_component_to_short_list_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_remove_component_from_short_list_for_uri (NautilusFile *file,
- const char *iid)
+nautilus_mime_remove_component_from_short_list_for_file (NautilusFile *file,
+ const char *iid)
{
GList *old_list, *new_list;
gboolean was_in_list;
GnomeVFSResult result;
- old_list = nautilus_mime_get_short_list_components_for_uri (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
+
+ old_list = nautilus_mime_get_short_list_components_for_file (file);
old_list = gnome_vfs_mime_remove_component_from_list
(old_list, iid, &was_in_list);
@@ -917,7 +952,7 @@ nautilus_mime_remove_component_from_short_list_for_uri (NautilusFile *file,
result = GNOME_VFS_OK;
} else {
new_list = gnome_vfs_mime_id_list_from_component_list (old_list);
- result = nautilus_mime_set_short_list_components_for_uri (file, new_list);
+ result = nautilus_mime_set_short_list_components_for_file (file, new_list);
nautilus_g_list_free_deep (new_list);
}
@@ -927,14 +962,15 @@ nautilus_mime_remove_component_from_short_list_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_extend_all_applications_for_uri (NautilusFile *file,
- GList *applications)
+nautilus_mime_extend_all_applications_for_file (NautilusFile *file,
+ GList *applications)
{
GList *metadata_application_ids;
GList *extras;
GList *final_applications;
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
metadata_application_ids = nautilus_file_get_metadata_list
(file,
@@ -955,13 +991,14 @@ nautilus_mime_extend_all_applications_for_uri (NautilusFile *file,
}
GnomeVFSResult
-nautilus_mime_remove_from_all_applications_for_uri (NautilusFile *file,
- GList *applications)
+nautilus_mime_remove_from_all_applications_for_file (NautilusFile *file,
+ GList *applications)
{
GList *metadata_application_ids;
GList *final_applications;
- nautilus_file_wait_for_metadata (file);
+ g_return_val_if_fail (nautilus_mime_actions_check_if_required_attributes_ready (file),
+ GNOME_VFS_ERROR_GENERIC);
metadata_application_ids = nautilus_file_get_metadata_list
(file,
@@ -1041,13 +1078,6 @@ mime_type_get_supertype (const char *mime_type)
return extract_prefix_add_suffix (mime_type, "/", "/*");
}
-static char *
-uri_string_get_scheme (const char *uri_string)
-{
- return extract_prefix_add_suffix (uri_string, ":", "");
-}
-
-
/*
* The following routine uses metadata associated with the current url
diff --git a/libnautilus-private/nautilus-mime-actions.h b/libnautilus-private/nautilus-mime-actions.h
index b24a6c14f..fd76cd161 100644
--- a/libnautilus-private/nautilus-mime-actions.h
+++ b/libnautilus-private/nautilus-mime-actions.h
@@ -30,46 +30,50 @@
#include <libnautilus-extensions/nautilus-file.h>
+GList *nautilus_mime_actions_get_required_file_attributes (void);
-GnomeVFSMimeActionType nautilus_mime_get_default_action_type_for_uri (NautilusFile *file);
-GnomeVFSMimeAction * nautilus_mime_get_default_action_for_uri (NautilusFile *file);
-GnomeVFSMimeApplication *nautilus_mime_get_default_application_for_uri (NautilusFile *file);
-gboolean nautilus_mime_is_default_application_for_uri_user_chosen (NautilusFile *file);
-OAF_ServerInfo * nautilus_mime_get_default_component_for_uri (NautilusFile *file);
-gboolean nautilus_mime_is_default_component_for_uri_user_chosen (NautilusFile *file);
-GList * nautilus_mime_get_short_list_applications_for_uri (NautilusFile *file);
-GList * nautilus_mime_get_short_list_components_for_uri (NautilusFile *file);
-gchar * nautilus_mime_get_short_list_methods_for_uri (NautilusFile *file);
-GList * nautilus_mime_get_all_applications_for_uri (NautilusFile *file);
-GList * nautilus_mime_get_all_components_for_uri (NautilusFile *file);
-gboolean nautilus_mime_has_any_components_for_uri (NautilusFile *file);
-gboolean nautilus_mime_has_any_applications_for_uri (NautilusFile *file);
-GnomeVFSResult nautilus_mime_set_default_action_type_for_uri (NautilusFile *file,
- GnomeVFSMimeActionType action_type);
-GnomeVFSResult nautilus_mime_set_default_application_for_uri (NautilusFile *file,
- const char *application_id);
-GnomeVFSResult nautilus_mime_set_default_component_for_uri (NautilusFile *file,
- const char *component_iid);
+void nautilus_mime_actions_wait_for_required_file_attributes (NautilusFile *file);
+
+
+GnomeVFSMimeActionType nautilus_mime_get_default_action_type_for_file (NautilusFile *file);
+GnomeVFSMimeAction * nautilus_mime_get_default_action_for_file (NautilusFile *file);
+GnomeVFSMimeApplication *nautilus_mime_get_default_application_for_file (NautilusFile *file);
+gboolean nautilus_mime_is_default_application_for_file_user_chosen (NautilusFile *file);
+OAF_ServerInfo * nautilus_mime_get_default_component_for_file (NautilusFile *file);
+gboolean nautilus_mime_is_default_component_for_file_user_chosen (NautilusFile *file);
+GList * nautilus_mime_get_short_list_applications_for_file (NautilusFile *file);
+GList * nautilus_mime_get_short_list_components_for_file (NautilusFile *file);
+gchar * nautilus_mime_get_short_list_methods_for_file (NautilusFile *file);
+GList * nautilus_mime_get_all_applications_for_file (NautilusFile *file);
+GList * nautilus_mime_get_all_components_for_file (NautilusFile *file);
+gboolean nautilus_mime_has_any_components_for_file (NautilusFile *file);
+gboolean nautilus_mime_has_any_applications_for_file (NautilusFile *file);
+GnomeVFSResult nautilus_mime_set_default_action_type_for_file (NautilusFile *file,
+ GnomeVFSMimeActionType action_type);
+GnomeVFSResult nautilus_mime_set_default_application_for_file (NautilusFile *file,
+ const char *application_id);
+GnomeVFSResult nautilus_mime_set_default_component_for_file (NautilusFile *file,
+ const char *component_iid);
/* Stored as delta to current user level */
-GnomeVFSResult nautilus_mime_set_short_list_applications_for_uri (NautilusFile *file,
- GList *components);
-GnomeVFSResult nautilus_mime_add_application_to_short_list_for_uri (NautilusFile *file,
- const char *application_id);
-GnomeVFSResult nautilus_mime_remove_application_from_short_list_for_uri (NautilusFile *file,
- const char *application_id);
-GnomeVFSResult nautilus_mime_set_short_list_components_for_uri (NautilusFile *file,
- GList *components);
-GnomeVFSResult nautilus_mime_add_component_to_short_list_for_uri (NautilusFile *file,
- const char *iid);
-GnomeVFSResult nautilus_mime_remove_component_from_short_list_for_uri (NautilusFile *file,
- const char *iid);
+GnomeVFSResult nautilus_mime_set_short_list_applications_for_file (NautilusFile *file,
+ GList *components);
+GnomeVFSResult nautilus_mime_add_application_to_short_list_for_file (NautilusFile *file,
+ const char *application_id);
+GnomeVFSResult nautilus_mime_remove_application_from_short_list_for_file (NautilusFile *file,
+ const char *application_id);
+GnomeVFSResult nautilus_mime_set_short_list_components_for_file (NautilusFile *file,
+ GList *components);
+GnomeVFSResult nautilus_mime_add_component_to_short_list_for_file (NautilusFile *file,
+ const char *iid);
+GnomeVFSResult nautilus_mime_remove_component_from_short_list_for_file (NautilusFile *file,
+ const char *iid);
/* No way to override system list; can only add. */
-GnomeVFSResult nautilus_mime_extend_all_applications_for_uri (NautilusFile *file,
- GList *applications);
+GnomeVFSResult nautilus_mime_extend_all_applications_for_file (NautilusFile *file,
+ GList *applications);
/* Only "user" entries may be removed. */
-GnomeVFSResult nautilus_mime_remove_from_all_applications_for_uri (NautilusFile *file,
- GList *applications);
+GnomeVFSResult nautilus_mime_remove_from_all_applications_for_file (NautilusFile *file,
+ GList *applications);
/* No way to add to all components; oafinfo database assumed trusted in this regard. */
diff --git a/libnautilus-private/nautilus-program-chooser.c b/libnautilus-private/nautilus-program-chooser.c
index f00b1db67..3458c78e0 100644
--- a/libnautilus-private/nautilus-program-chooser.c
+++ b/libnautilus-private/nautilus-program-chooser.c
@@ -310,23 +310,22 @@ repopulate_program_list (GnomeDialog *program_chooser,
GtkCList *clist)
{
char **text;
- char *uri;
GList *programs, *program;
ProgramFilePair *pair;
int new_row;
GnomeVFSMimeActionType type;
+ nautilus_mime_actions_wait_for_required_file_attributes (file);
+
type = nautilus_program_chooser_get_type (program_chooser);
g_assert (type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT
|| type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION);
-
- uri = nautilus_file_get_uri (file);
- g_free (uri);
+
programs = type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT
- ? nautilus_mime_get_all_components_for_uri (file)
- : nautilus_mime_get_all_applications_for_uri (file);
+ ? nautilus_mime_get_all_components_for_file (file)
+ : nautilus_mime_get_all_applications_for_file (file);
gtk_clist_clear (clist);
@@ -481,19 +480,16 @@ is_component_default_for_type (NautilusViewIdentifier *identifier, const char *m
}
static gboolean
-is_application_default_for_uri (GnomeVFSMimeApplication *application, const char *uri)
+is_application_default_for_file (GnomeVFSMimeApplication *application,
+ NautilusFile *file)
{
GnomeVFSMimeApplication *default_application;
gboolean result;
- NautilusFile *file;
g_assert (application != NULL);
- file = nautilus_file_get (uri);
-
- default_application = nautilus_mime_get_default_application_for_uri (file);
+ default_application = nautilus_mime_get_default_application_for_file (file);
result = (default_application != NULL && strcmp (default_application->id, application->id) == 0);
- nautilus_file_unref (file);
gnome_vfs_mime_application_free (default_application);
@@ -501,21 +497,18 @@ is_application_default_for_uri (GnomeVFSMimeApplication *application, const char
}
static gboolean
-is_component_default_for_uri (NautilusViewIdentifier *identifier, const char *uri)
+is_component_default_for_file (NautilusViewIdentifier *identifier, NautilusFile *file)
{
OAF_ServerInfo *default_component;
gboolean result;
- NautilusFile *file;
g_assert (identifier != NULL);
- file = nautilus_file_get (uri);
+ nautilus_mime_actions_wait_for_required_file_attributes (file);
- default_component = nautilus_mime_get_default_component_for_uri (file);
+ default_component = nautilus_mime_get_default_component_for_file (file);
result = (default_component != NULL && strcmp (default_component->iid, identifier->iid) == 0);
- nautilus_file_unref (file);
-
CORBA_free (default_component);
return result;
@@ -538,23 +531,19 @@ is_component_in_short_list (NautilusViewIdentifier *identifier, const char *mime
}
static gboolean
-is_component_in_short_list_for_uri (NautilusViewIdentifier *identifier, const char *uri)
+is_component_in_short_list_for_file (NautilusViewIdentifier *identifier,
+ NautilusFile *file)
{
GList *list;
gboolean result;
- NautilusFile *file;
-
- file = nautilus_file_get (uri);
- list = nautilus_mime_get_short_list_components_for_uri (file);
+ list = nautilus_mime_get_short_list_components_for_file (file);
result = g_list_find_custom (list,
identifier,
(GCompareFunc)compare_component_with_view)
!= NULL;
gnome_vfs_mime_component_list_free (list);
- nautilus_file_unref (file);
-
return result;
}
@@ -575,24 +564,17 @@ is_application_in_short_list (GnomeVFSMimeApplication *application, const char *
}
static gboolean
-is_application_in_short_list_for_uri (GnomeVFSMimeApplication *application, const char *uri)
+is_application_in_short_list_for_file (GnomeVFSMimeApplication *application, NautilusFile *file)
{
GList *list;
gboolean result;
- NautilusFile *file;
-
- file = nautilus_file_get (uri);
-
- list = nautilus_mime_get_short_list_applications_for_uri (file);
+ list = nautilus_mime_get_short_list_applications_for_file (file);
result = g_list_find_custom (list,
application,
(GCompareFunc)compare_mime_applications)
!= NULL;
gnome_vfs_mime_application_list_free (list);
-
-
- nautilus_file_unref (file);
return result;
}
@@ -626,26 +608,23 @@ program_file_pair_is_default_for_file_type (ProgramFilePair *pair)
static gboolean
program_file_pair_is_default_for_file (ProgramFilePair *pair)
{
- char *uri;
gboolean result;
g_assert (pair != NULL);
g_assert (NAUTILUS_IS_FILE (pair->file));
- uri = nautilus_file_get_uri (pair->file);
+ nautilus_mime_actions_wait_for_required_file_attributes (pair->file);
- if (pair->action_type != nautilus_mime_get_default_action_type_for_uri (pair->file)) {
+ if (pair->action_type != nautilus_mime_get_default_action_type_for_file (pair->file)) {
return FALSE;
}
if (pair->action_type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT) {
- result = is_component_default_for_uri (pair->view_identifier, uri);
+ result = is_component_default_for_file (pair->view_identifier, pair->file);
} else {
- result = is_application_default_for_uri (pair->application, uri);
+ result = is_application_default_for_file (pair->application, pair->file);
}
- g_free (uri);
-
return result;
}
@@ -674,22 +653,19 @@ program_file_pair_is_in_short_list_for_file_type (ProgramFilePair *pair)
static gboolean
program_file_pair_is_in_short_list_for_file (ProgramFilePair *pair)
{
- char *uri;
gboolean result;
g_assert (pair != NULL);
g_assert (NAUTILUS_IS_FILE (pair->file));
- uri = nautilus_file_get_uri (pair->file);
+ nautilus_mime_actions_wait_for_required_file_attributes (pair->file);
if (pair->action_type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT) {
- result = is_component_in_short_list_for_uri (pair->view_identifier, uri);
+ result = is_component_in_short_list_for_file (pair->view_identifier, pair->file);
} else {
- result = is_application_in_short_list_for_uri (pair->application, uri);
+ result = is_application_in_short_list_for_file (pair->application, pair->file);
}
- g_free (uri);
-
return result;
}
@@ -799,33 +775,25 @@ pack_radio_button (GtkBox *box, const char *label_text, GtkRadioButton *group)
static void
add_to_short_list_for_file (ProgramFilePair *pair)
{
- char *uri;
-
- uri = nautilus_file_get_uri (pair->file);
+ nautilus_mime_actions_wait_for_required_file_attributes (pair->file);
if (pair->action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION) {
- nautilus_mime_add_application_to_short_list_for_uri (pair->file, pair->application->id);
+ nautilus_mime_add_application_to_short_list_for_file (pair->file, pair->application->id);
} else {
- nautilus_mime_add_component_to_short_list_for_uri (pair->file, pair->view_identifier->iid);
+ nautilus_mime_add_component_to_short_list_for_file (pair->file, pair->view_identifier->iid);
}
-
- g_free (uri);
}
static void
remove_from_short_list_for_file (ProgramFilePair *pair)
{
- char *uri;
-
- uri = nautilus_file_get_uri (pair->file);
+ nautilus_mime_actions_wait_for_required_file_attributes (pair->file);
if (pair->action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION) {
- nautilus_mime_remove_application_from_short_list_for_uri (pair->file, pair->application->id);
+ nautilus_mime_remove_application_from_short_list_for_file (pair->file, pair->application->id);
} else {
- nautilus_mime_remove_component_from_short_list_for_uri (pair->file, pair->view_identifier->iid);
+ nautilus_mime_remove_component_from_short_list_for_file (pair->file, pair->view_identifier->iid);
}
-
- g_free (uri);
}
static void
@@ -883,31 +851,27 @@ remove_default_for_type (ProgramFilePair *pair)
static void
remove_default_for_item (ProgramFilePair *pair)
{
- char *uri;
+ nautilus_mime_actions_wait_for_required_file_attributes (pair->file);
- uri = nautilus_file_get_uri (pair->file);
-
if (pair->action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION) {
/* If the default is just falling through to the default for this type,
* don't do anything here.
*/
- if (nautilus_mime_is_default_application_for_uri_user_chosen (pair->file)) {
- if (is_application_default_for_uri (pair->application, uri)) {
- nautilus_mime_set_default_application_for_uri (pair->file, NULL);
+ if (nautilus_mime_is_default_application_for_file_user_chosen (pair->file)) {
+ if (is_application_default_for_file (pair->application, pair->file)) {
+ nautilus_mime_set_default_application_for_file (pair->file, NULL);
}
}
} else {
/* If the default is just falling through to the default for this type,
* don't do anything here.
*/
- if (nautilus_mime_is_default_component_for_uri_user_chosen (pair->file)) {
- if (is_component_default_for_uri (pair->view_identifier, uri)) {
- nautilus_mime_set_default_component_for_uri (pair->file, NULL);
+ if (nautilus_mime_is_default_component_for_file_user_chosen (pair->file)) {
+ if (is_component_default_for_file (pair->view_identifier, pair->file)) {
+ nautilus_mime_set_default_component_for_file (pair->file, NULL);
}
}
}
-
- g_free (uri);
}
static void
@@ -931,21 +895,15 @@ set_default_for_type (ProgramFilePair *pair)
static void
set_default_for_item (ProgramFilePair *pair)
{
- char *uri;
-
- uri = nautilus_file_get_uri (pair->file);
-
- uri = nautilus_file_get_uri (pair->file);
+ nautilus_mime_actions_wait_for_required_file_attributes (pair->file);
if (pair->action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION) {
- nautilus_mime_set_default_application_for_uri (pair->file, pair->application->id);
+ nautilus_mime_set_default_application_for_file (pair->file, pair->application->id);
} else {
- nautilus_mime_set_default_component_for_uri (pair->file, pair->view_identifier->iid);
+ nautilus_mime_set_default_component_for_file (pair->file, pair->view_identifier->iid);
}
- nautilus_mime_set_default_action_type_for_uri (pair->file, pair->action_type);
-
- g_free (uri);
+ nautilus_mime_set_default_action_type_for_file (pair->file, pair->action_type);
}
static void
diff --git a/libnautilus-private/nautilus-program-choosing.c b/libnautilus-private/nautilus-program-choosing.c
index d3c4f3ddc..b3acd1ab4 100644
--- a/libnautilus-private/nautilus-program-choosing.c
+++ b/libnautilus-private/nautilus-program-choosing.c
@@ -40,19 +40,16 @@ static gboolean
any_programs_available_for_file (GnomeVFSMimeActionType action_type, NautilusFile *file)
{
gboolean result;
- char *uri;
-
- uri = nautilus_file_get_uri (file);
+
+ nautilus_mime_actions_wait_for_required_file_attributes (file);
if (action_type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT) {
- result = nautilus_mime_has_any_components_for_uri (file);
+ result = nautilus_mime_has_any_components_for_file (file);
} else {
g_assert (action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION);
- result = nautilus_mime_has_any_applications_for_uri (file);
+ result = nautilus_mime_has_any_applications_for_file (file);
}
- g_free (uri);
-
return result;
}
diff --git a/libnautilus-private/nautilus-wait-until-ready.h b/libnautilus-private/nautilus-wait-until-ready.h
index 640e6c6b1..61ae49254 100644
--- a/libnautilus-private/nautilus-wait-until-ready.h
+++ b/libnautilus-private/nautilus-wait-until-ready.h
@@ -33,9 +33,5 @@
* is deprecated! Do not use these calls in new code!
*/
-GList * nautilus_directory_wait_until_ready (NautilusDirectory *directory,
- GList *file_attributes);
-
-
void nautilus_file_wait_until_ready (NautilusFile *file,
GList *attributes);
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index bc5a83cab..0b52effeb 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -573,6 +573,8 @@ switch_location_and_view (NautilusViewIdentifier *identifier,
file = nautilus_file_get (new_uri);
+ nautilus_mime_actions_wait_for_required_file_attributes (file);
+
/* User has explicitly chosen a viewer other than the default, so
* make it the default and then switch locations.
*/
@@ -580,7 +582,7 @@ switch_location_and_view (NautilusViewIdentifier *identifier,
* for switching location and viewer together, so we don't have to
* rely on metadata for holding the default location.
*/
- nautilus_mime_set_default_component_for_uri (file, identifier->iid);
+ nautilus_mime_set_default_component_for_file (file, identifier->iid);
nautilus_file_unref (file);
@@ -2921,7 +2923,9 @@ create_open_with_gtk_menu (FMDirectoryView *view, GList *files)
if (nautilus_g_list_exactly_one_item (files)) {
uri = nautilus_file_get_uri (NAUTILUS_FILE (files->data));
- applications = nautilus_mime_get_short_list_applications_for_uri (NAUTILUS_FILE (files->data));
+ nautilus_mime_actions_wait_for_required_file_attributes (NAUTILUS_FILE (files->data));
+
+ applications = nautilus_mime_get_short_list_applications_for_file (NAUTILUS_FILE (files->data));
for (node = applications; node != NULL; node = node->next) {
add_application_to_gtk_menu (view, open_with_menu, node->data, uri);
}
@@ -2936,7 +2940,7 @@ create_open_with_gtk_menu (FMDirectoryView *view, GList *files)
nautilus_gtk_menu_append_separator (open_with_menu);
- components = nautilus_mime_get_short_list_components_for_uri (NAUTILUS_FILE (files->data));
+ components = nautilus_mime_get_short_list_components_for_file (NAUTILUS_FILE (files->data));
for (node = components; node != NULL; node = node->next) {
add_component_to_gtk_menu (view, open_with_menu, node->data, uri);
}
@@ -3187,7 +3191,9 @@ reset_bonobo_open_with_menu (FMDirectoryView *view, GList *selection)
if (nautilus_g_list_exactly_one_item (selection)) {
uri = nautilus_file_get_uri (NAUTILUS_FILE (selection->data));
- applications = nautilus_mime_get_short_list_applications_for_uri (NAUTILUS_FILE (selection->data));
+ nautilus_mime_actions_wait_for_required_file_attributes (NAUTILUS_FILE (selection->data));
+
+ applications = nautilus_mime_get_short_list_applications_for_file (NAUTILUS_FILE (selection->data));
for (node = applications, index = 0; node != NULL; node = node->next, index++) {
add_application_to_bonobo_menu (view, node->data, uri, index);
@@ -3195,7 +3201,7 @@ reset_bonobo_open_with_menu (FMDirectoryView *view, GList *selection)
gnome_vfs_mime_application_list_free (applications);
- components = nautilus_mime_get_short_list_components_for_uri (NAUTILUS_FILE (selection->data));
+ components = nautilus_mime_get_short_list_components_for_file (NAUTILUS_FILE (selection->data));
for (node = components, index = 0; node != NULL; node = node->next, index++) {
add_component_to_bonobo_menu (view, node->data, uri, index);
@@ -3573,8 +3579,10 @@ activate_callback (NautilusFile *file, gpointer callback_data)
}
if (!performed_special_handling) {
- action_type = nautilus_mime_get_default_action_type_for_uri (file);
- application = nautilus_mime_get_default_application_for_uri (file);
+ nautilus_mime_actions_wait_for_required_file_attributes (file);
+
+ action_type = nautilus_mime_get_default_action_type_for_file (file);
+ application = nautilus_mime_get_default_application_for_file (file);
/* We need to check for the case of having
* GNOME_VFS_MIME_ACTION_TYPE_APPLICATION as the
diff --git a/src/nautilus-applicable-views.c b/src/nautilus-applicable-views.c
index 3592faa19..3f2074677 100644
--- a/src/nautilus-applicable-views.c
+++ b/src/nautilus-applicable-views.c
@@ -116,7 +116,7 @@ got_file_info_callback (NautilusFile *file,
goto out;
}
- default_component = nautilus_mime_get_default_component_for_uri (navinfo->file);
+ default_component = nautilus_mime_get_default_component_for_file (navinfo->file);
if (default_component != NULL) {
default_id = nautilus_view_identifier_new_from_content_view (default_component);
CORBA_free (default_component);
@@ -134,7 +134,7 @@ got_file_info_callback (NautilusFile *file,
/* Map GnomeVFSResult to one of the types that Nautilus knows how to handle. */
if (vfs_result_code == GNOME_VFS_OK && default_id == NULL) {
/* If the complete list is non-empty, the default shouldn't have been NULL */
- g_assert (!nautilus_mime_has_any_components_for_uri (navinfo->file));
+ g_assert (!nautilus_mime_has_any_components_for_file (navinfo->file));
result_code = NAUTILUS_NAVIGATION_RESULT_NO_HANDLER_FOR_TYPE;
}
@@ -179,9 +179,7 @@ nautilus_navigation_info_new (const char *location,
info->file = nautilus_file_get (location);
/* Arrange for all the file attributes we will need. */
- attributes = NULL;
- attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_SLOW_MIME_TYPE);
- attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_METADATA);
+ attributes = nautilus_mime_actions_get_required_file_attributes ();
nautilus_file_call_when_ready
(info->file,
diff --git a/src/nautilus-information-panel.c b/src/nautilus-information-panel.c
index 30e1cad37..f124304d2 100644
--- a/src/nautilus-information-panel.c
+++ b/src/nautilus-information-panel.c
@@ -77,10 +77,11 @@ struct NautilusSidebarDetails {
GtkVBox *button_box;
gboolean has_buttons;
char *uri;
+ NautilusFile *file;
+ guint file_changed_connection;
char *default_background_color;
char *default_background_image;
int selected_index;
- NautilusFile *file;
gboolean background_connected;
int old_width;
};
@@ -285,7 +286,12 @@ nautilus_sidebar_destroy (GtkObject *object)
gtk_object_unref (GTK_OBJECT (sidebar->details->notebook));
- nautilus_file_unref (sidebar->details->file);
+ if (sidebar->details->file != NULL) {
+ gtk_signal_disconnect (GTK_OBJECT (sidebar->details->file),
+ sidebar->details->file_changed_connection);
+ nautilus_file_monitor_remove (sidebar->details->file, sidebar);
+ nautilus_file_unref (sidebar->details->file);
+ }
g_free (sidebar->details->uri);
g_free (sidebar->details->default_background_color);
@@ -297,6 +303,7 @@ nautilus_sidebar_destroy (GtkObject *object)
nautilus_sidebar_theme_changed,
sidebar);
+
NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, (object));
}
@@ -714,10 +721,6 @@ receive_dropped_keyword (NautilusSidebar *sidebar,
int x, int y,
GtkSelectionData *selection_data)
{
- /* FIXME bugzilla.eazel.com 866: Can't expect to read the
- * keywords list instantly here. We might need to read the
- * metafile first.
- */
nautilus_drag_file_receive_dropped_keyword (sidebar->details->file, selection_data->data);
/* regenerate the display */
@@ -1150,10 +1153,6 @@ open_with_callback (GtkWidget *button, gpointer ignored)
sidebar = NAUTILUS_SIDEBAR (gtk_object_get_user_data (GTK_OBJECT (button)));
- /* FIXME bugzilla.eazel.com 866: Can't expect to put this
- * window up instantly. We might need to read the metafile
- * first.
- */
g_return_if_fail (sidebar->details->file != NULL);
nautilus_choose_application_for_file
@@ -1271,7 +1270,7 @@ add_buttons_from_metadata (NautilusSidebar *sidebar, const char *button_data)
*
* Update the list of program-launching buttons based on the current uri.
*/
-void
+static void
nautilus_sidebar_update_buttons (NautilusSidebar *sidebar)
{
char *button_data;
@@ -1290,7 +1289,7 @@ nautilus_sidebar_update_buttons (NautilusSidebar *sidebar)
NAUTILUS_METADATA_KEY_SIDEBAR_BUTTONS,
NULL);
if (button_data) {
- add_buttons_from_metadata(sidebar, button_data);
+ add_buttons_from_metadata (sidebar, button_data);
g_free(button_data);
}
@@ -1298,9 +1297,9 @@ nautilus_sidebar_update_buttons (NautilusSidebar *sidebar)
* unless there aren't any applications at all in complete list.
*/
- if (nautilus_mime_has_any_applications_for_uri (sidebar->details->file)) {
+ if (nautilus_mime_has_any_applications_for_file (sidebar->details->file)) {
short_application_list =
- nautilus_mime_get_short_list_applications_for_uri (sidebar->details->file);
+ nautilus_mime_get_short_list_applications_for_file (sidebar->details->file);
add_command_buttons (sidebar, short_application_list);
gnome_vfs_mime_application_list_free (short_application_list);
@@ -1314,7 +1313,7 @@ nautilus_sidebar_update_buttons (NautilusSidebar *sidebar)
}
}
-void
+static void
nautilus_sidebar_update_appearance (NautilusSidebar *sidebar)
{
NautilusBackground *background;
@@ -1388,6 +1387,25 @@ nautilus_sidebar_update_appearance (NautilusSidebar *sidebar)
sidebar);
}
+
+static void
+nautilus_sidebar_update_all (NautilusSidebar *sidebar)
+{
+ GList *attributes;
+ gboolean ready;
+
+ attributes = nautilus_mime_actions_get_required_file_attributes ();
+ ready = nautilus_file_check_if_ready (sidebar->details->file, attributes);
+ g_list_free (attributes);
+
+ if (ready) {
+ nautilus_sidebar_update_appearance (sidebar);
+
+ /* set up the command buttons */
+ nautilus_sidebar_update_buttons (sidebar);
+ }
+}
+
/* here is the key routine that populates the sidebar with the appropriate information when the uri changes */
void
@@ -1396,6 +1414,7 @@ nautilus_sidebar_set_uri (NautilusSidebar *sidebar,
const char* initial_title)
{
NautilusFile *file;
+ GList *attributes;
g_return_if_fail (NAUTILUS_IS_SIDEBAR (sidebar));
g_return_if_fail (new_uri != NULL);
@@ -1409,22 +1428,36 @@ nautilus_sidebar_set_uri (NautilusSidebar *sidebar,
g_free (sidebar->details->uri);
sidebar->details->uri = g_strdup (new_uri);
- /* FIXME: we should monitor this file's metadata, and avoid
- doing any metadata getting until it's ready. */
+ if (sidebar->details->file != NULL) {
+ gtk_signal_disconnect (GTK_OBJECT (sidebar->details->file),
+ sidebar->details->file_changed_connection);
+
+ nautilus_file_monitor_remove (sidebar->details->file, sidebar);
+ }
+
file = nautilus_file_get (sidebar->details->uri);
+
nautilus_file_unref (sidebar->details->file);
+
sidebar->details->file = file;
-
- nautilus_sidebar_update_appearance (sidebar);
+
+ sidebar->details->file_changed_connection =
+ gtk_signal_connect_object (GTK_OBJECT (sidebar->details->file),
+ "changed",
+ nautilus_sidebar_update_all,
+ GTK_OBJECT (sidebar));
+
+ attributes = nautilus_mime_actions_get_required_file_attributes ();
+ nautilus_file_monitor_add (sidebar->details->file, sidebar, attributes);
+ g_list_free (attributes);
+
+ nautilus_sidebar_update_all (sidebar);
/* tell the title widget about it */
nautilus_sidebar_title_set_file (sidebar->details->title,
sidebar->details->file,
initial_title);
-
- /* set up the command buttons */
- nautilus_sidebar_update_buttons (sidebar);
}
void
diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c
index b081b88ef..f6aaa71c5 100644
--- a/src/nautilus-navigation-window.c
+++ b/src/nautilus-navigation-window.c
@@ -120,6 +120,8 @@ static void nautilus_window_realize (GtkWidget *widget
static void update_sidebar_panels_from_preferences (NautilusWindow *window);
static void sidebar_panels_changed_callback (gpointer user_data);
static void nautilus_window_show (GtkWidget *widget);
+static void nautilus_window_real_load_content_view_menu (NautilusFile *file,
+ gpointer callback_data);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusWindow,
nautilus_window,
@@ -550,6 +552,11 @@ nautilus_window_destroy (GtkObject *object)
bonobo_object_unref (BONOBO_OBJECT (window->details->shell_ui));
}
+ /* Cancel the callback for the View As menu update, if any */
+ nautilus_file_cancel_call_when_ready (window->details->viewed_file,
+ nautilus_window_real_load_content_view_menu,
+ window);
+
/* Let go of the file for the current location */
nautilus_file_unref (window->details->viewed_file);
@@ -871,7 +878,6 @@ static void
view_menu_choose_view_callback (GtkWidget *widget, gpointer data)
{
NautilusWindow *window;
- NautilusFile *file;
g_return_if_fail (GTK_IS_MENU_ITEM (widget));
g_return_if_fail (NAUTILUS_IS_WINDOW (gtk_object_get_data (GTK_OBJECT (widget), "window")));
@@ -886,19 +892,10 @@ view_menu_choose_view_callback (GtkWidget *widget, gpointer data)
*/
nautilus_window_synch_content_view_menu (window);
- /* FIXME bugzilla.eazel.com 866: Can't expect to put this
- * window up instantly. We might need to read the metafile
- * first.
- */
- file = nautilus_file_get (window->location);
- g_return_if_fail (NAUTILUS_IS_FILE (file));
-
- nautilus_choose_component_for_file (file,
+ nautilus_choose_component_for_file (window->details->viewed_file,
GTK_WINDOW (window),
chose_component_callback,
window);
-
- nautilus_file_unref (file);
}
static void
@@ -912,17 +909,18 @@ view_menu_vfs_method_callback (GtkWidget *widget, gpointer data)
g_return_if_fail (NAUTILUS_IS_WINDOW (gtk_object_get_data (GTK_OBJECT (widget), "window")));
window = NAUTILUS_WINDOW (gtk_object_get_data (GTK_OBJECT (widget), "window"));
- method = (char *)(gtk_object_get_data (GTK_OBJECT (widget), "method"));
+ method = (char *) (gtk_object_get_data (GTK_OBJECT (widget), "method"));
g_return_if_fail (method);
- new_location = g_strdup_printf("%s#%s:/",window->location,method);
- nautilus_window_goto_uri(window, new_location);
- g_free(new_location);
+ new_location = g_strdup_printf ("%s#%s:/",window->location,method);
+ nautilus_window_goto_uri (window, new_location);
+ g_free (new_location);
}
-void
-nautilus_window_load_content_view_menu (NautilusWindow *window)
+static void
+nautilus_window_real_load_content_view_menu (NautilusFile *file,
+ gpointer callback_data)
{
GList *components;
char *method;
@@ -930,16 +928,16 @@ nautilus_window_load_content_view_menu (NautilusWindow *window)
GtkWidget *new_menu;
GtkWidget *menu_item;
char *label;
- NautilusFile *file;
+ NautilusWindow *window;
+
+ window = NAUTILUS_WINDOW (callback_data);
- g_return_if_fail (NAUTILUS_IS_WINDOW (window));
g_return_if_fail (GTK_IS_OPTION_MENU (window->view_as_option_menu));
new_menu = gtk_menu_new ();
-
- file = nautilus_file_get (window->location);
+
/* Add a menu item for each view in the preferred list for this location. */
- components = nautilus_mime_get_short_list_components_for_uri (file);
+ components = nautilus_mime_get_short_list_components_for_file (window->details->viewed_file);
for (p = components; p != NULL; p = p->next) {
menu_item = create_content_view_menu_item
(window, nautilus_view_identifier_new_from_content_view (p->data));
@@ -952,7 +950,7 @@ nautilus_window_load_content_view_menu (NautilusWindow *window)
* one way trip if you choose one of these view menu items, but
* it's better than nothing.
*/
- method = nautilus_mime_get_short_list_methods_for_uri (file);
+ method = nautilus_mime_get_short_list_methods_for_file (window->details->viewed_file);
/* FIXME bugzilla.eazel.com 2466: Name of the function is plural, but it returns only
* one item. That must be fixed.
*/
@@ -995,12 +993,26 @@ nautilus_window_load_content_view_menu (NautilusWindow *window)
new_menu);
- nautilus_file_unref (file);
-
nautilus_window_synch_content_view_menu (window);
}
void
+nautilus_window_load_content_view_menu (NautilusWindow *window)
+{
+ GList *attributes;
+
+ g_return_if_fail (NAUTILUS_IS_WINDOW (window));
+
+ attributes = nautilus_mime_actions_get_required_file_attributes ();
+
+ /* FIXME: need to cancel this when appropriate... */
+ nautilus_file_call_when_ready (window->details->viewed_file, attributes,
+ nautilus_window_real_load_content_view_menu, window);
+
+ g_list_free (attributes);
+}
+
+void
nautilus_window_add_sidebar_panel (NautilusWindow *window,
NautilusViewFrame *sidebar_panel)
{
diff --git a/src/nautilus-object-window.c b/src/nautilus-object-window.c
index b081b88ef..f6aaa71c5 100644
--- a/src/nautilus-object-window.c
+++ b/src/nautilus-object-window.c
@@ -120,6 +120,8 @@ static void nautilus_window_realize (GtkWidget *widget
static void update_sidebar_panels_from_preferences (NautilusWindow *window);
static void sidebar_panels_changed_callback (gpointer user_data);
static void nautilus_window_show (GtkWidget *widget);
+static void nautilus_window_real_load_content_view_menu (NautilusFile *file,
+ gpointer callback_data);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusWindow,
nautilus_window,
@@ -550,6 +552,11 @@ nautilus_window_destroy (GtkObject *object)
bonobo_object_unref (BONOBO_OBJECT (window->details->shell_ui));
}
+ /* Cancel the callback for the View As menu update, if any */
+ nautilus_file_cancel_call_when_ready (window->details->viewed_file,
+ nautilus_window_real_load_content_view_menu,
+ window);
+
/* Let go of the file for the current location */
nautilus_file_unref (window->details->viewed_file);
@@ -871,7 +878,6 @@ static void
view_menu_choose_view_callback (GtkWidget *widget, gpointer data)
{
NautilusWindow *window;
- NautilusFile *file;
g_return_if_fail (GTK_IS_MENU_ITEM (widget));
g_return_if_fail (NAUTILUS_IS_WINDOW (gtk_object_get_data (GTK_OBJECT (widget), "window")));
@@ -886,19 +892,10 @@ view_menu_choose_view_callback (GtkWidget *widget, gpointer data)
*/
nautilus_window_synch_content_view_menu (window);
- /* FIXME bugzilla.eazel.com 866: Can't expect to put this
- * window up instantly. We might need to read the metafile
- * first.
- */
- file = nautilus_file_get (window->location);
- g_return_if_fail (NAUTILUS_IS_FILE (file));
-
- nautilus_choose_component_for_file (file,
+ nautilus_choose_component_for_file (window->details->viewed_file,
GTK_WINDOW (window),
chose_component_callback,
window);
-
- nautilus_file_unref (file);
}
static void
@@ -912,17 +909,18 @@ view_menu_vfs_method_callback (GtkWidget *widget, gpointer data)
g_return_if_fail (NAUTILUS_IS_WINDOW (gtk_object_get_data (GTK_OBJECT (widget), "window")));
window = NAUTILUS_WINDOW (gtk_object_get_data (GTK_OBJECT (widget), "window"));
- method = (char *)(gtk_object_get_data (GTK_OBJECT (widget), "method"));
+ method = (char *) (gtk_object_get_data (GTK_OBJECT (widget), "method"));
g_return_if_fail (method);
- new_location = g_strdup_printf("%s#%s:/",window->location,method);
- nautilus_window_goto_uri(window, new_location);
- g_free(new_location);
+ new_location = g_strdup_printf ("%s#%s:/",window->location,method);
+ nautilus_window_goto_uri (window, new_location);
+ g_free (new_location);
}
-void
-nautilus_window_load_content_view_menu (NautilusWindow *window)
+static void
+nautilus_window_real_load_content_view_menu (NautilusFile *file,
+ gpointer callback_data)
{
GList *components;
char *method;
@@ -930,16 +928,16 @@ nautilus_window_load_content_view_menu (NautilusWindow *window)
GtkWidget *new_menu;
GtkWidget *menu_item;
char *label;
- NautilusFile *file;
+ NautilusWindow *window;
+
+ window = NAUTILUS_WINDOW (callback_data);
- g_return_if_fail (NAUTILUS_IS_WINDOW (window));
g_return_if_fail (GTK_IS_OPTION_MENU (window->view_as_option_menu));
new_menu = gtk_menu_new ();
-
- file = nautilus_file_get (window->location);
+
/* Add a menu item for each view in the preferred list for this location. */
- components = nautilus_mime_get_short_list_components_for_uri (file);
+ components = nautilus_mime_get_short_list_components_for_file (window->details->viewed_file);
for (p = components; p != NULL; p = p->next) {
menu_item = create_content_view_menu_item
(window, nautilus_view_identifier_new_from_content_view (p->data));
@@ -952,7 +950,7 @@ nautilus_window_load_content_view_menu (NautilusWindow *window)
* one way trip if you choose one of these view menu items, but
* it's better than nothing.
*/
- method = nautilus_mime_get_short_list_methods_for_uri (file);
+ method = nautilus_mime_get_short_list_methods_for_file (window->details->viewed_file);
/* FIXME bugzilla.eazel.com 2466: Name of the function is plural, but it returns only
* one item. That must be fixed.
*/
@@ -995,12 +993,26 @@ nautilus_window_load_content_view_menu (NautilusWindow *window)
new_menu);
- nautilus_file_unref (file);
-
nautilus_window_synch_content_view_menu (window);
}
void
+nautilus_window_load_content_view_menu (NautilusWindow *window)
+{
+ GList *attributes;
+
+ g_return_if_fail (NAUTILUS_IS_WINDOW (window));
+
+ attributes = nautilus_mime_actions_get_required_file_attributes ();
+
+ /* FIXME: need to cancel this when appropriate... */
+ nautilus_file_call_when_ready (window->details->viewed_file, attributes,
+ nautilus_window_real_load_content_view_menu, window);
+
+ g_list_free (attributes);
+}
+
+void
nautilus_window_add_sidebar_panel (NautilusWindow *window,
NautilusViewFrame *sidebar_panel)
{
diff --git a/src/nautilus-sidebar.c b/src/nautilus-sidebar.c
index 30e1cad37..f124304d2 100644
--- a/src/nautilus-sidebar.c
+++ b/src/nautilus-sidebar.c
@@ -77,10 +77,11 @@ struct NautilusSidebarDetails {
GtkVBox *button_box;
gboolean has_buttons;
char *uri;
+ NautilusFile *file;
+ guint file_changed_connection;
char *default_background_color;
char *default_background_image;
int selected_index;
- NautilusFile *file;
gboolean background_connected;
int old_width;
};
@@ -285,7 +286,12 @@ nautilus_sidebar_destroy (GtkObject *object)
gtk_object_unref (GTK_OBJECT (sidebar->details->notebook));
- nautilus_file_unref (sidebar->details->file);
+ if (sidebar->details->file != NULL) {
+ gtk_signal_disconnect (GTK_OBJECT (sidebar->details->file),
+ sidebar->details->file_changed_connection);
+ nautilus_file_monitor_remove (sidebar->details->file, sidebar);
+ nautilus_file_unref (sidebar->details->file);
+ }
g_free (sidebar->details->uri);
g_free (sidebar->details->default_background_color);
@@ -297,6 +303,7 @@ nautilus_sidebar_destroy (GtkObject *object)
nautilus_sidebar_theme_changed,
sidebar);
+
NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, (object));
}
@@ -714,10 +721,6 @@ receive_dropped_keyword (NautilusSidebar *sidebar,
int x, int y,
GtkSelectionData *selection_data)
{
- /* FIXME bugzilla.eazel.com 866: Can't expect to read the
- * keywords list instantly here. We might need to read the
- * metafile first.
- */
nautilus_drag_file_receive_dropped_keyword (sidebar->details->file, selection_data->data);
/* regenerate the display */
@@ -1150,10 +1153,6 @@ open_with_callback (GtkWidget *button, gpointer ignored)
sidebar = NAUTILUS_SIDEBAR (gtk_object_get_user_data (GTK_OBJECT (button)));
- /* FIXME bugzilla.eazel.com 866: Can't expect to put this
- * window up instantly. We might need to read the metafile
- * first.
- */
g_return_if_fail (sidebar->details->file != NULL);
nautilus_choose_application_for_file
@@ -1271,7 +1270,7 @@ add_buttons_from_metadata (NautilusSidebar *sidebar, const char *button_data)
*
* Update the list of program-launching buttons based on the current uri.
*/
-void
+static void
nautilus_sidebar_update_buttons (NautilusSidebar *sidebar)
{
char *button_data;
@@ -1290,7 +1289,7 @@ nautilus_sidebar_update_buttons (NautilusSidebar *sidebar)
NAUTILUS_METADATA_KEY_SIDEBAR_BUTTONS,
NULL);
if (button_data) {
- add_buttons_from_metadata(sidebar, button_data);
+ add_buttons_from_metadata (sidebar, button_data);
g_free(button_data);
}
@@ -1298,9 +1297,9 @@ nautilus_sidebar_update_buttons (NautilusSidebar *sidebar)
* unless there aren't any applications at all in complete list.
*/
- if (nautilus_mime_has_any_applications_for_uri (sidebar->details->file)) {
+ if (nautilus_mime_has_any_applications_for_file (sidebar->details->file)) {
short_application_list =
- nautilus_mime_get_short_list_applications_for_uri (sidebar->details->file);
+ nautilus_mime_get_short_list_applications_for_file (sidebar->details->file);
add_command_buttons (sidebar, short_application_list);
gnome_vfs_mime_application_list_free (short_application_list);
@@ -1314,7 +1313,7 @@ nautilus_sidebar_update_buttons (NautilusSidebar *sidebar)
}
}
-void
+static void
nautilus_sidebar_update_appearance (NautilusSidebar *sidebar)
{
NautilusBackground *background;
@@ -1388,6 +1387,25 @@ nautilus_sidebar_update_appearance (NautilusSidebar *sidebar)
sidebar);
}
+
+static void
+nautilus_sidebar_update_all (NautilusSidebar *sidebar)
+{
+ GList *attributes;
+ gboolean ready;
+
+ attributes = nautilus_mime_actions_get_required_file_attributes ();
+ ready = nautilus_file_check_if_ready (sidebar->details->file, attributes);
+ g_list_free (attributes);
+
+ if (ready) {
+ nautilus_sidebar_update_appearance (sidebar);
+
+ /* set up the command buttons */
+ nautilus_sidebar_update_buttons (sidebar);
+ }
+}
+
/* here is the key routine that populates the sidebar with the appropriate information when the uri changes */
void
@@ -1396,6 +1414,7 @@ nautilus_sidebar_set_uri (NautilusSidebar *sidebar,
const char* initial_title)
{
NautilusFile *file;
+ GList *attributes;
g_return_if_fail (NAUTILUS_IS_SIDEBAR (sidebar));
g_return_if_fail (new_uri != NULL);
@@ -1409,22 +1428,36 @@ nautilus_sidebar_set_uri (NautilusSidebar *sidebar,
g_free (sidebar->details->uri);
sidebar->details->uri = g_strdup (new_uri);
- /* FIXME: we should monitor this file's metadata, and avoid
- doing any metadata getting until it's ready. */
+ if (sidebar->details->file != NULL) {
+ gtk_signal_disconnect (GTK_OBJECT (sidebar->details->file),
+ sidebar->details->file_changed_connection);
+
+ nautilus_file_monitor_remove (sidebar->details->file, sidebar);
+ }
+
file = nautilus_file_get (sidebar->details->uri);
+
nautilus_file_unref (sidebar->details->file);
+
sidebar->details->file = file;
-
- nautilus_sidebar_update_appearance (sidebar);
+
+ sidebar->details->file_changed_connection =
+ gtk_signal_connect_object (GTK_OBJECT (sidebar->details->file),
+ "changed",
+ nautilus_sidebar_update_all,
+ GTK_OBJECT (sidebar));
+
+ attributes = nautilus_mime_actions_get_required_file_attributes ();
+ nautilus_file_monitor_add (sidebar->details->file, sidebar, attributes);
+ g_list_free (attributes);
+
+ nautilus_sidebar_update_all (sidebar);
/* tell the title widget about it */
nautilus_sidebar_title_set_file (sidebar->details->title,
sidebar->details->file,
initial_title);
-
- /* set up the command buttons */
- nautilus_sidebar_update_buttons (sidebar);
}
void
diff --git a/src/nautilus-spatial-window.c b/src/nautilus-spatial-window.c
index b081b88ef..f6aaa71c5 100644
--- a/src/nautilus-spatial-window.c
+++ b/src/nautilus-spatial-window.c
@@ -120,6 +120,8 @@ static void nautilus_window_realize (GtkWidget *widget
static void update_sidebar_panels_from_preferences (NautilusWindow *window);
static void sidebar_panels_changed_callback (gpointer user_data);
static void nautilus_window_show (GtkWidget *widget);
+static void nautilus_window_real_load_content_view_menu (NautilusFile *file,
+ gpointer callback_data);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusWindow,
nautilus_window,
@@ -550,6 +552,11 @@ nautilus_window_destroy (GtkObject *object)
bonobo_object_unref (BONOBO_OBJECT (window->details->shell_ui));
}
+ /* Cancel the callback for the View As menu update, if any */
+ nautilus_file_cancel_call_when_ready (window->details->viewed_file,
+ nautilus_window_real_load_content_view_menu,
+ window);
+
/* Let go of the file for the current location */
nautilus_file_unref (window->details->viewed_file);
@@ -871,7 +878,6 @@ static void
view_menu_choose_view_callback (GtkWidget *widget, gpointer data)
{
NautilusWindow *window;
- NautilusFile *file;
g_return_if_fail (GTK_IS_MENU_ITEM (widget));
g_return_if_fail (NAUTILUS_IS_WINDOW (gtk_object_get_data (GTK_OBJECT (widget), "window")));
@@ -886,19 +892,10 @@ view_menu_choose_view_callback (GtkWidget *widget, gpointer data)
*/
nautilus_window_synch_content_view_menu (window);
- /* FIXME bugzilla.eazel.com 866: Can't expect to put this
- * window up instantly. We might need to read the metafile
- * first.
- */
- file = nautilus_file_get (window->location);
- g_return_if_fail (NAUTILUS_IS_FILE (file));
-
- nautilus_choose_component_for_file (file,
+ nautilus_choose_component_for_file (window->details->viewed_file,
GTK_WINDOW (window),
chose_component_callback,
window);
-
- nautilus_file_unref (file);
}
static void
@@ -912,17 +909,18 @@ view_menu_vfs_method_callback (GtkWidget *widget, gpointer data)
g_return_if_fail (NAUTILUS_IS_WINDOW (gtk_object_get_data (GTK_OBJECT (widget), "window")));
window = NAUTILUS_WINDOW (gtk_object_get_data (GTK_OBJECT (widget), "window"));
- method = (char *)(gtk_object_get_data (GTK_OBJECT (widget), "method"));
+ method = (char *) (gtk_object_get_data (GTK_OBJECT (widget), "method"));
g_return_if_fail (method);
- new_location = g_strdup_printf("%s#%s:/",window->location,method);
- nautilus_window_goto_uri(window, new_location);
- g_free(new_location);
+ new_location = g_strdup_printf ("%s#%s:/",window->location,method);
+ nautilus_window_goto_uri (window, new_location);
+ g_free (new_location);
}
-void
-nautilus_window_load_content_view_menu (NautilusWindow *window)
+static void
+nautilus_window_real_load_content_view_menu (NautilusFile *file,
+ gpointer callback_data)
{
GList *components;
char *method;
@@ -930,16 +928,16 @@ nautilus_window_load_content_view_menu (NautilusWindow *window)
GtkWidget *new_menu;
GtkWidget *menu_item;
char *label;
- NautilusFile *file;
+ NautilusWindow *window;
+
+ window = NAUTILUS_WINDOW (callback_data);
- g_return_if_fail (NAUTILUS_IS_WINDOW (window));
g_return_if_fail (GTK_IS_OPTION_MENU (window->view_as_option_menu));
new_menu = gtk_menu_new ();
-
- file = nautilus_file_get (window->location);
+
/* Add a menu item for each view in the preferred list for this location. */
- components = nautilus_mime_get_short_list_components_for_uri (file);
+ components = nautilus_mime_get_short_list_components_for_file (window->details->viewed_file);
for (p = components; p != NULL; p = p->next) {
menu_item = create_content_view_menu_item
(window, nautilus_view_identifier_new_from_content_view (p->data));
@@ -952,7 +950,7 @@ nautilus_window_load_content_view_menu (NautilusWindow *window)
* one way trip if you choose one of these view menu items, but
* it's better than nothing.
*/
- method = nautilus_mime_get_short_list_methods_for_uri (file);
+ method = nautilus_mime_get_short_list_methods_for_file (window->details->viewed_file);
/* FIXME bugzilla.eazel.com 2466: Name of the function is plural, but it returns only
* one item. That must be fixed.
*/
@@ -995,12 +993,26 @@ nautilus_window_load_content_view_menu (NautilusWindow *window)
new_menu);
- nautilus_file_unref (file);
-
nautilus_window_synch_content_view_menu (window);
}
void
+nautilus_window_load_content_view_menu (NautilusWindow *window)
+{
+ GList *attributes;
+
+ g_return_if_fail (NAUTILUS_IS_WINDOW (window));
+
+ attributes = nautilus_mime_actions_get_required_file_attributes ();
+
+ /* FIXME: need to cancel this when appropriate... */
+ nautilus_file_call_when_ready (window->details->viewed_file, attributes,
+ nautilus_window_real_load_content_view_menu, window);
+
+ g_list_free (attributes);
+}
+
+void
nautilus_window_add_sidebar_panel (NautilusWindow *window,
NautilusViewFrame *sidebar_panel)
{
diff --git a/src/nautilus-window-manage-views.c b/src/nautilus-window-manage-views.c
index 4918d95ae..daa9692cc 100644
--- a/src/nautilus-window-manage-views.c
+++ b/src/nautilus-window-manage-views.c
@@ -1470,7 +1470,7 @@ nautilus_window_set_content_view (NautilusWindow *window, NautilusViewIdentifier
file = nautilus_file_get (window->location);
g_assert (file != NULL);
- nautilus_mime_set_default_component_for_uri
+ nautilus_mime_set_default_component_for_file
(file, id->iid);
nautilus_file_unref (file);
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index b081b88ef..f6aaa71c5 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -120,6 +120,8 @@ static void nautilus_window_realize (GtkWidget *widget
static void update_sidebar_panels_from_preferences (NautilusWindow *window);
static void sidebar_panels_changed_callback (gpointer user_data);
static void nautilus_window_show (GtkWidget *widget);
+static void nautilus_window_real_load_content_view_menu (NautilusFile *file,
+ gpointer callback_data);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusWindow,
nautilus_window,
@@ -550,6 +552,11 @@ nautilus_window_destroy (GtkObject *object)
bonobo_object_unref (BONOBO_OBJECT (window->details->shell_ui));
}
+ /* Cancel the callback for the View As menu update, if any */
+ nautilus_file_cancel_call_when_ready (window->details->viewed_file,
+ nautilus_window_real_load_content_view_menu,
+ window);
+
/* Let go of the file for the current location */
nautilus_file_unref (window->details->viewed_file);
@@ -871,7 +878,6 @@ static void
view_menu_choose_view_callback (GtkWidget *widget, gpointer data)
{
NautilusWindow *window;
- NautilusFile *file;
g_return_if_fail (GTK_IS_MENU_ITEM (widget));
g_return_if_fail (NAUTILUS_IS_WINDOW (gtk_object_get_data (GTK_OBJECT (widget), "window")));
@@ -886,19 +892,10 @@ view_menu_choose_view_callback (GtkWidget *widget, gpointer data)
*/
nautilus_window_synch_content_view_menu (window);
- /* FIXME bugzilla.eazel.com 866: Can't expect to put this
- * window up instantly. We might need to read the metafile
- * first.
- */
- file = nautilus_file_get (window->location);
- g_return_if_fail (NAUTILUS_IS_FILE (file));
-
- nautilus_choose_component_for_file (file,
+ nautilus_choose_component_for_file (window->details->viewed_file,
GTK_WINDOW (window),
chose_component_callback,
window);
-
- nautilus_file_unref (file);
}
static void
@@ -912,17 +909,18 @@ view_menu_vfs_method_callback (GtkWidget *widget, gpointer data)
g_return_if_fail (NAUTILUS_IS_WINDOW (gtk_object_get_data (GTK_OBJECT (widget), "window")));
window = NAUTILUS_WINDOW (gtk_object_get_data (GTK_OBJECT (widget), "window"));
- method = (char *)(gtk_object_get_data (GTK_OBJECT (widget), "method"));
+ method = (char *) (gtk_object_get_data (GTK_OBJECT (widget), "method"));
g_return_if_fail (method);
- new_location = g_strdup_printf("%s#%s:/",window->location,method);
- nautilus_window_goto_uri(window, new_location);
- g_free(new_location);
+ new_location = g_strdup_printf ("%s#%s:/",window->location,method);
+ nautilus_window_goto_uri (window, new_location);
+ g_free (new_location);
}
-void
-nautilus_window_load_content_view_menu (NautilusWindow *window)
+static void
+nautilus_window_real_load_content_view_menu (NautilusFile *file,
+ gpointer callback_data)
{
GList *components;
char *method;
@@ -930,16 +928,16 @@ nautilus_window_load_content_view_menu (NautilusWindow *window)
GtkWidget *new_menu;
GtkWidget *menu_item;
char *label;
- NautilusFile *file;
+ NautilusWindow *window;
+
+ window = NAUTILUS_WINDOW (callback_data);
- g_return_if_fail (NAUTILUS_IS_WINDOW (window));
g_return_if_fail (GTK_IS_OPTION_MENU (window->view_as_option_menu));
new_menu = gtk_menu_new ();
-
- file = nautilus_file_get (window->location);
+
/* Add a menu item for each view in the preferred list for this location. */
- components = nautilus_mime_get_short_list_components_for_uri (file);
+ components = nautilus_mime_get_short_list_components_for_file (window->details->viewed_file);
for (p = components; p != NULL; p = p->next) {
menu_item = create_content_view_menu_item
(window, nautilus_view_identifier_new_from_content_view (p->data));
@@ -952,7 +950,7 @@ nautilus_window_load_content_view_menu (NautilusWindow *window)
* one way trip if you choose one of these view menu items, but
* it's better than nothing.
*/
- method = nautilus_mime_get_short_list_methods_for_uri (file);
+ method = nautilus_mime_get_short_list_methods_for_file (window->details->viewed_file);
/* FIXME bugzilla.eazel.com 2466: Name of the function is plural, but it returns only
* one item. That must be fixed.
*/
@@ -995,12 +993,26 @@ nautilus_window_load_content_view_menu (NautilusWindow *window)
new_menu);
- nautilus_file_unref (file);
-
nautilus_window_synch_content_view_menu (window);
}
void
+nautilus_window_load_content_view_menu (NautilusWindow *window)
+{
+ GList *attributes;
+
+ g_return_if_fail (NAUTILUS_IS_WINDOW (window));
+
+ attributes = nautilus_mime_actions_get_required_file_attributes ();
+
+ /* FIXME: need to cancel this when appropriate... */
+ nautilus_file_call_when_ready (window->details->viewed_file, attributes,
+ nautilus_window_real_load_content_view_menu, window);
+
+ g_list_free (attributes);
+}
+
+void
nautilus_window_add_sidebar_panel (NautilusWindow *window,
NautilusViewFrame *sidebar_panel)
{
diff --git a/test/test-nautilus-mime-actions-set.c b/test/test-nautilus-mime-actions-set.c
index 226cb4521..00d6b7671 100644
--- a/test/test-nautilus-mime-actions-set.c
+++ b/test/test-nautilus-mime-actions-set.c
@@ -119,30 +119,32 @@ main (int argc, char **argv)
file = nautilus_file_get (uri);
+ nautilus_mime_actions_wait_for_required_file_attributes (file);
+
if (strcmp (field, "default_action_type") == 0) {
puts ("default_action_type");
- nautilus_mime_set_default_action_type_for_uri (file, str_to_action_type (value));
+ nautilus_mime_set_default_action_type_for_file (file, str_to_action_type (value));
} else if (strcmp (field, "default_application") == 0) {
puts ("default_application");
- nautilus_mime_set_default_application_for_uri (file, value);
+ nautilus_mime_set_default_application_for_file (file, value);
} else if (strcmp (field, "default_component") == 0) {
puts ("default_component");
- nautilus_mime_set_default_component_for_uri (file, value);
+ nautilus_mime_set_default_component_for_file (file, value);
} else if (strcmp (field, "short_list_applicationss") == 0) {
puts ("short_list_applications");
- nautilus_mime_set_short_list_applications_for_uri
+ nautilus_mime_set_short_list_applications_for_file
(file, comma_separated_str_to_str_list (value));
} else if (strcmp (field, "short_list_components") == 0) {
puts ("short_list_components");
- nautilus_mime_set_short_list_components_for_uri
+ nautilus_mime_set_short_list_components_for_file
(file, comma_separated_str_to_str_list (value));
} else if (strcmp (field, "add_to_all_applicationss") == 0) {
puts ("add_to_all_applications");
- nautilus_mime_extend_all_applications_for_uri
+ nautilus_mime_extend_all_applications_for_file
(file, comma_separated_str_to_str_list (value));
} else if (strcmp (field, "remove_from_all_applications") == 0) {
puts ("remove_from_all_applications");
- nautilus_mime_remove_from_all_applications_for_uri
+ nautilus_mime_remove_from_all_applications_for_file
(file, comma_separated_str_to_str_list (value));
} else {
diff --git a/test/test-nautilus-mime-actions.c b/test/test-nautilus-mime-actions.c
index c8d9edb22..2882be790 100644
--- a/test/test-nautilus-mime-actions.c
+++ b/test/test-nautilus-mime-actions.c
@@ -130,38 +130,40 @@ main (int argc, char **argv)
uri = argv[1];
file = nautilus_file_get (uri);
+
+ nautilus_mime_actions_wait_for_required_file_attributes (file);
- default_action = nautilus_mime_get_default_action_for_uri (file);
+ default_action = nautilus_mime_get_default_action_for_file (file);
puts ("Default Action");
print_action (default_action);
puts ("");
- default_application = nautilus_mime_get_default_application_for_uri (file);
+ default_application = nautilus_mime_get_default_application_for_file (file);
puts("Default Application");
print_application (default_application);
puts ("");
- default_component = nautilus_mime_get_default_component_for_uri (file);
+ default_component = nautilus_mime_get_default_component_for_file (file);
puts("Default Component");
print_component (default_component);
puts ("");
- short_list_applications = nautilus_mime_get_short_list_applications_for_uri (file);
+ short_list_applications = nautilus_mime_get_short_list_applications_for_file (file);
puts("Short List Applications");
print_application_list (short_list_applications);
puts ("");
- short_list_components = nautilus_mime_get_short_list_components_for_uri (file);
+ short_list_components = nautilus_mime_get_short_list_components_for_file (file);
puts("Short List Components");
print_component_list (short_list_components);
puts ("");
- all_applications = nautilus_mime_get_all_applications_for_uri (file);
+ all_applications = nautilus_mime_get_all_applications_for_file (file);
puts("All Applications");
print_application_list (all_applications);
puts ("");
- all_components = nautilus_mime_get_all_components_for_uri (file);
+ all_components = nautilus_mime_get_all_components_for_file (file);
puts("All Components");
print_component_list (all_components);
puts ("");