mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-08-25 02:36:07 +00:00
Merged the nautilus-new-mime branch.
2004-07-21 Dave Camp <dave@novell.com> * Merged the nautilus-new-mime branch.
This commit is contained in:
parent
d8062f4a39
commit
eb6a30500d
121
ChangeLog
121
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>
|
2004-07-16 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
* data/Makefile.am:
|
* data/Makefile.am:
|
||||||
|
|
|
@ -153,8 +153,6 @@ libnautilus_private_la_SOURCES = \
|
||||||
nautilus-module.h \
|
nautilus-module.h \
|
||||||
nautilus-monitor.c \
|
nautilus-monitor.c \
|
||||||
nautilus-monitor.h \
|
nautilus-monitor.h \
|
||||||
nautilus-program-chooser.c \
|
|
||||||
nautilus-program-chooser.h \
|
|
||||||
nautilus-program-choosing.c \
|
nautilus-program-choosing.c \
|
||||||
nautilus-program-choosing.h \
|
nautilus-program-choosing.h \
|
||||||
nautilus-recent.h \
|
nautilus-recent.h \
|
||||||
|
@ -189,6 +187,8 @@ libnautilus_private_la_SOURCES = \
|
||||||
nautilus-vfs-file.h \
|
nautilus-vfs-file.h \
|
||||||
nautilus-view-identifier.c \
|
nautilus-view-identifier.c \
|
||||||
nautilus-view-identifier.h \
|
nautilus-view-identifier.h \
|
||||||
|
nautilus-view-query.c \
|
||||||
|
nautilus-view-query.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
$(lib_LTLIBRARIES): $(dependency_static_libs)
|
$(lib_LTLIBRARIES): $(dependency_static_libs)
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -32,57 +32,15 @@
|
||||||
|
|
||||||
NautilusFileAttributes nautilus_mime_actions_get_minimum_file_attributes (void);
|
NautilusFileAttributes nautilus_mime_actions_get_minimum_file_attributes (void);
|
||||||
NautilusFileAttributes nautilus_mime_actions_get_full_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);
|
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_open_with_applications_for_file (NautilusFile *file);
|
||||||
GList * nautilus_mime_get_short_list_components_for_file (NautilusFile *file);
|
GList * nautilus_mime_get_applications_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);
|
|
||||||
gboolean nautilus_mime_has_any_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,
|
GnomeVFSResult nautilus_mime_set_default_application_for_file (NautilusFile *file,
|
||||||
const char *application_id);
|
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 */
|
#endif /* NAUTILUS_MIME_ACTIONS_H */
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
#include "nautilus-program-choosing.h"
|
#include "nautilus-program-choosing.h"
|
||||||
|
|
||||||
#include "nautilus-mime-actions.h"
|
#include "nautilus-mime-actions.h"
|
||||||
#include "nautilus-program-chooser.h"
|
|
||||||
#include "nautilus-global-preferences.h"
|
#include "nautilus-global-preferences.h"
|
||||||
#include "nautilus-icon-factory.h"
|
#include "nautilus-icon-factory.h"
|
||||||
#include <eel/eel-glib-extensions.h>
|
#include <eel/eel-glib-extensions.h>
|
||||||
|
@ -63,22 +62,6 @@
|
||||||
#include <gdk/gdkx.h>
|
#include <gdk/gdkx.h>
|
||||||
#endif
|
#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;
|
extern char **environ;
|
||||||
|
|
||||||
/* Cut and paste from gdkspawn-x11.c */
|
/* 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
|
* application_cannot_open_location
|
||||||
*
|
*
|
||||||
|
@ -562,6 +122,7 @@ application_cannot_open_location (GnomeVFSMimeApplication *application,
|
||||||
const char *uri_scheme,
|
const char *uri_scheme,
|
||||||
GtkWindow *parent_window)
|
GtkWindow *parent_window)
|
||||||
{
|
{
|
||||||
|
#if NEW_MIME_COMPLETE
|
||||||
GtkDialog *message_dialog;
|
GtkDialog *message_dialog;
|
||||||
LaunchParameters *launch_parameters;
|
LaunchParameters *launch_parameters;
|
||||||
char *prompt;
|
char *prompt;
|
||||||
|
@ -625,6 +186,7 @@ application_cannot_open_location (GnomeVFSMimeApplication *application,
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (file_name);
|
g_free (file_name);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_STARTUP_NOTIFICATION
|
#ifdef HAVE_STARTUP_NOTIFICATION
|
||||||
|
@ -872,8 +434,7 @@ void nautilus_launch_show_file (NautilusFile *file,
|
||||||
GtkWindow *parent_window)
|
GtkWindow *parent_window)
|
||||||
{
|
{
|
||||||
GnomeVFSResult result;
|
GnomeVFSResult result;
|
||||||
GnomeVFSMimeAction *action;
|
GnomeVFSMimeApplication *application;
|
||||||
GnomeVFSMimeActionType action_type;
|
|
||||||
GdkScreen *screen;
|
GdkScreen *screen;
|
||||||
char **envp;
|
char **envp;
|
||||||
char *uri, *uri_scheme;
|
char *uri, *uri_scheme;
|
||||||
|
@ -889,6 +450,8 @@ void nautilus_launch_show_file (NautilusFile *file,
|
||||||
startup_notify = FALSE;
|
startup_notify = FALSE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
g_return_if_fail (!nautilus_file_needs_slow_mime_type (file));
|
||||||
|
|
||||||
uri = NULL;
|
uri = NULL;
|
||||||
if (nautilus_file_is_nautilus_link (file)) {
|
if (nautilus_file_is_nautilus_link (file)) {
|
||||||
uri = nautilus_file_get_activation_uri (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);
|
uri = nautilus_file_get_uri (file);
|
||||||
}
|
}
|
||||||
|
|
||||||
action = nautilus_mime_get_default_action_for_file (file);
|
application = nautilus_mime_get_default_application_for_file (file);
|
||||||
|
|
||||||
action_type = (action) ? action->action_type :
|
|
||||||
GNOME_VFS_MIME_ACTION_TYPE_NONE;
|
|
||||||
|
|
||||||
screen = gtk_window_get_screen (parent_window);
|
screen = gtk_window_get_screen (parent_window);
|
||||||
envp = my_gdk_spawn_make_environment_for_screen (screen, NULL);
|
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);
|
sn_error_trap_pop);
|
||||||
|
|
||||||
/* Only initiate notification if application supports it. */
|
/* Only initiate notification if application supports it. */
|
||||||
if (action_type == GNOME_VFS_MIME_ACTION_TYPE_APPLICATION) {
|
if (application) {
|
||||||
startup_notify = gnome_vfs_application_registry_get_bool_value (action->action.application->id,
|
startup_notify = gnome_vfs_application_registry_get_bool_value (application->id,
|
||||||
GNOME_VFS_APPLICATION_REGISTRY_STARTUP_NOTIFY,
|
GNOME_VFS_APPLICATION_REGISTRY_STARTUP_NOTIFY,
|
||||||
NULL);
|
NULL);
|
||||||
|
} else {
|
||||||
|
startup_notify = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (startup_notify == TRUE) {
|
if (startup_notify == TRUE) {
|
||||||
|
@ -954,7 +516,7 @@ void nautilus_launch_show_file (NautilusFile *file,
|
||||||
|
|
||||||
timestamp = slowly_and_stupidly_obtain_timestamp (sn_display);
|
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,
|
sn_launcher_context_set_binary_name (sn_context,
|
||||||
binary_name);
|
binary_name);
|
||||||
|
@ -1016,9 +578,11 @@ void nautilus_launch_show_file (NautilusFile *file,
|
||||||
|
|
||||||
case GNOME_VFS_ERROR_NO_DEFAULT:
|
case GNOME_VFS_ERROR_NO_DEFAULT:
|
||||||
case GNOME_VFS_ERROR_NO_HANDLER:
|
case GNOME_VFS_ERROR_NO_HANDLER:
|
||||||
|
#if NEW_MIME_COMPLETE
|
||||||
nautilus_program_chooser_show_no_choices_message
|
nautilus_program_chooser_show_no_choices_message
|
||||||
(action_type, file, parent_window);
|
(action_type, file, parent_window);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case GNOME_VFS_ERROR_LAUNCH:
|
case GNOME_VFS_ERROR_LAUNCH:
|
||||||
/* TODO: These strings suck pretty badly, but we're in string-freeze,
|
/* TODO: These strings suck pretty badly, but we're in string-freeze,
|
||||||
|
@ -1066,8 +630,11 @@ void nautilus_launch_show_file (NautilusFile *file,
|
||||||
break;
|
break;
|
||||||
case GNOME_VFS_OK:
|
case GNOME_VFS_OK:
|
||||||
default:
|
default:
|
||||||
|
#if NEW_MIME_COMPLETE
|
||||||
nautilus_program_chooser_show_invalid_message
|
nautilus_program_chooser_show_invalid_message
|
||||||
(action_type, file, parent_window);
|
(action_type, file, parent_window);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1082,80 +649,13 @@ void nautilus_launch_show_file (NautilusFile *file,
|
||||||
|
|
||||||
g_free (uri_for_display);
|
g_free (uri_for_display);
|
||||||
|
|
||||||
if (action != NULL)
|
if (application != NULL)
|
||||||
gnome_vfs_mime_action_free (action);
|
gnome_vfs_mime_application_free (application);
|
||||||
|
|
||||||
g_strfreev (envp);
|
g_strfreev (envp);
|
||||||
g_free (uri);
|
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:
|
* nautilus_launch_application:
|
||||||
*
|
*
|
||||||
|
@ -1293,9 +793,11 @@ nautilus_launch_application (GnomeVFSMimeApplication *application,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
#if NEW_MIME_COMPLETE
|
||||||
nautilus_program_chooser_show_invalid_message
|
nautilus_program_chooser_show_invalid_message
|
||||||
(GNOME_VFS_MIME_ACTION_TYPE_APPLICATION, file, parent_window);
|
(GNOME_VFS_MIME_ACTION_TYPE_APPLICATION, file, parent_window);
|
||||||
|
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,23 +39,6 @@ typedef void (*NautilusApplicationChoiceCallback) (GnomeVFSMimeApplication *app
|
||||||
typedef void (*NautilusComponentChoiceCallback) (NautilusViewIdentifier *identifier,
|
typedef void (*NautilusComponentChoiceCallback) (NautilusViewIdentifier *identifier,
|
||||||
gpointer callback_data);
|
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,
|
void nautilus_launch_application (GnomeVFSMimeApplication *application,
|
||||||
NautilusFile *file,
|
NautilusFile *file,
|
||||||
GtkWindow *parent_window);
|
GtkWindow *parent_window);
|
||||||
|
|
|
@ -53,6 +53,7 @@
|
||||||
#include <libnautilus-extension/nautilus-property-page-provider.h>
|
#include <libnautilus-extension/nautilus-property-page-provider.h>
|
||||||
#include <libnautilus-private/nautilus-mime-actions.h>
|
#include <libnautilus-private/nautilus-mime-actions.h>
|
||||||
#include <libnautilus-private/nautilus-view-identifier.h>
|
#include <libnautilus-private/nautilus-view-identifier.h>
|
||||||
|
#include <libnautilus-private/nautilus-view-query.h>
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *id;
|
char *id;
|
||||||
|
@ -340,7 +341,7 @@ fm_bonobo_provider_get_file_items (NautilusMenuProvider *provider,
|
||||||
GList *items;
|
GList *items;
|
||||||
GList *l;
|
GList *l;
|
||||||
|
|
||||||
components = nautilus_mime_get_popup_components_for_files (selection);
|
components = nautilus_view_query_get_popup_components_for_files (selection);
|
||||||
|
|
||||||
items = NULL;
|
items = NULL;
|
||||||
for (l = components; l; l = l->next) {
|
for (l = components; l; l = l->next) {
|
||||||
|
@ -511,7 +512,7 @@ fm_bonobo_provider_get_pages (NautilusPropertyPageProvider *provider,
|
||||||
GList *pages;
|
GList *pages;
|
||||||
|
|
||||||
/* find all the property pages for this file */
|
/* 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);
|
(files);
|
||||||
|
|
||||||
/* filter out property pages that don't support multiple files */
|
/* filter out property pages that don't support multiple files */
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
#include <eel/eel-gnome-extensions.h>
|
#include <eel/eel-gnome-extensions.h>
|
||||||
#include <eel/eel-gtk-extensions.h>
|
#include <eel/eel-gtk-extensions.h>
|
||||||
#include <eel/eel-gtk-macros.h>
|
#include <eel/eel-gtk-macros.h>
|
||||||
|
#include <eel/eel-open-with-dialog.h>
|
||||||
#include <eel/eel-stock-dialogs.h>
|
#include <eel/eel-stock-dialogs.h>
|
||||||
#include <eel/eel-string.h>
|
#include <eel/eel-string.h>
|
||||||
#include <eel/eel-vfs-extensions.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_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_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_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_APPLICATIONS_SUBMENU_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_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_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_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"
|
#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_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_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_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_SCRIPTS_SEPARATOR "/popups/selection/Open Placeholder/Scripts/After Scripts"
|
||||||
#define FM_DIRECTORY_VIEW_POPUP_PATH_OPEN_WITH "/popups/selection/Open Placeholder/Open With"
|
#define FM_DIRECTORY_VIEW_POPUP_PATH_OPEN_WITH "/popups/selection/Open Placeholder/Open With"
|
||||||
|
@ -273,10 +281,14 @@ struct FMDirectoryViewDetails
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
ACTIVATION_ACTION_LAUNCH_DESKTOP_FILE,
|
||||||
|
ACTIVATION_ACTION_LAUNCH_APPLICATION_FROM_COMMAND,
|
||||||
|
ACTIVATION_ACTION_ASK,
|
||||||
ACTIVATION_ACTION_LAUNCH,
|
ACTIVATION_ACTION_LAUNCH,
|
||||||
ACTIVATION_ACTION_LAUNCH_IN_TERMINAL,
|
ACTIVATION_ACTION_LAUNCH_IN_TERMINAL,
|
||||||
ACTIVATION_ACTION_DISPLAY,
|
ACTIVATION_ACTION_OPEN_IN_VIEW,
|
||||||
ACTIVATION_ACTION_DO_NOTHING
|
ACTIVATION_ACTION_OPEN_IN_APPLICATION,
|
||||||
|
ACTIVATION_ACTION_DO_NOTHING,
|
||||||
} ActivationAction;
|
} ActivationAction;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -396,12 +408,6 @@ typedef struct {
|
||||||
FMDirectoryView *directory_view;
|
FMDirectoryView *directory_view;
|
||||||
} ApplicationLaunchParameters;
|
} ApplicationLaunchParameters;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
NautilusViewIdentifier *identifier;
|
|
||||||
char *uri;
|
|
||||||
FMDirectoryView *directory_view;
|
|
||||||
} ViewerLaunchParameters;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
NautilusFile *file;
|
NautilusFile *file;
|
||||||
FMDirectoryView *directory_view;
|
FMDirectoryView *directory_view;
|
||||||
|
@ -439,30 +445,6 @@ application_launch_parameters_free (ApplicationLaunchParameters *parameters)
|
||||||
g_free (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 *
|
static ScriptLaunchParameters *
|
||||||
script_launch_parameters_new (NautilusFile *file,
|
script_launch_parameters_new (NautilusFile *file,
|
||||||
|
@ -665,6 +647,7 @@ fm_directory_view_launch_application (GnomeVFSMimeApplication *application,
|
||||||
g_free (uri);
|
g_free (uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if NEW_MIME_COMPLETE
|
||||||
static void
|
static void
|
||||||
fm_directory_view_chose_application_callback (GnomeVFSMimeApplication *application,
|
fm_directory_view_chose_application_callback (GnomeVFSMimeApplication *application,
|
||||||
gpointer callback_data)
|
gpointer callback_data)
|
||||||
|
@ -685,6 +668,7 @@ fm_directory_view_chose_application_callback (GnomeVFSMimeApplication *applicati
|
||||||
|
|
||||||
application_launch_parameters_free (launch_parameters);
|
application_launch_parameters_free (launch_parameters);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
open_location (FMDirectoryView *directory_view,
|
open_location (FMDirectoryView *directory_view,
|
||||||
|
@ -713,98 +697,67 @@ open_location (FMDirectoryView *directory_view,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
switch_location_and_view (NautilusViewIdentifier *identifier,
|
application_selected_cb (EelOpenWithDialog *dialog,
|
||||||
const char *new_uri,
|
GnomeVFSMimeApplication *app,
|
||||||
FMDirectoryView *directory_view)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
FMDirectoryView *view;
|
||||||
NautilusFile *file;
|
NautilusFile *file;
|
||||||
|
|
||||||
g_assert (FM_IS_DIRECTORY_VIEW (directory_view));
|
view = FM_DIRECTORY_VIEW (user_data);
|
||||||
g_assert (identifier != NULL);
|
|
||||||
g_assert (new_uri != NULL);
|
file = g_object_get_data (G_OBJECT (dialog), "directory-view:file");
|
||||||
|
|
||||||
/* User has explicitly chosen a viewer other than the default, so
|
fm_directory_view_launch_application (app, file, view);
|
||||||
* 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
viewer_launch_parameters_free (launch_parameters);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
choose_program (FMDirectoryView *view,
|
choose_program (FMDirectoryView *view,
|
||||||
NautilusFile *file,
|
NautilusFile *file)
|
||||||
GnomeVFSMimeActionType type)
|
|
||||||
{
|
{
|
||||||
|
GtkWidget *dialog;
|
||||||
char *uri;
|
char *uri;
|
||||||
|
char *mime_type;
|
||||||
|
|
||||||
g_assert (FM_IS_DIRECTORY_VIEW (view));
|
g_assert (FM_IS_DIRECTORY_VIEW (view));
|
||||||
g_assert (NAUTILUS_IS_FILE (file));
|
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);
|
nautilus_file_ref (file);
|
||||||
uri = nautilus_file_get_uri (file);
|
uri = nautilus_file_get_uri (file);
|
||||||
|
mime_type = nautilus_file_get_mime_type (file);
|
||||||
|
|
||||||
if (type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT) {
|
dialog = eel_open_with_dialog_new (uri, mime_type);
|
||||||
nautilus_choose_component_for_file
|
g_object_set_data_full (G_OBJECT (dialog),
|
||||||
(file,
|
"directory-view:file",
|
||||||
fm_directory_view_get_containing_window (view),
|
g_object_ref (file),
|
||||||
fm_directory_view_chose_component_callback,
|
(GDestroyNotify)g_object_unref);
|
||||||
viewer_launch_parameters_new
|
|
||||||
(NULL, uri, view));
|
gtk_window_set_screen (GTK_WINDOW (dialog),
|
||||||
} else {
|
gtk_widget_get_screen (GTK_WIDGET (view)));
|
||||||
nautilus_choose_application_for_file
|
gtk_widget_show (dialog);
|
||||||
(file,
|
|
||||||
fm_directory_view_get_containing_window (view),
|
|
||||||
fm_directory_view_chose_application_callback,
|
|
||||||
application_launch_parameters_new
|
|
||||||
(NULL, file, view));
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
nautilus_file_unref (file);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
open_with_other_program (FMDirectoryView *view, GnomeVFSMimeActionType action_type)
|
open_with_other_program (FMDirectoryView *view)
|
||||||
{
|
{
|
||||||
GList *selection;
|
GList *selection;
|
||||||
|
|
||||||
g_assert (FM_IS_DIRECTORY_VIEW (view));
|
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);
|
selection = fm_directory_view_get_selection (view);
|
||||||
|
|
||||||
if (selection_contains_one_item_in_menu_callback (view, selection)) {
|
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);
|
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));
|
g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
|
||||||
|
|
||||||
open_with_other_program (FM_DIRECTORY_VIEW (callback_data),
|
open_with_other_program (FM_DIRECTORY_VIEW (callback_data));
|
||||||
GNOME_VFS_MIME_ACTION_TYPE_APPLICATION);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -3720,48 +3672,186 @@ static void
|
||||||
add_application_to_bonobo_menu (FMDirectoryView *directory_view,
|
add_application_to_bonobo_menu (FMDirectoryView *directory_view,
|
||||||
GnomeVFSMimeApplication *application,
|
GnomeVFSMimeApplication *application,
|
||||||
NautilusFile *file,
|
NautilusFile *file,
|
||||||
int index)
|
int index,
|
||||||
|
const char *menu_placeholder,
|
||||||
|
const char *popup_placeholder)
|
||||||
{
|
{
|
||||||
ApplicationLaunchParameters *launch_parameters;
|
ApplicationLaunchParameters *launch_parameters;
|
||||||
char *tip;
|
char *tip;
|
||||||
|
char *label;
|
||||||
|
|
||||||
launch_parameters = application_launch_parameters_new
|
launch_parameters = application_launch_parameters_new
|
||||||
(application, file, directory_view);
|
(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);
|
tip = g_strdup_printf (_("Use \"%s\" to open the selected item"), application->name);
|
||||||
|
|
||||||
add_numbered_menu_item (directory_view->details->ui,
|
add_numbered_menu_item (directory_view->details->ui,
|
||||||
FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_PLACEHOLDER,
|
menu_placeholder,
|
||||||
application->name,
|
label,
|
||||||
tip,
|
tip,
|
||||||
index,
|
index,
|
||||||
NULL,
|
NULL,
|
||||||
bonobo_launch_application_callback,
|
bonobo_launch_application_callback,
|
||||||
launch_parameters,
|
launch_parameters,
|
||||||
(GDestroyNotify) application_launch_parameters_free);
|
(GDestroyNotify) application_launch_parameters_free);
|
||||||
|
|
||||||
|
|
||||||
/* Use same launch parameters and no DestroyNotify for popup item, which has same
|
/* 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.
|
* lifetime as the item in the File menu in the menu bar.
|
||||||
*/
|
*/
|
||||||
add_numbered_menu_item (directory_view->details->ui,
|
add_numbered_menu_item (directory_view->details->ui,
|
||||||
FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_PLACEHOLDER,
|
popup_placeholder,
|
||||||
application->name,
|
label,
|
||||||
tip,
|
tip,
|
||||||
index,
|
index,
|
||||||
NULL,
|
NULL,
|
||||||
bonobo_launch_application_callback,
|
bonobo_launch_application_callback,
|
||||||
launch_parameters,
|
launch_parameters,
|
||||||
NULL);
|
NULL);
|
||||||
|
g_free (label);
|
||||||
g_free (tip);
|
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
|
static void
|
||||||
reset_bonobo_open_with_menu (FMDirectoryView *view, GList *selection)
|
reset_bonobo_open_with_menu (FMDirectoryView *view, GList *selection)
|
||||||
{
|
{
|
||||||
GList *applications, *node;
|
GList *applications, *node;
|
||||||
NautilusFile *file;
|
NautilusFile *file;
|
||||||
gboolean sensitive;
|
gboolean submenu_visible;
|
||||||
gboolean any_applications;
|
|
||||||
gboolean any_viewers;
|
|
||||||
char *uri;
|
char *uri;
|
||||||
|
int num_applications;
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
/* Clear any previous inserted items in the applications and viewers placeholders */
|
/* 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);
|
(view->details->ui, FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_PLACEHOLDER);
|
||||||
nautilus_bonobo_remove_menu_items_and_commands
|
nautilus_bonobo_remove_menu_items_and_commands
|
||||||
(view->details->ui, FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_PLACEHOLDER);
|
(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. */
|
/* This menu is only displayed when there's one selected item. */
|
||||||
if (!eel_g_list_exactly_one_item (selection)) {
|
if (!eel_g_list_exactly_one_item (selection)) {
|
||||||
sensitive = FALSE;
|
submenu_visible = FALSE;
|
||||||
} else {
|
} else {
|
||||||
sensitive = TRUE;
|
GnomeVFSMimeApplication *default_app;
|
||||||
any_applications = FALSE;
|
ActivationAction action;
|
||||||
any_viewers = FALSE;
|
|
||||||
|
|
||||||
file = NAUTILUS_FILE (selection->data);
|
file = NAUTILUS_FILE (selection->data);
|
||||||
|
|
||||||
uri = nautilus_file_get_uri (file);
|
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));
|
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++) {
|
for (node = applications, index = 0; node != NULL; node = node->next, index++) {
|
||||||
any_applications = TRUE;
|
GnomeVFSMimeApplication *application;
|
||||||
add_application_to_bonobo_menu (view, node->data, file, index);
|
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);
|
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);
|
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.
|
* here because these are submenu titles, not items with verbs.
|
||||||
*/
|
*/
|
||||||
nautilus_bonobo_set_sensitive (view->details->ui,
|
nautilus_bonobo_set_hidden (view->details->ui,
|
||||||
FM_DIRECTORY_VIEW_MENU_PATH_OPEN_WITH,
|
FM_DIRECTORY_VIEW_MENU_PATH_OPEN_WITH,
|
||||||
sensitive);
|
!submenu_visible);
|
||||||
nautilus_bonobo_set_sensitive (view->details->ui,
|
nautilus_bonobo_set_hidden (view->details->ui,
|
||||||
FM_DIRECTORY_VIEW_POPUP_PATH_OPEN_WITH,
|
FM_DIRECTORY_VIEW_POPUP_PATH_OPEN_WITH,
|
||||||
sensitive);
|
!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 *
|
static GList *
|
||||||
|
@ -5727,6 +5861,8 @@ real_update_menus (FMDirectoryView *view)
|
||||||
gboolean show_separate_delete_command;
|
gboolean show_separate_delete_command;
|
||||||
gboolean vfolder_directory;
|
gboolean vfolder_directory;
|
||||||
gboolean show_open_alternate;
|
gboolean show_open_alternate;
|
||||||
|
gboolean can_open;
|
||||||
|
ActivationAction action;
|
||||||
EelBackground *background;
|
EelBackground *background;
|
||||||
|
|
||||||
if (view->details->ui == NULL) {
|
if (view->details->ui == NULL) {
|
||||||
|
@ -5766,6 +5902,39 @@ real_update_menus (FMDirectoryView *view)
|
||||||
FM_DIRECTORY_VIEW_COMMAND_OPEN,
|
FM_DIRECTORY_VIEW_COMMAND_OPEN,
|
||||||
selection_count != 0);
|
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) {
|
if (nautilus_view_get_window_type (view->details->nautilus_view) == Nautilus_WINDOW_NAVIGATION) {
|
||||||
show_open_alternate = TRUE;
|
show_open_alternate = TRUE;
|
||||||
label_with_underscore = g_strdup_printf (ngettext("Open in New Window",
|
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,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nautilus_file_call_when_ready
|
||||||
|
(file,
|
||||||
|
NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
}
|
}
|
||||||
nautilus_file_list_free (selection);
|
nautilus_file_list_free (selection);
|
||||||
}
|
}
|
||||||
|
@ -6118,7 +6293,8 @@ file_is_launchable (NautilusFile *file)
|
||||||
return type_can_be_executable
|
return type_can_be_executable
|
||||||
&& nautilus_file_can_get_permissions (file)
|
&& nautilus_file_can_get_permissions (file)
|
||||||
&& nautilus_file_can_execute (file)
|
&& nautilus_file_can_execute (file)
|
||||||
&& nautilus_file_is_executable (file);
|
&& nautilus_file_is_executable (file)
|
||||||
|
&& !nautilus_file_is_directory (file);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -6171,80 +6347,6 @@ report_broken_symbolic_link (FMDirectoryView *view, NautilusFile *file)
|
||||||
g_free (detail);
|
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
|
static void
|
||||||
activate_weak_notify (gpointer user_data,
|
activate_weak_notify (gpointer user_data,
|
||||||
GObject *object)
|
GObject *object)
|
||||||
|
@ -6262,6 +6364,7 @@ stop_activate (ActivateParameters *parameters)
|
||||||
parameters);
|
parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
activate_callback (NautilusFile *file, gpointer callback_data)
|
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 *orig_uri, *uri, *file_uri;
|
||||||
char *executable_path, *quoted_path, *name;
|
char *executable_path, *quoted_path, *name;
|
||||||
char *old_working_dir;
|
char *old_working_dir;
|
||||||
GnomeVFSMimeActionType action_type;
|
|
||||||
ActivationAction action;
|
ActivationAction action;
|
||||||
GdkScreen *screen;
|
GdkScreen *screen;
|
||||||
|
|
||||||
|
@ -6289,82 +6391,73 @@ activate_callback (NautilusFile *file, gpointer callback_data)
|
||||||
|
|
||||||
orig_uri = uri = nautilus_file_get_activation_uri (file);
|
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));
|
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);
|
file_uri = nautilus_file_get_uri (file);
|
||||||
nautilus_launch_desktop_file (
|
nautilus_launch_desktop_file (
|
||||||
screen, file_uri, NULL,
|
screen, file_uri, NULL,
|
||||||
fm_directory_view_get_containing_window (view));
|
fm_directory_view_get_containing_window (view));
|
||||||
g_free (file_uri);
|
g_free (file_uri);
|
||||||
action = ACTIVATION_ACTION_DO_NOTHING;
|
break;
|
||||||
} else if (eel_str_has_prefix (uri, NAUTILUS_COMMAND_SPECIFIER)) {
|
case ACTIVATION_ACTION_LAUNCH_APPLICATION_FROM_COMMAND :
|
||||||
uri += strlen (NAUTILUS_COMMAND_SPECIFIER);
|
uri += strlen (NAUTILUS_COMMAND_SPECIFIER);
|
||||||
nautilus_launch_application_from_command (screen, NULL, uri, NULL, FALSE);
|
nautilus_launch_application_from_command (screen, NULL, uri, NULL, FALSE);
|
||||||
action = ACTIVATION_ACTION_DO_NOTHING;
|
break;
|
||||||
}
|
case ACTIVATION_ACTION_LAUNCH :
|
||||||
|
case ACTIVATION_ACTION_LAUNCH_IN_TERMINAL :
|
||||||
if (action != ACTIVATION_ACTION_DO_NOTHING && file_is_launchable (file)) {
|
|
||||||
|
|
||||||
old_working_dir = change_to_view_directory (view);
|
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);
|
executable_path = gnome_vfs_get_local_path_from_uri (uri);
|
||||||
|
quoted_path = g_shell_quote (executable_path);
|
||||||
/* Non-local executables don't get launched. They act like non-executables. */
|
name = nautilus_file_get_name (file);
|
||||||
if (executable_path == NULL) {
|
nautilus_launch_application_from_command
|
||||||
action = ACTIVATION_ACTION_DISPLAY;
|
(screen, name, quoted_path, NULL,
|
||||||
} else if (nautilus_file_contains_text (file)) {
|
(action == ACTIVATION_ACTION_LAUNCH_IN_TERMINAL) /* use terminal */ );
|
||||||
/* Special case for executable text files, since it might be
|
g_free (name);
|
||||||
* dangerous & unexpected to launch these.
|
g_free (quoted_path);
|
||||||
*/
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
chdir (old_working_dir);
|
chdir (old_working_dir);
|
||||||
g_free (old_working_dir);
|
g_free (old_working_dir);
|
||||||
g_free (executable_path);
|
g_free (executable_path);
|
||||||
}
|
|
||||||
|
break;
|
||||||
if (action == ACTIVATION_ACTION_DISPLAY) {
|
case ACTIVATION_ACTION_OPEN_IN_VIEW :
|
||||||
action_type = nautilus_mime_get_default_action_type_for_file (file);
|
open_location (view, uri, parameters->mode, parameters->flags);
|
||||||
if (action_type == GNOME_VFS_MIME_ACTION_TYPE_COMPONENT &&
|
break;
|
||||||
nautilus_mime_has_any_components_for_file (file) &&
|
case ACTIVATION_ACTION_OPEN_IN_APPLICATION :
|
||||||
can_use_component_for_file (view, file)) {
|
nautilus_launch_show_file
|
||||||
open_location (view, uri, parameters->mode, parameters->flags);
|
(file, fm_directory_view_get_containing_window (view));
|
||||||
} else {
|
|
||||||
nautilus_launch_show_file
|
if ((parameters->flags & Nautilus_ViewFrame_OPEN_FLAG_CLOSE_BEHIND) != 0) {
|
||||||
(file, fm_directory_view_get_containing_window (view));
|
if (nautilus_view_get_window_type (view->details->nautilus_view) == Nautilus_WINDOW_SPATIAL) {
|
||||||
|
nautilus_view_close_window (view->details->nautilus_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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 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);
|
nautilus_file_unref (file);
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include <eel/eel-gnome-extensions.h>
|
#include <eel/eel-gnome-extensions.h>
|
||||||
#include <eel/eel-gtk-extensions.h>
|
#include <eel/eel-gtk-extensions.h>
|
||||||
#include <eel/eel-labeled-image.h>
|
#include <eel/eel-labeled-image.h>
|
||||||
|
#include <eel/eel-mime-application-chooser.h>
|
||||||
#include <eel/eel-stock-dialogs.h>
|
#include <eel/eel-stock-dialogs.h>
|
||||||
#include <eel/eel-string.h>
|
#include <eel/eel-string.h>
|
||||||
#include <eel/eel-vfs-extensions.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 *
|
static FMPropertiesWindow *
|
||||||
create_properties_window (StartupData *startup_data)
|
create_properties_window (StartupData *startup_data)
|
||||||
{
|
{
|
||||||
|
@ -3362,6 +3390,10 @@ create_properties_window (StartupData *startup_data)
|
||||||
create_permissions_page (window);
|
create_permissions_page (window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (should_show_open_with (window)) {
|
||||||
|
create_open_with_page (window);
|
||||||
|
}
|
||||||
|
|
||||||
/* append pages from available views */
|
/* append pages from available views */
|
||||||
append_extension_pages (window);
|
append_extension_pages (window);
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
_label="_Open Scripts Folder"
|
_label="_Open Scripts Folder"
|
||||||
_tip="Show the folder containing the scripts that appear in this menu"/>
|
_tip="Show the folder containing the scripts that appear in this menu"/>
|
||||||
<cmd name="OtherApplication"
|
<cmd name="OtherApplication"
|
||||||
_label="Other _Application..."
|
_label="Open with Other _Application..."
|
||||||
_tip="Choose another application with which to open the selected item"/>
|
_tip="Choose another application with which to open the selected item"/>
|
||||||
<cmd name="Show Hidden Files"
|
<cmd name="Show Hidden Files"
|
||||||
_label="Show _Hidden Files"
|
_label="Show _Hidden Files"
|
||||||
|
@ -130,13 +130,19 @@
|
||||||
<menuitem name="OpenAlternate"
|
<menuitem name="OpenAlternate"
|
||||||
accel="*Control**Shift*o"
|
accel="*Control**Shift*o"
|
||||||
verb="OpenAlternate"/>
|
verb="OpenAlternate"/>
|
||||||
|
<placeholder name="Applications Placeholder" delimit="top"/>
|
||||||
<submenu name="Open With"
|
<submenu name="Open With"
|
||||||
_label="Open Wit_h"
|
_label="Open Wit_h"
|
||||||
_tip="Choose a program with which to open the selected item">
|
_tip="Choose a program with which to open the selected item">
|
||||||
<placeholder name="Applications Placeholder" delimit="none"/>
|
<placeholder name="Applications Placeholder" delimit="none"/>
|
||||||
|
<separator/>
|
||||||
<menuitem name="OtherApplication"
|
<menuitem name="OtherApplication"
|
||||||
verb="OtherApplication"/>
|
verb="OtherApplication"/>
|
||||||
</submenu>
|
</submenu>
|
||||||
|
<placeholder name="OtherApplicationPlaceholder">
|
||||||
|
<menuitem name="OtherApplication"
|
||||||
|
verb="OtherApplication"/>
|
||||||
|
</placeholder>
|
||||||
<menuitem name="Edit Launcher"
|
<menuitem name="Edit Launcher"
|
||||||
verb="Edit Launcher"/>
|
verb="Edit Launcher"/>
|
||||||
<submenu name="Scripts"
|
<submenu name="Scripts"
|
||||||
|
@ -267,13 +273,19 @@
|
||||||
verb="Open"/>
|
verb="Open"/>
|
||||||
<menuitem name="OpenAlternate"
|
<menuitem name="OpenAlternate"
|
||||||
verb="OpenAlternate"/>
|
verb="OpenAlternate"/>
|
||||||
|
<placeholder name="Applications Placeholder" delimit="top"/>
|
||||||
<submenu name="Open With"
|
<submenu name="Open With"
|
||||||
_label="Open Wit_h"
|
_label="Open Wit_h"
|
||||||
tearoff="0"
|
tearoff="0"
|
||||||
_tip="Choose a program with which to open the selected item">
|
_tip="Choose a program with which to open the selected item">
|
||||||
<placeholder name="Applications Placeholder" delimit="none"/>
|
<placeholder name="Applications Placeholder" delimit="none"/>
|
||||||
|
<separator/>
|
||||||
<menuitem name="OtherApplication" verb="OtherApplication"/>
|
<menuitem name="OtherApplication" verb="OtherApplication"/>
|
||||||
</submenu>
|
</submenu>
|
||||||
|
<placeholder name="OtherApplicationPlaceholder">
|
||||||
|
<menuitem name="OtherApplication"
|
||||||
|
verb="OtherApplication"/>
|
||||||
|
</placeholder>
|
||||||
<menuitem name="Edit Launcher"
|
<menuitem name="Edit Launcher"
|
||||||
verb="Edit Launcher"/>
|
verb="Edit Launcher"/>
|
||||||
<submenu name="Scripts"
|
<submenu name="Scripts"
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#include <libgnomevfs/gnome-vfs-result.h>
|
#include <libgnomevfs/gnome-vfs-result.h>
|
||||||
#include <libnautilus-private/nautilus-file.h>
|
#include <libnautilus-private/nautilus-file.h>
|
||||||
#include <libnautilus-private/nautilus-mime-actions.h>
|
#include <libnautilus-private/nautilus-mime-actions.h>
|
||||||
|
#include <libnautilus-private/nautilus-view-query.h>
|
||||||
#include <libnautilus-private/nautilus-view-identifier.h>
|
#include <libnautilus-private/nautilus-view-identifier.h>
|
||||||
|
|
||||||
struct NautilusDetermineViewHandle {
|
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_NOT_SUPPORTED
|
||||||
|| vfs_result_code == GNOME_VFS_ERROR_INVALID_URI) {
|
|| vfs_result_code == GNOME_VFS_ERROR_INVALID_URI) {
|
||||||
if (handle->fallback) {
|
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 {
|
} 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) {
|
if (default_component != NULL) {
|
||||||
default_id = nautilus_view_identifier_new_from_content_view (default_component);
|
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 (vfs_result_code == GNOME_VFS_OK && default_id == NULL) {
|
||||||
/* If the complete list is non-empty, the default shouldn't have been 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;
|
result_code = NAUTILUS_DETERMINE_VIEW_NO_HANDLER_FOR_TYPE;
|
||||||
} else {
|
} else {
|
||||||
result_code = get_view_result_from_gnome_vfs_result (vfs_result_code);
|
result_code = get_view_result_from_gnome_vfs_result (vfs_result_code);
|
||||||
|
|
|
@ -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"));
|
information_panel = NAUTILUS_INFORMATION_PANEL (g_object_get_data (G_OBJECT (button), "user_data"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if NEW_MIME_COMPLETE
|
||||||
static void
|
static void
|
||||||
nautilus_information_panel_chose_application_callback (GnomeVFSMimeApplication *application,
|
nautilus_information_panel_chose_application_callback (GnomeVFSMimeApplication *application,
|
||||||
gpointer callback_data)
|
gpointer callback_data)
|
||||||
|
@ -846,10 +847,12 @@ nautilus_information_panel_chose_application_callback (GnomeVFSMimeApplication *
|
||||||
nautilus_information_panel_get_window (information_panel));
|
nautilus_information_panel_get_window (information_panel));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
open_with_callback (GtkWidget *button, gpointer ignored)
|
open_with_callback (GtkWidget *button, gpointer ignored)
|
||||||
{
|
{
|
||||||
|
#if NEW_MIME_COMPLETE
|
||||||
NautilusInformationPanel *information_panel;
|
NautilusInformationPanel *information_panel;
|
||||||
|
|
||||||
information_panel = NAUTILUS_INFORMATION_PANEL (g_object_get_data (G_OBJECT (button), "user_data"));
|
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))),
|
GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (information_panel))),
|
||||||
nautilus_information_panel_chose_application_callback,
|
nautilus_information_panel_chose_application_callback,
|
||||||
information_panel);
|
information_panel);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* utility routine that allocates the command buttons from the command list */
|
/* 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)) {
|
if (nautilus_mime_has_any_applications_for_file (information_panel->details->file)) {
|
||||||
short_application_list =
|
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);
|
add_command_buttons (information_panel, short_application_list);
|
||||||
gnome_vfs_mime_application_list_free (short_application_list);
|
gnome_vfs_mime_application_list_free (short_application_list);
|
||||||
}
|
}
|
||||||
|
|
|
@ -619,41 +619,6 @@ create_view_as_menu_item (NautilusWindow *window,
|
||||||
return menu_item;
|
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
|
static void
|
||||||
load_view_as_menu (NautilusWindow *window)
|
load_view_as_menu (NautilusWindow *window)
|
||||||
{
|
{
|
||||||
|
@ -692,18 +657,6 @@ load_view_as_menu (NautilusWindow *window)
|
||||||
selected_index = index;
|
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
|
/* We create and attach a new menu here because adding/removing
|
||||||
* items from existing menu screws up the size of the option menu.
|
* items from existing menu screws up the size of the option menu.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -34,8 +34,6 @@
|
||||||
_tip="Show the contents in less detail"/>
|
_tip="Show the contents in less detail"/>
|
||||||
<cmd name="Zoom Normal" _label="Normal Si_ze"
|
<cmd name="Zoom Normal" _label="Normal Si_ze"
|
||||||
_tip="Show the contents at the normal size"/>
|
_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>
|
</commands>
|
||||||
|
|
||||||
<keybindings>
|
<keybindings>
|
||||||
|
@ -166,8 +164,6 @@
|
||||||
<placeholder name="Extra Viewer" delimit="top"/>
|
<placeholder name="Extra Viewer" delimit="top"/>
|
||||||
<separator name="Before Short List"/>
|
<separator name="Before Short List"/>
|
||||||
<placeholder name="Short List"/>
|
<placeholder name="Short List"/>
|
||||||
<separator name="After Short List"/>
|
|
||||||
<menuitem name="View as" _label="_View as..." verb="View as"/>
|
|
||||||
</placeholder>
|
</placeholder>
|
||||||
</submenu>
|
</submenu>
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,7 @@
|
||||||
#include <libnautilus-private/nautilus-monitor.h>
|
#include <libnautilus-private/nautilus-monitor.h>
|
||||||
#include <libnautilus-private/nautilus-search-uri.h>
|
#include <libnautilus-private/nautilus-search-uri.h>
|
||||||
#include <libnautilus-private/nautilus-theme.h>
|
#include <libnautilus-private/nautilus-theme.h>
|
||||||
|
#include <libnautilus-private/nautilus-view-query.h>
|
||||||
|
|
||||||
/* FIXME bugzilla.gnome.org 41243:
|
/* FIXME bugzilla.gnome.org 41243:
|
||||||
* We should use inheritance instead of these special cases
|
* We should use inheritance instead of these special cases
|
||||||
|
@ -1628,7 +1629,7 @@ nautilus_window_set_content_view (NautilusWindow *window,
|
||||||
end_location_change (window);
|
end_location_change (window);
|
||||||
|
|
||||||
file = nautilus_file_get (window->details->location);
|
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);
|
(file, id->iid);
|
||||||
nautilus_file_unref (file);
|
nautilus_file_unref (file);
|
||||||
|
|
||||||
|
|
|
@ -474,14 +474,6 @@ view_menu_zoom_normal_callback (BonoboUIComponent *component,
|
||||||
nautilus_window_zoom_to_level (NAUTILUS_WINDOW (user_data), 1.0);
|
nautilus_window_zoom_to_level (NAUTILUS_WINDOW (user_data), 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
static void
|
||||||
preferences_respond_callback (GtkDialog *dialog,
|
preferences_respond_callback (GtkDialog *dialog,
|
||||||
gint response_id)
|
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 In", view_menu_zoom_in_callback),
|
||||||
BONOBO_UI_VERB ("Zoom Out", view_menu_zoom_out_callback),
|
BONOBO_UI_VERB ("Zoom Out", view_menu_zoom_out_callback),
|
||||||
BONOBO_UI_VERB ("Zoom Normal", view_menu_zoom_normal_callback),
|
BONOBO_UI_VERB ("Zoom Normal", view_menu_zoom_normal_callback),
|
||||||
BONOBO_UI_VERB ("View as", view_menu_view_as_callback),
|
|
||||||
|
|
||||||
#ifdef ENABLE_PROFILER
|
#ifdef ENABLE_PROFILER
|
||||||
BONOBO_UI_VERB ("Start Profiling", nautilus_profiler_bonobo_ui_start_callback),
|
BONOBO_UI_VERB ("Start Profiling", nautilus_profiler_bonobo_ui_start_callback),
|
||||||
|
|
|
@ -76,6 +76,7 @@
|
||||||
#include <libnautilus-private/nautilus-mime-actions.h>
|
#include <libnautilus-private/nautilus-mime-actions.h>
|
||||||
#include <libnautilus-private/nautilus-program-choosing.h>
|
#include <libnautilus-private/nautilus-program-choosing.h>
|
||||||
#include <libnautilus-private/nautilus-sidebar-functions.h>
|
#include <libnautilus-private/nautilus-sidebar-functions.h>
|
||||||
|
#include <libnautilus-private/nautilus-view-query.h>
|
||||||
#include <libnautilus/nautilus-bonobo-ui.h>
|
#include <libnautilus/nautilus-bonobo-ui.h>
|
||||||
#include <libnautilus/nautilus-clipboard.h>
|
#include <libnautilus/nautilus-clipboard.h>
|
||||||
#include <libnautilus/nautilus-undo.h>
|
#include <libnautilus/nautilus-undo.h>
|
||||||
|
@ -996,55 +997,13 @@ nautilus_window_synch_view_as_menus (NautilusWindow *window)
|
||||||
g_free (verb_name);
|
g_free (verb_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
static void
|
||||||
refresh_stored_viewers (NautilusWindow *window)
|
refresh_stored_viewers (NautilusWindow *window)
|
||||||
{
|
{
|
||||||
GList *components, *node, *viewers;
|
GList *components, *node, *viewers;
|
||||||
NautilusViewIdentifier *identifier;
|
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;
|
viewers = NULL;
|
||||||
for (node = components; node != NULL; node = node->next) {
|
for (node = components; node != NULL; node = node->next) {
|
||||||
identifier = nautilus_view_identifier_new_from_content_view (node->data);
|
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);
|
nautilus_file_ref (file);
|
||||||
|
|
||||||
cancel_view_as_callback (window);
|
cancel_view_as_callback (window);
|
||||||
cancel_chose_component_callback (window);
|
|
||||||
|
|
||||||
if (window->details->viewed_file != NULL) {
|
if (window->details->viewed_file != NULL) {
|
||||||
if (NAUTILUS_IS_SPATIAL_WINDOW (window)) {
|
if (NAUTILUS_IS_SPATIAL_WINDOW (window)) {
|
||||||
|
|
|
@ -15,13 +15,9 @@ LDADD =\
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
noinst_PROGRAMS =\
|
noinst_PROGRAMS =\
|
||||||
test-nautilus-mime-actions \
|
|
||||||
test-nautilus-mime-actions-set \
|
|
||||||
test-nautilus-wrap-table \
|
test-nautilus-wrap-table \
|
||||||
$(NULL)
|
$(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
|
test_nautilus_wrap_table_SOURCES = test-nautilus-wrap-table.c test.c
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
|
|
|
@ -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
|
static void
|
||||||
print_application_list (GList *applications)
|
print_application_list (GList *applications)
|
||||||
{
|
{
|
||||||
|
@ -145,12 +103,7 @@ main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
const char *uri;
|
const char *uri;
|
||||||
GnomeVFSMimeApplication *default_application;
|
GnomeVFSMimeApplication *default_application;
|
||||||
Bonobo_ServerInfo *default_component;
|
|
||||||
GnomeVFSMimeAction *default_action;
|
|
||||||
GList *all_components;
|
|
||||||
GList *all_applications;
|
GList *all_applications;
|
||||||
GList *short_list_components;
|
|
||||||
GList *short_list_applications;
|
|
||||||
NautilusFile *file;
|
NautilusFile *file;
|
||||||
NautilusFileAttributes attributes;
|
NautilusFileAttributes attributes;
|
||||||
|
|
||||||
|
@ -172,41 +125,16 @@ main (int argc, char **argv)
|
||||||
gtk_main_iteration ();
|
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);
|
default_application = nautilus_mime_get_default_application_for_file (file);
|
||||||
puts("Default Application");
|
puts("Default Application");
|
||||||
print_application (default_application);
|
print_application (default_application);
|
||||||
puts ("");
|
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);
|
all_applications = nautilus_mime_get_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);
|
|
||||||
puts("All Applications");
|
puts("All Applications");
|
||||||
print_application_list (all_applications);
|
print_application_list (all_applications);
|
||||||
puts ("");
|
puts ("");
|
||||||
|
|
||||||
all_components = nautilus_mime_get_all_components_for_file (file);
|
|
||||||
puts("All Components");
|
|
||||||
print_component_list (all_components);
|
|
||||||
puts ("");
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue