diff options
author | Alexander Larsson <alexl@redhat.com> | 2004-11-18 14:19:02 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2004-11-18 14:19:02 +0000 |
commit | cf0ba20a92ec62911c3eb99a8dcfe59a13bd63d3 (patch) | |
tree | 65d770afd32b267483d1fe55458e9750d9e8facf | |
parent | 6e8b5f72f04e54e1da519e5cd25740ae95e41666 (diff) | |
download | nautilus-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-- | ChangeLog | 21 | ||||
-rw-r--r-- | libnautilus-private/Makefile.am | 16 | ||||
-rw-r--r-- | libnautilus-private/nautilus-file-utilities.c | 19 | ||||
-rw-r--r-- | libnautilus-private/nautilus-file-utilities.h | 4 | ||||
-rw-r--r-- | libnautilus-private/nautilus-ui-utilities.c | 77 | ||||
-rw-r--r-- | libnautilus-private/nautilus-ui-utilities.h | 39 | ||||
-rw-r--r-- | src/file-manager/fm-desktop-icon-view.c | 20 | ||||
-rw-r--r-- | src/file-manager/fm-directory-view.c | 157 | ||||
-rw-r--r-- | src/file-manager/fm-icon-view.c | 27 | ||||
-rw-r--r-- | src/file-manager/fm-list-view.c | 17 | ||||
-rw-r--r-- | src/nautilus-navigation-window-menus.c | 1 | ||||
-rw-r--r-- | src/nautilus-shell-ui.xml | 6 | ||||
-rw-r--r-- | src/nautilus-spatial-window.c | 1 | ||||
-rw-r--r-- | src/nautilus-window-menus.c | 1 |
14 files changed, 255 insertions, 151 deletions
@@ -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> |