summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2004-11-18 14:19:02 +0000
committerAlexander Larsson <alexl@src.gnome.org>2004-11-18 14:19:02 +0000
commitcf0ba20a92ec62911c3eb99a8dcfe59a13bd63d3 (patch)
tree65d770afd32b267483d1fe55458e9750d9e8facf
parent6e8b5f72f04e54e1da519e5cd25740ae95e41666 (diff)
downloadnautilus-cf0ba20a92ec62911c3eb99a8dcfe59a13bd63d3.tar.gz
Move some functions to nautilus-ui-utilities
2004-11-18 Alexander Larsson <alexl@redhat.com> * libnautilus-private/nautilus-file-utilities.[ch]: * src/nautilus-spatial-window.c: * src/nautilus-navigation-window-menus.c: * src/nautilus-window-menus.c: Move some functions to nautilus-ui-utilities * libnautilus-private/Makefile.am: * libnautilus-private/nautilus-ui-utilities.[ch]: Various ui utility functions * src/file-manager/fm-desktop-icon-view.c: * src/file-manager/fm-directory-view.c: * src/file-manager/fm-icon-view.c: * src/file-manager/fm-list-view.c: Unmerge everything on destroy * src/nautilus-shell-ui.xml: Remove unused stuff
-rw-r--r--ChangeLog21
-rw-r--r--libnautilus-private/Makefile.am16
-rw-r--r--libnautilus-private/nautilus-file-utilities.c19
-rw-r--r--libnautilus-private/nautilus-file-utilities.h4
-rw-r--r--libnautilus-private/nautilus-ui-utilities.c77
-rw-r--r--libnautilus-private/nautilus-ui-utilities.h39
-rw-r--r--src/file-manager/fm-desktop-icon-view.c20
-rw-r--r--src/file-manager/fm-directory-view.c157
-rw-r--r--src/file-manager/fm-icon-view.c27
-rw-r--r--src/file-manager/fm-list-view.c17
-rw-r--r--src/nautilus-navigation-window-menus.c1
-rw-r--r--src/nautilus-shell-ui.xml6
-rw-r--r--src/nautilus-spatial-window.c1
-rw-r--r--src/nautilus-window-menus.c1
14 files changed, 255 insertions, 151 deletions
diff --git a/ChangeLog b/ChangeLog
index 1831f347b..d4b93fa96 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,26 @@
2004-11-18 Alexander Larsson <alexl@redhat.com>
+ * libnautilus-private/nautilus-file-utilities.[ch]:
+ * src/nautilus-spatial-window.c:
+ * src/nautilus-navigation-window-menus.c:
+ * src/nautilus-window-menus.c:
+ Move some functions to nautilus-ui-utilities
+
+ * libnautilus-private/Makefile.am:
+ * libnautilus-private/nautilus-ui-utilities.[ch]:
+ Various ui utility functions
+
+ * src/file-manager/fm-desktop-icon-view.c:
+ * src/file-manager/fm-directory-view.c:
+ * src/file-manager/fm-icon-view.c:
+ * src/file-manager/fm-list-view.c:
+ Unmerge everything on destroy
+
+ * src/nautilus-shell-ui.xml:
+ Remove unused stuff
+
+2004-11-18 Alexander Larsson <alexl@redhat.com>
+
* libnautilus-private/nautilus-clipboard-monitor.c:
Handle ownership changes from XFixes
diff --git a/libnautilus-private/Makefile.am b/libnautilus-private/Makefile.am
index c20ded730..ea7b245ee 100644
--- a/libnautilus-private/Makefile.am
+++ b/libnautilus-private/Makefile.am
@@ -48,9 +48,9 @@ libnautilus_private_la_SOURCES = \
nautilus-audio-player.h \
nautilus-bookmark.c \
nautilus-bookmark.h \
+ nautilus-cdrom-extensions.h \
nautilus-cell-renderer-pixbuf-emblem.c \
nautilus-cell-renderer-pixbuf-emblem.h \
- nautilus-cdrom-extensions.h \
nautilus-clipboard-monitor.c \
nautilus-clipboard-monitor.h \
nautilus-clipboard.c \
@@ -63,16 +63,16 @@ libnautilus_private_la_SOURCES = \
nautilus-customization-data.h \
nautilus-default-file-icon.c \
nautilus-default-file-icon.h \
- nautilus-desktop-directory.c \
- nautilus-desktop-directory.h \
nautilus-desktop-directory-file.c \
nautilus-desktop-directory-file.h \
+ nautilus-desktop-directory.c \
+ nautilus-desktop-directory.h \
nautilus-desktop-icon-file.c \
nautilus-desktop-icon-file.h \
- nautilus-desktop-link.c \
- nautilus-desktop-link.h \
nautilus-desktop-link-monitor.c \
nautilus-desktop-link-monitor.h \
+ nautilus-desktop-link.c \
+ nautilus-desktop-link.h \
nautilus-directory-async.c \
nautilus-directory-background.c \
nautilus-directory-background.h \
@@ -95,9 +95,9 @@ libnautilus_private_la_SOURCES = \
nautilus-file-changes-queue.h \
nautilus-file-dnd.c \
nautilus-file-dnd.h \
+ nautilus-file-operations-progress-icons.h \
nautilus-file-operations-progress.c \
nautilus-file-operations-progress.h \
- nautilus-file-operations-progress-icons.h \
nautilus-file-operations.c \
nautilus-file-operations.h \
nautilus-file-private.h \
@@ -151,8 +151,8 @@ libnautilus_private_la_SOURCES = \
nautilus-monitor.h \
nautilus-program-choosing.c \
nautilus-program-choosing.h \
- nautilus-recent.h \
nautilus-recent.c \
+ nautilus-recent.h \
nautilus-sidebar-provider.c \
nautilus-sidebar-provider.h \
nautilus-sidebar.c \
@@ -171,6 +171,8 @@ libnautilus_private_la_SOURCES = \
nautilus-trash-monitor.h \
nautilus-tree-view-drag-dest.c \
nautilus-tree-view-drag-dest.h \
+ nautilus-ui-utilities.c \
+ nautilus-ui-utilities.h \
nautilus-undo-manager.c \
nautilus-undo-manager.h \
nautilus-undo-private.h \
diff --git a/libnautilus-private/nautilus-file-utilities.c b/libnautilus-private/nautilus-file-utilities.c
index 6264735d8..578eaf8ce 100644
--- a/libnautilus-private/nautilus-file-utilities.c
+++ b/libnautilus-private/nautilus-file-utilities.c
@@ -342,25 +342,6 @@ nautilus_pixmap_file (const char *partial_path)
}
char *
-nautilus_get_ui_directory (void)
-{
- return g_strdup (DATADIR "/nautilus/ui");
-}
-
-char *
-nautilus_ui_file (const char *partial_path)
-{
- char *path;
-
- path = g_build_filename (DATADIR "/nautilus/ui", partial_path, NULL);
- if (g_file_test (path, G_FILE_TEST_EXISTS)) {
- return path;
- }
- g_free (path);
- return NULL;
-}
-
-char *
nautilus_get_data_file_path (const char *partial_path)
{
char *path;
diff --git a/libnautilus-private/nautilus-file-utilities.h b/libnautilus-private/nautilus-file-utilities.h
index cefe46750..5b71e461d 100644
--- a/libnautilus-private/nautilus-file-utilities.h
+++ b/libnautilus-private/nautilus-file-utilities.h
@@ -66,10 +66,6 @@ char * nautilus_pixmap_file (const char *partial_path);
/* Locate a file in either the uers directory or the datadir. */
char * nautilus_get_data_file_path (const char *partial_path);
-
-char *nautilus_get_ui_directory (void);
-char *nautilus_ui_file (const char *partial_path);
-
/* Return an allocated file name that is guranteed to be unique. */
char * nautilus_unique_temporary_file_name (void);
char * nautilus_find_file_in_gnome_path (char *file);
diff --git a/libnautilus-private/nautilus-ui-utilities.c b/libnautilus-private/nautilus-ui-utilities.c
new file mode 100644
index 000000000..6188bb048
--- /dev/null
+++ b/libnautilus-private/nautilus-ui-utilities.c
@@ -0,0 +1,77 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+
+/* nautilus-ui-utilities.c - helper functions for GtkUIManager stuff
+
+ Copyright (C) 2004 Red Hat, Inc.
+
+ The Gnome Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The Gnome Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the Gnome Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+ Authors: Alexander Larsson <alexl@redhat.com>
+*/
+
+#include <config.h>
+#include "nautilus-ui-utilities.h"
+
+void
+nautilus_ui_unmerge_ui (GtkUIManager *ui_manager,
+ guint *merge_id,
+ GtkActionGroup **action_group)
+{
+ if (*merge_id != 0) {
+ gtk_ui_manager_remove_ui (ui_manager,
+ *merge_id);
+ *merge_id = 0;
+ }
+ if (*action_group != NULL) {
+ gtk_ui_manager_remove_action_group (ui_manager,
+ *action_group);
+ *action_group = NULL;
+ }
+}
+
+void
+nautilus_ui_prepare_merge_ui (GtkUIManager *ui_manager,
+ const char *name,
+ guint *merge_id,
+ GtkActionGroup **action_group)
+{
+ *merge_id = gtk_ui_manager_new_merge_id (ui_manager);
+ *action_group = gtk_action_group_new (name);
+ gtk_action_group_set_translation_domain (*action_group, GETTEXT_PACKAGE);
+ gtk_ui_manager_insert_action_group (ui_manager, *action_group, 0);
+ g_object_unref (*action_group); /* owned by ui manager */
+}
+
+
+char *
+nautilus_get_ui_directory (void)
+{
+ return g_strdup (DATADIR "/nautilus/ui");
+}
+
+char *
+nautilus_ui_file (const char *partial_path)
+{
+ char *path;
+
+ path = g_build_filename (DATADIR "/nautilus/ui", partial_path, NULL);
+ if (g_file_test (path, G_FILE_TEST_EXISTS)) {
+ return path;
+ }
+ g_free (path);
+ return NULL;
+}
+
diff --git a/libnautilus-private/nautilus-ui-utilities.h b/libnautilus-private/nautilus-ui-utilities.h
new file mode 100644
index 000000000..108a6596c
--- /dev/null
+++ b/libnautilus-private/nautilus-ui-utilities.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+
+/* nautilus-ui-utilities.h - helper functions for GtkUIManager stuff
+
+ Copyright (C) 2004 Red Hat, Inc.
+
+ The Gnome Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The Gnome Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the Gnome Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+ Authors: Alexander Larsson <alexl@redhat.com>
+*/
+#ifndef NAUTILUS_UI_UTILITIES_H
+#define NAUTILUS_UI_UTILITIES_H
+
+#include <gtk/gtkuimanager.h>
+
+char *nautilus_get_ui_directory (void);
+char *nautilus_ui_file (const char *partial_path);
+void nautilus_ui_unmerge_ui (GtkUIManager *ui_manager,
+ guint *merge_id,
+ GtkActionGroup **action_group);
+void nautilus_ui_prepare_merge_ui (GtkUIManager *ui_manager,
+ const char *name,
+ guint *merge_id,
+ GtkActionGroup **action_group);
+
+#endif /* NAUTILUS_UI_UTILITIES_H */
diff --git a/src/file-manager/fm-desktop-icon-view.c b/src/file-manager/fm-desktop-icon-view.c
index 5bf701c90..04aa9ceb5 100644
--- a/src/file-manager/fm-desktop-icon-view.c
+++ b/src/file-manager/fm-desktop-icon-view.c
@@ -51,6 +51,7 @@
#include <libnautilus-private/nautilus-file-changes-queue.h>
#include <libnautilus-private/nautilus-file-operations.h>
#include <libnautilus-private/nautilus-file-utilities.h>
+#include <libnautilus-private/nautilus-ui-utilities.h>
#include <libnautilus-private/nautilus-global-preferences.h>
#include <libnautilus-private/nautilus-view-factory.h>
#include <libnautilus-private/nautilus-link.h>
@@ -74,7 +75,8 @@ struct FMDesktopIconViewDetails
{
GdkWindow *root_window;
GtkActionGroup *desktop_action_group;
-
+ guint desktop_merge_id;
+
/* For the desktop rescanning
*/
gulong delayed_init_signal;
@@ -221,6 +223,7 @@ static void
fm_desktop_icon_view_destroy (GtkObject *object)
{
FMDesktopIconView *icon_view;
+ GtkUIManager *ui_manager;
icon_view = FM_DESKTOP_ICON_VIEW (object);
@@ -234,6 +237,12 @@ fm_desktop_icon_view_destroy (GtkObject *object)
default_zoom_level_changed,
icon_view);
+ ui_manager = fm_directory_view_get_ui_manager (FM_DIRECTORY_VIEW (icon_view));
+ if (ui_manager != NULL) {
+ nautilus_ui_unmerge_ui (ui_manager,
+ &icon_view->details->desktop_merge_id,
+ &icon_view->details->desktop_action_group);
+ }
GTK_OBJECT_CLASS (parent_class)->destroy (object);
}
@@ -670,7 +679,6 @@ real_merge_menus (FMDirectoryView *view)
GtkUIManager *ui_manager;
GtkActionGroup *action_group;
GtkAction *action;
- GError *error;
char *file;
EEL_CALL_PARENT (FM_DIRECTORY_VIEW_CLASS, merge_menus, (view));
@@ -689,15 +697,11 @@ real_merge_menus (FMDirectoryView *view)
gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
g_object_unref (action_group); /* owned by ui manager */
- error = NULL;
file = nautilus_ui_file ("nautilus-desktop-icon-view-ui.xml");
- if (!gtk_ui_manager_add_ui_from_file (ui_manager, file, &error)) {
- g_error ("building menus failed: %s", error->message);
- g_error_free (error);
- }
+ desktop_view->details->desktop_merge_id =
+ gtk_ui_manager_add_ui_from_file (ui_manager, file, NULL);
g_free (file);
-
/* We hide the reset background item on the desktop */
action = gtk_ui_manager_get_action (ui_manager,
"/background/After Zoom Items/Background Items/Use Default Background");
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index 28da4783d..57a270449 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -88,6 +88,7 @@
#include <libnautilus-private/nautilus-program-choosing.h>
#include <libnautilus-private/nautilus-trash-directory.h>
#include <libnautilus-private/nautilus-trash-monitor.h>
+#include <libnautilus-private/nautilus-ui-utilities.h>
#include <unistd.h>
/* Number of seconds until cancel dialog shows up */
@@ -162,6 +163,7 @@ struct FMDirectoryViewDetails
NautilusDirectory *model;
NautilusFile *directory_as_file;
GtkActionGroup *dir_action_group;
+ guint dir_merge_id;
GList *scripts_directory_list;
GtkActionGroup *scripts_action_group;
@@ -1622,6 +1624,34 @@ fm_directory_view_init (FMDirectoryView *view)
}
static void
+unmerge_ui (FMDirectoryView *view)
+{
+ GtkUIManager *ui_manager;
+
+ if (view->details->window == NULL) {
+ return;
+ }
+
+ ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
+
+ nautilus_ui_unmerge_ui (ui_manager,
+ &view->details->dir_merge_id,
+ &view->details->dir_action_group);
+ nautilus_ui_unmerge_ui (ui_manager,
+ &view->details->extensions_menu_merge_id,
+ &view->details->extensions_menu_action_group);
+ nautilus_ui_unmerge_ui (ui_manager,
+ &view->details->open_with_merge_id,
+ &view->details->open_with_action_group);
+ nautilus_ui_unmerge_ui (ui_manager,
+ &view->details->scripts_merge_id,
+ &view->details->scripts_action_group);
+ nautilus_ui_unmerge_ui (ui_manager,
+ &view->details->templates_merge_id,
+ &view->details->templates_action_group);
+}
+
+static void
fm_directory_view_destroy (GtkObject *object)
{
FMDirectoryView *view;
@@ -1631,6 +1661,8 @@ fm_directory_view_destroy (GtkObject *object)
disconnect_model_handlers (view);
+ unmerge_ui (view);
+
/* We don't own the window, so no unref */
view->details->window = NULL;
@@ -2862,6 +2894,9 @@ fm_directory_view_get_item_count (FMDirectoryView *view)
GtkUIManager *
fm_directory_view_get_ui_manager (FMDirectoryView *view)
{
+ if (view->details->window == NULL) {
+ return NULL;
+ }
return nautilus_window_info_get_ui_manager (view->details->window);
}
@@ -3827,33 +3862,20 @@ reset_open_with_menu (FMDirectoryView *view, GList *selection)
int index;
gboolean other_applications_visible;
GtkUIManager *ui_manager;
- guint merge_id;
- GtkActionGroup *action_group;
GtkAction *action;
/* Clear any previous inserted items in the applications and viewers placeholders */
ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
- if (view->details->open_with_merge_id != 0) {
- gtk_ui_manager_remove_ui (ui_manager,
- view->details->open_with_merge_id);
- view->details->open_with_merge_id = 0;
- }
-
- if (view->details->open_with_action_group != NULL) {
- gtk_ui_manager_remove_action_group (ui_manager,
- view->details->open_with_action_group);
- view->details->open_with_action_group = NULL;
- }
+ nautilus_ui_unmerge_ui (ui_manager,
+ &view->details->open_with_merge_id,
+ &view->details->open_with_action_group);
+
+ nautilus_ui_prepare_merge_ui (ui_manager,
+ "OpenWithGroup",
+ &view->details->open_with_merge_id,
+ &view->details->open_with_action_group);
- merge_id = gtk_ui_manager_new_merge_id (ui_manager);
- view->details->open_with_merge_id = merge_id;
- action_group = gtk_action_group_new ("OpenWithGroup");
- view->details->open_with_action_group = action_group;
- gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
- gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
- g_object_unref (action_group); /* owned by ui manager */
-
num_applications = 0;
/* This menu is only displayed when there's one selected item. */
@@ -4312,31 +4334,18 @@ reset_extension_actions_menu (FMDirectoryView *view, GList *selection)
GList *items;
GList *l;
GtkUIManager *ui_manager;
- guint merge_id;
- GtkActionGroup *action_group;
/* Clear any previous inserted items in the extension actions placeholder */
ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
- if (view->details->extensions_menu_merge_id != 0) {
- gtk_ui_manager_remove_ui (ui_manager,
- view->details->extensions_menu_merge_id);
- view->details->extensions_menu_merge_id = 0;
- }
-
- if (view->details->extensions_menu_action_group != NULL) {
- gtk_ui_manager_remove_action_group (ui_manager,
- view->details->extensions_menu_action_group);
- view->details->extensions_menu_action_group = NULL;
- }
+ nautilus_ui_unmerge_ui (ui_manager,
+ &view->details->extensions_menu_merge_id,
+ &view->details->extensions_menu_action_group);
- merge_id = gtk_ui_manager_new_merge_id (ui_manager);
- view->details->extensions_menu_merge_id = merge_id;
- action_group = gtk_action_group_new ("DirExtensionsMenuGroup");
- view->details->extensions_menu_action_group = action_group;
- gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
- gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
- g_object_unref (action_group); /* owned by ui manager */
+ nautilus_ui_prepare_merge_ui (ui_manager,
+ "DirExtensionsMenuGroup",
+ &view->details->extensions_menu_merge_id,
+ &view->details->extensions_menu_action_group);
/* only query for the unique files */
unique_selection = get_unique_files (selection);
@@ -4757,8 +4766,6 @@ update_scripts_menu (FMDirectoryView *view)
NautilusDirectory *directory;
char *uri;
GtkUIManager *ui_manager;
- guint merge_id;
- GtkActionGroup *action_group;
GtkAction *action;
/* There is a race condition here. If we don't mark the scripts menu as
@@ -4767,24 +4774,14 @@ update_scripts_menu (FMDirectoryView *view)
view->details->scripts_invalid = FALSE;
ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
- if (view->details->scripts_merge_id != 0) {
- gtk_ui_manager_remove_ui (ui_manager,
- view->details->scripts_merge_id);
- view->details->scripts_merge_id = 0;
- }
-
- if (view->details->scripts_action_group != NULL) {
- gtk_ui_manager_remove_action_group (ui_manager,
- view->details->scripts_action_group);
- view->details->scripts_action_group = NULL;
- }
-
- merge_id = gtk_ui_manager_new_merge_id (ui_manager);
- view->details->scripts_merge_id = merge_id;
- action_group = gtk_action_group_new ("ScriptsGroup");
- view->details->scripts_action_group = action_group;
- gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
- g_object_unref (action_group); /* owned by ui manager */
+ nautilus_ui_unmerge_ui (ui_manager,
+ &view->details->scripts_merge_id,
+ &view->details->scripts_action_group);
+
+ nautilus_ui_prepare_merge_ui (ui_manager,
+ "ScriptsGroup",
+ &view->details->scripts_merge_id,
+ &view->details->scripts_action_group);
/* As we walk through the directories, remove any that no longer belong. */
any_scripts = FALSE;
@@ -4990,8 +4987,6 @@ update_templates_menu (FMDirectoryView *view)
NautilusDirectory *directory;
GtkUIManager *ui_manager;
char *uri;
- guint merge_id;
- GtkActionGroup *action_group;
GtkAction *action;
/* There is a race condition here. If we don't mark the scripts menu as
@@ -5000,24 +4995,14 @@ update_templates_menu (FMDirectoryView *view)
view->details->templates_invalid = FALSE;
ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
- if (view->details->templates_merge_id != 0) {
- gtk_ui_manager_remove_ui (ui_manager,
- view->details->templates_merge_id);
- view->details->templates_merge_id = 0;
- }
-
- if (view->details->templates_action_group != NULL) {
- gtk_ui_manager_remove_action_group (ui_manager,
- view->details->templates_action_group);
- view->details->templates_action_group = NULL;
- }
+ nautilus_ui_unmerge_ui (ui_manager,
+ &view->details->templates_merge_id,
+ &view->details->templates_action_group);
- merge_id = gtk_ui_manager_new_merge_id (ui_manager);
- view->details->templates_merge_id = merge_id;
- action_group = gtk_action_group_new ("TemplatesGroup");
- view->details->templates_action_group = action_group;
- gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
- g_object_unref (action_group); /* owned by ui manager */
+ nautilus_ui_prepare_merge_ui (ui_manager,
+ "TemplatesGroup",
+ &view->details->templates_merge_id,
+ &view->details->templates_action_group);
/* As we walk through the directories, remove any that no longer belong. */
any_templates = FALSE;
@@ -5843,11 +5828,10 @@ static GtkToggleActionEntry directory_view_toggle_entries[] = {
static void
real_merge_menus (FMDirectoryView *view)
{
- GtkUIManager *ui_manager;
- char *file;
- GError *error;
GtkActionGroup *action_group;
+ GtkUIManager *ui_manager;
GtkAction *action;
+ char *file;
ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
@@ -5868,15 +5852,10 @@ real_merge_menus (FMDirectoryView *view)
gtk_ui_manager_insert_action_group (ui_manager, action_group, -1);
g_object_unref (action_group); /* owned by ui manager */
- error = NULL;
file = nautilus_ui_file ("nautilus-directory-view-ui.xml");
- if (!gtk_ui_manager_add_ui_from_file (ui_manager, file, &error)) {
- g_error ("building menus failed: %s", error->message);
- g_error_free (error);
- }
+ view->details->dir_merge_id = gtk_ui_manager_add_ui_from_file (ui_manager, file, NULL);
g_free (file);
-
g_signal_connect_object (fm_directory_view_get_background (view), "settings_changed",
G_CALLBACK (schedule_update_menus), G_OBJECT (view),
G_CONNECT_SWAPPED);
diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c
index a378e4f0c..7a9e68435 100644
--- a/src/file-manager/fm-icon-view.c
+++ b/src/file-manager/fm-icon-view.c
@@ -61,6 +61,7 @@
#include <libnautilus-private/nautilus-directory.h>
#include <libnautilus-private/nautilus-dnd.h>
#include <libnautilus-private/nautilus-file-utilities.h>
+#include <libnautilus-private/nautilus-ui-utilities.h>
#include <libnautilus-private/nautilus-global-preferences.h>
#include <libnautilus-private/nautilus-icon-container.h>
#include <libnautilus-private/nautilus-icon-dnd.h>
@@ -109,6 +110,7 @@ struct FMIconViewDetails
gboolean sort_reversed;
GtkActionGroup *icon_action_group;
+ guint icon_merge_id;
NautilusAudioPlayerData *audio_player_data;
int audio_preview_timeout;
@@ -197,6 +199,7 @@ static void
fm_icon_view_destroy (GtkObject *object)
{
FMIconView *icon_view;
+ GtkUIManager *ui_manager;
icon_view = FM_ICON_VIEW (object);
@@ -213,6 +216,13 @@ fm_icon_view_destroy (GtkObject *object)
icon_view->details->icons_not_positioned = NULL;
}
+ ui_manager = fm_directory_view_get_ui_manager (FM_DIRECTORY_VIEW (icon_view));
+ if (ui_manager != NULL) {
+ nautilus_ui_unmerge_ui (ui_manager,
+ &icon_view->details->icon_merge_id,
+ &icon_view->details->icon_action_group);
+ }
+
GTK_OBJECT_CLASS (fm_icon_view_parent_class)->destroy (object);
}
@@ -1445,7 +1455,6 @@ fm_icon_view_merge_menus (FMDirectoryView *view)
GtkUIManager *ui_manager;
GtkActionGroup *action_group;
GtkAction *action;
- GError *error;
char *file;
g_assert (FM_IS_ICON_VIEW (view));
@@ -1459,7 +1468,7 @@ fm_icon_view_merge_menus (FMDirectoryView *view)
action_group = gtk_action_group_new ("IconViewActions");
gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
icon_view->details->icon_action_group = action_group;
- gtk_action_group_add_actions (action_group,
+ gtk_action_group_add_actions (action_group,
icon_view_entries, G_N_ELEMENTS (icon_view_entries),
icon_view);
gtk_action_group_add_toggle_actions (action_group,
@@ -1475,12 +1484,9 @@ fm_icon_view_merge_menus (FMDirectoryView *view)
gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
g_object_unref (action_group); /* owned by ui manager */
- error = NULL;
file = nautilus_ui_file ("nautilus-icon-view-ui.xml");
- if (!gtk_ui_manager_add_ui_from_file (ui_manager, file, &error)) {
- g_error ("building menus failed: %s", error->message);
- g_error_free (error);
- }
+ icon_view->details->icon_merge_id =
+ gtk_ui_manager_add_ui_from_file (ui_manager, file, NULL);
g_free (file);
/* Do one-time state-setting here; context-dependent state-setting
@@ -1493,18 +1499,15 @@ fm_icon_view_merge_menus (FMDirectoryView *view)
}
if (FM_IS_DESKTOP_ICON_VIEW (icon_view)) {
- guint merge_id;
-
- merge_id = gtk_ui_manager_new_merge_id (ui_manager);
gtk_ui_manager_add_ui (ui_manager,
- merge_id,
+ icon_view->details->icon_merge_id,
POPUP_PATH_ICON_APPEARANCE,
FM_ACTION_STRETCH,
FM_ACTION_STRETCH,
GTK_UI_MANAGER_MENUITEM,
FALSE);
gtk_ui_manager_add_ui (ui_manager,
- merge_id,
+ icon_view->details->icon_merge_id,
POPUP_PATH_ICON_APPEARANCE,
FM_ACTION_UNSTRETCH,
FM_ACTION_UNSTRETCH,
diff --git a/src/file-manager/fm-list-view.c b/src/file-manager/fm-list-view.c
index 7de544154..fc7db733b 100644
--- a/src/file-manager/fm-list-view.c
+++ b/src/file-manager/fm-list-view.c
@@ -57,6 +57,7 @@
#include <libnautilus-private/nautilus-dnd.h>
#include <libnautilus-private/nautilus-file-dnd.h>
#include <libnautilus-private/nautilus-file-utilities.h>
+#include <libnautilus-private/nautilus-ui-utilities.h>
#include <libnautilus-private/nautilus-global-preferences.h>
#include <libnautilus-private/nautilus-icon-dnd.h>
#include <libnautilus-private/nautilus-icon-factory.h>
@@ -79,6 +80,7 @@ struct FMListViewDetails {
GtkTreeView *tree_view;
FMListModel *model;
GtkActionGroup *list_action_group;
+ guint list_merge_id;
GtkTreeViewColumn *file_name_column;
int file_name_column_num;
@@ -1631,7 +1633,6 @@ fm_list_view_merge_menus (FMDirectoryView *view)
FMListView *list_view;
GtkUIManager *ui_manager;
GtkActionGroup *action_group;
- GError *error;
char *file;
EEL_CALL_PARENT (FM_DIRECTORY_VIEW_CLASS, merge_menus, (view));
@@ -1650,12 +1651,8 @@ fm_list_view_merge_menus (FMDirectoryView *view)
gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
g_object_unref (action_group); /* owned by ui manager */
- error = NULL;
file = nautilus_ui_file ("nautilus-list-view-ui.xml");
- if (!gtk_ui_manager_add_ui_from_file (ui_manager, file, &error)) {
- g_error ("building menus failed: %s", error->message);
- g_error_free (error);
- }
+ list_view->details->list_merge_id = gtk_ui_manager_add_ui_from_file (ui_manager, file, NULL);
g_free (file);
list_view->details->menus_ready = TRUE;
@@ -2003,6 +2000,7 @@ static void
fm_list_view_dispose (GObject *object)
{
FMListView *list_view;
+ GtkUIManager *ui_manager;
list_view = FM_LIST_VIEW (object);
@@ -2016,6 +2014,13 @@ fm_list_view_dispose (GObject *object)
list_view->details->drag_dest = NULL;
}
+ ui_manager = fm_directory_view_get_ui_manager (FM_DIRECTORY_VIEW (list_view));
+ if (ui_manager != NULL) {
+ nautilus_ui_unmerge_ui (ui_manager,
+ &list_view->details->list_merge_id,
+ &list_view->details->list_action_group);
+ }
+
G_OBJECT_CLASS (parent_class)->dispose (object);
}
diff --git a/src/nautilus-navigation-window-menus.c b/src/nautilus-navigation-window-menus.c
index 2b6327825..bface4167 100644
--- a/src/nautilus-navigation-window-menus.c
+++ b/src/nautilus-navigation-window-menus.c
@@ -59,6 +59,7 @@
#include <libgnomevfs/gnome-vfs-utils.h>
#include <libgnomevfs/gnome-vfs-ops.h>
#include <libnautilus-private/nautilus-file-utilities.h>
+#include <libnautilus-private/nautilus-ui-utilities.h>
#include <libnautilus-private/nautilus-icon-factory.h>
#include <libnautilus-private/nautilus-undo-manager.h>
diff --git a/src/nautilus-shell-ui.xml b/src/nautilus-shell-ui.xml
index c03224d38..41e8c6371 100644
--- a/src/nautilus-shell-ui.xml
+++ b/src/nautilus-shell-ui.xml
@@ -32,12 +32,6 @@
<menu action="Edit">
<placeholder name="Clipboard Actions">
-<!-- BONOBOTODO: These should be in the dir-view? or are they text related?
- <menuitem name="Cut" action="Cut"/>
- <menuitem name="Copy" action ="Copy"/>
- <menuitem name="Paste" action="Paste"/>
- <menuitem name="Clear" action="Clear"/>
--->
</placeholder>
<separator/>
diff --git a/src/nautilus-spatial-window.c b/src/nautilus-spatial-window.c
index 82c2f26e8..7bb34a0d4 100644
--- a/src/nautilus-spatial-window.c
+++ b/src/nautilus-spatial-window.c
@@ -63,6 +63,7 @@
#include <libgnomevfs/gnome-vfs-uri.h>
#include <libgnomevfs/gnome-vfs-utils.h>
#include <libnautilus-private/nautilus-file-utilities.h>
+#include <libnautilus-private/nautilus-ui-utilities.h>
#include <libnautilus-private/nautilus-file-attributes.h>
#include <libnautilus-private/nautilus-global-preferences.h>
#include <libnautilus-private/nautilus-horizontal-splitter.h>
diff --git a/src/nautilus-window-menus.c b/src/nautilus-window-menus.c
index 590eedbeb..81a141073 100644
--- a/src/nautilus-window-menus.c
+++ b/src/nautilus-window-menus.c
@@ -59,6 +59,7 @@
#include <libgnomevfs/gnome-vfs-ops.h>
#include <libnautilus-extension/nautilus-menu-provider.h>
#include <libnautilus-private/nautilus-file-utilities.h>
+#include <libnautilus-private/nautilus-ui-utilities.h>
#include <libnautilus-private/nautilus-icon-factory.h>
#include <libnautilus-private/nautilus-module.h>
#include <libnautilus-private/nautilus-undo-manager.h>