summaryrefslogtreecommitdiff
path: root/libnautilus-extensions/nautilus-mime-actions.c
diff options
context:
space:
mode:
authorMaciej Stachowiak <mstachow@src.gnome.org>2000-11-01 23:21:44 +0000
committerMaciej Stachowiak <mstachow@src.gnome.org>2000-11-01 23:21:44 +0000
commit93a907547b533527e6daf4dfe28bc760116ac7d8 (patch)
tree6596826ddacc6e3e337e1aaee0281347d4b28203 /libnautilus-extensions/nautilus-mime-actions.c
parent56b493097ffc7d87ed6a2f36153760c1fe89e912 (diff)
downloadnautilus-93a907547b533527e6daf4dfe28bc760116ac7d8.tar.gz
New functions.
* libnautilus-extensions/nautilus-mime-actions.h, libnautilus-extensions/nautilus-mime-actions.c: (nautilus_mime_actions_file_needs_full_file_attributes, server_has_content_requirements, server_matches_content_requirements): New functions. (nautilus_mime_get_all_components_for_file) Updated. * src/nautilus-applicable-views.h, src/nautilus-applicable-views.c: (got_file_info_callback_common, (got_full_file_info_callback, got_minimum_file_info_callback, nautilus_navigation_info_new, nautilus_navigation_info_cancel): Changed to possibly handle calling the callback twice so we can avoid having to load twice before showing a component at all. * src/nautilus-window-manage-views.c (nautilus_window_end_location_change_callback): If being called a preliminary time, ignore it for now.
Diffstat (limited to 'libnautilus-extensions/nautilus-mime-actions.c')
-rw-r--r--libnautilus-extensions/nautilus-mime-actions.c73
1 files changed, 69 insertions, 4 deletions
diff --git a/libnautilus-extensions/nautilus-mime-actions.c b/libnautilus-extensions/nautilus-mime-actions.c
index 94f24fb47..cea9b08ea 100644
--- a/libnautilus-extensions/nautilus-mime-actions.c
+++ b/libnautilus-extensions/nautilus-mime-actions.c
@@ -65,6 +65,7 @@ static void free_key (gpointer
gpointer value,
gpointer user_data);
static void mime_type_hash_table_destroy (GHashTable *table);
+static gboolean server_has_content_requirements (OAF_ServerInfo *server);
static gboolean server_matches_content_requirements (OAF_ServerInfo *server,
GHashTable *type_table,
GList *explicit_iids);
@@ -728,8 +729,53 @@ nautilus_mime_has_any_applications_for_file (NautilusFile *file)
return result;
}
+gboolean
+nautilus_mime_actions_file_needs_full_file_attributes (NautilusFile *file)
+{
+ char *mime_type;
+ char *uri_scheme;
+ GList *info_list;
+ GList *explicit_iids;
+ GList *p;
+ CORBA_Environment ev;
+ gboolean needs_full_attributes;
+
+ g_return_val_if_fail (nautilus_mime_actions_check_if_minimum_attributes_ready (file),
+ FALSE);
+
+ if (!nautilus_file_is_directory (file)) {
+ return FALSE;
+ }
+
+ CORBA_exception_init (&ev);
+
+ uri_scheme = nautilus_file_get_uri_scheme (file);
+
+ mime_type = nautilus_file_get_mime_type (file);
+
+ explicit_iids = get_explicit_content_view_iids_from_metafile (file);
+
+ info_list = nautilus_do_component_query (mime_type, uri_scheme, NULL, TRUE,
+ explicit_iids, NULL, NULL, &ev);
+
+ needs_full_attributes = FALSE;
+
+ for (p = info_list; p != NULL; p = p->next) {
+ needs_full_attributes |= server_has_content_requirements ((OAF_ServerInfo *) (p->data));
+ }
+
+ gnome_vfs_mime_component_list_free (info_list);
+ nautilus_g_list_free_deep (explicit_iids);
+ g_free (uri_scheme);
+ g_free (mime_type);
+ CORBA_exception_free (&ev);
+
+ return needs_full_attributes;
+}
+
+
GList *
-nautilus_mime_get_all_components_for_file (NautilusFile *file)
+nautilus_mime_get_all_components_for_file (NautilusFile *file)
{
char *mime_type;
char *uri_scheme;
@@ -756,6 +802,9 @@ nautilus_mime_get_all_components_for_file (NautilusFile *file)
info_list = nautilus_do_component_query (mime_type, uri_scheme, item_mime_types, FALSE,
explicit_iids, NULL, NULL, &ev);
+ nautilus_g_list_free_deep (explicit_iids);
+ nautilus_g_list_free_deep (item_mime_types);
+
g_free (uri_scheme);
g_free (mime_type);
CORBA_exception_free (&ev);
@@ -1429,6 +1478,22 @@ mime_type_hash_table_destroy (GHashTable *table)
g_hash_table_destroy (table);
}
+
+
+static gboolean
+server_has_content_requirements (OAF_ServerInfo *server)
+{
+ OAF_Property *prop;
+
+ prop = oaf_server_info_prop_find (server, "nautilus:required_directory_content_mime_types");
+
+ if (prop == NULL || prop->v._d != OAF_P_STRINGV) {
+ return FALSE;
+ } else {
+ return TRUE;
+ }
+}
+
static gboolean
server_matches_content_requirements (OAF_ServerInfo *server,
GHashTable *type_table,
@@ -1443,11 +1508,11 @@ server_matches_content_requirements (OAF_ServerInfo *server,
return TRUE;
}
- prop = oaf_server_info_prop_find (server, "nautilus:required_directory_content_mime_types");
-
- if (prop == NULL || prop->v._d != OAF_P_STRINGV) {
+ if (!server_has_content_requirements (server)) {
return TRUE;
} else {
+ prop = oaf_server_info_prop_find (server, "nautilus:required_directory_content_mime_types");
+
types = prop->v._u.value_stringv;
for (i = 0; i < types._length; i++) {