summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Camp <dave@novell.com>2004-07-22 03:57:44 +0000
committerDave Camp <campd@src.gnome.org>2004-07-22 03:57:44 +0000
commiteb6a30500dac5443c9ec4f486ec47189e7cc7686 (patch)
tree58f927508ef3f2dbe3b5c22d9db30f90a86d1bc0
parentd8062f4a39e78a64fb4406d685b715543b5800da (diff)
downloadnautilus-eb6a30500dac5443c9ec4f486ec47189e7cc7686.tar.gz
Merged the nautilus-new-mime branch.
2004-07-21 Dave Camp <dave@novell.com> * Merged the nautilus-new-mime branch.
-rw-r--r--ChangeLog121
-rw-r--r--libnautilus-private/Makefile.am4
-rw-r--r--libnautilus-private/nautilus-mime-actions.c1773
-rw-r--r--libnautilus-private/nautilus-mime-actions.h52
-rw-r--r--libnautilus-private/nautilus-program-choosing.c538
-rw-r--r--libnautilus-private/nautilus-program-choosing.h17
-rw-r--r--src/file-manager/fm-bonobo-provider.c5
-rw-r--r--src/file-manager/fm-directory-view.c613
-rw-r--r--src/file-manager/fm-properties-window.c32
-rw-r--r--src/file-manager/nautilus-directory-view-ui.xml14
-rw-r--r--src/nautilus-applicable-views.c7
-rw-r--r--src/nautilus-information-panel.c6
-rw-r--r--src/nautilus-navigation-window.c47
-rw-r--r--src/nautilus-shell-ui.xml4
-rw-r--r--src/nautilus-window-manage-views.c3
-rw-r--r--src/nautilus-window-menus.c9
-rw-r--r--src/nautilus-window.c46
-rw-r--r--test/Makefile.am4
-rw-r--r--test/test-nautilus-mime-actions.c74
19 files changed, 598 insertions, 2771 deletions
diff --git a/ChangeLog b/ChangeLog
index 8c855483c..27fde079a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,124 @@
+2004-07-21 Dave Camp <dave@novell.com>
+
+ * Merged the nautilus-new-mime branch.
+
+2004-07-21 Dave Camp <dave@novell.com>
+
+ * src/file-manager/fm-properties-window.c: (should_show_open_with),
+ (create_open_with_page), (create_properties_window): Show
+ the Open With tab in the properties window.
+
+2004-07-19 Dave Camp <dave@novell.com>
+
+ * libnautilus-private/nautilus-mime-actions.c:
+ (nautilus_mime_get_default_application_for_file_internal):
+ * src/file-manager/fm-directory-view.c: (application_selected_cb),
+ (choose_program), (file_is_launchable): Use the new eel
+ open with dialog.
+
+Mon Jul 19 12:52:04 2004 Jonathan Blandford <jrb@gnome.org>
+
+ * src/file-manager/fm-directory-view.c
+ (get_default_executable_text_file_action): default to ASK
+
+2004-07-12 Dave Camp <dave@novell.com>
+
+ * libnautilus-private/nautilus-mime-actions.c:
+ (nautilus_mime_actions_get_open_with_file_attributes),
+ (nautilus_mime_actions_check_if_open_with_attributes_ready),
+ (nautilus_mime_get_default_application_for_file_internal),
+ (get_open_with_mime_applications),
+ (nautilus_mime_get_open_with_applications_for_file):
+ * libnautilus-private/nautilus-program-choosing.c:
+ (nautilus_launch_show_file):
+ * src/file-manager/fm-directory-view.c:
+ (add_application_to_bonobo_menu),
+ (get_default_executable_text_file_action),
+ (get_executable_text_file_action), (can_use_component_for_file),
+ (get_activation_action), (reset_bonobo_open_with_menu),
+ (real_update_menus), (fm_directory_view_notify_selection_changed),
+ (activate_callback):
+ * src/file-manager/nautilus-directory-view-ui.xml:
+
+ MIME overhaul, part 2.
+
+ Show the application that will be executed in the Open menu
+ item. If there are < 4 applications, show them in the main
+ context menu, otherwise show them in the Open With menu.
+
+2004-07-09 Dave Camp <dave@novell.com>
+
+
+ * test/Makefile.am (noinst_PROGRAMS):
+ * libnautilus-private/Makefile.am:
+ * libnautilus-private/nautilus-mime-actions.c:
+ (nautilus_mime_get_applications_for_file),
+ (application_supports_uri_scheme_strcmp_style),
+ (nautilus_mime_has_any_applications_for_file),
+ (nautilus_mime_set_default_application_for_file),
+ (gnome_vfs_mime_application_has_id),
+ (gnome_vfs_mime_id_matches_application),
+ (gnome_vfs_mime_application_has_id_not_in_list):
+ * libnautilus-private/nautilus-mime-actions.h:
+ * libnautilus-private/nautilus-program-choosing.c:
+ (application_cannot_open_location), (nautilus_launch_show_file),
+ (nautilus_launch_application):
+ * libnautilus-private/nautilus-program-choosing.h:
+ * libnautilus-private/nautilus-view-query.c: (is_known_mime_type),
+ (nautilus_view_query_check_if_minimum_attributes_ready),
+ (nautilus_view_query_check_if_full_attributes_ready),
+ (nautilus_view_query_get_popup_file_attributes),
+ (nautilus_view_query_check_if_popup_attributes_ready),
+ (nautilus_view_query_get_default_component_sort_conditions),
+ (nautilus_view_query_get_default_component_for_file_internal),
+ (nautilus_view_query_get_default_component_for_file),
+ (nautilus_view_query_get_fallback_component_for_file),
+ (nautilus_view_query_get_components_for_file_extended),
+ (nautilus_view_query_get_components_for_file),
+ (nautilus_view_query_has_any_components_for_file_extended),
+ (nautilus_view_query_has_any_components_for_file),
+ (mime_get_components_for_uri_scheme),
+ (nautilus_view_query_has_any_components_for_uri_scheme),
+ (nautilus_view_query_set_default_component_for_file),
+ (extract_prefix_add_suffix), (mime_type_get_supertype),
+ (get_explicit_content_view_iids_from_metafile),
+ (make_bonobo_activation_query_for_explicit_content_view_iids),
+ (make_bonobo_activation_query_with_known_mime_type),
+ (make_bonobo_activation_query_with_uri_scheme_only),
+ (mime_type_list_to_hash_table), (free_key),
+ (mime_type_hash_table_destroy), (server_has_content_requirements),
+ (server_matches_content_requirements),
+ (nautilus_do_component_query), (strv_length), (strv_concat),
+ (nautilus_view_query_get_popup_components_for_file),
+ (nautilus_view_query_get_property_components_for_file),
+ (has_server_info_in_list), (server_info_list_intersection),
+ (nautilus_view_query_get_property_components_for_files),
+ (nautilus_view_query_get_popup_components_for_files):
+ * libnautilus-private/nautilus-view-query.h:
+ * src/file-manager/fm-directory-view.c: (choose_program),
+ (open_with_other_program), (other_application_callback),
+ (can_use_component_for_file), (activate_callback):
+ * src/nautilus-applicable-views.c: (got_file_info_callback):
+ * src/nautilus-information-panel.c: (open_with_callback),
+ (nautilus_information_panel_update_buttons):
+ * src/nautilus-navigation-window.c: (load_view_as_menu):
+ * src/nautilus-shell-ui.xml:
+ * src/nautilus-window-manage-views.c:
+ (nautilus_window_set_content_view):
+ * src/nautilus-window-menus.c:
+ (nautilus_window_initialize_menus_part_1):
+ * src/nautilus-window.c: (refresh_stored_viewers),
+ (nautilus_window_set_viewed_file): MIME overhaul, part 1.
+ Separated gnome-vfs application mime mapping from view querying,
+ put them in different files.
+
+ Got rid of the short list/all application distinction.
+
+ Got rid of "View As...", all appropriate views are shown.
+
+ Only ever show folders in nautilus - everything else should be
+ opened in an app.
+
2004-07-16 Alexander Larsson <alexl@redhat.com>
* data/Makefile.am:
diff --git a/libnautilus-private/Makefile.am b/libnautilus-private/Makefile.am
index 20fe391d3..52062cfc9 100644
--- a/libnautilus-private/Makefile.am
+++ b/libnautilus-private/Makefile.am
@@ -153,8 +153,6 @@ libnautilus_private_la_SOURCES = \
nautilus-module.h \
nautilus-monitor.c \
nautilus-monitor.h \
- nautilus-program-chooser.c \
- nautilus-program-chooser.h \
nautilus-program-choosing.c \
nautilus-program-choosing.h \
nautilus-recent.h \
@@ -189,6 +187,8 @@ libnautilus_private_la_SOURCES = \
nautilus-vfs-file.h \
nautilus-view-identifier.c \
nautilus-view-identifier.h \
+ nautilus-view-query.c \
+ nautilus-view-query.h \
$(NULL)
$(lib_LTLIBRARIES): $(dependency_static_libs)
diff --git a/libnautilus-private/nautilus-mime-actions.c b/libnautilus-private/nautilus-mime-actions.c
index ed918af14..5decb4e0e 100644
--- a/libnautilus-private/nautilus-mime-actions.c
+++ b/libnautilus-private/nautilus-mime-actions.c
@@ -41,31 +41,8 @@ static int gnome_vfs_mime_id_matches_application (const char
GnomeVFSMimeApplication *application);
static gboolean gnome_vfs_mime_application_has_id_not_in_list (GnomeVFSMimeApplication *application,
GList *ids);
-static gboolean string_not_in_list (const char *str,
- GList *list);
-static char *mime_type_get_supertype (const char *mime_type);
-static GList *get_explicit_content_view_iids_from_metafile (NautilusFile *file);
-static gboolean server_has_content_requirements (Bonobo_ServerInfo *server);
static gboolean application_supports_uri_scheme (gpointer data,
gpointer uri_scheme);
-static GList *nautilus_do_component_query (const char *mime_type,
- const char *uri_scheme,
- GList *content_mime_types,
- gboolean ignore_content_mime_types,
- GList *explicit_iids,
- char **extra_sort_criteria,
- char *extra_requirements,
- gboolean must_be_view);
-static GList *str_list_difference (GList *a,
- GList *b);
-static char **strv_concat (char **a,
- char **b);
-
-static gboolean
-is_known_mime_type (const char *mime_type)
-{
- return eel_strcasecmp (mime_type, GNOME_VFS_MIME_TYPE_UNKNOWN) != 0;
-}
static gboolean
nautilus_mime_actions_check_if_minimum_attributes_ready (NautilusFile *file)
@@ -79,19 +56,6 @@ nautilus_mime_actions_check_if_minimum_attributes_ready (NautilusFile *file)
return ready;
}
-static gboolean
-nautilus_mime_actions_check_if_full_attributes_ready (NautilusFile *file)
-{
- NautilusFileAttributes attributes;
- gboolean ready;
-
- attributes = nautilus_mime_actions_get_full_file_attributes ();
- ready = nautilus_file_check_if_ready (file, attributes);
-
- return ready;
-}
-
-
NautilusFileAttributes
nautilus_mime_actions_get_minimum_file_attributes (void)
{
@@ -102,89 +66,34 @@ nautilus_mime_actions_get_minimum_file_attributes (void)
NAUTILUS_FILE_ATTRIBUTE_SLOW_MIME_TYPE;
}
-
-NautilusFileAttributes
-nautilus_mime_actions_get_full_file_attributes (void)
+static NautilusFileAttributes
+nautilus_mime_actions_get_open_with_file_attributes (void)
{
- return nautilus_mime_actions_get_minimum_file_attributes () |
- NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES;
+ return NAUTILUS_FILE_ATTRIBUTE_VOLUMES |
+ NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI |
+ NAUTILUS_FILE_ATTRIBUTE_METADATA |
+ NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE;
}
-
-
-GnomeVFSMimeActionType
-nautilus_mime_get_default_action_type_for_file (NautilusFile *file)
+static gboolean
+nautilus_mime_actions_check_if_open_with_attributes_ready (NautilusFile *file)
{
- char *mime_type;
- char *action_type_string;
- GnomeVFSMimeActionType action_type;
-
- if (!nautilus_mime_actions_check_if_minimum_attributes_ready (file)) {
- return GNOME_VFS_MIME_ACTION_TYPE_NONE;
- }
-
- action_type_string = nautilus_file_get_metadata
- (file, NAUTILUS_METADATA_KEY_DEFAULT_ACTION_TYPE, NULL);
+ NautilusFileAttributes attributes;
+ gboolean ready;
- if (action_type_string == NULL) {
- mime_type = nautilus_file_get_mime_type (file);
- action_type = gnome_vfs_mime_get_default_action_type (mime_type);
- g_free (mime_type);
- } else {
- if (g_ascii_strcasecmp (action_type_string, "application") == 0) {
- action_type = GNOME_VFS_MIME_ACTION_TYPE_APPLICATION;
- } else if (g_ascii_strcasecmp (action_type_string, "component") == 0) {
- action_type = GNOME_VFS_MIME_ACTION_TYPE_COMPONENT;
- } else {
- action_type = GNOME_VFS_MIME_ACTION_TYPE_NONE;
- }
- g_free (action_type_string);
- }
+ attributes = nautilus_mime_actions_get_open_with_file_attributes ();
+ ready = nautilus_file_check_if_ready (file, attributes);
- return action_type;
+ return ready;
}
-GnomeVFSMimeAction *
-nautilus_mime_get_default_action_for_file (NautilusFile *file)
+NautilusFileAttributes
+nautilus_mime_actions_get_full_file_attributes (void)
{
- GnomeVFSMimeAction *action;
-
- if (!nautilus_mime_actions_check_if_minimum_attributes_ready (file)) {
- return NULL;
- }
-
- action = g_new0 (GnomeVFSMimeAction, 1);
-
- 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_file (file);
- if (action->action.application == NULL) {
- g_free (action);
- action = NULL;
- }
- break;
- case GNOME_VFS_MIME_ACTION_TYPE_COMPONENT:
- action->action.component =
- nautilus_mime_get_default_component_for_file (file);
- if (action->action.component == NULL) {
- g_free (action);
- action = NULL;
- }
- case GNOME_VFS_MIME_ACTION_TYPE_NONE:
- g_free (action);
- action = NULL;
- break;
- default:
- g_assert_not_reached ();
- }
-
- return action;
+ return nautilus_mime_actions_get_minimum_file_attributes () |
+ NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES;
}
-
static GnomeVFSMimeApplication *
nautilus_mime_get_default_application_for_file_internal (NautilusFile *file,
gboolean *user_chosen)
@@ -194,7 +103,7 @@ nautilus_mime_get_default_application_for_file_internal (NautilusFile *file,
char *default_application_string;
gboolean used_user_chosen_info;
- if (!nautilus_mime_actions_check_if_minimum_attributes_ready (file)) {
+ if (!nautilus_mime_actions_check_if_open_with_attributes_ready (file)) {
return NULL;
}
@@ -209,6 +118,17 @@ nautilus_mime_get_default_application_for_file_internal (NautilusFile *file,
if (default_application_string == NULL) {
mime_type = nautilus_file_get_mime_type (file);
result = gnome_vfs_mime_get_default_application (mime_type);
+
+ if (result == NULL) {
+ GList *all_applications;
+
+ all_applications = nautilus_mime_get_open_with_applications_for_file (file);
+ if (all_applications) {
+ result = gnome_vfs_mime_application_copy (all_applications->data);
+ gnome_vfs_mime_application_list_free (all_applications);
+ }
+ }
+
g_free (mime_type);
used_user_chosen_info = FALSE;
} else {
@@ -230,299 +150,6 @@ nautilus_mime_get_default_application_for_file (NautilusFile *file)
return nautilus_mime_get_default_application_for_file_internal (file, NULL);
}
-gboolean
-nautilus_mime_is_default_application_for_file_user_chosen (NautilusFile *file)
-{
- GnomeVFSMimeApplication *application;
- gboolean 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.
- */
- if (application == NULL) {
- return FALSE;
- }
-
- gnome_vfs_mime_application_free (application);
-
- return user_chosen;
-}
-
-
-static char **
-nautilus_mime_get_default_component_sort_conditions (NautilusFile *file, char *default_component_string)
-{
- char **sort_conditions;
- char *supertype;
- char *mime_type;
- GList *short_list;
- GList *p;
- char *prev;
-
- sort_conditions = g_new0 (char *, 5);
-
- mime_type = nautilus_file_get_mime_type (file);
-
- supertype = mime_type_get_supertype (mime_type);
-
- /* prefer the exact right IID */
- if (default_component_string != NULL) {
- sort_conditions[0] = g_strconcat ("iid == '", default_component_string, "'", NULL);
- } else {
- sort_conditions[0] = g_strdup ("true");
- }
-
- /* Prefer something from the short list */
-
- short_list = nautilus_mime_get_short_list_components_for_file (file);
- if (short_list != NULL) {
- sort_conditions[1] = g_strdup ("prefer_by_list_order (iid, ['");
-
- for (p = short_list; p != NULL; p = p->next) {
- prev = sort_conditions[1];
-
- if (p->next != NULL) {
- sort_conditions[1] = g_strconcat (prev, ((Bonobo_ServerInfo *) (p->data))->iid,
- "','", NULL);
- } else {
- sort_conditions[1] = g_strconcat (prev, ((Bonobo_ServerInfo *) (p->data))->iid,
- "'])", NULL);
- }
- g_free (prev);
- }
- } else {
- sort_conditions[1] = g_strdup ("true");
- }
-
- gnome_vfs_mime_component_list_free (short_list);
-
- /* Prefer something that matches the exact type to something
- that matches the supertype */
- if (is_known_mime_type (mime_type)) {
- sort_conditions[2] = g_strconcat ("bonobo:supported_mime_types.has ('",mime_type,"')", NULL);
- } else {
- sort_conditions[2] = g_strdup ("true");
- }
-
- /* Prefer something that matches the supertype to something that matches `*' */
- if (is_known_mime_type (mime_type) && supertype != NULL) {
- sort_conditions[3] = g_strconcat ("bonobo:supported_mime_types.has ('",supertype,"')", NULL);
- } else {
- sort_conditions[3] = g_strdup ("true");
- }
-
- sort_conditions[4] = NULL;
-
- g_free (mime_type);
- g_free (supertype);
-
- return sort_conditions;
-}
-
-static Bonobo_ServerInfo *
-nautilus_mime_get_default_component_for_file_internal (NautilusFile *file,
- gboolean fallback,
- gboolean *user_chosen)
-{
- GList *info_list;
- Bonobo_ServerInfo *mime_default;
- char *default_component_string;
- char *mime_type;
- char *uri_scheme;
- GList *item_mime_types;
- GList *explicit_iids;
- Bonobo_ServerInfo *server;
- char **sort_conditions;
- char *extra_requirements;
- gboolean used_user_chosen_info;
- gboolean metadata_default;
-
- if (!nautilus_mime_actions_check_if_minimum_attributes_ready (file)) {
- return NULL;
- }
-
- used_user_chosen_info = TRUE;
-
- info_list = NULL;
-
- mime_type = nautilus_file_get_mime_type (file);
-
- uri_scheme = nautilus_file_get_uri_scheme (file);
-
- explicit_iids = get_explicit_content_view_iids_from_metafile (file);
-
- if (!nautilus_mime_actions_check_if_full_attributes_ready (file) ||
- !nautilus_file_get_directory_item_mime_types (file, &item_mime_types)) {
- item_mime_types = NULL;
- }
-
- default_component_string = NULL;
- if (!fallback) {
- default_component_string = nautilus_file_get_metadata
- (file, NAUTILUS_METADATA_KEY_DEFAULT_COMPONENT, NULL);
- }
-
- if (default_component_string == NULL) {
- metadata_default = FALSE;
-
- if (is_known_mime_type (mime_type)) {
- mime_default = gnome_vfs_mime_get_default_component (mime_type);
- if (mime_default != NULL) {
- default_component_string = g_strdup (mime_default->iid);
- if (default_component_string != NULL) {
- /* Default component chosen based only on type. */
- used_user_chosen_info = FALSE;
- }
- CORBA_free (mime_default);
- }
- }
- } else {
- metadata_default = TRUE;
- }
-
- sort_conditions = nautilus_mime_get_default_component_sort_conditions (file, default_component_string);
-
- /* If the default is specified in the per-uri metadata,
- respect the setting regardless of content type requirements */
- if (metadata_default) {
- extra_requirements = g_strconcat ("iid == '", default_component_string, "'", NULL);
- info_list = nautilus_do_component_query (mime_type, uri_scheme, item_mime_types, TRUE,
- explicit_iids, sort_conditions, extra_requirements, TRUE);
- g_free (extra_requirements);
- }
-
- if (info_list == NULL) {
- info_list = nautilus_do_component_query (mime_type, uri_scheme, item_mime_types, FALSE,
- explicit_iids, sort_conditions, NULL, TRUE);
- }
-
- if (info_list != NULL) {
- server = Bonobo_ServerInfo_duplicate (info_list->data);
- gnome_vfs_mime_component_list_free (info_list);
-
- if (default_component_string != NULL && strcmp (server->iid, default_component_string) == 0) {
- used_user_chosen_info = TRUE; /* Default component chosen based on user-stored . */
- }
- } else {
- server = NULL;
- }
-
- eel_g_list_free_deep (item_mime_types);
- eel_g_list_free_deep (explicit_iids);
- g_strfreev (sort_conditions);
-
- g_free (uri_scheme);
- g_free (mime_type);
- g_free (default_component_string);
-
- if (user_chosen != NULL) {
- *user_chosen = used_user_chosen_info;
- }
-
- return server;
-}
-
-
-Bonobo_ServerInfo *
-nautilus_mime_get_default_component_for_file (NautilusFile *file)
-{
- return nautilus_mime_get_default_component_for_file_internal (file, FALSE, NULL);
-}
-
-Bonobo_ServerInfo *
-nautilus_mime_get_default_fallback_component_for_file (NautilusFile *file)
-{
- return nautilus_mime_get_default_component_for_file_internal (file, TRUE, NULL);
-}
-
-
-gboolean
-nautilus_mime_is_default_component_for_file_user_chosen (NautilusFile *file)
-{
- Bonobo_ServerInfo *component;
- gboolean user_chosen;
-
- component = nautilus_mime_get_default_component_for_file_internal (file, FALSE, &user_chosen);
-
- /* Doesn't count as user chosen if the user-specified data is bogus and doesn't
- * result in an actual component.
- */
- if (component == NULL) {
- return FALSE;
- }
-
- CORBA_free (component);
-
- return user_chosen;
-}
-
-GList *
-nautilus_mime_get_short_list_applications_for_file (NautilusFile *file)
-{
- char *mime_type;
- char *uri_scheme;
- GList *result;
- GList *removed;
- GList *metadata_application_add_ids;
- GList *metadata_application_remove_ids;
- GList *p;
- GnomeVFSMimeApplication *application;
-
- if (!nautilus_mime_actions_check_if_minimum_attributes_ready (file)) {
- return NULL;
- }
-
- mime_type = nautilus_file_get_mime_type (file);
- result = gnome_vfs_mime_get_short_list_applications (mime_type);
- g_free (mime_type);
-
- /* First remove applications that cannot support this location */
- uri_scheme = nautilus_file_get_uri_scheme (file);
- g_assert (uri_scheme != NULL);
- result = eel_g_list_partition (result, application_supports_uri_scheme,
- uri_scheme, &removed);
- gnome_vfs_mime_application_list_free (removed);
- g_free (uri_scheme);
-
- metadata_application_add_ids = nautilus_file_get_metadata_list
- (file,
- NAUTILUS_METADATA_KEY_SHORT_LIST_APPLICATION_ADD,
- NAUTILUS_METADATA_SUBKEY_APPLICATION_ID);
- metadata_application_remove_ids = nautilus_file_get_metadata_list
- (file,
- NAUTILUS_METADATA_KEY_SHORT_LIST_APPLICATION_REMOVE,
- NAUTILUS_METADATA_SUBKEY_APPLICATION_ID);
-
-
- result = eel_g_list_partition (result, (EelPredicateFunction) gnome_vfs_mime_application_has_id_not_in_list,
- metadata_application_remove_ids, &removed);
-
- gnome_vfs_mime_application_list_free (removed);
-
- result = g_list_reverse (result);
- for (p = metadata_application_add_ids; p != NULL; p = p->next) {
- if (g_list_find_custom (result,
- p->data,
- (GCompareFunc) gnome_vfs_mime_application_has_id) == NULL &&
- g_list_find_custom (metadata_application_remove_ids,
- p->data,
- (GCompareFunc) strcmp) == NULL) {
- application = gnome_vfs_application_registry_get_mime_application (p->data);
- if (application != NULL) {
- result = g_list_prepend (result, application);
- }
- }
- }
- result = g_list_reverse (result);
-
- eel_g_list_free_deep (metadata_application_add_ids);
- eel_g_list_free_deep (metadata_application_remove_ids);
-
- return result;
-}
-
static GList *
get_open_with_mime_applications (NautilusFile *file)
{
@@ -533,13 +160,13 @@ get_open_with_mime_applications (NautilusFile *file)
guessed_mime_type = nautilus_file_get_guessed_mime_type (file);
mime_type = nautilus_file_get_mime_type (file);
- result = gnome_vfs_mime_get_short_list_applications (mime_type);
+ result = gnome_vfs_mime_get_all_applications (mime_type);
if (strcmp (guessed_mime_type, mime_type) != 0) {
GList *result_2;
GList *l;
- result_2 = gnome_vfs_mime_get_short_list_applications (guessed_mime_type);
+ result_2 = gnome_vfs_mime_get_all_applications (guessed_mime_type);
for (l = result_2; l != NULL; l = l->next) {
if (!g_list_find_custom (result,
((GnomeVFSMimeApplication*)l->data)->id,
@@ -557,7 +184,7 @@ get_open_with_mime_applications (NautilusFile *file)
}
/* Get a list of applications for the Open With menu. This is
- * different than nautilus_mime_get_short_list_applications_for_file()
+ * different than nautilus_mime_get_applications_for_file()
* because this function will merge the lists of the fast and slow
* mime types for the file */
GList *
@@ -571,7 +198,7 @@ nautilus_mime_get_open_with_applications_for_file (NautilusFile *file)
GList *p;
GnomeVFSMimeApplication *application;
- if (!nautilus_mime_actions_check_if_minimum_attributes_ready (file)) {
+ if (!nautilus_mime_actions_check_if_open_with_attributes_ready (file)) {
return NULL;
}
@@ -622,128 +249,8 @@ nautilus_mime_get_open_with_applications_for_file (NautilusFile *file)
return result;
}
-static char *
-build_joined_string (GList *list, const char *prefix, const char *separator, const char *suffix)
-{
- GString *string;
- GList *node;
- char *result;
-
- string = g_string_new (prefix);
- if (list != NULL) {
- g_string_append (string, list->data);
- for (node = list->next; node != NULL; node = node->next) {
- g_string_append (string, separator);
- g_string_append (string, node->data);
- }
- }
- g_string_append (string, suffix);
-
- result = string->str;
- g_string_free (string, FALSE);
- return result;
-}
-
-GList *
-nautilus_mime_get_short_list_components_for_file (NautilusFile *file)
-{
- char *mime_type;
- char *uri_scheme;
- GList *item_mime_types;
- GList *servers;
- GList *iids;
- GList *result;
- GList *removed;
- GList *metadata_component_add_ids;
- GList *metadata_component_remove_ids;
- GList *p;
- Bonobo_ServerInfo *component;
- GList *explicit_iids;
- char *extra_sort_conditions[2];
- char *extra_requirements;
-
- if (!nautilus_mime_actions_check_if_minimum_attributes_ready (file)) {
- return NULL;
- }
-
- uri_scheme = nautilus_file_get_uri_scheme (file);
-
- explicit_iids = get_explicit_content_view_iids_from_metafile (file);
-
- if (!nautilus_mime_actions_check_if_full_attributes_ready (file) ||
- !nautilus_file_get_directory_item_mime_types (file, &item_mime_types)) {
- item_mime_types = NULL;
- }
-
- metadata_component_add_ids = nautilus_file_get_metadata_list
- (file,
- NAUTILUS_METADATA_KEY_SHORT_LIST_COMPONENT_ADD,
- NAUTILUS_METADATA_SUBKEY_COMPONENT_IID);
- metadata_component_remove_ids = nautilus_file_get_metadata_list
- (file,
- NAUTILUS_METADATA_KEY_SHORT_LIST_COMPONENT_REMOVE,
- NAUTILUS_METADATA_SUBKEY_COMPONENT_IID);
-
- mime_type = nautilus_file_get_mime_type (file);
- servers = gnome_vfs_mime_get_short_list_components (mime_type);
- iids = NULL;
-
- for (p = servers; p != NULL; p = p->next) {
- component = (Bonobo_ServerInfo *) p->data;
-
- iids = g_list_prepend (iids, component->iid);
- }
-
- iids = eel_g_list_partition
- (iids, (EelPredicateFunction) string_not_in_list,
- metadata_component_remove_ids, &removed);
-
- g_list_free (removed);
-
- for (p = metadata_component_add_ids; p != NULL; p = p->next) {
- if (g_list_find_custom (iids,
- p->data,
- (GCompareFunc) strcmp) == NULL &&
- g_list_find_custom (metadata_component_remove_ids,
- p->data,
- (GCompareFunc) strcmp) == NULL) {
- iids = g_list_prepend (iids, p->data);
- }
- }
-
- /* By copying the iids using g_list_prepend, we've reversed
- * the short list order. We need to use the order to determine
- * the first available component, so reverse it now to
- * maintain original ordering.
- */
-
- if (iids == NULL) {
- result = NULL;
- } else {
- iids = g_list_reverse (iids);
- extra_sort_conditions[0] = build_joined_string (iids, "prefer_by_list_order (iid, ['", "','", "'])");
- extra_sort_conditions[1] = NULL;
- extra_requirements = build_joined_string (iids, "has (['", "','", "'], iid)");
- result = nautilus_do_component_query (mime_type, uri_scheme, item_mime_types, FALSE,
- explicit_iids, extra_sort_conditions, extra_requirements, TRUE);
- g_free (extra_requirements);
- g_free (extra_sort_conditions[0]);
- }
-
- eel_g_list_free_deep (item_mime_types);
- eel_g_list_free_deep (explicit_iids);
- eel_g_list_free_deep (metadata_component_add_ids);
- eel_g_list_free_deep (metadata_component_remove_ids);
- gnome_vfs_mime_component_list_free (servers);
- g_list_free (iids);
- g_free (uri_scheme);
- g_free (mime_type);
-
- return result;
-}
-
GList *
-nautilus_mime_get_all_applications_for_file (NautilusFile *file)
+nautilus_mime_get_applications_for_file (NautilusFile *file)
{
char *mime_type;
GList *result;
@@ -797,7 +304,7 @@ nautilus_mime_has_any_applications_for_file (NautilusFile *file)
char *uri_scheme;
gboolean result;
- all_applications_for_mime_type = nautilus_mime_get_all_applications_for_file (file);
+ all_applications_for_mime_type = nautilus_mime_get_applications_for_file (file);
uri_scheme = nautilus_file_get_uri_scheme (file);
application_that_can_access_uri = g_list_find_custom
@@ -812,364 +319,6 @@ nautilus_mime_has_any_applications_for_file (NautilusFile *file)
return result;
}
-gboolean
-nautilus_mime_has_any_applications_for_file_type (NautilusFile *file)
-{
- GList *applications;
- gboolean result;
-
- applications = nautilus_mime_get_all_applications_for_file (file);
-
- result = applications != NULL;
- gnome_vfs_mime_application_list_free (applications);
-
- 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;
- 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;
- }
-
- 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, TRUE);
-
- needs_full_attributes = FALSE;
-
- for (p = info_list; p != NULL; p = p->next) {
- needs_full_attributes |= server_has_content_requirements ((Bonobo_ServerInfo *) (p->data));
- }
-
- gnome_vfs_mime_component_list_free (info_list);
- eel_g_list_free_deep (explicit_iids);
- g_free (uri_scheme);
- g_free (mime_type);
-
- return needs_full_attributes;
-}
-
-
-GList *
-nautilus_mime_get_all_components_for_file_extended (NautilusFile *file,
- char *extra_reqs)
-{
- char *mime_type;
- char *uri_scheme;
- GList *item_mime_types;
- GList *info_list;
- GList *explicit_iids;
-
- if (!nautilus_mime_actions_check_if_minimum_attributes_ready (file)) {
- return NULL;
- }
-
- 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);
-
- if (!nautilus_mime_actions_check_if_full_attributes_ready (file) ||
- !nautilus_file_get_directory_item_mime_types (file, &item_mime_types)) {
- item_mime_types = NULL;
- }
-
- info_list = nautilus_do_component_query (mime_type, uri_scheme,
- item_mime_types, FALSE,
- explicit_iids, NULL,
- extra_reqs, TRUE);
-
- eel_g_list_free_deep (explicit_iids);
- eel_g_list_free_deep (item_mime_types);
-
- g_free (uri_scheme);
- g_free (mime_type);
-
- return info_list;
-}
-
-static NautilusFileAttributes
-nautilus_mime_actions_get_popup_file_attributes (void)
-{
- return NAUTILUS_FILE_ATTRIBUTE_VOLUMES |
- NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI |
- NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE;
-}
-
-static gboolean
-nautilus_mime_actions_check_if_popup_attributes_ready (NautilusFile *file)
-{
- NautilusFileAttributes attributes;
- gboolean ready;
-
- attributes = nautilus_mime_actions_get_popup_file_attributes ();
- ready = nautilus_file_check_if_ready (file, attributes);
-
- return ready;
-}
-
-GList *
-nautilus_mime_get_popup_components_for_file (NautilusFile *file)
-{
- char *mime_type;
- char *uri_scheme;
- char *extra_reqs;
- GList *item_mime_types;
- GList *info_list;
-
- if (!nautilus_mime_actions_check_if_popup_attributes_ready (file)) {
- return NULL;
- }
-
- uri_scheme = nautilus_file_get_uri_scheme (file);
-
- mime_type = nautilus_file_get_mime_type (file);
-
- if (!nautilus_mime_actions_check_if_full_attributes_ready (file) ||
- !nautilus_file_get_directory_item_mime_types (file, &item_mime_types)) {
- item_mime_types = NULL;
- }
-
- extra_reqs = "repo_ids.has ('IDL:Bonobo/Listener:1.0') AND (nautilus:context_menu_handler == true) AND nautilus:can_handle_multiple_files.defined()";
-
- info_list = nautilus_do_component_query (mime_type, uri_scheme,
- item_mime_types, FALSE,
- NULL, NULL,
- extra_reqs, FALSE);
-
- eel_g_list_free_deep (item_mime_types);
-
- g_free (uri_scheme);
- g_free (mime_type);
-
- return info_list;
-}
-
-static gboolean
-has_server_info_in_list (GList *list, Bonobo_ServerInfo *info)
-{
- for (; list; list = list->next) {
- Bonobo_ServerInfo *tmp_info = list->data;
-
- if (strcmp (tmp_info->iid, info->iid) == 0) {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-static GList *
-server_info_list_intersection (GList *a, GList *b)
-{
- GList *result = NULL;
-
- if (a == NULL || b == NULL) {
- return NULL;
- }
-
- while (b) {
- Bonobo_ServerInfo *info;
-
- info = (Bonobo_ServerInfo *)b->data;
-
- if (has_server_info_in_list (a, info)) {
- result = g_list_prepend (result,
- Bonobo_ServerInfo_duplicate (info));
-
- }
-
- b = b->next;
- }
-
- return g_list_reverse (result);
-}
-
-GList *
-nautilus_mime_get_property_components_for_file (NautilusFile *file)
-{
- char *mime_type;
- char *uri_scheme;
- char *extra_reqs;
- GList *item_mime_types;
- GList *info_list;
-
- if (!nautilus_mime_actions_check_if_minimum_attributes_ready (file)) {
- return NULL;
- }
-
- uri_scheme = nautilus_file_get_uri_scheme (file);
-
- mime_type = nautilus_file_get_mime_type (file);
-
- if (!nautilus_mime_actions_check_if_full_attributes_ready (file) ||
- !nautilus_file_get_directory_item_mime_types (file, &item_mime_types
-)) {
- item_mime_types = NULL;
- }
-
- extra_reqs = "repo_ids.has ('IDL:Bonobo/Control:1.0') AND nautilus:property_page_name.defined()";
-
- info_list = nautilus_do_component_query (mime_type, uri_scheme,
- item_mime_types, FALSE,
- NULL, NULL,
- extra_reqs, FALSE);
-
- eel_g_list_free_deep (item_mime_types);
-
- g_free (uri_scheme);
- g_free (mime_type);
-
- return info_list;
-}
-
-GList *
-nautilus_mime_get_property_components_for_files (GList *files)
-{
- GList *result, *l;
-
- result = NULL;
-
- for (l = files; l; l = l->next) {
- GList *components, *new_result;
-
- components = nautilus_mime_get_property_components_for_file (l->data);
- if (result != NULL) {
- new_result = server_info_list_intersection (result,
- components);
- gnome_vfs_mime_component_list_free (result);
- gnome_vfs_mime_component_list_free (components);
- result = new_result;
- } else {
- result = components;;
- }
-
-
- }
-
- return result;
-}
-
-GList *
-nautilus_mime_get_popup_components_for_files (GList *files)
-{
- GList *result, *l;
-
- result = NULL;
-
- for (l = files; l; l = l->next) {
- GList *components, *new_result;
-
- components = nautilus_mime_get_popup_components_for_file (l->data);
- if (result != NULL) {
- new_result = server_info_list_intersection (result,
- components);
- gnome_vfs_mime_component_list_free (result);
- gnome_vfs_mime_component_list_free (components);
- result = new_result;
- } else {
- result = components;;
- }
-
-
- }
-
- return result;
-}
-
-GList *
-nautilus_mime_get_all_components_for_file (NautilusFile *file)
-{
- return nautilus_mime_get_all_components_for_file_extended (file, NULL);
-}
-
-gboolean
-nautilus_mime_has_any_components_for_file_extended (NautilusFile *file,
- char *extra_reqs)
-{
- GList *list;
- gboolean result;
-
- list = nautilus_mime_get_all_components_for_file_extended (file,
- extra_reqs);
- result = list != NULL;
- gnome_vfs_mime_component_list_free (list);
-
- return result;
-}
-
-gboolean
-nautilus_mime_has_any_components_for_file (NautilusFile *file)
-{
- return nautilus_mime_has_any_components_for_file_extended (file, NULL);
-}
-
-static GList *
-mime_get_all_components_for_uri_scheme (const char *uri_scheme)
-{
- g_return_val_if_fail (eel_strlen (uri_scheme) > 0, NULL);
-
- return nautilus_do_component_query
- (NULL, uri_scheme, NULL, TRUE,
- NULL, NULL, NULL, TRUE);
-}
-
-gboolean
-nautilus_mime_has_any_components_for_uri_scheme (const char *uri_scheme)
-{
- GList *list;
- gboolean result;
-
- g_return_val_if_fail (eel_strlen (uri_scheme) > 0, FALSE);
-
- list = mime_get_all_components_for_uri_scheme (uri_scheme);
- result = list != NULL;
- gnome_vfs_mime_component_list_free (list);
-
- return result;
-}
-
-GnomeVFSResult
-nautilus_mime_set_default_action_type_for_file (NautilusFile *file,
- GnomeVFSMimeActionType action_type)
-{
- const char *action_string;
-
- switch (action_type) {
- case GNOME_VFS_MIME_ACTION_TYPE_APPLICATION:
- action_string = "application";
- break;
- case GNOME_VFS_MIME_ACTION_TYPE_COMPONENT:
- action_string = "component";
- break;
- case GNOME_VFS_MIME_ACTION_TYPE_NONE:
- default:
- action_string = "none";
- }
-
- nautilus_file_set_metadata
- (file, NAUTILUS_METADATA_KEY_DEFAULT_ACTION_TYPE, NULL, action_string);
-
- return GNOME_VFS_OK;
-}
-
GnomeVFSResult
nautilus_mime_set_default_application_for_file (NautilusFile *file,
const char *application_id)
@@ -1179,301 +328,6 @@ nautilus_mime_set_default_application_for_file (NautilusFile *file,
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_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_file (NautilusFile *file,
- const char *component_iid)
-{
- g_return_val_if_fail (nautilus_mime_actions_check_if_minimum_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_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_file (NautilusFile *file,
- GList *applications)
-{
- GList *add_list;
- GList *remove_list;
- GList *normal_short_list;
- GList *normal_short_list_ids;
- GList *p;
- char *mime_type;
-
- g_return_val_if_fail (nautilus_mime_actions_check_if_minimum_attributes_ready (file),
- GNOME_VFS_ERROR_GENERIC);
-
- /* get per-mime short list */
-
- mime_type = nautilus_file_get_mime_type (file);
- normal_short_list = gnome_vfs_mime_get_short_list_applications (mime_type);
- g_free (mime_type);
-
- normal_short_list_ids = NULL;
- for (p = normal_short_list; p != NULL; p = p->next) {
- normal_short_list_ids = g_list_prepend (normal_short_list_ids, ((GnomeVFSMimeApplication *) p->data)->id);
- }
-
- /* compute delta */
-
- add_list = str_list_difference (applications, normal_short_list_ids);
- remove_list = str_list_difference (normal_short_list_ids, applications);
-
- gnome_vfs_mime_application_list_free (normal_short_list);
- g_list_free (normal_short_list_ids);
-
- nautilus_file_set_metadata_list
- (file,
- NAUTILUS_METADATA_KEY_SHORT_LIST_APPLICATION_ADD,
- NAUTILUS_METADATA_SUBKEY_APPLICATION_ID,
- add_list);
- nautilus_file_set_metadata_list
- (file,
- NAUTILUS_METADATA_KEY_SHORT_LIST_APPLICATION_REMOVE,
- NAUTILUS_METADATA_SUBKEY_APPLICATION_ID,
- remove_list);
-
- eel_g_list_free_deep (add_list);
- eel_g_list_free_deep (remove_list);
-
- return GNOME_VFS_OK;
-}
-
-GnomeVFSResult
-nautilus_mime_set_short_list_components_for_file (NautilusFile *file,
- GList *components)
-{
- GList *add_list;
- GList *remove_list;
- GList *normal_short_list;
- GList *normal_short_list_ids;
- GList *p;
- char *mime_type;
-
- g_return_val_if_fail (nautilus_mime_actions_check_if_minimum_attributes_ready (file),
- GNOME_VFS_ERROR_GENERIC);
-
- /* get per-mime short list */
-
- mime_type = nautilus_file_get_mime_type (file);
- normal_short_list = gnome_vfs_mime_get_short_list_components (mime_type);
- g_free (mime_type);
-
- normal_short_list_ids = NULL;
- for (p = normal_short_list; p != NULL; p = p->next) {
- normal_short_list_ids = g_list_prepend (normal_short_list_ids, ((Bonobo_ServerInfo *) p->data)->iid);
- }
-
- /* compute delta */
-
- add_list = str_list_difference (components, normal_short_list_ids);
- remove_list = str_list_difference (normal_short_list_ids, components);
-
- gnome_vfs_mime_component_list_free (normal_short_list);
- g_list_free (normal_short_list_ids);
-
- nautilus_file_set_metadata_list
- (file,
- NAUTILUS_METADATA_KEY_SHORT_LIST_COMPONENT_ADD,
- NAUTILUS_METADATA_SUBKEY_COMPONENT_IID,
- add_list);
- nautilus_file_set_metadata_list
- (file,
- NAUTILUS_METADATA_KEY_SHORT_LIST_COMPONENT_REMOVE,
- NAUTILUS_METADATA_SUBKEY_COMPONENT_IID,
- remove_list);
-
- eel_g_list_free_deep (add_list);
- eel_g_list_free_deep (remove_list);
-
- return GNOME_VFS_OK;
-}
-
-GnomeVFSResult
-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_minimum_attributes_ready (file),
- GNOME_VFS_ERROR_GENERIC);
-
- result = GNOME_VFS_OK;
-
- 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_file (file, new_list);
- eel_g_list_free_deep (new_list);
- }
-
- gnome_vfs_mime_application_list_free (old_list);
-
- return result;
-}
-
-GnomeVFSResult
-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;
-
- g_return_val_if_fail (nautilus_mime_actions_check_if_minimum_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);
-
- if (!was_in_list) {
- 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_file (file, new_list);
- eel_g_list_free_deep (new_list);
- }
-
- gnome_vfs_mime_application_list_free (old_list);
-
- return result;
-}
-
-GnomeVFSResult
-nautilus_mime_add_component_to_short_list_for_file (NautilusFile *file,
- const char *iid)
-{
- GList *old_list, *new_list;
- GnomeVFSResult result;
-
- g_return_val_if_fail (nautilus_mime_actions_check_if_minimum_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_file (file, new_list);
- eel_g_list_free_deep (new_list);
- }
-
- gnome_vfs_mime_component_list_free (old_list);
-
- return result;
-}
-
-GnomeVFSResult
-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;
-
- g_return_val_if_fail (nautilus_mime_actions_check_if_minimum_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);
-
- if (!was_in_list) {
- 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_file (file, new_list);
- eel_g_list_free_deep (new_list);
- }
-
- gnome_vfs_mime_component_list_free (old_list);
-
- return result;
-}
-
-GnomeVFSResult
-nautilus_mime_extend_all_applications_for_file (NautilusFile *file,
- GList *applications)
-{
- GList *metadata_application_ids;
- GList *extras;
- GList *final_applications;
-
- g_return_val_if_fail (nautilus_mime_actions_check_if_minimum_attributes_ready (file),
- GNOME_VFS_ERROR_GENERIC);
-
- metadata_application_ids = nautilus_file_get_metadata_list
- (file,
- NAUTILUS_METADATA_KEY_EXPLICIT_APPLICATION,
- NAUTILUS_METADATA_SUBKEY_APPLICATION_ID);
-
- extras = str_list_difference (applications, metadata_application_ids);
-
- final_applications = g_list_concat (g_list_copy (metadata_application_ids), extras);
-
- nautilus_file_set_metadata_list
- (file,
- NAUTILUS_METADATA_KEY_EXPLICIT_APPLICATION,
- NAUTILUS_METADATA_SUBKEY_APPLICATION_ID,
- final_applications);
-
- eel_g_list_free_deep (metadata_application_ids);
- eel_g_list_free_deep (extras);
- g_list_free (final_applications);
-
- return GNOME_VFS_OK;
-}
-
-GnomeVFSResult
-nautilus_mime_remove_from_all_applications_for_file (NautilusFile *file,
- GList *applications)
-{
- GList *metadata_application_ids;
- GList *final_applications;
-
- g_return_val_if_fail (nautilus_mime_actions_check_if_minimum_attributes_ready (file),
- GNOME_VFS_ERROR_GENERIC);
-
- metadata_application_ids = nautilus_file_get_metadata_list
- (file,
- NAUTILUS_METADATA_KEY_EXPLICIT_APPLICATION,
- NAUTILUS_METADATA_SUBKEY_APPLICATION_ID);
-
- final_applications = str_list_difference (metadata_application_ids, applications);
-
- nautilus_file_set_metadata_list
- (file,
- NAUTILUS_METADATA_KEY_EXPLICIT_APPLICATION,
- NAUTILUS_METADATA_SUBKEY_APPLICATION_ID,
- final_applications);
-
- eel_g_list_free_deep (metadata_application_ids);
- eel_g_list_free_deep (final_applications);
return GNOME_VFS_OK;
}
@@ -1501,563 +355,6 @@ gnome_vfs_mime_application_has_id_not_in_list (GnomeVFSMimeApplication *applicat
}
static gboolean
-string_not_in_list (const char *str,
- GList *list)
-{
- return g_list_find_custom (list, (gpointer) str, (GCompareFunc) strcmp) == NULL;
-}
-
-static char *
-extract_prefix_add_suffix (const char *string,
- const char *separator,
- const char *suffix)
-{
- const char *separator_position;
- int prefix_length;
- char *result;
-
- separator_position = strstr (string, separator);
- prefix_length = separator_position == NULL
- ? (int) strlen (string)
- : separator_position - string;
-
- result = g_malloc (prefix_length + strlen(suffix) + 1);
-
- strncpy (result, string, prefix_length);
- result[prefix_length] = '\0';
-
- strcat (result, suffix);
-
- return result;
-}
-
-static char *
-mime_type_get_supertype (const char *mime_type)
-{
- if (mime_type == NULL || mime_type == '\0') {
- return g_strdup (mime_type);
- }
- return extract_prefix_add_suffix (mime_type, "/", "/*");
-}
-
-
-/*
- * The following routine uses metadata associated with the current url
- * to add content view components specified in the metadata. The
- * content views are specified in the string as <EXPLICIT_CONTENT_VIEW
- * IID="iid"/> elements inside the appropriate <FILE> element.
- */
-
-static GList *
-get_explicit_content_view_iids_from_metafile (NautilusFile *file)
-{
- if (file != NULL) {
- return nautilus_file_get_metadata_list
- (file,
- NAUTILUS_METADATA_KEY_EXPLICIT_COMPONENT,
- NAUTILUS_METADATA_SUBKEY_COMPONENT_IID);
- } else {
- return NULL;
- }
-}
-
-static char *
-make_bonobo_activation_query_for_explicit_content_view_iids (GList *view_iids)
-{
- GList *p;
- char *iid;
- char *query;
- char *old_query;
-
- query = NULL;
-
- for (p = view_iids; p != NULL; p = p->next) {
- iid = (char *) p->data;
- if (query != NULL) {
- old_query = query;
- query = g_strconcat (query, " OR ", NULL);
- g_free (old_query);
- } else {
- query = g_strdup ("(");
- }
-
- old_query = query;
- query = g_strdup_printf ("%s iid=='%s'", old_query, iid);
- g_free (old_query);
- }
-
-
- if (query != NULL) {
- old_query = query;
- query = g_strconcat (old_query, ")", NULL);
- g_free (old_query);
- } else {
- query = g_strdup ("false");
- }
-
- return query;
-}
-
-static char *
-make_bonobo_activation_query_with_known_mime_type (const char *mime_type,
- const char *uri_scheme,
- GList *explicit_iids,
- const char *extra_requirements,
- gboolean must_be_view)
-{
- char *mime_supertype;
- char *result;
- char *explicit_iid_query;
- const char *view_as_name_logic;
-
- mime_supertype = mime_type_get_supertype (mime_type);
-
- explicit_iid_query = make_bonobo_activation_query_for_explicit_content_view_iids (explicit_iids);
-
- if (must_be_view) {
- view_as_name_logic = "nautilus:view_as_name.defined ()";
- } else {
- view_as_name_logic = "true";
- }
-
- result = g_strdup_printf
- (
-
-
-
- /* Check that the component either has a specific
- * MIME type or URI scheme. If neither is specified,
- * then we don't trust that to mean "all MIME types
- * and all schemes". For that, you have to do a
- * wildcard for the MIME type or for the scheme.
- */
- "(bonobo:supported_mime_types.defined ()"
- "OR bonobo:supported_uri_schemes.defined ()"
- "OR bonobo:additional_uri_schemes.defined ())"
-
- /* One of two possibilties */
-
- /* FIXME bugzilla.gnome.org 42542: this comment is not very clear. */
- /* 1 The mime type and URI scheme match the supported
- attributes. */
-
- "AND ("
-
- /* Check that the supported MIME types include the
- * URI's MIME type or its supertype.
- */
- "((NOT bonobo:supported_mime_types.defined ()"
- "OR bonobo:supported_mime_types.has ('%s')"
- "OR bonobo:supported_mime_types.has ('%s')"
- "OR bonobo:supported_mime_types.has ('*/*'))"
-
- /* Check that the supported URI schemes include the
- * URI's scheme.
- */
- "AND (NOT bonobo:supported_uri_schemes.defined ()"
- "OR bonobo:supported_uri_schemes.has ('%s')"
- "OR bonobo:supported_uri_schemes.has ('*')))"
-
- /* 2 OR The additional URI schemes include this URI's
- scheme; if that is the case, this view applies
- whether or not the mime type is supported. */
-
- "OR (bonobo:additional_uri_schemes.has ('%s')"
- "OR bonobo:additional_uri_schemes.has ('*')))"
-
- /* Check that the component makes it clear that it's
- * intended for Nautilus by providing a "view_as"
- * name. We could instead support a default, but
- * that would make components that are untested with
- * Nautilus appear. */
- "AND %s)"
-
-
- /* Also select iids that were specifically requested
- for this location, even if they do not otherwise
- meet the requirements. */
- "OR %s)"
-
- /* Make it possible to add extra requirements */
- " AND (%s)"
-
- /* The MIME type, MIME supertype, and URI scheme for
- * the %s above.
- */
- , mime_type, mime_supertype, uri_scheme, uri_scheme,
-
- /* The explicit metafile iid query for the %s above. */
- view_as_name_logic, explicit_iid_query
-
- /* extra requirements */
- , extra_requirements != NULL ? extra_requirements : "true");
-
- if (must_be_view) {
- char *str;
-
-
- /* Check if the component has the interfaces we need.
- * We can work with either a Nautilus View, or
- * with a Bonobo Control or Embeddable that supports
- * one of the three persistence interfaces:
- * PersistStream, ProgressiveDataSink, or
- * PersistFile.
- */
- str = g_strdup_printf ("(((repo_ids.has_all (['IDL:Bonobo/Control:1.0',"
- "'IDL:Nautilus/View:1.0'])"
- "OR (repo_ids.has_one (['IDL:Bonobo/Control:1.0',"
- "'IDL:Bonobo/Embeddable:1.0'])"
- "AND repo_ids.has_one (['IDL:Bonobo/PersistStream:1.0',"
- "'IDL:Bonobo/ProgressiveDataSink:1.0',"
- "'IDL:Bonobo/PersistFile:1.0']))) "
- "AND %s", result);
- g_free (result);
- result = str;
- } else {
- char *str;
- str = g_strdup_printf ("((%s", result);
- g_free (result);
- result = str;
- }
-
- g_free (mime_supertype);
- g_free (explicit_iid_query);
- return result;
-}
-
-static char *
-make_bonobo_activation_query_with_uri_scheme_only (const char *uri_scheme,
- GList *explicit_iids,
- const char *extra_requirements,
- gboolean must_be_view)
-{
- char *result;
- char *explicit_iid_query;
- const char *view_as_name_logic;
-
- explicit_iid_query = make_bonobo_activation_query_for_explicit_content_view_iids (explicit_iids);
-
- if (must_be_view) {
- view_as_name_logic = "nautilus:view_as_name.defined ()";
- } else {
- view_as_name_logic = "true";
- }
-
- result = g_strdup_printf
- (
-
- /* Check if the component supports this particular
- * URI scheme.
- */
- "(((bonobo:supported_uri_schemes.has ('%s')"
- "OR bonobo:supported_uri_schemes.has ('*'))"
-
- /* Check that the component doesn't require
- * particular MIME types. Note that even saying you support "all"
- */
- "AND (NOT bonobo:supported_mime_types.defined ()))"
-
- /* FIXME bugzilla.gnome.org 42542: improve the comment explaining this. */
-
- /* This attribute allows uri schemes to be supported
- even for unsupported mime types or no mime type. */
- "OR (bonobo:additional_uri_schemes.has ('%s')"
- "OR bonobo:additional_uri_schemes.has ('*')))"
-
- /* Check that the component makes it clear that it's
- * intended for Nautilus by providing a "view_as"
- * name. We could instead support a default, but
- * that would make components that are untested with
- * Nautilus appear. */
- "AND %s)"
-
- /* Also select iids that were specifically requested
- for this location, even if they do not otherwise
- meet the requirements. */
-
- "OR %s)"
-
- /* Make it possible to add extra requirements */
- " AND (%s)"
-
- /* The URI scheme for the %s above. */
- , uri_scheme, uri_scheme, view_as_name_logic
-
- /* The explicit metafile iid query for the %s above. */
- , explicit_iid_query,
- extra_requirements != NULL ? extra_requirements : "true");
-
-
- if (must_be_view) {
- char *str;
-
-
- /* Check if the component has the interfaces we need.
- * We can work with either a Nautilus View, or
- * with a Bonobo Control or Embeddable that supports
- * one of the three persistence interfaces:
- * PersistStream, ProgressiveDataSink, or
- * PersistFile.
- */
- str = g_strdup_printf ("(((repo_ids.has_all (['IDL:Bonobo/Control:1.0',"
- "'IDL:Nautilus/View:1.0'])"
- "OR (repo_ids.has_one (['IDL:Bonobo/Control:1.0',"
- "'IDL:Bonobo/Embeddable:1.0'])"
- "AND repo_ids.has_one (['IDL:Bonobo/PersistStream:1.0',"
- "'IDL:Bonobo/ProgressiveDataSink:1.0',"
- "'IDL:Bonobo/PersistFile:1.0']))) "
- "AND %s", result);
- g_free (result);
- result = str;
- } else {
- char *str;
- str = g_strdup_printf ("((%s", result);
- g_free (result);
- result = str;
- }
-
-
- g_free (explicit_iid_query);
-
- return result;
-}
-
-
-
-static GHashTable *
-mime_type_list_to_hash_table (GList *types)
-{
- GHashTable *result;
- GList *p;
- char *mime_type;
-
- result = g_hash_table_new (g_str_hash, g_str_equal);
-
- for (p = types; p != NULL; p = p->next) {
- if (p->data != NULL) {
- mime_type = (char *) (p->data);
-
- if (g_hash_table_lookup (result, mime_type) == NULL) {
-#ifdef DEBUG_MJS
- printf ("XXX content mime type: %s\n", mime_type);
-#endif
- g_hash_table_insert (result, g_strdup (mime_type), mime_type);
- }
- }
- }
-
- return result;
-}
-
-static void
-free_key (gpointer key,
- gpointer value,
- gpointer user_data)
-{
- g_free (key);
-}
-
-static void
-mime_type_hash_table_destroy (GHashTable *table)
-{
- g_hash_table_foreach (table, free_key, NULL);
- g_hash_table_destroy (table);
-}
-
-
-
-static gboolean
-server_has_content_requirements (Bonobo_ServerInfo *server)
-{
- Bonobo_ActivationProperty *prop;
-
- prop = bonobo_server_info_prop_find (server, "nautilus:required_directory_content_mime_types");
-
- if (prop == NULL || prop->v._d != Bonobo_ACTIVATION_P_STRINGV) {
- return FALSE;
- } else {
- return TRUE;
- }
-}
-
-static gboolean
-server_matches_content_requirements (Bonobo_ServerInfo *server,
- GHashTable *type_table,
- GList *explicit_iids)
-{
- Bonobo_ActivationProperty *prop;
- Bonobo_StringList types;
- guint i;
-
- /* Components explicitly requested in the metafile are not capability tested. */
- if (g_list_find_custom (explicit_iids, (gpointer) server->iid, (GCompareFunc) strcmp) != NULL) {
- return TRUE;
- }
-
- if (!server_has_content_requirements (server)) {
- return TRUE;
- } else {
- prop = bonobo_server_info_prop_find (server, "nautilus:required_directory_content_mime_types");
-
- types = prop->v._u.value_stringv;
-
- for (i = 0; i < types._length; i++) {
- if (g_hash_table_lookup (type_table, types._buffer[i]) != NULL) {
- return TRUE;
- }
- }
- }
-
- return FALSE;
-}
-
-
-/* FIXME: do we actually need this it would seem to me that the
- * test_only attribute handles this
- */
-static char *nautilus_sort_criteria[] = {
- /* Prefer anything else over the loser view. */
- "iid != 'OAFIID:Nautilus_Content_Loser'",
- /* Prefer anything else over the sample view. */
- "iid != 'OAFIID:Nautilus_Sample_Content_View'",
- /* Sort alphabetically */
- "name",
- NULL
-};
-
-static GList *
-nautilus_do_component_query (const char *mime_type,
- const char *uri_scheme,
- GList *item_mime_types,
- gboolean ignore_content_mime_types,
- GList *explicit_iids,
- char **extra_sort_criteria,
- char *extra_requirements,
- gboolean must_be_view)
-{
- Bonobo_ServerInfoList *bonobo_activation_result;
- char *query;
- GList *retval;
- char **all_sort_criteria;
- CORBA_Environment ev;
-
- bonobo_activation_result = NULL;
- query = NULL;
-
- if (is_known_mime_type (mime_type)) {
- query = make_bonobo_activation_query_with_known_mime_type (mime_type, uri_scheme, explicit_iids, extra_requirements, must_be_view);
- } else {
- query = make_bonobo_activation_query_with_uri_scheme_only (uri_scheme, explicit_iids, extra_requirements, must_be_view);
- }
-
- all_sort_criteria = strv_concat (extra_sort_criteria, nautilus_sort_criteria);
-
- CORBA_exception_init (&ev);
-
- bonobo_activation_result = bonobo_activation_query (query, all_sort_criteria, &ev);
-
- g_free (all_sort_criteria);
- g_free (query);
-
- retval = NULL;
-
- if (ev._major == CORBA_NO_EXCEPTION && bonobo_activation_result != NULL && bonobo_activation_result->_length > 0) {
- GHashTable *content_types;
- guint i;
-
- content_types = mime_type_list_to_hash_table (item_mime_types);
-
- for (i = 0; i < bonobo_activation_result->_length; i++) {
- Bonobo_ServerInfo *server;
-
- server = &bonobo_activation_result->_buffer[i];
-
- if (ignore_content_mime_types ||
- server_matches_content_requirements (server, content_types, explicit_iids)) {
- if (server->iid != NULL) {
- retval = g_list_prepend
- (retval,
- Bonobo_ServerInfo_duplicate (server));
- }
- }
- }
-
- mime_type_hash_table_destroy (content_types);
- }
-
- CORBA_free (bonobo_activation_result);
-
- CORBA_exception_free (&ev);
-
- return g_list_reverse (retval);
-}
-
-
-static GList *
-str_list_difference (GList *a,
- GList *b)
-{
- GList *p;
- GList *retval;
-
- retval = NULL;
-
- for (p = a; p != NULL; p = p->next) {
- if (g_list_find_custom (b, p->data, (GCompareFunc) strcmp) == NULL) {
- retval = g_list_prepend (retval, g_strdup (p->data));
- }
- }
-
- retval = g_list_reverse (retval);
- return retval;
-}
-
-
-static int
-strv_length (char **a)
-{
- int i;
-
- for (i = 0; a != NULL && a[i] != NULL; i++) {
- }
-
- return i;
-}
-
-static char **
-strv_concat (char **a,
- char **b)
-{
- int a_length;
- int b_length;
- int i;
- int j;
-
- char **result;
-
- a_length = strv_length (a);
- b_length = strv_length (b);
-
- result = g_new0 (char *, a_length + b_length + 1);
-
- j = 0;
-
- for (i = 0; a != NULL && a[i] != NULL; i++) {
- result[j] = a[i];
- j++;
- }
-
- for (i = 0; b != NULL && b[i] != NULL; i++) {
- result[j] = b[i];
- j++;
- }
-
- result[j] = NULL;
-
- return result;
-}
-
-static gboolean
application_supports_uri_scheme (gpointer data,
gpointer uri_scheme)
{
diff --git a/libnautilus-private/nautilus-mime-actions.h b/libnautilus-private/nautilus-mime-actions.h
index 81c16a040..75ec57b45 100644
--- a/libnautilus-private/nautilus-mime-actions.h
+++ b/libnautilus-private/nautilus-mime-actions.h
@@ -32,57 +32,15 @@
NautilusFileAttributes nautilus_mime_actions_get_minimum_file_attributes (void);
NautilusFileAttributes nautilus_mime_actions_get_full_file_attributes (void);
-gboolean nautilus_mime_actions_file_needs_full_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);
-Bonobo_ServerInfo * nautilus_mime_get_default_component_for_file (NautilusFile *file);
-Bonobo_ServerInfo * nautilus_mime_get_default_fallback_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_open_with_applications_for_file (NautilusFile *file);
-GList * nautilus_mime_get_short_list_components_for_file (NautilusFile *file);
-GList * nautilus_mime_get_all_applications_for_file (NautilusFile *file);
-GList * nautilus_mime_get_all_components_for_file (NautilusFile *file);
-GList * nautilus_mime_get_all_components_for_file_extended (NautilusFile *file, char *extra_requirements);
-GList * nautilus_mime_get_popup_components_for_file (NautilusFile *file);
-GList * nautilus_mime_get_popup_components_for_files (GList *files);
-GList * nautilus_mime_get_property_components_for_file (NautilusFile *file);
-GList * nautilus_mime_get_property_components_for_files (GList *files);
- gboolean nautilus_mime_has_any_components_for_file (NautilusFile *file);
- gboolean nautilus_mime_has_any_components_for_file_extended (NautilusFile *file, char *extra_requirements);
+GList * nautilus_mime_get_applications_for_file (NautilusFile *file);
+
+
gboolean nautilus_mime_has_any_applications_for_file (NautilusFile *file);
-gboolean nautilus_mime_has_any_applications_for_file_type (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_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_file (NautilusFile *file,
- GList *applications);
-/* Only "user" entries may be removed. */
-GnomeVFSResult nautilus_mime_remove_from_all_applications_for_file (NautilusFile *file,
- GList *applications);
-gboolean nautilus_mime_has_any_components_for_uri_scheme (const char *uri_scheme);
-
-
-/* No way to add to all components; oafinfo database assumed trusted in this regard. */
#endif /* NAUTILUS_MIME_ACTIONS_H */
diff --git a/libnautilus-private/nautilus-program-choosing.c b/libnautilus-private/nautilus-program-choosing.c
index 29ea1f52f..d48ea7cdf 100644
--- a/libnautilus-private/nautilus-program-choosing.c
+++ b/libnautilus-private/nautilus-program-choosing.c
@@ -27,7 +27,6 @@
#include "nautilus-program-choosing.h"
#include "nautilus-mime-actions.h"
-#include "nautilus-program-chooser.h"
#include "nautilus-global-preferences.h"
#include "nautilus-icon-factory.h"
#include <eel/eel-glib-extensions.h>
@@ -63,22 +62,6 @@
#include <gdk/gdkx.h>
#endif
-typedef struct {
- NautilusFile *file;
- GtkWindow *parent_window;
- NautilusApplicationChoiceCallback callback;
- gpointer callback_data;
-} ChooseApplicationCallbackData;
-
-typedef struct {
- NautilusFile *file;
- GtkWindow *parent_window;
- NautilusComponentChoiceCallback callback;
- gpointer callback_data;
-} ChooseComponentCallbackData;
-
-static GHashTable *choose_application_hash_table, *choose_component_hash_table;
-
extern char **environ;
/* Cut and paste from gdkspawn-x11.c */
@@ -119,429 +102,6 @@ my_gdk_spawn_make_environment_for_screen (GdkScreen *screen,
}
-static guint
-choose_application_hash (gconstpointer p)
-{
- const ChooseApplicationCallbackData *data;
-
- data = p;
- return GPOINTER_TO_UINT (data->file)
- ^ GPOINTER_TO_UINT (data->callback)
- ^ GPOINTER_TO_UINT (data->callback_data);
-}
-
-static gboolean
-choose_application_equal (gconstpointer a,
- gconstpointer b)
-{
- const ChooseApplicationCallbackData *data_a, *data_b;
-
- data_a = a;
- data_b = a;
- return data_a->file == data_b->file
- && data_a->callback == data_b->callback
- && data_a->callback_data == data_b->callback_data;
-}
-
-static void
-choose_application_destroy (ChooseApplicationCallbackData *choose_data)
-{
- nautilus_file_unref (choose_data->file);
- if (choose_data->parent_window != NULL) {
- g_object_unref (choose_data->parent_window);
- }
- g_free (choose_data);
-}
-
-static guint
-choose_component_hash (gconstpointer p)
-{
- const ChooseApplicationCallbackData *data;
-
- data = p;
- return GPOINTER_TO_UINT (data->file)
- ^ GPOINTER_TO_UINT (data->callback)
- ^ GPOINTER_TO_UINT (data->callback_data);
-}
-
-static gboolean
-choose_component_equal (gconstpointer a,
- gconstpointer b)
-{
- const ChooseApplicationCallbackData *data_a, *data_b;
-
- data_a = a;
- data_b = a;
- return data_a->file == data_b->file
- && data_a->callback == data_b->callback
- && data_a->callback_data == data_b->callback_data;
-}
-
-static void
-choose_component_destroy (ChooseComponentCallbackData *choose_data)
-{
- nautilus_file_unref (choose_data->file);
- if (choose_data->parent_window != NULL) {
- g_object_unref (choose_data->parent_window);
- }
- g_free (choose_data);
-}
-
-/**
- * set_up_program_chooser:
- *
- * Create but don't yet run a program-choosing dialog.
- * The caller should run the dialog and destroy it.
- *
- * @file: Which NautilusFile programs are being chosen for.
- * @type: Which type of program is being chosen.
- * @parent: Optional window to parent the dialog on.
- *
- * Return value: The program-choosing dialog, ready to be run.
- */
-static GtkWidget *
-set_up_program_chooser (NautilusFile *file,
- GnomeVFSMimeActionType type,
- GtkWindow *parent)
-{
- GtkWidget *dialog;
-
- g_assert (NAUTILUS_IS_FILE (file));
-
- dialog = nautilus_program_chooser_new (type, file);
- if (parent != NULL) {
- gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
- }
-
- return dialog;
-}
-
-/**
- * nautilus_choose_component_for_file:
- *
- * Lets user choose a component with which to view a given file.
- *
- * @file: The NautilusFile to be viewed.
- * @parent_window: If supplied, the component-choosing dialog is parented
- * on this window.
- * @callback: Callback called when choice has been made.
- * @callback_data: Parameter passed back when callback is called.
- */
-
-static void
-choose_component_callback (NautilusFile *file,
- gpointer callback_data)
-{
- ChooseComponentCallbackData *choose_data;
- NautilusViewIdentifier *identifier;
- GtkWidget *dialog;
-
- choose_data = callback_data;
-
- /* Remove from the hash table. */
- g_assert (g_hash_table_lookup (choose_component_hash_table,
- choose_data) == choose_data);
- g_hash_table_remove (choose_component_hash_table,
- choose_data);
-
- /* The API uses a callback so we can do this non-modally in the future,
- * but for now we just use a modal dialog.
- */
-
- identifier = NULL;
- dialog = NULL;
- if (nautilus_mime_has_any_components_for_file_extended (file,
- "NOT nautilus:property_page_name.defined()")) {
- dialog = set_up_program_chooser (file, GNOME_VFS_MIME_ACTION_TYPE_COMPONENT,
- choose_data->parent_window);
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) {
- identifier = nautilus_program_chooser_get_component (NAUTILUS_PROGRAM_CHOOSER (dialog));
- }
- } else {
- nautilus_program_chooser_show_no_choices_message (GNOME_VFS_MIME_ACTION_TYPE_COMPONENT,
- file,
- choose_data->parent_window);
- }
-
- /* Call callback even if identifier is NULL, so caller can
- * free callback_data if necessary and present some cancel UI
- * if desired.
- */
- (* choose_data->callback) (identifier, choose_data->callback_data);
-
- if (dialog != NULL) {
- /* Destroy only after callback, since view identifier will
- * be destroyed too.
- */
- gtk_widget_destroy (GTK_WIDGET (dialog));
- }
-
- choose_component_destroy (choose_data);
-}
-
-void
-nautilus_choose_component_for_file (NautilusFile *file,
- GtkWindow *parent_window,
- NautilusComponentChoiceCallback callback,
- gpointer callback_data)
-{
- ChooseComponentCallbackData *choose_data;
- NautilusFileAttributes attributes;
-
- g_return_if_fail (NAUTILUS_IS_FILE (file));
- g_return_if_fail (parent_window == NULL || GTK_IS_WINDOW (parent_window));
- g_return_if_fail (callback != NULL);
-
- /* Grab refs to the objects so they will still be around at
- * callback time.
- */
- nautilus_file_ref (file);
- if (parent_window != NULL) {
- g_object_ref (parent_window);
- }
-
- /* Create data to pass through. */
- choose_data = g_new (ChooseComponentCallbackData, 1);
- choose_data->file = file;
- choose_data->parent_window = parent_window;
- choose_data->callback = callback;
- choose_data->callback_data = callback_data;
-
- /* Put pending entry into choose hash table. */
- if (choose_component_hash_table == NULL) {
- choose_component_hash_table = eel_g_hash_table_new_free_at_exit
- (choose_component_hash,
- choose_component_equal,
- "choose component");
- }
- g_hash_table_insert (choose_component_hash_table,
- choose_data, choose_data);
-
- /* Do the rest of the work when the attributes are ready. */
- attributes = nautilus_mime_actions_get_full_file_attributes ();
- nautilus_file_call_when_ready (file,
- attributes,
- choose_component_callback,
- choose_data);
-}
-
-void
-nautilus_cancel_choose_component_for_file (NautilusFile *file,
- NautilusComponentChoiceCallback callback,
- gpointer callback_data)
-{
- ChooseComponentCallbackData search_criteria;
- ChooseComponentCallbackData *choose_data;
-
- if (choose_component_hash_table == NULL) {
- return;
- }
-
- /* Search for an existing choose in progress. */
- search_criteria.file = file;
- search_criteria.callback = callback;
- search_criteria.callback_data = callback_data;
- choose_data = g_hash_table_lookup (choose_component_hash_table,
- &search_criteria);
- if (choose_data == NULL) {
- return;
- }
-
- /* Stop it. */
- g_hash_table_remove (choose_component_hash_table,
- choose_data);
- nautilus_file_cancel_call_when_ready (file,
- choose_component_callback,
- choose_data);
- choose_component_destroy (choose_data);
-}
-
-
-static void
-dialog_response (GtkDialog *dialog,
- int response_id,
- ChooseApplicationCallbackData *choose_data)
-{
- GnomeVFSMimeApplication *application;
-
- application = NULL;
-
- switch (response_id) {
- case GTK_RESPONSE_OK:
- application = nautilus_program_chooser_get_application (NAUTILUS_PROGRAM_CHOOSER (dialog));
- break;
-
- default:
- break;
- }
-
- (* choose_data->callback) (application, choose_data->callback_data);
-
- if (dialog != NULL) {
- /* Destroy only after callback, since view identifier
- * will be destroyed too.
- */
- gtk_widget_destroy (GTK_WIDGET (dialog));
- }
-
- choose_application_destroy (choose_data);
-}
-
-/**
- * nautilus_choose_application_for_file:
- *
- * Lets user choose an application with which to open a given file.
- *
- * @file: The NautilusFile to be viewed.
- * @parent_window: If supplied, the application-choosing dialog is parented
- * on this window.
- * @callback: Callback called when choice has been made.
- * @callback_data: Parameter passed back when callback is called.
- */
-
-static void
-choose_application_callback (NautilusFile *file,
- gpointer callback_data)
-{
- ChooseApplicationCallbackData *choose_data;
- GtkWidget *dialog;
- GnomeVFSMimeApplication *application;
-
- choose_data = callback_data;
-
- /* Remove from the hash table. */
- g_assert (g_hash_table_lookup (choose_application_hash_table,
- choose_data) == choose_data);
- g_hash_table_remove (choose_application_hash_table,
- choose_data);
-
- /* The API uses a callback so we can do this non-modally in the future,
- * but for now we just use a modal dialog.
- */
- application = NULL;
- dialog = NULL;
-
- if (nautilus_mime_has_any_applications_for_file_type (file)) {
- dialog = set_up_program_chooser (file, GNOME_VFS_MIME_ACTION_TYPE_APPLICATION,
- choose_data->parent_window);
- g_signal_connect (G_OBJECT (dialog), "response",
- G_CALLBACK (dialog_response), choose_data);
- gtk_widget_show (dialog);
- } else {
- nautilus_program_chooser_show_no_choices_message (GNOME_VFS_MIME_ACTION_TYPE_APPLICATION,
- file,
- choose_data->parent_window);
-
- /* Call callback even if identifier is NULL, so caller can
- * free callback_data if necessary and present some cancel
- * UI if desired.
- */
- (* choose_data->callback) (application, choose_data->callback_data);
-
- choose_application_destroy (choose_data);
- }
-}
-
-void
-nautilus_choose_application_for_file (NautilusFile *file,
- GtkWindow *parent_window,
- NautilusApplicationChoiceCallback callback,
- gpointer callback_data)
-{
- ChooseApplicationCallbackData *choose_data;
- NautilusFileAttributes attributes;
-
- g_return_if_fail (NAUTILUS_IS_FILE (file));
- g_return_if_fail (parent_window == NULL || GTK_IS_WINDOW (parent_window));
- g_return_if_fail (callback != NULL);
-
- /* Grab refs to the objects so they will still be around at
- * callback time.
- */
- nautilus_file_ref (file);
- if (parent_window != NULL) {
- g_object_ref (parent_window);
- }
-
- /* Create data to pass through. */
- choose_data = g_new (ChooseApplicationCallbackData, 1);
- choose_data->file = file;
- choose_data->parent_window = parent_window;
- choose_data->callback = callback;
- choose_data->callback_data = callback_data;
-
- /* Put pending entry into choose hash table. */
- if (choose_application_hash_table == NULL) {
- choose_application_hash_table = eel_g_hash_table_new_free_at_exit
- (choose_application_hash,
- choose_application_equal,
- "choose application");
- }
- g_hash_table_insert (choose_application_hash_table,
- choose_data, choose_data);
-
- /* Do the rest of the work when the attributes are ready. */
- attributes = nautilus_mime_actions_get_full_file_attributes ();
- nautilus_file_call_when_ready (file,
- attributes,
- choose_application_callback,
- choose_data);
-}
-
-
-typedef struct {
- NautilusFile *file;
- GtkWindow *parent_window;
-} LaunchParameters;
-
-static LaunchParameters *
-launch_parameters_new (NautilusFile *file,
- GtkWindow *parent_window)
-{
- LaunchParameters *launch_parameters;
-
- launch_parameters = g_new0 (LaunchParameters, 1);
- nautilus_file_ref (file);
- launch_parameters->file = file;
- g_object_ref (parent_window);
- launch_parameters->parent_window = parent_window;
-
- return launch_parameters;
-}
-
-static void
-launch_parameters_free (LaunchParameters *launch_parameters)
-{
- g_assert (launch_parameters != NULL);
-
- nautilus_file_unref (launch_parameters->file);
- g_object_unref (launch_parameters->parent_window);
-
- g_free (launch_parameters);
-}
-
-static void
-launch_application_callback (GnomeVFSMimeApplication *application,
- gpointer callback_data)
-{
- LaunchParameters *launch_parameters;
-
- g_assert (callback_data != NULL);
-
- launch_parameters = (LaunchParameters *) callback_data;
-
- if (application != NULL) {
- g_assert (NAUTILUS_IS_FILE (launch_parameters->file));
-
- nautilus_launch_application (application,
- launch_parameters->file,
- launch_parameters->parent_window);
- }
-
- launch_parameters_free (launch_parameters);
-
-}
-
/**
* application_cannot_open_location
*
@@ -562,6 +122,7 @@ application_cannot_open_location (GnomeVFSMimeApplication *application,
const char *uri_scheme,
GtkWindow *parent_window)
{
+#if NEW_MIME_COMPLETE
GtkDialog *message_dialog;
LaunchParameters *launch_parameters;
char *prompt;
@@ -625,6 +186,7 @@ application_cannot_open_location (GnomeVFSMimeApplication *application,
}
g_free (file_name);
+#endif
}
#ifdef HAVE_STARTUP_NOTIFICATION
@@ -872,8 +434,7 @@ void nautilus_launch_show_file (NautilusFile *file,
GtkWindow *parent_window)
{
GnomeVFSResult result;
- GnomeVFSMimeAction *action;
- GnomeVFSMimeActionType action_type;
+ GnomeVFSMimeApplication *application;
GdkScreen *screen;
char **envp;
char *uri, *uri_scheme;
@@ -889,6 +450,8 @@ void nautilus_launch_show_file (NautilusFile *file,
startup_notify = FALSE;
#endif
+ g_return_if_fail (!nautilus_file_needs_slow_mime_type (file));
+
uri = NULL;
if (nautilus_file_is_nautilus_link (file)) {
uri = nautilus_file_get_activation_uri (file);
@@ -898,10 +461,7 @@ void nautilus_launch_show_file (NautilusFile *file,
uri = nautilus_file_get_uri (file);
}
- action = nautilus_mime_get_default_action_for_file (file);
-
- action_type = (action) ? action->action_type :
- GNOME_VFS_MIME_ACTION_TYPE_NONE;
+ application = nautilus_mime_get_default_application_for_file (file);
screen = gtk_window_get_screen (parent_window);
envp = my_gdk_spawn_make_environment_for_screen (screen, NULL);
@@ -912,10 +472,12 @@ void nautilus_launch_show_file (NautilusFile *file,
sn_error_trap_pop);
/* Only initiate notification if application supports it. */
- if (action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION) {
- startup_notify = gnome_vfs_application_registry_get_bool_value (action->action.application->id,
+ if (application) {
+ startup_notify = gnome_vfs_application_registry_get_bool_value (application->id,
GNOME_VFS_APPLICATION_REGISTRY_STARTUP_NOTIFY,
NULL);
+ } else {
+ startup_notify = FALSE;
}
if (startup_notify == TRUE) {
@@ -954,7 +516,7 @@ void nautilus_launch_show_file (NautilusFile *file,
timestamp = slowly_and_stupidly_obtain_timestamp (sn_display);
- binary_name = action->action.application->command;
+ binary_name = application->command;
sn_launcher_context_set_binary_name (sn_context,
binary_name);
@@ -1016,9 +578,11 @@ void nautilus_launch_show_file (NautilusFile *file,
case GNOME_VFS_ERROR_NO_DEFAULT:
case GNOME_VFS_ERROR_NO_HANDLER:
+#if NEW_MIME_COMPLETE
nautilus_program_chooser_show_no_choices_message
(action_type, file, parent_window);
break;
+#endif
case GNOME_VFS_ERROR_LAUNCH:
/* TODO: These strings suck pretty badly, but we're in string-freeze,
@@ -1066,8 +630,11 @@ void nautilus_launch_show_file (NautilusFile *file,
break;
case GNOME_VFS_OK:
default:
+#if NEW_MIME_COMPLETE
nautilus_program_chooser_show_invalid_message
(action_type, file, parent_window);
+#endif
+ break;
}
@@ -1082,81 +649,14 @@ void nautilus_launch_show_file (NautilusFile *file,
g_free (uri_for_display);
- if (action != NULL)
- gnome_vfs_mime_action_free (action);
+ if (application != NULL)
+ gnome_vfs_mime_application_free (application);
g_strfreev (envp);
g_free (uri);
}
/**
- * nautilus_launch_action:
- *
- * Forks off a process to launch the action with a given file
- * as a parameter. Provide parent window for error dialogs.
- *
- * @action: the action to launch
- * @file: the file whose location should be passed as a parameter.
- * @parent_window: window to use as parent for error dialogs.
- */
-void nautilus_launch_action (GnomeVFSMimeAction *action,
- NautilusFile *file,
- GtkWindow *parent_window)
-{
- GdkScreen *screen;
- GnomeVFSResult result;
- GList uris;
- char *uri;
- char **envp;
-
- switch (action->action_type) {
- case GNOME_VFS_MIME_ACTION_TYPE_APPLICATION:
-
- nautilus_launch_application (action->action.application, file, parent_window);
-
- break;
-
- case GNOME_VFS_MIME_ACTION_TYPE_COMPONENT:
-
- uri = NULL;
- if (nautilus_file_is_nautilus_link (file)) {
- uri = nautilus_file_get_activation_uri (file);
- }
-
- if (uri == NULL) {
- uri = nautilus_file_get_uri (file);
- }
-
- uris.next = NULL;
- uris.prev = NULL;
- uris.data = uri;
-
- screen = gtk_window_get_screen (parent_window);
- envp = my_gdk_spawn_make_environment_for_screen (screen, NULL);
-
- result = gnome_vfs_mime_action_launch_with_env (action, &uris, envp);
-
- switch (result) {
- case GNOME_VFS_OK:
- break;
-
- default:
- nautilus_program_chooser_show_invalid_message
- (action->action_type, file, parent_window);
- }
-
- g_strfreev (envp);
- g_free (uri);
-
- break;
-
- default:
- nautilus_program_chooser_show_invalid_message
- (action->action_type, file, parent_window);
- }
-}
-
-/**
* nautilus_launch_application:
*
* Fork off a process to launch an application with a given file as a
@@ -1293,9 +793,11 @@ nautilus_launch_application (GnomeVFSMimeApplication *application,
break;
default:
+#if NEW_MIME_COMPLETE
nautilus_program_chooser_show_invalid_message
(GNOME_VFS_MIME_ACTION_TYPE_APPLICATION, file, parent_window);
+#endif
break;
}
diff --git a/libnautilus-private/nautilus-program-choosing.h b/libnautilus-private/nautilus-program-choosing.h
index 84ef475f4..5c3c0a1e1 100644
--- a/libnautilus-private/nautilus-program-choosing.h
+++ b/libnautilus-private/nautilus-program-choosing.h
@@ -39,23 +39,6 @@ typedef void (*NautilusApplicationChoiceCallback) (GnomeVFSMimeApplication *app
typedef void (*NautilusComponentChoiceCallback) (NautilusViewIdentifier *identifier,
gpointer callback_data);
-void nautilus_choose_application_for_file (NautilusFile *file,
- GtkWindow *parent_window,
- NautilusApplicationChoiceCallback callback,
- gpointer callback_data);
-void nautilus_cancel_choose_application_for_file (NautilusFile *file,
- NautilusComponentChoiceCallback callback,
- gpointer callback_data);
-void nautilus_choose_component_for_file (NautilusFile *file,
- GtkWindow *parent_window,
- NautilusComponentChoiceCallback callback,
- gpointer callback_data);
-void nautilus_cancel_choose_component_for_file (NautilusFile *file,
- NautilusComponentChoiceCallback callback,
- gpointer callback_data);
-void nautilus_launch_action (GnomeVFSMimeAction *action,
- NautilusFile *file,
- GtkWindow *parent_window);
void nautilus_launch_application (GnomeVFSMimeApplication *application,
NautilusFile *file,
GtkWindow *parent_window);
diff --git a/src/file-manager/fm-bonobo-provider.c b/src/file-manager/fm-bonobo-provider.c
index ecd56f94e..af55a8d52 100644
--- a/src/file-manager/fm-bonobo-provider.c
+++ b/src/file-manager/fm-bonobo-provider.c
@@ -53,6 +53,7 @@
#include <libnautilus-extension/nautilus-property-page-provider.h>
#include <libnautilus-private/nautilus-mime-actions.h>
#include <libnautilus-private/nautilus-view-identifier.h>
+#include <libnautilus-private/nautilus-view-query.h>
typedef struct {
char *id;
@@ -340,7 +341,7 @@ fm_bonobo_provider_get_file_items (NautilusMenuProvider *provider,
GList *items;
GList *l;
- components = nautilus_mime_get_popup_components_for_files (selection);
+ components = nautilus_view_query_get_popup_components_for_files (selection);
items = NULL;
for (l = components; l; l = l->next) {
@@ -511,7 +512,7 @@ fm_bonobo_provider_get_pages (NautilusPropertyPageProvider *provider,
GList *pages;
/* find all the property pages for this file */
- all_components = nautilus_mime_get_property_components_for_files
+ all_components = nautilus_view_query_get_property_components_for_files
(files);
/* filter out property pages that don't support multiple files */
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index fd3a4c601..897d7023f 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -45,6 +45,7 @@
#include <eel/eel-gnome-extensions.h>
#include <eel/eel-gtk-extensions.h>
#include <eel/eel-gtk-macros.h>
+#include <eel/eel-open-with-dialog.h>
#include <eel/eel-stock-dialogs.h>
#include <eel/eel-string.h>
#include <eel/eel-vfs-extensions.h>
@@ -154,8 +155,10 @@
#define FM_DIRECTORY_VIEW_MENU_PATH_DELETE "/menu/Edit/Dangerous File Items Placeholder/Delete"
#define FM_DIRECTORY_VIEW_MENU_PATH_EMPTY_TRASH "/menu/File/Global File Items Placeholder/Empty Trash"
#define FM_DIRECTORY_VIEW_MENU_PATH_CREATE_LINK "/menu/Edit/File Items Placeholder/Create Link"
-#define FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_PLACEHOLDER "/menu/File/Open Placeholder/Open With/Applications Placeholder"
-#define FM_DIRECTORY_VIEW_MENU_PATH_OTHER_APPLICATION "/menu/File/Open Placeholder/Open With/OtherApplication"
+#define FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER "/menu/File/Open Placeholder/Open With/Applications Placeholder"
+#define FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_PLACEHOLDER "/menu/File/Open Placeholder/Applications Placeholder"
+#define FM_DIRECTORY_VIEW_MENU_PATH_OTHER_APPLICATION_PLACEHOLDER "/menu/File/Open Placeholder/OtherApplicationPlaceholder"
+#define FM_DIRECTORY_VIEW_MENU_PATH_OTHER_APPLICATION "/menu/File/Open Placeholder/OtherApplicationPlaceholder/OtherApplication"
#define FM_DIRECTORY_VIEW_MENU_PATH_SCRIPTS_PLACEHOLDER "/menu/File/Open Placeholder/Scripts/Scripts Placeholder"
#define FM_DIRECTORY_VIEW_MENU_PATH_SCRIPTS_SEPARATOR "/menu/File/Open Placeholder/Scripts/After Scripts"
#define FM_DIRECTORY_VIEW_MENU_PATH_NEW_DOCUMENTS_PLACEHOLDER "/menu/File/New Items Placeholder/New Documents/New Documents Placeholder"
@@ -176,7 +179,12 @@
#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS_PLACEHOLDER "/popups/background/Before Zoom Items/New Documents/New Documents Placeholder"
#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS_SEPARATOR "/popups/background/Before Zoom Items/New Documents/After New Documents"
-#define FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_PLACEHOLDER "/popups/selection/Open Placeholder/Open With/Applications Placeholder"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER "/popups/selection/Open Placeholder/Open With/Applications Placeholder"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_PLACEHOLDER "/popups/selection/Open Placeholder/Applications Placeholder"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_OPEN_PLACEHOLDER "/popups/selection/Open Placeholder"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_OTHER_APPLICATION_PLACEHOLDER "/popups/selection/Open Placeholder/OtherApplicationPlaceholder"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_OTHER_APPLICATION "/popups/selection/Open Placeholder/OtherApplicationPlaceholder/OtherApplication"
+
#define FM_DIRECTORY_VIEW_POPUP_PATH_SCRIPTS_PLACEHOLDER "/popups/selection/Open Placeholder/Scripts/Scripts Placeholder"
#define FM_DIRECTORY_VIEW_POPUP_PATH_SCRIPTS_SEPARATOR "/popups/selection/Open Placeholder/Scripts/After Scripts"
#define FM_DIRECTORY_VIEW_POPUP_PATH_OPEN_WITH "/popups/selection/Open Placeholder/Open With"
@@ -273,10 +281,14 @@ struct FMDirectoryViewDetails
};
typedef enum {
+ ACTIVATION_ACTION_LAUNCH_DESKTOP_FILE,
+ ACTIVATION_ACTION_LAUNCH_APPLICATION_FROM_COMMAND,
+ ACTIVATION_ACTION_ASK,
ACTIVATION_ACTION_LAUNCH,
ACTIVATION_ACTION_LAUNCH_IN_TERMINAL,
- ACTIVATION_ACTION_DISPLAY,
- ACTIVATION_ACTION_DO_NOTHING
+ ACTIVATION_ACTION_OPEN_IN_VIEW,
+ ACTIVATION_ACTION_OPEN_IN_APPLICATION,
+ ACTIVATION_ACTION_DO_NOTHING,
} ActivationAction;
typedef struct {
@@ -397,12 +409,6 @@ typedef struct {
} ApplicationLaunchParameters;
typedef struct {
- NautilusViewIdentifier *identifier;
- char *uri;
- FMDirectoryView *directory_view;
-} ViewerLaunchParameters;
-
-typedef struct {
NautilusFile *file;
FMDirectoryView *directory_view;
} ScriptLaunchParameters;
@@ -439,30 +445,6 @@ application_launch_parameters_free (ApplicationLaunchParameters *parameters)
g_free (parameters);
}
-static ViewerLaunchParameters *
-viewer_launch_parameters_new (NautilusViewIdentifier *identifier,
- const char *uri,
- FMDirectoryView *directory_view)
-{
- ViewerLaunchParameters *result;
-
- result = g_new0 (ViewerLaunchParameters, 1);
- result->identifier = nautilus_view_identifier_copy (identifier);
- g_object_ref (directory_view);
- result->directory_view = directory_view;
- result->uri = g_strdup (uri);
-
- return result;
-}
-
-static void
-viewer_launch_parameters_free (ViewerLaunchParameters *parameters)
-{
- nautilus_view_identifier_free (parameters->identifier);
- g_object_unref (parameters->directory_view);
- g_free (parameters->uri);
- g_free (parameters);
-}
static ScriptLaunchParameters *
script_launch_parameters_new (NautilusFile *file,
@@ -665,6 +647,7 @@ fm_directory_view_launch_application (GnomeVFSMimeApplication *application,
g_free (uri);
}
+#if NEW_MIME_COMPLETE
static void
fm_directory_view_chose_application_callback (GnomeVFSMimeApplication *application,
gpointer callback_data)
@@ -685,6 +668,7 @@ fm_directory_view_chose_application_callback (GnomeVFSMimeApplication *applicati
application_launch_parameters_free (launch_parameters);
}
+#endif
static void
open_location (FMDirectoryView *directory_view,
@@ -713,98 +697,67 @@ open_location (FMDirectoryView *directory_view,
}
static void
-switch_location_and_view (NautilusViewIdentifier *identifier,
- const char *new_uri,
- FMDirectoryView *directory_view)
+application_selected_cb (EelOpenWithDialog *dialog,
+ GnomeVFSMimeApplication *app,
+ gpointer user_data)
{
+ FMDirectoryView *view;
NautilusFile *file;
- g_assert (FM_IS_DIRECTORY_VIEW (directory_view));
- g_assert (identifier != NULL);
- g_assert (new_uri != NULL);
-
- /* User has explicitly chosen a viewer other than the default, so
- * make it the default and then switch locations.
- */
- /* FIXME bugzilla.gnome.org 41053: We might want an atomic operation
- * for switching location and viewer together, so we don't have to
- * rely on metadata for holding the default location.
- */
- file = nautilus_file_get (new_uri);
- nautilus_mime_set_default_component_for_file (file, identifier->iid);
- nautilus_file_unref (file);
-
- open_location (directory_view, new_uri, Nautilus_ViewFrame_OPEN_ACCORDING_TO_MODE, 0);
-}
-
-static void
-fm_directory_view_chose_component_callback (NautilusViewIdentifier *identifier,
- gpointer callback_data)
-{
- ViewerLaunchParameters *launch_parameters;
-
- g_assert (callback_data != NULL);
-
- launch_parameters = (ViewerLaunchParameters *)callback_data;
- g_assert (launch_parameters->identifier == NULL);
-
- if (identifier != NULL) {
- switch_location_and_view (identifier, /* NOT the (empty) identifier in launch_parameters */
- launch_parameters->uri,
- launch_parameters->directory_view);
- }
+ view = FM_DIRECTORY_VIEW (user_data);
+
+ file = g_object_get_data (G_OBJECT (dialog), "directory-view:file");
- viewer_launch_parameters_free (launch_parameters);
+ fm_directory_view_launch_application (app, file, view);
}
static void
choose_program (FMDirectoryView *view,
- NautilusFile *file,
- GnomeVFSMimeActionType type)
+ NautilusFile *file)
{
+ GtkWidget *dialog;
char *uri;
+ char *mime_type;
g_assert (FM_IS_DIRECTORY_VIEW (view));
g_assert (NAUTILUS_IS_FILE (file));
- g_assert (type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT ||
- type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION);
nautilus_file_ref (file);
uri = nautilus_file_get_uri (file);
+ mime_type = nautilus_file_get_mime_type (file);
- if (type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT) {
- nautilus_choose_component_for_file
- (file,
- fm_directory_view_get_containing_window (view),
- fm_directory_view_chose_component_callback,
- viewer_launch_parameters_new
- (NULL, uri, view));
- } else {
- nautilus_choose_application_for_file
- (file,
- fm_directory_view_get_containing_window (view),
- fm_directory_view_chose_application_callback,
- application_launch_parameters_new
- (NULL, file, view));
- }
+ dialog = eel_open_with_dialog_new (uri, mime_type);
+ g_object_set_data_full (G_OBJECT (dialog),
+ "directory-view:file",
+ g_object_ref (file),
+ (GDestroyNotify)g_object_unref);
+
+ gtk_window_set_screen (GTK_WINDOW (dialog),
+ gtk_widget_get_screen (GTK_WIDGET (view)));
+ gtk_widget_show (dialog);
- g_free (uri);
+ g_signal_connect_object (dialog,
+ "application_selected",
+ G_CALLBACK (application_selected_cb),
+ view,
+ 0);
+
+ g_free (uri);
+ g_free (mime_type);
nautilus_file_unref (file);
}
static void
-open_with_other_program (FMDirectoryView *view, GnomeVFSMimeActionType action_type)
+open_with_other_program (FMDirectoryView *view)
{
GList *selection;
g_assert (FM_IS_DIRECTORY_VIEW (view));
- g_assert (action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION ||
- action_type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT);
selection = fm_directory_view_get_selection (view);
if (selection_contains_one_item_in_menu_callback (view, selection)) {
- choose_program (view, NAUTILUS_FILE (selection->data), action_type);
+ choose_program (view, NAUTILUS_FILE (selection->data));
}
nautilus_file_list_free (selection);
@@ -815,8 +768,7 @@ other_application_callback (BonoboUIComponent *component, gpointer callback_data
{
g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
- open_with_other_program (FM_DIRECTORY_VIEW (callback_data),
- GNOME_VFS_MIME_ACTION_TYPE_APPLICATION);
+ open_with_other_program (FM_DIRECTORY_VIEW (callback_data));
}
static void
@@ -3720,48 +3672,186 @@ static void
add_application_to_bonobo_menu (FMDirectoryView *directory_view,
GnomeVFSMimeApplication *application,
NautilusFile *file,
- int index)
+ int index,
+ const char *menu_placeholder,
+ const char *popup_placeholder)
{
ApplicationLaunchParameters *launch_parameters;
char *tip;
+ char *label;
launch_parameters = application_launch_parameters_new
(application, file, directory_view);
+ label = g_strdup_printf (_("Open with \"%s\""), application->name);
tip = g_strdup_printf (_("Use \"%s\" to open the selected item"), application->name);
add_numbered_menu_item (directory_view->details->ui,
- FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_PLACEHOLDER,
- application->name,
+ menu_placeholder,
+ label,
tip,
index,
NULL,
bonobo_launch_application_callback,
launch_parameters,
(GDestroyNotify) application_launch_parameters_free);
+
+
/* Use same launch parameters and no DestroyNotify for popup item, which has same
* lifetime as the item in the File menu in the menu bar.
*/
add_numbered_menu_item (directory_view->details->ui,
- FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_PLACEHOLDER,
- application->name,
+ popup_placeholder,
+ label,
tip,
index,
NULL,
bonobo_launch_application_callback,
launch_parameters,
NULL);
+ g_free (label);
g_free (tip);
}
+
+static ActivationAction
+get_default_executable_text_file_action (void)
+{
+ int preferences_value;
+
+ preferences_value = eel_preferences_get_enum
+ (NAUTILUS_PREFERENCES_EXECUTABLE_TEXT_ACTIVATION);
+ switch (preferences_value) {
+ case NAUTILUS_EXECUTABLE_TEXT_LAUNCH:
+ return ACTIVATION_ACTION_LAUNCH;
+ case NAUTILUS_EXECUTABLE_TEXT_DISPLAY:
+ return ACTIVATION_ACTION_OPEN_IN_APPLICATION;
+ case NAUTILUS_EXECUTABLE_TEXT_ASK:
+ default:
+ return ACTIVATION_ACTION_ASK;
+ }
+}
+
+static ActivationAction
+get_executable_text_file_action (FMDirectoryView *view, NautilusFile *file)
+{
+ GtkDialog *dialog;
+ char *file_name;
+ char *prompt;
+ char *detail;
+ int preferences_value;
+ int response;
+
+ g_assert (nautilus_file_contains_text (file));
+
+ preferences_value = eel_preferences_get_enum
+ (NAUTILUS_PREFERENCES_EXECUTABLE_TEXT_ACTIVATION);
+ switch (preferences_value) {
+ case NAUTILUS_EXECUTABLE_TEXT_LAUNCH:
+ return ACTIVATION_ACTION_LAUNCH;
+ case NAUTILUS_EXECUTABLE_TEXT_DISPLAY:
+ return ACTIVATION_ACTION_OPEN_IN_APPLICATION;
+ case NAUTILUS_EXECUTABLE_TEXT_ASK:
+ break;
+ default:
+ /* Complain non-fatally, since preference data can't be trusted */
+ g_warning ("Unknown value %d for NAUTILUS_PREFERENCES_EXECUTABLE_TEXT_ACTIVATION",
+ preferences_value);
+
+ }
+
+
+ file_name = nautilus_file_get_display_name (file);
+ prompt = g_strdup_printf (_("Do you want to run \"%s\", or display its contents?"),
+ file_name);
+ detail = g_strdup_printf (_("\"%s\" is an executable text file."),
+ file_name);
+ g_free (file_name);
+
+ dialog = eel_create_question_dialog (prompt,
+ detail,
+ _("Run or Display?"),
+ _("Run in _Terminal"), RESPONSE_RUN_IN_TERMINAL,
+ _("_Display"), RESPONSE_DISPLAY,
+ fm_directory_view_get_containing_window (view));
+ gtk_dialog_add_button (dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+ gtk_dialog_add_button (dialog, _("_Run"), RESPONSE_RUN);
+ gtk_dialog_set_default_response (dialog, GTK_RESPONSE_CANCEL);
+ gtk_widget_show (GTK_WIDGET (dialog));
+
+ g_free (prompt);
+ g_free (detail);
+
+ response = gtk_dialog_run (dialog);
+ gtk_object_destroy (GTK_OBJECT (dialog));
+
+ switch (response) {
+ case RESPONSE_RUN:
+ return ACTIVATION_ACTION_LAUNCH;
+ case RESPONSE_RUN_IN_TERMINAL:
+ return ACTIVATION_ACTION_LAUNCH_IN_TERMINAL;
+ case RESPONSE_DISPLAY:
+ return ACTIVATION_ACTION_OPEN_IN_APPLICATION;
+ default:
+ return ACTIVATION_ACTION_DO_NOTHING;
+ }
+}
+
+static gboolean
+can_use_component_for_file (NautilusFile *file)
+{
+ return (nautilus_file_is_directory (file) ||
+ NAUTILUS_IS_DESKTOP_ICON_FILE (file));
+}
+
+static ActivationAction
+get_activation_action (NautilusFile *file)
+{
+ ActivationAction action;
+ char *activation_uri;
+
+ activation_uri = nautilus_file_get_activation_uri (file);
+ if (activation_uri == NULL) {
+ activation_uri = nautilus_file_get_uri (file);
+ }
+
+ action = ACTIVATION_ACTION_DO_NOTHING;
+
+ if (eel_str_has_prefix (activation_uri, NAUTILUS_DESKTOP_COMMAND_SPECIFIER)) {
+ action = ACTIVATION_ACTION_LAUNCH_DESKTOP_FILE;
+ } else if (eel_str_has_prefix (activation_uri, NAUTILUS_COMMAND_SPECIFIER)) {
+ action = ACTIVATION_ACTION_LAUNCH_APPLICATION_FROM_COMMAND;
+ } else if (file_is_launchable (file)) {
+ char *executable_path;
+
+ action = ACTIVATION_ACTION_LAUNCH;
+
+ executable_path = gnome_vfs_get_local_path_from_uri (activation_uri);
+ if (!executable_path) {
+ action = ACTIVATION_ACTION_DO_NOTHING;
+ } else if (nautilus_file_contains_text (file)) {
+ action = get_default_executable_text_file_action ();
+ }
+ g_free (executable_path);
+ }
+
+ if (action == ACTIVATION_ACTION_DO_NOTHING) {
+ if (can_use_component_for_file (file)) {
+ action = ACTIVATION_ACTION_OPEN_IN_VIEW;
+ } else {
+ action = ACTIVATION_ACTION_OPEN_IN_APPLICATION;
+ }
+ }
+ return action;
+}
+
static void
reset_bonobo_open_with_menu (FMDirectoryView *view, GList *selection)
{
GList *applications, *node;
NautilusFile *file;
- gboolean sensitive;
- gboolean any_applications;
- gboolean any_viewers;
+ gboolean submenu_visible;
char *uri;
+ int num_applications;
int index;
/* Clear any previous inserted items in the applications and viewers placeholders */
@@ -3769,43 +3859,87 @@ reset_bonobo_open_with_menu (FMDirectoryView *view, GList *selection)
(view->details->ui, FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_PLACEHOLDER);
nautilus_bonobo_remove_menu_items_and_commands
(view->details->ui, FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_PLACEHOLDER);
+ nautilus_bonobo_remove_menu_items_and_commands
+ (view->details->ui, FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER);
+ nautilus_bonobo_remove_menu_items_and_commands
+ (view->details->ui, FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER);
+ num_applications = 0;
+
/* This menu is only displayed when there's one selected item. */
if (!eel_g_list_exactly_one_item (selection)) {
- sensitive = FALSE;
- } else {
- sensitive = TRUE;
- any_applications = FALSE;
- any_viewers = FALSE;
+ submenu_visible = FALSE;
+ } else {
+ GnomeVFSMimeApplication *default_app;
+ ActivationAction action;
file = NAUTILUS_FILE (selection->data);
uri = nautilus_file_get_uri (file);
-
+
+ action = get_activation_action (file);
+ if (action == ACTIVATION_ACTION_OPEN_IN_APPLICATION) {
+ default_app = nautilus_mime_get_default_application_for_file (file);
+ } else {
+ default_app = NULL;
+ }
+
applications = nautilus_mime_get_open_with_applications_for_file (NAUTILUS_FILE (selection->data));
+
+ num_applications = g_list_length (applications);
+
+
+
for (node = applications, index = 0; node != NULL; node = node->next, index++) {
- any_applications = TRUE;
- add_application_to_bonobo_menu (view, node->data, file, index);
+ GnomeVFSMimeApplication *application;
+ char *menu_path;
+ char *popup_path;
+
+ application = node->data;
+
+ if (default_app && !strcmp (default_app->id, application->id)) {
+ continue;
+ }
+
+ if (num_applications > 3) {
+ menu_path = FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER;
+ popup_path = FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER;
+ } else {
+ menu_path = FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_PLACEHOLDER;
+ popup_path = FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_PLACEHOLDER;
+ }
+
+ add_application_to_bonobo_menu (view,
+ node->data,
+ file,
+ index,
+ menu_path,popup_path);
}
gnome_vfs_mime_application_list_free (applications);
- nautilus_bonobo_set_label
- (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_OTHER_APPLICATION,
- any_applications ? _("Other _Application...") : _("An _Application..."));
-
g_free (uri);
+
+ submenu_visible = (num_applications > 3);
}
- /* It's OK to set the sensitivity of the menu items (rather than the verbs)
+ /* It's OK to set the visibility of the menu items (rather than the verbs)
* here because these are submenu titles, not items with verbs.
*/
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_MENU_PATH_OPEN_WITH,
- sensitive);
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_POPUP_PATH_OPEN_WITH,
- sensitive);
+ nautilus_bonobo_set_hidden (view->details->ui,
+ FM_DIRECTORY_VIEW_MENU_PATH_OPEN_WITH,
+ !submenu_visible);
+ nautilus_bonobo_set_hidden (view->details->ui,
+ FM_DIRECTORY_VIEW_POPUP_PATH_OPEN_WITH,
+ !submenu_visible);
+
+
+ nautilus_bonobo_set_hidden (view->details->ui,
+ FM_DIRECTORY_VIEW_POPUP_PATH_OTHER_APPLICATION_PLACEHOLDER,
+ submenu_visible);
+
+ nautilus_bonobo_set_hidden (view->details->ui,
+ FM_DIRECTORY_VIEW_MENU_PATH_OTHER_APPLICATION_PLACEHOLDER,
+ submenu_visible);
}
static GList *
@@ -5727,6 +5861,8 @@ real_update_menus (FMDirectoryView *view)
gboolean show_separate_delete_command;
gboolean vfolder_directory;
gboolean show_open_alternate;
+ gboolean can_open;
+ ActivationAction action;
EelBackground *background;
if (view->details->ui == NULL) {
@@ -5766,6 +5902,39 @@ real_update_menus (FMDirectoryView *view)
FM_DIRECTORY_VIEW_COMMAND_OPEN,
selection_count != 0);
+ label_with_underscore = NULL;
+ can_open = TRUE;
+ if (selection_count == 1) {
+ NautilusFile *file;
+
+ file = NAUTILUS_FILE (selection->data);
+
+ action = get_activation_action (file);
+
+ if (action == ACTIVATION_ACTION_OPEN_IN_APPLICATION) {
+ GnomeVFSMimeApplication *app;
+
+ app = nautilus_mime_get_default_application_for_file (file);
+ if (app) {
+ label_with_underscore = g_strdup_printf (_("_Open with \"%s\""),
+ app->name);
+ gnome_vfs_mime_application_free (app);
+ } else {
+ can_open = FALSE;
+ }
+ }
+ }
+
+ nautilus_bonobo_set_label
+ (view->details->ui,
+ FM_DIRECTORY_VIEW_COMMAND_OPEN,
+ label_with_underscore ? label_with_underscore : _("_Open"));
+ nautilus_bonobo_set_hidden
+ (view->details->ui,
+ FM_DIRECTORY_VIEW_COMMAND_OPEN,
+ !can_open);
+ g_free (label_with_underscore);
+
if (nautilus_view_get_window_type (view->details->nautilus_view) == Nautilus_WINDOW_NAVIGATION) {
show_open_alternate = TRUE;
label_with_underscore = g_strdup_printf (ngettext("Open in New Window",
@@ -6100,6 +6269,12 @@ fm_directory_view_notify_selection_changed (FMDirectoryView *view)
NULL,
NULL);
}
+
+ nautilus_file_call_when_ready
+ (file,
+ NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI,
+ NULL,
+ NULL);
}
nautilus_file_list_free (selection);
}
@@ -6118,7 +6293,8 @@ file_is_launchable (NautilusFile *file)
return type_can_be_executable
&& nautilus_file_can_get_permissions (file)
&& nautilus_file_can_execute (file)
- && nautilus_file_is_executable (file);
+ && nautilus_file_is_executable (file)
+ && !nautilus_file_is_directory (file);
}
static void
@@ -6171,80 +6347,6 @@ report_broken_symbolic_link (FMDirectoryView *view, NautilusFile *file)
g_free (detail);
}
-static ActivationAction
-get_executable_text_file_action (FMDirectoryView *view, NautilusFile *file)
-{
- GtkDialog *dialog;
- char *file_name;
- char *prompt;
- char *detail;
- int preferences_value;
- int response;
-
- g_assert (nautilus_file_contains_text (file));
-
- preferences_value = eel_preferences_get_enum
- (NAUTILUS_PREFERENCES_EXECUTABLE_TEXT_ACTIVATION);
- switch (preferences_value) {
- case NAUTILUS_EXECUTABLE_TEXT_LAUNCH:
- return ACTIVATION_ACTION_LAUNCH;
- case NAUTILUS_EXECUTABLE_TEXT_DISPLAY:
- return ACTIVATION_ACTION_DISPLAY;
- case NAUTILUS_EXECUTABLE_TEXT_ASK:
- break;
- default:
- /* Complain non-fatally, since preference data can't be trusted */
- g_warning ("Unknown value %d for NAUTILUS_PREFERENCES_EXECUTABLE_TEXT_ACTIVATION",
- preferences_value);
-
- }
-
-
- file_name = nautilus_file_get_display_name (file);
- prompt = g_strdup_printf (_("Do you want to run \"%s\", or display its contents?"),
- file_name);
- detail = g_strdup_printf (_("\"%s\" is an executable text file."),
- file_name);
- g_free (file_name);
-
- dialog = eel_create_question_dialog (prompt,
- detail,
- _("Run or Display?"),
- _("Run in _Terminal"), RESPONSE_RUN_IN_TERMINAL,
- _("_Display"), RESPONSE_DISPLAY,
- fm_directory_view_get_containing_window (view));
- gtk_dialog_add_button (dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
- gtk_dialog_add_button (dialog, _("_Run"), RESPONSE_RUN);
- gtk_dialog_set_default_response (dialog, GTK_RESPONSE_CANCEL);
- gtk_widget_show (GTK_WIDGET (dialog));
-
- g_free (prompt);
- g_free (detail);
-
- response = gtk_dialog_run (dialog);
- gtk_object_destroy (GTK_OBJECT (dialog));
-
- switch (response) {
- case RESPONSE_RUN:
- return ACTIVATION_ACTION_LAUNCH;
- case RESPONSE_RUN_IN_TERMINAL:
- return ACTIVATION_ACTION_LAUNCH_IN_TERMINAL;
- case RESPONSE_DISPLAY:
- return ACTIVATION_ACTION_DISPLAY;
- default:
- return ACTIVATION_ACTION_DO_NOTHING;
- }
-}
-
-static gboolean
-can_use_component_for_file (FMDirectoryView *view,
- NautilusFile *file)
-{
- return (nautilus_file_is_directory (file) ||
- NAUTILUS_IS_DESKTOP_ICON_FILE (file) ||
- nautilus_view_get_window_type (view->details->nautilus_view) == Nautilus_WINDOW_NAVIGATION);
-}
-
static void
activate_weak_notify (gpointer user_data,
GObject *object)
@@ -6262,6 +6364,7 @@ stop_activate (ActivateParameters *parameters)
parameters);
}
+
static void
activate_callback (NautilusFile *file, gpointer callback_data)
{
@@ -6270,7 +6373,6 @@ activate_callback (NautilusFile *file, gpointer callback_data)
char *orig_uri, *uri, *file_uri;
char *executable_path, *quoted_path, *name;
char *old_working_dir;
- GnomeVFSMimeActionType action_type;
ActivationAction action;
GdkScreen *screen;
@@ -6289,82 +6391,73 @@ activate_callback (NautilusFile *file, gpointer callback_data)
orig_uri = uri = nautilus_file_get_activation_uri (file);
- action = ACTIVATION_ACTION_DISPLAY;
+ action = get_activation_action (file);
screen = gtk_widget_get_screen (GTK_WIDGET (view));
- if (eel_str_has_prefix (uri, NAUTILUS_DESKTOP_COMMAND_SPECIFIER)) {
+ if (action == ACTIVATION_ACTION_ASK) {
+ /* Special case for executable text files, since it might be
+ * dangerous & unexpected to launch these.
+ */
+ action = get_executable_text_file_action (view, file);
+ }
+
+ switch (action) {
+ case ACTIVATION_ACTION_LAUNCH_DESKTOP_FILE :
file_uri = nautilus_file_get_uri (file);
nautilus_launch_desktop_file (
screen, file_uri, NULL,
fm_directory_view_get_containing_window (view));
g_free (file_uri);
- action = ACTIVATION_ACTION_DO_NOTHING;
- } else if (eel_str_has_prefix (uri, NAUTILUS_COMMAND_SPECIFIER)) {
+ break;
+ case ACTIVATION_ACTION_LAUNCH_APPLICATION_FROM_COMMAND :
uri += strlen (NAUTILUS_COMMAND_SPECIFIER);
nautilus_launch_application_from_command (screen, NULL, uri, NULL, FALSE);
- action = ACTIVATION_ACTION_DO_NOTHING;
- }
-
- if (action != ACTIVATION_ACTION_DO_NOTHING && file_is_launchable (file)) {
-
+ break;
+ case ACTIVATION_ACTION_LAUNCH :
+ case ACTIVATION_ACTION_LAUNCH_IN_TERMINAL :
old_working_dir = change_to_view_directory (view);
- /* Launch executables to activate them. */
- action = ACTIVATION_ACTION_LAUNCH;
-
executable_path = gnome_vfs_get_local_path_from_uri (uri);
-
- /* Non-local executables don't get launched. They act like non-executables. */
- if (executable_path == NULL) {
- action = ACTIVATION_ACTION_DISPLAY;
- } else if (nautilus_file_contains_text (file)) {
- /* Special case for executable text files, since it might be
- * dangerous & unexpected to launch these.
- */
- action = get_executable_text_file_action (view, file);
- }
-
- if (action == ACTIVATION_ACTION_LAUNCH ||
- action == ACTIVATION_ACTION_LAUNCH_IN_TERMINAL) {
- quoted_path = g_shell_quote (executable_path);
- name = nautilus_file_get_name (file);
- nautilus_launch_application_from_command
- (screen, name, quoted_path, NULL,
- (action == ACTIVATION_ACTION_LAUNCH_IN_TERMINAL) /* use terminal */ );
- g_free (name);
- g_free (quoted_path);
- }
+ quoted_path = g_shell_quote (executable_path);
+ name = nautilus_file_get_name (file);
+ nautilus_launch_application_from_command
+ (screen, name, quoted_path, NULL,
+ (action == ACTIVATION_ACTION_LAUNCH_IN_TERMINAL) /* use terminal */ );
+ g_free (name);
+ g_free (quoted_path);
chdir (old_working_dir);
g_free (old_working_dir);
g_free (executable_path);
- }
-
- if (action == ACTIVATION_ACTION_DISPLAY) {
- action_type = nautilus_mime_get_default_action_type_for_file (file);
- if (action_type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT &&
- nautilus_mime_has_any_components_for_file (file) &&
- can_use_component_for_file (view, file)) {
- open_location (view, uri, parameters->mode, parameters->flags);
- } else {
- nautilus_launch_show_file
- (file, fm_directory_view_get_containing_window (view));
-
- if ((parameters->flags & Nautilus_ViewFrame_OPEN_FLAG_CLOSE_BEHIND) != 0) {
- if (nautilus_view_get_window_type (view->details->nautilus_view) == Nautilus_WINDOW_SPATIAL) {
- nautilus_view_close_window (view->details->nautilus_view);
- }
- }
-
- /* We should not add trash and directory uris.*/
- if ((!nautilus_file_is_in_trash (file)) &&
- (!nautilus_file_is_directory (file))) {
- file_uri = nautilus_file_get_uri (file);
- egg_recent_model_add (nautilus_recent_get_model (), file_uri);
- g_free (file_uri);
+
+ break;
+ case ACTIVATION_ACTION_OPEN_IN_VIEW :
+ open_location (view, uri, parameters->mode, parameters->flags);
+ break;
+ case ACTIVATION_ACTION_OPEN_IN_APPLICATION :
+ nautilus_launch_show_file
+ (file, fm_directory_view_get_containing_window (view));
+
+ if ((parameters->flags & Nautilus_ViewFrame_OPEN_FLAG_CLOSE_BEHIND) != 0) {
+ if (nautilus_view_get_window_type (view->details->nautilus_view) == Nautilus_WINDOW_SPATIAL) {
+ nautilus_view_close_window (view->details->nautilus_view);
}
}
+
+ /* We should not add trash and directory uris.*/
+ if ((!nautilus_file_is_in_trash (file)) &&
+ (!nautilus_file_is_directory (file))) {
+ file_uri = nautilus_file_get_uri (file);
+ egg_recent_model_add (nautilus_recent_get_model (), file_uri);
+ g_free (file_uri);
+ }
+ break;
+ case ACTIVATION_ACTION_DO_NOTHING :
+ break;
+ case ACTIVATION_ACTION_ASK :
+ g_assert_not_reached ();
+ break;
}
nautilus_file_unref (file);
diff --git a/src/file-manager/fm-properties-window.c b/src/file-manager/fm-properties-window.c
index b1031f17b..b05c26473 100644
--- a/src/file-manager/fm-properties-window.c
+++ b/src/file-manager/fm-properties-window.c
@@ -33,6 +33,7 @@
#include <eel/eel-gnome-extensions.h>
#include <eel/eel-gtk-extensions.h>
#include <eel/eel-labeled-image.h>
+#include <eel/eel-mime-application-chooser.h>
#include <eel/eel-stock-dialogs.h>
#include <eel/eel-string.h>
#include <eel/eel-vfs-extensions.h>
@@ -3264,6 +3265,33 @@ file_changed_callback (NautilusFile *file, gpointer user_data)
}
}
+static gboolean
+should_show_open_with (FMPropertiesWindow *window)
+{
+ return !is_multi_file_window (window);
+}
+
+static void
+create_open_with_page (FMPropertiesWindow *window)
+{
+ GtkWidget *vbox;
+ char *uri;
+ char *mime_type;
+
+ uri = nautilus_file_get_uri (get_target_file (window));
+ mime_type = nautilus_file_get_mime_type (get_target_file (window));
+
+ vbox = eel_mime_application_chooser_new (uri, mime_type);
+ gtk_widget_show (vbox);
+
+ g_free (uri);
+ g_free (mime_type);
+
+ gtk_notebook_append_page (window->details->notebook,
+ vbox, gtk_label_new (_("Open With")));
+}
+
+
static FMPropertiesWindow *
create_properties_window (StartupData *startup_data)
{
@@ -3362,6 +3390,10 @@ create_properties_window (StartupData *startup_data)
create_permissions_page (window);
}
+ if (should_show_open_with (window)) {
+ create_open_with_page (window);
+ }
+
/* append pages from available views */
append_extension_pages (window);
diff --git a/src/file-manager/nautilus-directory-view-ui.xml b/src/file-manager/nautilus-directory-view-ui.xml
index 81dd76f0b..27555ee02 100644
--- a/src/file-manager/nautilus-directory-view-ui.xml
+++ b/src/file-manager/nautilus-directory-view-ui.xml
@@ -37,7 +37,7 @@
_label="_Open Scripts Folder"
_tip="Show the folder containing the scripts that appear in this menu"/>
<cmd name="OtherApplication"
- _label="Other _Application..."
+ _label="Open with Other _Application..."
_tip="Choose another application with which to open the selected item"/>
<cmd name="Show Hidden Files"
_label="Show _Hidden Files"
@@ -130,13 +130,19 @@
<menuitem name="OpenAlternate"
accel="*Control**Shift*o"
verb="OpenAlternate"/>
+ <placeholder name="Applications Placeholder" delimit="top"/>
<submenu name="Open With"
_label="Open Wit_h"
_tip="Choose a program with which to open the selected item">
<placeholder name="Applications Placeholder" delimit="none"/>
+ <separator/>
<menuitem name="OtherApplication"
verb="OtherApplication"/>
</submenu>
+ <placeholder name="OtherApplicationPlaceholder">
+ <menuitem name="OtherApplication"
+ verb="OtherApplication"/>
+ </placeholder>
<menuitem name="Edit Launcher"
verb="Edit Launcher"/>
<submenu name="Scripts"
@@ -267,13 +273,19 @@
verb="Open"/>
<menuitem name="OpenAlternate"
verb="OpenAlternate"/>
+ <placeholder name="Applications Placeholder" delimit="top"/>
<submenu name="Open With"
_label="Open Wit_h"
tearoff="0"
_tip="Choose a program with which to open the selected item">
<placeholder name="Applications Placeholder" delimit="none"/>
+ <separator/>
<menuitem name="OtherApplication" verb="OtherApplication"/>
</submenu>
+ <placeholder name="OtherApplicationPlaceholder">
+ <menuitem name="OtherApplication"
+ verb="OtherApplication"/>
+ </placeholder>
<menuitem name="Edit Launcher"
verb="Edit Launcher"/>
<submenu name="Scripts"
diff --git a/src/nautilus-applicable-views.c b/src/nautilus-applicable-views.c
index 5f76895d5..35011bb0c 100644
--- a/src/nautilus-applicable-views.c
+++ b/src/nautilus-applicable-views.c
@@ -35,6 +35,7 @@
#include <libgnomevfs/gnome-vfs-result.h>
#include <libnautilus-private/nautilus-file.h>
#include <libnautilus-private/nautilus-mime-actions.h>
+#include <libnautilus-private/nautilus-view-query.h>
#include <libnautilus-private/nautilus-view-identifier.h>
struct NautilusDetermineViewHandle {
@@ -111,9 +112,9 @@ got_file_info_callback (NautilusFile *file,
|| vfs_result_code == GNOME_VFS_ERROR_NOT_SUPPORTED
|| vfs_result_code == GNOME_VFS_ERROR_INVALID_URI) {
if (handle->fallback) {
- default_component = nautilus_mime_get_default_fallback_component_for_file (handle->file);
+ default_component = nautilus_view_query_get_fallback_component_for_file (handle->file);
} else {
- default_component = nautilus_mime_get_default_component_for_file (handle->file);
+ default_component = nautilus_view_query_get_default_component_for_file (handle->file);
}
if (default_component != NULL) {
default_id = nautilus_view_identifier_new_from_content_view (default_component);
@@ -126,7 +127,7 @@ got_file_info_callback (NautilusFile *file,
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_file (handle->file));
+ g_assert (!nautilus_view_query_has_any_components_for_file (handle->file));
result_code = NAUTILUS_DETERMINE_VIEW_NO_HANDLER_FOR_TYPE;
} else {
result_code = get_view_result_from_gnome_vfs_result (vfs_result_code);
diff --git a/src/nautilus-information-panel.c b/src/nautilus-information-panel.c
index 5fadaa6d6..da68ba52b 100644
--- a/src/nautilus-information-panel.c
+++ b/src/nautilus-information-panel.c
@@ -831,6 +831,7 @@ metadata_button_callback (GtkWidget *button, const char *command_str)
information_panel = NAUTILUS_INFORMATION_PANEL (g_object_get_data (G_OBJECT (button), "user_data"));
}
+#if NEW_MIME_COMPLETE
static void
nautilus_information_panel_chose_application_callback (GnomeVFSMimeApplication *application,
gpointer callback_data)
@@ -846,10 +847,12 @@ nautilus_information_panel_chose_application_callback (GnomeVFSMimeApplication *
nautilus_information_panel_get_window (information_panel));
}
}
+#endif
static void
open_with_callback (GtkWidget *button, gpointer ignored)
{
+#if NEW_MIME_COMPLETE
NautilusInformationPanel *information_panel;
information_panel = NAUTILUS_INFORMATION_PANEL (g_object_get_data (G_OBJECT (button), "user_data"));
@@ -861,6 +864,7 @@ open_with_callback (GtkWidget *button, gpointer ignored)
GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (information_panel))),
nautilus_information_panel_chose_application_callback,
information_panel);
+#endif
}
/* utility routine that allocates the command buttons from the command list */
@@ -1069,7 +1073,7 @@ nautilus_information_panel_update_buttons (NautilusInformationPanel *information
if (nautilus_mime_has_any_applications_for_file (information_panel->details->file)) {
short_application_list =
- nautilus_mime_get_short_list_applications_for_file (information_panel->details->file);
+ nautilus_mime_get_applications_for_file (information_panel->details->file);
add_command_buttons (information_panel, short_application_list);
gnome_vfs_mime_application_list_free (short_application_list);
}
diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c
index 8db7664a2..c7246c784 100644
--- a/src/nautilus-navigation-window.c
+++ b/src/nautilus-navigation-window.c
@@ -619,41 +619,6 @@ create_view_as_menu_item (NautilusWindow *window,
return menu_item;
}
-static GtkWidget *
-new_gtk_separator (void)
-{
- GtkWidget *result;
-
- result = gtk_menu_item_new ();
- gtk_widget_show (result);
- gtk_widget_set_sensitive (result, FALSE);
-
- return result;
-}
-
-static void
-view_as_menu_choose_view_callback (GtkWidget *widget, gpointer data)
-{
- NautilusWindow *window;
-
- g_assert (GTK_IS_MENU_ITEM (widget));
- g_assert (NAUTILUS_IS_WINDOW (data));
-
- window = NAUTILUS_WINDOW (data);
-
- /* Set the option menu back to its previous setting (Don't
- * leave it on this dialog-producing "View as..."
- * setting). If the menu choice causes a content view change,
- * this will be updated again later, in
- * nautilus_window_load_view_as_menus. Do this right away so
- * the user never sees the option menu set to "View as
- * Other...".
- */
- load_view_as_menu (window);
-
- nautilus_window_show_view_as_dialog (window);
-}
-
static void
load_view_as_menu (NautilusWindow *window)
{
@@ -692,18 +657,6 @@ load_view_as_menu (NautilusWindow *window)
selected_index = index;
}
- /* Add/Show separator before "View as..." if there are any other viewers in menu. */
- if (window->details->short_list_viewers != NULL) {
- gtk_menu_shell_append (GTK_MENU_SHELL (new_menu), new_gtk_separator ());
- }
-
- /* Add "View as..." extra bonus choice. */
- menu_item = gtk_menu_item_new_with_label (_("View as..."));
- g_signal_connect_object (menu_item, "activate",
- G_CALLBACK (view_as_menu_choose_view_callback), window, 0);
- gtk_widget_show (menu_item);
- gtk_menu_shell_append (GTK_MENU_SHELL (new_menu), menu_item);
-
/* We create and attach a new menu here because adding/removing
* items from existing menu screws up the size of the option menu.
*/
diff --git a/src/nautilus-shell-ui.xml b/src/nautilus-shell-ui.xml
index 9922dbc40..059f9a78c 100644
--- a/src/nautilus-shell-ui.xml
+++ b/src/nautilus-shell-ui.xml
@@ -34,8 +34,6 @@
_tip="Show the contents in less detail"/>
<cmd name="Zoom Normal" _label="Normal Si_ze"
_tip="Show the contents at the normal size"/>
- <cmd name="View as" _label="View as..."
- _tip="Choose a view for the current location, or modify the set of views"/>
</commands>
<keybindings>
@@ -166,8 +164,6 @@
<placeholder name="Extra Viewer" delimit="top"/>
<separator name="Before Short List"/>
<placeholder name="Short List"/>
- <separator name="After Short List"/>
- <menuitem name="View as" _label="_View as..." verb="View as"/>
</placeholder>
</submenu>
diff --git a/src/nautilus-window-manage-views.c b/src/nautilus-window-manage-views.c
index 5decef6b6..cda503480 100644
--- a/src/nautilus-window-manage-views.c
+++ b/src/nautilus-window-manage-views.c
@@ -65,6 +65,7 @@
#include <libnautilus-private/nautilus-monitor.h>
#include <libnautilus-private/nautilus-search-uri.h>
#include <libnautilus-private/nautilus-theme.h>
+#include <libnautilus-private/nautilus-view-query.h>
/* FIXME bugzilla.gnome.org 41243:
* We should use inheritance instead of these special cases
@@ -1628,7 +1629,7 @@ nautilus_window_set_content_view (NautilusWindow *window,
end_location_change (window);
file = nautilus_file_get (window->details->location);
- nautilus_mime_set_default_component_for_file
+ nautilus_view_query_set_default_component_for_file
(file, id->iid);
nautilus_file_unref (file);
diff --git a/src/nautilus-window-menus.c b/src/nautilus-window-menus.c
index 90e6c3c62..721fe8c82 100644
--- a/src/nautilus-window-menus.c
+++ b/src/nautilus-window-menus.c
@@ -475,14 +475,6 @@ view_menu_zoom_normal_callback (BonoboUIComponent *component,
}
static void
-view_menu_view_as_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
-{
- nautilus_window_show_view_as_dialog (NAUTILUS_WINDOW (user_data));
-}
-
-static void
preferences_respond_callback (GtkDialog *dialog,
gint response_id)
{
@@ -676,7 +668,6 @@ nautilus_window_initialize_menus_part_1 (NautilusWindow *window)
BONOBO_UI_VERB ("Zoom In", view_menu_zoom_in_callback),
BONOBO_UI_VERB ("Zoom Out", view_menu_zoom_out_callback),
BONOBO_UI_VERB ("Zoom Normal", view_menu_zoom_normal_callback),
- BONOBO_UI_VERB ("View as", view_menu_view_as_callback),
#ifdef ENABLE_PROFILER
BONOBO_UI_VERB ("Start Profiling", nautilus_profiler_bonobo_ui_start_callback),
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index e4d5bf242..940de6800 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -76,6 +76,7 @@
#include <libnautilus-private/nautilus-mime-actions.h>
#include <libnautilus-private/nautilus-program-choosing.h>
#include <libnautilus-private/nautilus-sidebar-functions.h>
+#include <libnautilus-private/nautilus-view-query.h>
#include <libnautilus/nautilus-bonobo-ui.h>
#include <libnautilus/nautilus-clipboard.h>
#include <libnautilus/nautilus-undo.h>
@@ -997,54 +998,12 @@ nautilus_window_synch_view_as_menus (NautilusWindow *window)
}
static void
-chose_component_callback (NautilusViewIdentifier *identifier, gpointer callback_data)
-{
- NautilusWindow *window;
-
- window = NAUTILUS_WINDOW (callback_data);
- if (identifier != NULL) {
- nautilus_window_set_content_view (window, identifier);
- }
-
- /* FIXME bugzilla.gnome.org 41334: There should be some global
- * way to signal that the file type associations have changed,
- * so that the places that display these lists can react. For
- * now, hardwire this case, which is the most obvious one by
- * far.
- */
- nautilus_window_load_view_as_menus (window);
-}
-
-static void
-cancel_chose_component_callback (NautilusWindow *window)
-{
- if (window->details->viewed_file != NULL) {
- nautilus_cancel_choose_component_for_file (window->details->viewed_file,
- chose_component_callback,
- window);
- }
-}
-
-void
-nautilus_window_show_view_as_dialog (NautilusWindow *window)
-{
- g_return_if_fail (NAUTILUS_IS_WINDOW (window));
-
- /* Call back when the user chose the component. */
- cancel_chose_component_callback (window);
- nautilus_choose_component_for_file (window->details->viewed_file,
- GTK_WINDOW (window),
- chose_component_callback,
- window);
-}
-
-static void
refresh_stored_viewers (NautilusWindow *window)
{
GList *components, *node, *viewers;
NautilusViewIdentifier *identifier;
- components = nautilus_mime_get_short_list_components_for_file (window->details->viewed_file);
+ components = nautilus_view_query_get_components_for_file (window->details->viewed_file);
viewers = NULL;
for (node = components; node != NULL; node = node->next) {
identifier = nautilus_view_identifier_new_from_content_view (node->data);
@@ -1399,7 +1358,6 @@ nautilus_window_set_viewed_file (NautilusWindow *window,
nautilus_file_ref (file);
cancel_view_as_callback (window);
- cancel_chose_component_callback (window);
if (window->details->viewed_file != NULL) {
if (NAUTILUS_IS_SPATIAL_WINDOW (window)) {
diff --git a/test/Makefile.am b/test/Makefile.am
index 739b213c5..6975b921a 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -15,13 +15,9 @@ LDADD =\
$(NULL)
noinst_PROGRAMS =\
- test-nautilus-mime-actions \
- test-nautilus-mime-actions-set \
test-nautilus-wrap-table \
$(NULL)
-test_nautilus_mime_actions_SOURCES = test-nautilus-mime-actions.c test.c
-test_nautilus_mime_actions_set_SOURCES = test-nautilus-mime-actions-set.c test.c
test_nautilus_wrap_table_SOURCES = test-nautilus-wrap-table.c test.c
EXTRA_DIST = \
diff --git a/test/test-nautilus-mime-actions.c b/test/test-nautilus-mime-actions.c
index 1552f04fd..72cf4d680 100644
--- a/test/test-nautilus-mime-actions.c
+++ b/test/test-nautilus-mime-actions.c
@@ -76,48 +76,6 @@ print_application (GnomeVFSMimeApplication *application)
}
}
-static void
-print_component (Bonobo_ServerInfo *component)
-{
- if (component == NULL) {
- puts ("(none)");
- } else {
- printf ("iid: %s\n", component->iid);
- }
-}
-
-static void
-print_action (GnomeVFSMimeAction *action)
-{
- if (action == NULL) {
- puts ("(none)");
- } else {
- if (action->action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION) {
- puts ("type: application");
- print_application (action->action.application);
- } else {
- puts ("type: component");
- print_component (action->action.component);
- }
- }
-}
-
-
-static void
-print_component_list (GList *components)
-{
- GList *p;
-
- if (components == NULL) {
- puts ("(none)");
- } else {
- for (p = components; p != NULL; p = p->next) {
- print_component (p->data);
- puts ("------");
- }
- }
-}
-
static void
print_application_list (GList *applications)
{
@@ -145,12 +103,7 @@ main (int argc, char **argv)
{
const char *uri;
GnomeVFSMimeApplication *default_application;
- Bonobo_ServerInfo *default_component;
- GnomeVFSMimeAction *default_action;
- GList *all_components;
GList *all_applications;
- GList *short_list_components;
- GList *short_list_applications;
NautilusFile *file;
NautilusFileAttributes attributes;
@@ -172,41 +125,16 @@ main (int argc, char **argv)
gtk_main_iteration ();
}
- 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_file (file);
puts("Default Application");
print_application (default_application);
puts ("");
-
- 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_file (file);
- puts("Short List Applications");
- print_application_list (short_list_applications);
- puts ("");
- 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_file (file);
+ all_applications = nautilus_mime_get_applications_for_file (file);
puts("All Applications");
print_application_list (all_applications);
puts ("");
- all_components = nautilus_mime_get_all_components_for_file (file);
- puts("All Components");
- print_component_list (all_components);
- puts ("");
-
return 0;
}