summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Camp <dave@ximian.com>2003-12-10 20:37:55 +0000
committerDave Camp <campd@src.gnome.org>2003-12-10 20:37:55 +0000
commitbd6e1847ced6fc5f041f5a05c108290a450c8c05 (patch)
tree3b3017febacba094927981c8e339e4844b4d2f96
parenta8db4ea392288ce79fa521987d48b1ed70c9793e (diff)
downloadnautilus-NAUTILUS_EXTENSIONS_BRANCH_BEFORE_MERGE_1.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.
-rw-r--r--ChangeLog51
-rw-r--r--libnautilus-extension/nautilus-file-info.c9
-rw-r--r--libnautilus-extension/nautilus-file-info.h3
-rw-r--r--libnautilus-extension/nautilus-menu-item.c18
-rw-r--r--libnautilus-extension/nautilus-menu-item.h1
-rw-r--r--libnautilus-extension/nautilus-menu-provider.c44
-rw-r--r--libnautilus-extension/nautilus-menu-provider.h25
-rw-r--r--libnautilus-private/nautilus-bonobo-extensions.c137
-rw-r--r--libnautilus-private/nautilus-bonobo-extensions.h153
-rw-r--r--libnautilus-private/nautilus-file.c1
-rw-r--r--src/file-manager/fm-bonobo-provider.c1
-rw-r--r--src/file-manager/fm-directory-view.c118
-rw-r--r--src/file-manager/nautilus-directory-view-ui.xml5
-rw-r--r--src/nautilus-navigation-window-ui.xml10
-rw-r--r--src/nautilus-navigation-window.c14
-rw-r--r--src/nautilus-shell-ui.xml13
-rw-r--r--src/nautilus-window-manage-views.c18
-rw-r--r--src/nautilus-window-menus.c76
-rw-r--r--src/nautilus-window-private.h2
-rw-r--r--src/nautilus-window-toolbars.c62
-rw-r--r--src/nautilus-window.c52
-rw-r--r--src/nautilus-window.h1
22 files changed, 554 insertions, 260 deletions
diff --git a/ChangeLog b/ChangeLog
index 67ae71bee..dd04744e9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);