summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerman Poo-Caamano <gpoo@gnome.org>2008-06-09 17:36:06 +0000
committerGermán Poó Caamaño <gpoo@src.gnome.org>2008-06-09 17:36:06 +0000
commitc2c0c5c57034f82da9088005a37ae07d58c7058b (patch)
treea8638cc9c7eb272be717ece38201f4f1d1ffa34c
parente80e305b1f05c9b937f5d48954b273adbe1b9270 (diff)
downloadnautilus-c2c0c5c57034f82da9088005a37ae07d58c7058b.tar.gz
New function to fill submenus from extensions using
2008-06-08 German Poo-Caamano <gpoo@gnome.org> * src/nautilus-window-menus.c: (add_extension_menu_items): New function to fill submenus from extensions using NautilusMenuProvider::get_background_items. (nautilus_window_load_extension_menus): Fixed submenu support for extensions using NautilusMenuProvider::get_background_items. * src/file-manager/fm-directory-view.c: (search_in_menu_items): Fix typo. Submenus provided by extensions were not activated (#508878). (reset_extension_actions_menu): Code cleanup, using g_list_foreach instead for. svn path=/branches/gnome-2-22/; revision=14248
-rw-r--r--ChangeLog13
-rw-r--r--src/file-manager/fm-directory-view.c8
-rw-r--r--src/nautilus-window-menus.c100
3 files changed, 84 insertions, 37 deletions
diff --git a/ChangeLog b/ChangeLog
index e09bbada2..657e983f8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2008-06-08 German Poo-Caamano <gpoo@gnome.org>
+
+ * src/nautilus-window-menus.c:
+ (add_extension_menu_items): New function to fill submenus from
+ extensions using NautilusMenuProvider::get_background_items.
+ (nautilus_window_load_extension_menus): Fixed submenu support
+ for extensions using NautilusMenuProvider::get_background_items.
+ * src/file-manager/fm-directory-view.c:
+ (search_in_menu_items): Fix typo. Submenus provided by
+ extensions were not activated (#508878).
+ (reset_extension_actions_menu): Code cleanup, using g_list_foreach
+ instead for.
+
2008-05-31 Cosimo Cecchi <cosimoc@gnome.org>
* libnautilus-private/nautilus-file-operations.c:
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index 642672110..0744065d7 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -4425,7 +4425,7 @@ search_in_menu_items (GList* items, const char *item_name)
GList* submenus;
submenus = nautilus_menu_get_items (menu);
- ret = search_in_menu_items (submenus, name);
+ ret = search_in_menu_items (submenus, item_name);
nautilus_menu_item_list_free (submenus);
g_object_unref (menu);
if (ret) {
@@ -4626,7 +4626,6 @@ static void
reset_extension_actions_menu (FMDirectoryView *view, GList *selection)
{
GList *items;
- GList *l;
GtkUIManager *ui_manager;
/* Clear any previous inserted items in the extension actions placeholder */
@@ -4646,10 +4645,7 @@ reset_extension_actions_menu (FMDirectoryView *view, GList *selection)
if (items != NULL) {
add_extension_menu_items (view, selection, items, "");
- for (l = items; l != NULL; l = l->next) {
- g_object_unref (l->data);
- }
-
+ g_list_foreach (items, (GFunc) g_object_unref, NULL);
g_list_free (items);
}
}
diff --git a/src/nautilus-window-menus.c b/src/nautilus-window-menus.c
index 14a33f603..214b98278 100644
--- a/src/nautilus-window-menus.c
+++ b/src/nautilus-window-menus.c
@@ -774,15 +774,76 @@ get_extension_menus (NautilusWindow *window)
return items;
}
+static void
+add_extension_menu_items (NautilusWindow *window,
+ guint merge_id,
+ GtkActionGroup *action_group,
+ GList *menu_items,
+ const char *subdirectory)
+{
+ GtkUIManager *ui_manager;
+ GList *l;
+
+ ui_manager = window->details->ui_manager;
+
+ for (l = menu_items; l; l = l->next) {
+ NautilusMenuItem *item;
+ NautilusMenu *menu;
+ GtkAction *action;
+ char *path;
+
+ item = NAUTILUS_MENU_ITEM (l->data);
+
+ g_object_get (item, "menu", &menu, NULL);
+
+ action = nautilus_action_from_menu_item (item);
+ gtk_action_group_add_action (action_group, action);
+
+ path = g_build_path ("/", POPUP_PATH_EXTENSION_ACTIONS, subdirectory, NULL);
+ gtk_ui_manager_add_ui (ui_manager,
+ merge_id,
+ path,
+ gtk_action_get_name (action),
+ gtk_action_get_name (action),
+ (menu != NULL) ? GTK_UI_MANAGER_MENU : GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+ g_free (path);
+
+ path = g_build_path ("/", MENU_PATH_EXTENSION_ACTIONS, subdirectory, NULL);
+ gtk_ui_manager_add_ui (ui_manager,
+ merge_id,
+ path,
+ gtk_action_get_name (action),
+ gtk_action_get_name (action),
+ (menu != NULL) ? GTK_UI_MANAGER_MENU : GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+ g_free (path);
+
+ /* recursively fill the menu */
+ if (menu != NULL) {
+ char *subdir;
+ GList *children;
+
+ children = nautilus_menu_get_items (menu);
+
+ subdir = g_build_path ("/", subdirectory, "/", gtk_action_get_name (action), NULL);
+ add_extension_menu_items (window,
+ merge_id,
+ action_group,
+ children,
+ subdir);
+
+ nautilus_menu_item_list_free (children);
+ g_free (subdir);
+ }
+ }
+}
+
void
nautilus_window_load_extension_menus (NautilusWindow *window)
{
- NautilusMenuItem *item;
GtkActionGroup *action_group;
- GtkAction *action;
GList *items;
- GList *l;
- int i;
guint merge_id;
if (window->details->extensions_menu_merge_id != 0) {
@@ -807,35 +868,12 @@ nautilus_window_load_extension_menus (NautilusWindow *window)
items = get_extension_menus (window);
- for (l = items, i = 0; l != NULL; l = l->next, i++) {
- item = NAUTILUS_MENU_ITEM (l->data);
+ if (items != NULL) {
+ add_extension_menu_items (window, merge_id, action_group, items, "");
- action = nautilus_action_from_menu_item (item);
- gtk_action_group_add_action (action_group,
- GTK_ACTION (action));
- g_object_unref (action);
-
- gtk_ui_manager_add_ui (window->details->ui_manager,
- merge_id,
- MENU_PATH_EXTENSION_ACTIONS,
- gtk_action_get_name (action),
- gtk_action_get_name (action),
- GTK_UI_MANAGER_MENUITEM,
- FALSE);
-
- gtk_ui_manager_add_ui (window->details->ui_manager,
- merge_id,
- POPUP_PATH_EXTENSION_ACTIONS,
- gtk_action_get_name (action),
- gtk_action_get_name (action),
- GTK_UI_MANAGER_MENUITEM,
- FALSE);
-
-
- g_object_unref (item);
+ g_list_foreach (items, (GFunc) g_object_unref, NULL);
+ g_list_free (items);
}
-
- g_list_free (items);
}