diff options
author | Dave Camp <dave@ximian.com> | 2003-12-10 20:37:55 +0000 |
---|---|---|
committer | Dave Camp <campd@src.gnome.org> | 2003-12-10 20:37:55 +0000 |
commit | bd6e1847ced6fc5f041f5a05c108290a450c8c05 (patch) | |
tree | 3b3017febacba094927981c8e339e4844b4d2f96 | |
parent | a8db4ea392288ce79fa521987d48b1ed70c9793e (diff) | |
download | nautilus-bd6e1847ced6fc5f041f5a05c108290a450c8c05.tar.gz |
2003-11-28 Dave Camp <dave@ximian.com>
* libnautilus-extension/Makefile.am:
* libnautilus-extension/nautilus-extension-i18n.h: New file.
* libnautilus-extension/nautilus-info-provider.h:
* libnautilus-extension/nautilus-file-info.h:
* libnautilus-extension/nautilus-file-info.c:
(nautilus_file_info_list_copy), (nautilus_file_info_list_free): New
functions.
* libnautilus-extension/nautilus-menu-item.c:
* libnautilus-extension/nautilus-menu-item.h:
* libnautilus-extension/nautilus-menu-provider.c:
* libnautilus-extension/nautilus-menu-provider.h: New files,
allow extensions to provide context menu items.
* libnautilus-extension/nautilus-property-page-provider.c:
* libnautilus-extension/nautilus-property-page-provider.h:
* libnautilus-extension/nautilus-property-page.c:
* libnautilus-extension/nautilus-property-page.h: New files,
allow extensions to provider property pages.
* libnautilus-private/nautilus-module.h:
* libnautilus-private/nautilus-module.c: (add_module_objects),
(nautilus_module_load_file),
(nautilus_module_get_extensions_for_type),
(nautilus_module_extension_list_free), (nautilus_module_add_type):
New functions.
* src/file-manager/Makefile.am:
* src/file-manager/fm-bonobo-provider.c:
(bonobo_mime_action_data_new), (bonobo_mime_action_data_free),
(bonobo_mime_action_activate_callback),
(bonobo_mime_action_callback),
(bonobo_mime_action_menu_data_destroy_callback),
(no_locale_at_end), (get_bonobo_menu_verb_names),
(can_handle_multiple_files), (get_menu_items_for_server),
(fm_bonobo_provider_get_file_items),
(fm_bonobo_provider_menu_provider_iface_init),
(bonobo_page_error_message), (get_uri_list),
(bonobo_page_activate_callback), (fm_bonobo_provider_get_pages),
(fm_bonobo_provider_property_page_provider_iface_init),
(fm_bonobo_provider_instance_init),
(fm_bonobo_provider_class_init), (fm_bonobo_provider_get_type):
* src/file-manager/fm-bonobo-provider.h: Moved the bonobo context
menu and property pages here. Export them through the extension
interface.
* src/file-manager/fm-directory-view.c:
(extension_action_callback), (add_extension_menu_items),
(get_all_extension_menu_items), (reset_extension_actions_menu),
(real_update_menus): Get context menu items from extensions.
* src/file-manager/fm-properties-window.c: (clear_extension_pages),
(refresh_extension_pages), (properties_window_update),
(append_extension_pages), (create_properties_window): Get property
pages from extensions.
* src/nautilus-application.c: (finish_startup): Add the
bonobo provider to the extension manager.
22 files changed, 554 insertions, 260 deletions
@@ -1,3 +1,54 @@ +2003-12-10 Dave Camp <dave@ximian.com> + + * libnautilus-extension/nautilus-file-info.c: + (nautilus_file_info_get_uri_scheme): + * libnautilus-extension/nautilus-file-info.h: + * libnautilus-private/nautilus-file.c: + (nautilus_file_info_iface_init): Added a + nautilus_file_info_get_uri_scheme convenience function. + * libnautilus-extension/nautilus-menu-item.h: + * libnautilus-extension/nautilus-menu-item.c: + (nautilus_menu_item_get_property), + (nautilus_menu_item_set_property), + (nautilus_menu_item_class_init): Added a priority text property. + * libnautilus-extension/nautilus-menu-provider.h: + * libnautilus-extension/nautilus-menu-provider.c: + (nautilus_menu_provider_get_file_items): Pass in the GtkWindow, + so that callbacks can parent dialogs appropriately. + (nautilus_menu_provider_get_background_items), + (nautilus_menu_provider_get_toolbar_items): New functions. + * libnautilus-private/nautilus-bonobo-extensions.h: + * libnautilus-private/nautilus-bonobo-extensions.c: + (get_extension_menu_item_xml), (extension_action_callback), + (nautilus_bonobo_add_extension_item_command), + (nautilus_bonobo_add_extension_item), + (get_extension_toolbar_item_xml), + (nautilus_bonobo_add_extension_toolbar_item): Move the extension + menu/toolbar stuff here. + * src/file-manager/fm-bonobo-provider.c: + (fm_bonobo_provider_get_file_items): Updated for new API. + * src/file-manager/fm-directory-view.c: (add_extension_menu_items), + (get_all_extension_menu_items), (reset_extension_actions_menu): Use + new nautilus-bonobo-extensions helpers. + * src/nautilus-shell-ui.xml: + * src/file-manager/nautilus-directory-view-ui.xml: + * src/nautilus-navigation-window-ui.xml: Move stuff around. + * src/nautilus-window.c: (ui_idle_handler), (real_merge_menus_2), + (nautilus_window_constructed), (nautilus_window_class_init): + * src/nautilus-window.h: + * src/nautilus-navigation-window.c: (real_merge_menus_2), + (nautilus_navigation_window_class_init): Move part two of the + menu merging to a virtual function. + * src/nautilus-window-manage-views.c: (update_for_new_location): + * src/nautilus-window-menus.c: + (nautilus_window_initialize_menus_part_1), (get_extension_menus), + (nautilus_window_load_extension_menus): Load background menu items + from the extensions. + * src/nautilus-window-private.h: + * src/nautilus-window-toolbars.c: (get_extension_toolbar_items), + (nautilus_navigation_window_load_extension_toolbar_items): + Load toolbar items from the extensions + 2003-11-28 Dave Camp <dave@ximian.com> * libnautilus-extension/Makefile.am: diff --git a/libnautilus-extension/nautilus-file-info.c b/libnautilus-extension/nautilus-file-info.c index d851e8759..8d636c52d 100644 --- a/libnautilus-extension/nautilus-file-info.c +++ b/libnautilus-extension/nautilus-file-info.c @@ -118,6 +118,15 @@ nautilus_file_info_get_parent_uri (NautilusFileInfo *file) } char * +nautilus_file_info_get_uri_scheme (NautilusFileInfo *file) +{ + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); + g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_uri_scheme != NULL, NULL); + + return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_uri_scheme (file); +} + +char * nautilus_file_info_get_mime_type (NautilusFileInfo *file) { g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); diff --git a/libnautilus-extension/nautilus-file-info.h b/libnautilus-extension/nautilus-file-info.h index fb53fcfed..2218d35e5 100644 --- a/libnautilus-extension/nautilus-file-info.h +++ b/libnautilus-extension/nautilus-file-info.h @@ -55,6 +55,7 @@ struct _NautilusFileInfoIface char * (*get_name) (NautilusFileInfo *file); char * (*get_uri) (NautilusFileInfo *file); char * (*get_parent_uri) (NautilusFileInfo *file); + char * (*get_uri_scheme) (NautilusFileInfo *file); char * (*get_mime_type) (NautilusFileInfo *file); gboolean (*is_mime_type) (NautilusFileInfo *file, @@ -81,7 +82,7 @@ gboolean nautilus_file_info_is_gone (NautilusFileInfo *file); char * nautilus_file_info_get_name (NautilusFileInfo *file); char * nautilus_file_info_get_uri (NautilusFileInfo *file); char * nautilus_file_info_get_parent_uri (NautilusFileInfo *file); - +char * nautilus_file_info_get_uri_scheme (NautilusFileInfo *file); /* File Type */ char * nautilus_file_info_get_mime_type (NautilusFileInfo *file); diff --git a/libnautilus-extension/nautilus-menu-item.c b/libnautilus-extension/nautilus-menu-item.c index 14310646f..138df2d53 100644 --- a/libnautilus-extension/nautilus-menu-item.c +++ b/libnautilus-extension/nautilus-menu-item.c @@ -38,6 +38,7 @@ enum { PROP_TIP, PROP_ICON, PROP_SENSITIVE, + PROP_PRIORITY, LAST_PROP }; @@ -47,9 +48,10 @@ struct _NautilusMenuItemDetails { char *tip; char *icon; gboolean sensitive; + gboolean priority; }; -static guint signals [LAST_SIGNAL]; +static guint signals[LAST_SIGNAL]; NautilusMenuItem * nautilus_menu_item_new (const char *name, @@ -164,6 +166,9 @@ nautilus_menu_item_get_property (GObject *object, case PROP_SENSITIVE : g_value_set_boolean (value, item->details->sensitive); break; + case PROP_PRIORITY : + g_value_set_boolean (value, item->details->priority); + break; default : G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); break; @@ -205,6 +210,10 @@ nautilus_menu_item_set_property (GObject *object, item->details->sensitive = g_value_get_boolean (value); g_object_notify (object, "sensitive"); break; + case PROP_PRIORITY : + item->details->priority = g_value_get_boolean (value); + g_object_notify (object, "priority"); + break; default : G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); break; @@ -286,6 +295,13 @@ nautilus_menu_item_class_init (NautilusMenuItemClass *class) _("Whether the menu item is sensitive"), TRUE, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (class), + PROP_PRIORITY, + g_param_spec_boolean ("priority", + _("Priority"), + _("Show priority text in toolbars"), + TRUE, + G_PARAM_READWRITE)); } GType diff --git a/libnautilus-extension/nautilus-menu-item.h b/libnautilus-extension/nautilus-menu-item.h index e321cc178..64069a17e 100644 --- a/libnautilus-extension/nautilus-menu-item.h +++ b/libnautilus-extension/nautilus-menu-item.h @@ -71,6 +71,7 @@ void nautilus_menu_item_set_icon (NautilusMenuItem *item, gboolean nautilus_menu_item_get_sensitive (NautilusMenuItem *item); void nautilus_menu_item_set_sensitive (NautilusMenuItem *item, gboolean sensitive); + void nautilus_menu_item_activate (NautilusMenuItem *item); diff --git a/libnautilus-extension/nautilus-menu-provider.c b/libnautilus-extension/nautilus-menu-provider.c index 787b51fc2..956c5ec0e 100644 --- a/libnautilus-extension/nautilus-menu-provider.c +++ b/libnautilus-extension/nautilus-menu-provider.c @@ -62,13 +62,49 @@ nautilus_menu_provider_get_type (void) GList * nautilus_menu_provider_get_file_items (NautilusMenuProvider *provider, + GtkWidget *window, GList *files) { g_return_val_if_fail (NAUTILUS_IS_MENU_PROVIDER (provider), NULL); - g_return_val_if_fail (NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_file_items != NULL, NULL); - return NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_file_items - (provider, files); + if (NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_file_items) { + return NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_file_items + (provider, window, files); + } else { + return NULL; + } +} + +GList * +nautilus_menu_provider_get_background_items (NautilusMenuProvider *provider, + GtkWidget *window, + NautilusFileInfo *current_folder) +{ + g_return_val_if_fail (NAUTILUS_IS_MENU_PROVIDER (provider), NULL); + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (current_folder), NULL); + + if (NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_background_items) { + return NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_background_items + (provider, window, current_folder); + } else { + return NULL; + } } - +GList * +nautilus_menu_provider_get_toolbar_items (NautilusMenuProvider *provider, + GtkWidget *window, + NautilusFileInfo *current_folder) +{ + g_return_val_if_fail (NAUTILUS_IS_MENU_PROVIDER (provider), NULL); + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (current_folder), NULL); + + if (NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_toolbar_items) { + return NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_toolbar_items + (provider, window, current_folder); + } else { + return NULL; + } +} + + diff --git a/libnautilus-extension/nautilus-menu-provider.h b/libnautilus-extension/nautilus-menu-provider.h index e786b2c09..a7a9a2470 100644 --- a/libnautilus-extension/nautilus-menu-provider.h +++ b/libnautilus-extension/nautilus-menu-provider.h @@ -31,6 +31,7 @@ #define NAUTILUS_MENU_PROVIDER_H #include <glib-object.h> +#include <gtk/gtkwidget.h> #include "nautilus-extension-types.h" #include "nautilus-file-info.h" #include "nautilus-menu-item.h" @@ -48,14 +49,28 @@ typedef struct _NautilusMenuProviderIface NautilusMenuProviderIface; struct _NautilusMenuProviderIface { GTypeInterface g_iface; - GList *(*get_file_items) (NautilusMenuProvider *provider, - GList *files); + GList *(*get_file_items) (NautilusMenuProvider *provider, + GtkWidget *window, + GList *files); + GList *(*get_background_items) (NautilusMenuProvider *provider, + GtkWidget *window, + NautilusFileInfo *current_folder); + GList *(*get_toolbar_items) (NautilusMenuProvider *provider, + GtkWidget *window, + NautilusFileInfo *current_folder); }; /* Interface Functions */ -GType nautilus_menu_provider_get_type (void); -GList *nautilus_menu_provider_get_file_items (NautilusMenuProvider *provider, - GList *files); +GType nautilus_menu_provider_get_type (void); +GList *nautilus_menu_provider_get_file_items (NautilusMenuProvider *provider, + GtkWidget *window, + GList *files); +GList *nautilus_menu_provider_get_background_items (NautilusMenuProvider *provider, + GtkWidget *window, + NautilusFileInfo *current_folder); +GList *nautilus_menu_provider_get_toolbar_items (NautilusMenuProvider *provider, + GtkWidget *window, + NautilusFileInfo *current_folder); G_END_DECLS diff --git a/libnautilus-private/nautilus-bonobo-extensions.c b/libnautilus-private/nautilus-bonobo-extensions.c index 6a363ce77..cb4a607f4 100644 --- a/libnautilus-private/nautilus-bonobo-extensions.c +++ b/libnautilus-private/nautilus-bonobo-extensions.c @@ -28,6 +28,8 @@ #include <config.h> #include "nautilus-bonobo-extensions.h" +#include "nautilus-icon-factory.h" + #include <eel/eel-string.h> #include <eel/eel-gnome-extensions.h> #include <eel/eel-debug.h> @@ -487,6 +489,141 @@ nautilus_bonobo_set_label_for_toolitem_and_command (BonoboUIComponent *ui, g_free (label_no_underscore); } +static char * +get_extension_menu_item_xml (NautilusMenuItem *item) +{ + GString *ui_xml; + char *pixbuf_data; + GdkPixbuf *pixbuf; + + ui_xml = g_string_new (""); + + g_string_append_printf (ui_xml, + "<menuitem name=\"%s\" verb=\"%s\"", + nautilus_menu_item_get_name (item), + nautilus_menu_item_get_name (item)); + + if (nautilus_menu_item_get_icon (item)) { + pixbuf = nautilus_icon_factory_get_pixbuf_from_name + (nautilus_menu_item_get_icon (item), + NULL, + NAUTILUS_ICON_SIZE_FOR_MENUS, + NULL); + if (pixbuf) { + pixbuf_data = bonobo_ui_util_pixbuf_to_xml (pixbuf); + g_string_append_printf (ui_xml, " pixtype=\"pixbuf\" pixname=\"%s\"", pixbuf_data); + g_free (pixbuf_data); + g_object_unref (pixbuf); + } + } + g_string_append (ui_xml, "/>"); + + return g_string_free (ui_xml, FALSE); +} + +static void +extension_action_callback (BonoboUIComponent *component, + gpointer callback_data, const char *path) +{ + nautilus_menu_item_activate (NAUTILUS_MENU_ITEM (callback_data)); +} + +void +nautilus_bonobo_add_extension_item_command (BonoboUIComponent *ui, + NautilusMenuItem *item) +{ + GString *ui_xml; + GClosure *closure; + + ui_xml = g_string_new ("<Root><commands>"); + + g_string_append_printf (ui_xml, + "<cmd name=\"%s\" label=\"%s\" tip=\"%s\" sensitive=\"%s\"/>", + nautilus_menu_item_get_name (item), + nautilus_menu_item_get_label (item), + nautilus_menu_item_get_tip (item), + nautilus_menu_item_get_sensitive (item) ? "1" : "0"); + ui_xml = g_string_append (ui_xml, "</commands></Root>"); + + bonobo_ui_component_set (ui, "/", ui_xml->str, NULL); + g_string_free (ui_xml, TRUE); + + + closure = g_cclosure_new + (G_CALLBACK (extension_action_callback), + g_object_ref (item), + (GClosureNotify)g_object_unref); + + bonobo_ui_component_add_verb_full + (ui, nautilus_menu_item_get_name (item), closure); +} + +void +nautilus_bonobo_add_extension_item (BonoboUIComponent *ui, + const char *path, + NautilusMenuItem *item) +{ + char *item_xml; + + item_xml = get_extension_menu_item_xml (item); + + bonobo_ui_component_set (ui, path, item_xml, NULL); + + g_free (item_xml); +} + +static char * +get_extension_toolbar_item_xml (NautilusMenuItem *item) +{ + GString *ui_xml; + char *pixbuf_data; + GdkPixbuf *pixbuf; + gboolean priority; + + ui_xml = g_string_new (""); + + g_string_append_printf (ui_xml, + "<toolitem name=\"%s\" verb=\"%s\"", + nautilus_menu_item_get_name (item), + nautilus_menu_item_get_name (item)); + + g_object_get (item, "priority", &priority, NULL); + if (priority) { + g_string_append (ui_xml, " priority=\"1\""); + } + + if (nautilus_menu_item_get_icon (item)) { + pixbuf = nautilus_icon_factory_get_pixbuf_from_name + (nautilus_menu_item_get_icon (item), + NULL, + NAUTILUS_ICON_SIZE_FOR_MENUS, + NULL); + if (pixbuf) { + pixbuf_data = bonobo_ui_util_pixbuf_to_xml (pixbuf); + g_string_append_printf (ui_xml, " pixtype=\"pixbuf\" pixname=\"%s\"", pixbuf_data); + g_free (pixbuf_data); + g_object_unref (pixbuf); + } + } + g_string_append (ui_xml, "/>"); + + return g_string_free (ui_xml, FALSE); +} + +void +nautilus_bonobo_add_extension_toolbar_item (BonoboUIComponent *ui, + const char *path, + NautilusMenuItem *item) +{ + char *item_xml; + + item_xml = get_extension_toolbar_item_xml (item); + + bonobo_ui_component_set (ui, path, item_xml, NULL); + + g_free (item_xml); +} + static void activation_handle_done (NautilusBonoboActivationHandle *handle) { diff --git a/libnautilus-private/nautilus-bonobo-extensions.h b/libnautilus-private/nautilus-bonobo-extensions.h index 3f3396192..f780761d6 100644 --- a/libnautilus-private/nautilus-bonobo-extensions.h +++ b/libnautilus-private/nautilus-bonobo-extensions.h @@ -32,6 +32,8 @@ #include <bonobo/bonobo-generic-factory.h> #include <gdk-pixbuf/gdk-pixbuf.h> +#include <libnautilus-extension/nautilus-menu-item.h> + typedef struct NautilusBonoboActivationHandle NautilusBonoboActivationHandle; typedef void (*NautilusBonoboActivationCallback) (NautilusBonoboActivationHandle *handle, @@ -41,78 +43,87 @@ typedef void (*NautilusBonoboActivationCallback) (NautilusBonoboActivationHandle typedef CORBA_Object (*NautilusBonoboCreateObject) (const char *iid, gpointer callback_data); -void nautilus_bonobo_set_accelerator (BonoboUIComponent *ui, - const char *path, - const char *accelerator); -char * nautilus_bonobo_get_label (BonoboUIComponent *ui, - const char *path); -void nautilus_bonobo_set_label (BonoboUIComponent *ui, - const char *path, - const char *label); -void nautilus_bonobo_set_tip (BonoboUIComponent *ui, - const char *path, - const char *tip); -void nautilus_bonobo_set_sensitive (BonoboUIComponent *ui, - const char *path, - gboolean sensitive); -void nautilus_bonobo_set_toggle_state (BonoboUIComponent *ui, - const char *path, - gboolean state); -void nautilus_bonobo_set_hidden (BonoboUIComponent *ui, - const char *path, - gboolean hidden); -gboolean nautilus_bonobo_get_hidden (BonoboUIComponent *ui, - const char *path); -void nautilus_bonobo_add_numbered_menu_item (BonoboUIComponent *ui, - const char *container_path, - guint index, - const char *label, - GdkPixbuf *pixbuf); -void nautilus_bonobo_add_numbered_toggle_menu_item (BonoboUIComponent *ui, - const char *container_path, - guint index, - const char *label); -void nautilus_bonobo_add_numbered_radio_menu_item (BonoboUIComponent *ui, - const char *container_path, - guint index, - const char *label, - const char *radio_group_name); -char * nautilus_bonobo_get_numbered_menu_item_command (BonoboUIComponent *ui, - const char *container_path, - guint index); -char * nautilus_bonobo_get_numbered_menu_item_path (BonoboUIComponent *ui, - const char *container_path, - guint index); +void nautilus_bonobo_set_accelerator (BonoboUIComponent *ui, + const char *path, + const char *accelerator); +char * nautilus_bonobo_get_label (BonoboUIComponent *ui, + const char *path); +void nautilus_bonobo_set_label (BonoboUIComponent *ui, + const char *path, + const char *label); +void nautilus_bonobo_set_tip (BonoboUIComponent *ui, + const char *path, + const char *tip); +void nautilus_bonobo_set_sensitive (BonoboUIComponent *ui, + const char *path, + gboolean sensitive); +void nautilus_bonobo_set_toggle_state (BonoboUIComponent *ui, + const char *path, + gboolean state); +void nautilus_bonobo_set_hidden (BonoboUIComponent *ui, + const char *path, + gboolean hidden); +gboolean nautilus_bonobo_get_hidden (BonoboUIComponent *ui, + const char *path); +void nautilus_bonobo_add_numbered_menu_item (BonoboUIComponent *ui, + const char *container_path, + guint index, + const char *label, + GdkPixbuf *pixbuf); +void nautilus_bonobo_add_numbered_toggle_menu_item (BonoboUIComponent *ui, + const char *container_path, + guint index, + const char *label); +void nautilus_bonobo_add_numbered_radio_menu_item (BonoboUIComponent *ui, + const char *container_path, + guint index, + const char *label, + const char *radio_group_name); +char * nautilus_bonobo_get_numbered_menu_item_command (BonoboUIComponent *ui, + const char *container_path, + guint index); +char * nautilus_bonobo_get_numbered_menu_item_path (BonoboUIComponent *ui, + const char *container_path, + guint index); + guint nautilus_bonobo_get_numbered_menu_item_index_from_command - (const char *command); +(const char *command); char * nautilus_bonobo_get_numbered_menu_item_container_path_from_command - (const char *command); -void nautilus_bonobo_add_submenu (BonoboUIComponent *ui, - const char *container_path, - const char *label, - GdkPixbuf *pixbuf); -void nautilus_bonobo_add_menu_separator (BonoboUIComponent *ui, - const char *path); -void nautilus_bonobo_remove_menu_items_and_commands (BonoboUIComponent *ui, - const char *container_path); -void nautilus_bonobo_set_label_for_toolitem_and_command (BonoboUIComponent *ui, - const char *toolitem_path, - const char *command_path, - const char *label_with_underscore); -void nautilus_bonobo_set_icon (BonoboUIComponent *ui, - const char *path, - const char *icon_relative_path); - -void nautilus_bonobo_register_activation_shortcut (const char *iid, - NautilusBonoboCreateObject create_object_callback, - gpointer callback_data); -void nautilus_bonobo_unregister_activation_shortcut (const char *iid); -NautilusBonoboActivationHandle *nautilus_bonobo_activate_from_id (const char *iid, - NautilusBonoboActivationCallback callback, - gpointer callback_data); -void nautilus_bonobo_activate_cancel (NautilusBonoboActivationHandle *handle); - -Bonobo_RegistrationResult nautilus_bonobo_activation_register_for_display (const char *iid, - Bonobo_Unknown ref); +(const char *command); +void nautilus_bonobo_add_submenu (BonoboUIComponent *ui, + const char *container_path, + const char *label, + GdkPixbuf *pixbuf); +void nautilus_bonobo_add_menu_separator (BonoboUIComponent *ui, + const char *path); +void nautilus_bonobo_remove_menu_items_and_commands (BonoboUIComponent *ui, + const char *container_path); +void nautilus_bonobo_set_label_for_toolitem_and_command (BonoboUIComponent *ui, + const char *toolitem_path, + const char *command_path, + const char *label_with_underscore); +void nautilus_bonobo_set_icon (BonoboUIComponent *ui, + const char *path, + const char *icon_relative_path); +void nautilus_bonobo_add_extension_item_command (BonoboUIComponent *ui, + NautilusMenuItem *item); +void nautilus_bonobo_add_extension_item (BonoboUIComponent *ui, + const char *path, + NautilusMenuItem *item); +void nautilus_bonobo_add_extension_toolbar_item (BonoboUIComponent *ui, + const char *path, + NautilusMenuItem *item); +void nautilus_bonobo_register_activation_shortcut (const char *iid, + NautilusBonoboCreateObject create_object_callback, + gpointer callback_data); +void nautilus_bonobo_unregister_activation_shortcut (const char *iid); +NautilusBonoboActivationHandle *nautilus_bonobo_activate_from_id (const char *iid, + NautilusBonoboActivationCallback callback, + gpointer callback_data); +void nautilus_bonobo_activate_cancel (NautilusBonoboActivationHandle *handle); +Bonobo_RegistrationResult nautilus_bonobo_activation_register_for_display (const char *iid, + Bonobo_Unknown ref); + + #endif /* NAUTILUS_BONOBO_EXTENSIONS_H */ diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c index 77d5fc121..ffed02311 100644 --- a/libnautilus-private/nautilus-file.c +++ b/libnautilus-private/nautilus-file.c @@ -5731,6 +5731,7 @@ nautilus_file_info_iface_init (NautilusFileInfoIface *iface) iface->get_name = nautilus_file_get_name; iface->get_uri = nautilus_file_get_uri; iface->get_parent_uri = nautilus_file_get_parent_uri; + iface->get_uri_scheme = nautilus_file_get_uri_scheme; iface->get_mime_type = nautilus_file_get_mime_type; iface->is_mime_type = nautilus_file_is_mime_type; iface->is_directory = nautilus_file_is_directory; diff --git a/src/file-manager/fm-bonobo-provider.c b/src/file-manager/fm-bonobo-provider.c index ea7a467b2..fcc985f71 100644 --- a/src/file-manager/fm-bonobo-provider.c +++ b/src/file-manager/fm-bonobo-provider.c @@ -328,6 +328,7 @@ get_menu_items_for_server (Bonobo_ServerInfo *info, static GList * fm_bonobo_provider_get_file_items (NautilusMenuProvider *provider, + GtkWidget *window, GList *selection) { GList *components; diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c index 658a6ef75..b757e08a6 100644 --- a/src/file-manager/fm-directory-view.c +++ b/src/file-manager/fm-directory-view.c @@ -155,7 +155,8 @@ #define FM_DIRECTORY_VIEW_MENU_PATH_SCRIPTS_SEPARATOR "/menu/File/Open Placeholder/Scripts/After Scripts" #define FM_DIRECTORY_VIEW_MENU_PATH_CUT_FILES "/menu/Edit/Cut" #define FM_DIRECTORY_VIEW_MENU_PATH_COPY_FILES "/menu/Edit/Copy" -#define FM_DIRECTORY_VIEW_MENU_PATH_PASTE_FILES "/menu/File/Paste" +#define FM_DIRECTORY_VIEW_MENU_PATH_PASTE_FILES "/menu/Edit/Paste" +#define FM_DIRECTORY_VIEW_MENU_PATH_EXTENSION_ACTIONS_PLACEHOLDER "/menu/Edit/Extension Actions" #define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND "/popups/background" #define FM_DIRECTORY_VIEW_POPUP_PATH_SELECTION "/popups/selection" @@ -171,7 +172,7 @@ #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_SCRIPTS "/popups/selection/Open Placeholder/Scripts" -#define FM_DIRECTORY_VIEW_POPUP_PATH_MIME_ACTIONS "/popups/selection/Mime Actions" +#define FM_DIRECTORY_VIEW_POPUP_PATH_EXTENSION_ACTIONS "/popups/selection/Extension Actions" #define MAX_MENU_LEVELS 5 @@ -3557,105 +3558,25 @@ reset_bonobo_open_with_menu (FMDirectoryView *view, GList *selection) } static void -extension_action_callback (BonoboUIComponent *component, - gpointer callback_data, const char *path) -{ - nautilus_menu_item_activate (NAUTILUS_MENU_ITEM (callback_data)); -} - -static void add_extension_menu_items (FMDirectoryView *view, GList *files, GList *menu_items) { GList *l; - GString *ui_xml; - char *ui_xml_str; - - ui_xml = g_string_new ("<Root><commands>"); - - /* build the commands */ - for (l = menu_items; l; l = l->next) { - NautilusMenuItem *item; - - item = l->data; - - g_string_append_printf (ui_xml, - "<cmd name=\"%s\" label=\"%s\" tip=\"%s\"/>", - nautilus_menu_item_get_name (item), - nautilus_menu_item_get_label (item), - nautilus_menu_item_get_tip (item)); - } - - ui_xml = g_string_append (ui_xml, "</commands><popups><popup name=\"selection\"><placeholder name=\"Mime Actions\"><separator/>"); - - /* build the UI */ for (l = menu_items; l; l = l->next) { NautilusMenuItem *item; - char *pixbuf_data; - GdkPixbuf *pixbuf; - - item = l->data; - - g_string_append_printf (ui_xml, - "<menuitem name=\"%s\" verb=\"%s\"", - nautilus_menu_item_get_name (item), - nautilus_menu_item_get_name (item)); - - if (nautilus_menu_item_get_icon (item)) { - pixbuf = nautilus_icon_factory_get_pixbuf_from_name - (nautilus_menu_item_get_icon (item), - NULL, - NAUTILUS_ICON_SIZE_FOR_MENUS, - NULL); - if (pixbuf) { - pixbuf_data = bonobo_ui_util_pixbuf_to_xml (pixbuf); - g_string_append_printf (ui_xml, " pixtype=\"pixbuf\" pixname=\"%s\"", pixbuf_data); - g_free (pixbuf_data); - g_object_unref (pixbuf); - } - } - g_string_append (ui_xml, "/>"); - } - - ui_xml = g_string_append (ui_xml, "</placeholder></popup></popups></Root>"); - ui_xml_str = g_string_free (ui_xml, FALSE); - - bonobo_ui_component_set (view->details->ui, "/", - ui_xml_str, NULL); - g_free (ui_xml_str); - - for (l = menu_items; l != NULL; l = l->next) { - NautilusMenuItem *item; - - item = l->data; - - if (!nautilus_menu_item_get_sensitive (item)) { - char *path = g_strdup_printf ("/commands/%s", - nautilus_menu_item_get_name (item)); - bonobo_ui_component_set_prop (view->details->ui, - path, - "sensitive", - "0", NULL); - g_free (path); - } - } - - /* add the verbs */ - for (l = menu_items; l; l = l->next) { - NautilusMenuItem *item; - GClosure *closure; - - item = l->data; - closure = g_cclosure_new - (G_CALLBACK (extension_action_callback), - g_object_ref (item), - (GClosureNotify)g_object_unref); + item = NAUTILUS_MENU_ITEM (l->data); - bonobo_ui_component_add_verb_full - (view->details->ui, - nautilus_menu_item_get_name (item), closure); + nautilus_bonobo_add_extension_item_command (view->details->ui, + item); + + nautilus_bonobo_add_extension_item (view->details->ui, + FM_DIRECTORY_VIEW_POPUP_PATH_EXTENSION_ACTIONS, + item); + nautilus_bonobo_add_extension_item (view->details->ui, + FM_DIRECTORY_VIEW_MENU_PATH_EXTENSION_ACTIONS_PLACEHOLDER, + item); } } @@ -3701,7 +3622,8 @@ get_unique_files (GList *selection) } static GList * -get_all_extension_menu_items (GList *selection) +get_all_extension_menu_items (GtkWidget *window, + GList *selection) { GList *items; GList *providers; @@ -3716,6 +3638,7 @@ get_all_extension_menu_items (GList *selection) provider = NAUTILUS_MENU_PROVIDER (l->data); file_items = nautilus_menu_provider_get_file_items (provider, + window, selection); items = g_list_concat (items, file_items); } @@ -3732,13 +3655,16 @@ reset_extension_actions_menu (FMDirectoryView *view, GList *selection) GList *items; GList *l; - /* Clear any previous inserted items in the mime actions placeholder */ + /* Clear any previous inserted items in the extension actions placeholder */ + nautilus_bonobo_remove_menu_items_and_commands + (view->details->ui, FM_DIRECTORY_VIEW_POPUP_PATH_EXTENSION_ACTIONS); nautilus_bonobo_remove_menu_items_and_commands - (view->details->ui, FM_DIRECTORY_VIEW_POPUP_PATH_MIME_ACTIONS); + (view->details->ui, FM_DIRECTORY_VIEW_MENU_PATH_EXTENSION_ACTIONS_PLACEHOLDER); /* only query for the unique files */ unique_selection = get_unique_files (selection); - items = get_all_extension_menu_items (selection); + items = get_all_extension_menu_items (gtk_widget_get_toplevel (GTK_WIDGET (view)), + selection); if (items) { add_extension_menu_items (view, unique_selection, items); diff --git a/src/file-manager/nautilus-directory-view-ui.xml b/src/file-manager/nautilus-directory-view-ui.xml index 97f6cd9f2..58f8c20ad 100644 --- a/src/file-manager/nautilus-directory-view-ui.xml +++ b/src/file-manager/nautilus-directory-view-ui.xml @@ -189,6 +189,8 @@ accel="*Shift*Delete" verb="Delete"/> </placeholder> + + <placeholder name="Extension Actions"/> </submenu> <submenu name="View"> @@ -280,10 +282,11 @@ verb="Trash"/> <menuitem name="Delete" verb="Delete"/> </placeholder> + <placeholder name="Icon Appearance Items" delimit="top"> </placeholder> - <placeholder name="Mime Actions" delimit="none"/> + <placeholder name="Extension Actions" delimit="top"/> <separator/> <menuitem name="Properties" diff --git a/src/nautilus-navigation-window-ui.xml b/src/nautilus-navigation-window-ui.xml index 9bdeb5691..9fe89ebd2 100644 --- a/src/nautilus-navigation-window-ui.xml +++ b/src/nautilus-navigation-window-ui.xml @@ -163,14 +163,10 @@ type="toggle" pixtype="stock" pixname="Search" verb="Toggle Find Mode"/> - <toolitem name="Burn CD" - _label="Write to CD" - priority="1" - pixtype="stock" pixname="gtk-cdrom" - verb="Burn CD"/> - - <placeholder name="Extra Buttons Placeholder" delimit="top"/> + <placeholder name="Extra Buttons Placeholder" delimit="top"> + <placeholder name="Extension Actions"/> + </placeholder> <control name="ThrobberWrapper" behavior="pack-end"/> </dockitem> diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c index b779ec984..12cbbe3bb 100644 --- a/src/nautilus-navigation-window.c +++ b/src/nautilus-navigation-window.c @@ -853,6 +853,19 @@ real_merge_menus (NautilusWindow *nautilus_window) } static void +real_merge_menus_2 (NautilusWindow *nautilus_window) +{ + NautilusNavigationWindow *window; + + EEL_CALL_PARENT (NAUTILUS_WINDOW_CLASS, + merge_menus_2, (nautilus_window)); + + window = NAUTILUS_NAVIGATION_WINDOW (nautilus_window); + + nautilus_navigation_window_initialize_menus_part_2 (window); +} + +static void zoom_level_changed_callback (NautilusViewFrame *view, NautilusNavigationWindow *window) { @@ -1463,6 +1476,7 @@ nautilus_navigation_window_class_init (NautilusNavigationWindowClass *class) GTK_WIDGET_CLASS (class)->show = nautilus_navigation_window_show; GTK_WIDGET_CLASS (class)->unrealize = nautilus_navigation_window_unrealize; NAUTILUS_WINDOW_CLASS (class)->merge_menus = real_merge_menus; + NAUTILUS_WINDOW_CLASS (class)->merge_menus_2 = real_merge_menus_2; NAUTILUS_WINDOW_CLASS (class)->load_view_as_menu = real_load_view_as_menu; NAUTILUS_WINDOW_CLASS (class)->set_content_view_widget = real_set_content_view_widget; NAUTILUS_WINDOW_CLASS (class)->set_throbber_active = real_set_throbber_active; diff --git a/src/nautilus-shell-ui.xml b/src/nautilus-shell-ui.xml index 0d8b67c9a..55f19eaa1 100644 --- a/src/nautilus-shell-ui.xml +++ b/src/nautilus-shell-ui.xml @@ -25,9 +25,6 @@ <cmd name="Clear" sensitive="0"/> <cmd name="Reload" _tip="Display the latest contents of the current location"/> - <cmd name="Burn CD" - _label="_Write to CD" - _tip="Write contents to a CD"/> <cmd name="Go to Burn CD" _label="_CD Creator" _tip="Go to Empty CD folder"/> @@ -58,12 +55,8 @@ <placeholder name="General Status Placeholder" delimit="top"/> <placeholder name="File Items Placeholder" delimit="top"/> - - <placeholder name="Global File Items Placeholder" delimit="top"> - <menuitem name="Burn CD" - verb="Burn CD"/> - </placeholder> - + <placeholder name="Global File Items Placeholder" delimit="top"/> + <placeholder name="Extension Actions" delimit="top"/> <separator/> <placeholder name="Close Items Placeholder"/> @@ -124,6 +117,7 @@ <placeholder name="Edit Items Placeholder" delimit="top"/> <placeholder name="Global Edit Items Placeholder" delimit="none"/> + <placeholder name="Extension Actions" delimit="top"/> <separator/> <menuitem name="Backgrounds and Emblems" @@ -225,6 +219,7 @@ </placeholder> <placeholder name="New Object Items" delimit="none"> </placeholder> + <placeholder name="Extension Actions" delimit="top"/> </placeholder> <placeholder name="Zoom Items" delimit="top"> <menuitem name="Zoom In" diff --git a/src/nautilus-window-manage-views.c b/src/nautilus-window-manage-views.c index 1a4737949..35c59be4a 100644 --- a/src/nautilus-window-manage-views.c +++ b/src/nautilus-window-manage-views.c @@ -387,16 +387,6 @@ update_up_button (NautilusWindow *window) } static void -update_burn_cd_items (NautilusWindow *window) -{ - gboolean show_burn_cd; - - show_burn_cd = eel_istr_has_prefix (window->details->location, "burn:"); - - nautilus_window_allow_burn_cd (window, show_burn_cd); -} - -static void viewed_file_changed_callback (NautilusFile *file, NautilusWindow *window) { @@ -550,11 +540,11 @@ update_for_new_location (NautilusWindow *window) /* Check if we can go up. */ update_up_button (window); - /* Check if we can go up. */ - update_burn_cd_items (window); - /* Set up the content view menu for this new location. */ nautilus_window_load_view_as_menus (window); + + /* Load menus from nautilus extensions for this location */ + nautilus_window_load_extension_menus (window); #if !NEW_UI_COMPLETE if (NAUTILUS_IS_NAVIGATION_WINDOW (window)) { @@ -565,6 +555,8 @@ update_for_new_location (NautilusWindow *window) /* Change the location bar to match the current location. */ nautilus_navigation_bar_set_location (NAUTILUS_NAVIGATION_BAR (NAUTILUS_NAVIGATION_WINDOW (window)->navigation_bar), window->details->location); + + nautilus_navigation_window_load_extension_toolbar_items (NAUTILUS_NAVIGATION_WINDOW (window)); } /* Notify the information panel of the location change. */ diff --git a/src/nautilus-window-menus.c b/src/nautilus-window-menus.c index a4664be85..d0b9d6cfb 100644 --- a/src/nautilus-window-menus.c +++ b/src/nautilus-window-menus.c @@ -57,9 +57,11 @@ #include <libgnomevfs/gnome-vfs-file-info.h> #include <libgnomevfs/gnome-vfs-utils.h> #include <libgnomevfs/gnome-vfs-ops.h> +#include <libnautilus-extension/nautilus-menu-provider.h> #include <libnautilus-private/nautilus-bonobo-extensions.h> #include <libnautilus-private/nautilus-file-utilities.h> #include <libnautilus-private/nautilus-icon-factory.h> +#include <libnautilus-private/nautilus-module.h> #include <libnautilus-private/nautilus-undo-manager.h> #include <libnautilus/nautilus-bonobo-ui.h> @@ -78,6 +80,9 @@ #define MENU_PATH_SHOW_HIDE_LOCATION_BAR "/menu/View/Show Hide Placeholder/Show Hide Location Bar" #define MENU_PATH_SHOW_HIDE_STATUS_BAR "/menu/View/Show Hide Placeholder/Show Hide Statusbar" +#define MENU_PATH_EXTENSION_ACTIONS "/menu/File/Extension Actions" +#define POPUP_PATH_EXTENSION_ACTIONS "/popups/background/Before Zoom Items/Extension Actions" + #define COMMAND_PATH_CLOSE_WINDOW "/commands/Close" #define COMMAND_SHOW_HIDE_SIDEBAR "/commands/Show Hide Sidebar" #define COMMAND_SHOW_HIDE_TOOLBAR "/commands/Show Hide Toolbar" @@ -250,14 +255,6 @@ file_menu_close_window_callback (BonoboUIComponent *component, } static void -file_menu_burn_cd_callback (BonoboUIComponent *component, - gpointer user_data, - const char *verb) -{ - nautilus_window_launch_cd_burner (NAUTILUS_WINDOW (user_data)); -} - -static void connect_to_server_callback (BonoboUIComponent *component, gpointer user_data, const char *verb) @@ -650,7 +647,6 @@ nautilus_window_initialize_menus_part_1 (NautilusWindow *window) BonoboUIVerb verbs [] = { BONOBO_UI_VERB ("New Window", file_menu_new_window_callback), BONOBO_UI_VERB ("Close", file_menu_close_window_callback), - BONOBO_UI_VERB ("Burn CD", file_menu_burn_cd_callback), BONOBO_UI_VERB ("Connect to Server", connect_to_server_callback), #ifdef HAVE_MEDUSA BONOBO_UI_VERB ("Find", file_menu_find_callback), @@ -719,3 +715,65 @@ nautilus_window_initialize_menus_part_1 (NautilusWindow *window) nautilus_window_ui_thaw (window); } +static GList * +get_extension_menus (NautilusWindow *window) +{ + GList *providers; + GList *items; + GList *l; + + providers = nautilus_module_get_extensions_for_type (NAUTILUS_TYPE_MENU_PROVIDER); + items = NULL; + + for (l = providers; l != NULL; l = l->next) { + NautilusMenuProvider *provider; + GList *file_items; + + provider = NAUTILUS_MENU_PROVIDER (l->data); + file_items = nautilus_menu_provider_get_background_items (provider, + GTK_WIDGET (window), + window->details->viewed_file); + items = g_list_concat (items, file_items); + } + + nautilus_module_extension_list_free (providers); + + return items; +} + +void +nautilus_window_load_extension_menus (NautilusWindow *window) +{ + GList *items; + GList *l; + + nautilus_bonobo_remove_menu_items_and_commands + (window->details->shell_ui, POPUP_PATH_EXTENSION_ACTIONS); + nautilus_bonobo_remove_menu_items_and_commands + (window->details->shell_ui, MENU_PATH_EXTENSION_ACTIONS); + + items = get_extension_menus (window); + + for (l = items; l != NULL; l = l->next) { + NautilusMenuItem *item; + + item = NAUTILUS_MENU_ITEM (l->data); + + nautilus_bonobo_add_extension_item_command + (window->details->shell_ui, item); + + nautilus_bonobo_add_extension_item + (window->details->shell_ui, + MENU_PATH_EXTENSION_ACTIONS, + item); + + nautilus_bonobo_add_extension_item + (window->details->shell_ui, + POPUP_PATH_EXTENSION_ACTIONS, + item); + + g_object_unref (item); + } + + g_list_free (items); +} diff --git a/src/nautilus-window-private.h b/src/nautilus-window-private.h index 6ddd7d85d..ade48b2d0 100644 --- a/src/nautilus-window-private.h +++ b/src/nautilus-window-private.h @@ -148,6 +148,7 @@ typedef void (*NautilusBookmarkFailedCallback) (NautilusWindow *window, void nautilus_window_set_status (NautilusWindow *window, const char *status); void nautilus_window_load_view_as_menus (NautilusWindow *window); +void nautilus_window_load_extension_menus (NautilusWindow *window); void nautilus_window_initialize_menus_part_1 (NautilusWindow *window); void nautilus_window_initialize_menus_part_2 (NautilusWindow *window); void nautilus_menus_append_bookmark_to_menu (NautilusWindow *window, @@ -200,6 +201,7 @@ void nautilus_navigation_window_update_show_hide_menu_items /* Navigation window toolbar */ void nautilus_navigation_window_activate_throbber (NautilusNavigationWindow *window); void nautilus_navigation_window_initialize_toolbars (NautilusNavigationWindow *window); +void nautilus_navigation_window_load_extension_toolbar_items (NautilusNavigationWindow *window); void nautilus_navigation_window_set_throbber_active (NautilusNavigationWindow *window, gboolean active); void nautilus_navigation_window_go_back (NautilusNavigationWindow *window); diff --git a/src/nautilus-window-toolbars.c b/src/nautilus-window-toolbars.c index dae2b77ac..edac4c6ad 100644 --- a/src/nautilus-window-toolbars.c +++ b/src/nautilus-window-toolbars.c @@ -47,10 +47,12 @@ #include <gdk/gdkkeysyms.h> #include <libgnome/gnome-i18n.h> #include <libgnomeui/gnome-popup-menu.h> +#include <libnautilus-extension/nautilus-menu-provider.h> #include <libnautilus-private/nautilus-bonobo-extensions.h> #include <libnautilus-private/nautilus-bookmark.h> #include <libnautilus-private/nautilus-file-utilities.h> #include <libnautilus-private/nautilus-global-preferences.h> +#include <libnautilus-private/nautilus-module.h> #include <libnautilus-private/nautilus-theme.h> /* FIXME bugzilla.gnome.org 41243: @@ -59,6 +61,8 @@ */ #include "nautilus-desktop-window.h" +#define TOOLBAR_PATH_EXTENSION_ACTIONS "/Toolbar/Extra Buttons Placeholder/Extension Actions" + enum { TOOLBAR_ITEM_STYLE_PROP, TOOLBAR_ITEM_ORIENTATION_PROP @@ -366,3 +370,61 @@ nautilus_navigation_window_initialize_toolbars (NautilusNavigationWindow *window nautilus_window_ui_thaw (NAUTILUS_WINDOW (window)); } + +static GList * +get_extension_toolbar_items (NautilusNavigationWindow *window) +{ + GList *items; + GList *providers; + GList *l; + + providers = nautilus_module_get_extensions_for_type (NAUTILUS_TYPE_MENU_PROVIDER); + items = NULL; + + for (l = providers; l != NULL; l = l->next) { + NautilusMenuProvider *provider; + GList *file_items; + + provider = NAUTILUS_MENU_PROVIDER (l->data); + file_items = nautilus_menu_provider_get_toolbar_items + (provider, + GTK_WIDGET (window), + NAUTILUS_WINDOW (window)->details->viewed_file); + items = g_list_concat (items, file_items); + } + + nautilus_module_extension_list_free (providers); + + return items; +} + +void +nautilus_navigation_window_load_extension_toolbar_items (NautilusNavigationWindow *window) +{ + GList *items; + GList *l; + + nautilus_bonobo_remove_menu_items_and_commands + (NAUTILUS_WINDOW (window)->details->shell_ui, + TOOLBAR_PATH_EXTENSION_ACTIONS); + + items = get_extension_toolbar_items (window); + + for (l = items; l != NULL; l = l->next) { + NautilusMenuItem *item; + + item = NAUTILUS_MENU_ITEM (l->data); + + nautilus_bonobo_add_extension_item_command + (NAUTILUS_WINDOW (window)->details->shell_ui, item); + + nautilus_bonobo_add_extension_toolbar_item + (NAUTILUS_WINDOW (window)->details->shell_ui, + TOOLBAR_PATH_EXTENSION_ACTIONS, + item); + + g_object_unref (item); + } + + g_list_free (items); +} diff --git a/src/nautilus-window.c b/src/nautilus-window.c index 17960e276..187f66a9b 100644 --- a/src/nautilus-window.c +++ b/src/nautilus-window.c @@ -221,12 +221,8 @@ ui_idle_handler (gpointer data) old_updating_bonobo_state = window->details->updating_bonobo_state; if (window->details->ui_pending_initialize_menus_part_2) { -#if !NEW_UI_COMPLETE - if (NAUTILUS_IS_NAVIGATION_WINDOW (window)) { - nautilus_navigation_window_initialize_menus_part_2 (NAUTILUS_NAVIGATION_WINDOW (window)); - } -#endif - window->details->ui_pending_initialize_menus_part_2 = FALSE; + EEL_CALL_METHOD (NAUTILUS_WINDOW_CLASS, window, + merge_menus_2, (window)); } if (window->details->ui_is_frozen) { @@ -432,19 +428,6 @@ nautilus_window_allow_reload (NautilusWindow *window, gboolean allow) } void -nautilus_window_allow_burn_cd (NautilusWindow *window, gboolean allow) -{ - g_return_if_fail (NAUTILUS_IS_WINDOW (window)); - - nautilus_window_ui_freeze (window); - - nautilus_bonobo_set_hidden (window->details->shell_ui, - NAUTILUS_COMMAND_BURN_CD, !allow); - - nautilus_window_ui_thaw (window); -} - -void nautilus_window_go_home (NautilusWindow *window) { char *home_uri; @@ -469,29 +452,6 @@ nautilus_window_go_home (NautilusWindow *window) } void -nautilus_window_launch_cd_burner (NautilusWindow *window) -{ - GError *error; - char *argv[] = { "nautilus-cd-burner", NULL}; - char *text; - - error = NULL; - if (!g_spawn_async (NULL, - argv, NULL, - G_SPAWN_SEARCH_PATH, - NULL, NULL, - NULL, - &error)) { - text = g_strdup_printf (_("Unable to launch the cd burner application:\n%s"), error->message); - eel_show_error_dialog (text, - _("Can't launch cd burner"), - GTK_WINDOW (window)); - g_free (text); - g_error_free (error); - } -} - -void nautilus_window_prompt_for_location (NautilusWindow *window) { g_assert (NAUTILUS_IS_WINDOW (window)); @@ -620,6 +580,12 @@ real_merge_menus (NautilusWindow *window) } static void +real_merge_menus_2 (NautilusWindow *window) +{ + window->details->ui_pending_initialize_menus_part_2 = FALSE; +} + +static void nautilus_window_constructed (NautilusWindow *window) { nautilus_window_ui_freeze (window); @@ -630,7 +596,6 @@ nautilus_window_constructed (NautilusWindow *window) merge_menus, (window)); nautilus_window_allow_stop (window, FALSE); - nautilus_window_allow_burn_cd (window, FALSE); /* Set up undo manager */ nautilus_undo_manager_attach (window->application->undo_manager, G_OBJECT (window)); @@ -1601,6 +1566,7 @@ nautilus_window_class_init (NautilusWindowClass *class) class->get_title = real_get_title; class->set_title = real_set_title; class->merge_menus = real_merge_menus; + class->merge_menus_2 = real_merge_menus_2; class->set_content_view_widget = real_set_content_view_widget; class->load_view_as_menu = real_load_view_as_menu; diff --git a/src/nautilus-window.h b/src/nautilus-window.h index 747dec215..a9be2a192 100644 --- a/src/nautilus-window.h +++ b/src/nautilus-window.h @@ -69,6 +69,7 @@ typedef struct { void (* set_title) (NautilusWindow *window, const char *title); void (* merge_menus) (NautilusWindow *window); + void (* merge_menus_2) (NautilusWindow *window); void (* load_view_as_menu) (NautilusWindow *window); void (* set_content_view_widget) (NautilusWindow *window, NautilusViewFrame *frame); |