summaryrefslogtreecommitdiff
path: root/src/nautilus-window-toolbars.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nautilus-window-toolbars.c')
-rw-r--r--src/nautilus-window-toolbars.c62
1 files changed, 62 insertions, 0 deletions
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);
+}