summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2004-11-16 19:09:00 +0000
committerAlexander Larsson <alexl@src.gnome.org>2004-11-16 19:09:00 +0000
commitb3d0666b403d31bc2fae5b12324c277f5c8730dc (patch)
treeeb71b219949ed3cbddb37d8451ba37e53876a04d
parent473eeb2523579bb7b6c281cad06033cbaac0f2c5 (diff)
downloadnautilus-b3d0666b403d31bc2fae5b12324c277f5c8730dc.tar.gz
Remove bonoboui dependencies
2004-11-16 Alexander Larsson <alexl@redhat.com> * configure.in: Remove bonoboui dependencies * libnautilus-private/Makefile.am: * libnautilus-private/nautilus-bonobo-extensions.[ch]: * libnautilus-private/nautilus-bonobo-ui.h: Remove unneeded files * libnautilus-private/nautilus-clipboard.c: Comment out for now. * libnautilus-private/nautilus-directory-metafile-monitor.c: * libnautilus-private/nautilus-metafile.c: * src/nautilus-application.c: * src/nautilus-history-sidebar.c: * src/nautilus-information-panel.c: * src/nautilus-main.c: (main): * src/nautilus-notes-viewer.c: * src/nautilus-sidebar-title.c: * src/file-manager/fm-properties-window.c: Remove bonobo includes * libnautilus-private/nautilus-file-utilities.[ch]: (nautilus_get_ui_directory), (nautilus_ui_file): Util functions for ui files. * libnautilus-private/nautilus-view.[ch]: * libnautilus-private/nautilus-window-info.[ch]: Remove bonoboui methods * src/Makefile.am: Add new files, remove some old ones Move ui files to datadir/nautilus/ui * src/nautilus-actions.h: New file with action names * src/nautilus-arrow-toolbutton.[ch]: New widget for back/forward buttons. * src/nautilus-desktop-window.c: * src/nautilus-navigation-window-menus.c: * src/nautilus-navigation-window-ui.xml: * src/nautilus-navigation-window.[ch]: * src/nautilus-shell-ui.xml: * src/nautilus-spatial-window-ui.xml: * src/nautilus-spatial-window.c: * src/nautilus-window-manage-views.[ch]: * src/nautilus-window-menus.c: * src/nautilus-window-private.h: * src/nautilus-window-toolbars.c: * src/nautilus-window.[ch]: Initial port to GtkUIManager * src/nautilus-profiler.[ch]: Remove * src/file-manager/Makefile.am: * src/file-manager/fm-actions.h: New file with action names * src/file-manager/fm-desktop-icon-view.c: * src/file-manager/fm-directory-view.[ch]: * src/file-manager/fm-icon-view.c: * src/file-manager/fm-list-view.c: * src/file-manager/nautilus-desktop-icon-view-ui.xml: * src/file-manager/nautilus-directory-view-ui.xml: * src/file-manager/nautilus-icon-view-ui.xml: * src/file-manager/nautilus-list-view-ui.xml: Initial port of views to GtkUIManager
-rw-r--r--ChangeLog73
-rw-r--r--configure.in11
-rw-r--r--libnautilus-private/Makefile.am3
-rw-r--r--libnautilus-private/nautilus-bonobo-extensions.c676
-rw-r--r--libnautilus-private/nautilus-bonobo-extensions.h123
-rw-r--r--libnautilus-private/nautilus-bonobo-ui.h130
-rw-r--r--libnautilus-private/nautilus-clipboard.c17
-rw-r--r--libnautilus-private/nautilus-directory-metafile-monitor.c1
-rw-r--r--libnautilus-private/nautilus-file-utilities.c19
-rw-r--r--libnautilus-private/nautilus-file-utilities.h4
-rw-r--r--libnautilus-private/nautilus-metafile.c1
-rw-r--r--libnautilus-private/nautilus-view.c50
-rw-r--r--libnautilus-private/nautilus-view.h10
-rw-r--r--libnautilus-private/nautilus-window-info.c6
-rw-r--r--libnautilus-private/nautilus-window-info.h10
-rw-r--r--src/Makefile.am9
-rw-r--r--src/file-manager/Makefile.am3
-rw-r--r--src/file-manager/fm-actions.h66
-rw-r--r--src/file-manager/fm-desktop-icon-view.c121
-rw-r--r--src/file-manager/fm-directory-view.c1744
-rw-r--r--src/file-manager/fm-directory-view.h7
-rw-r--r--src/file-manager/fm-icon-view.c471
-rw-r--r--src/file-manager/fm-list-view.c61
-rw-r--r--src/file-manager/fm-properties-window.c2
-rw-r--r--src/file-manager/nautilus-desktop-icon-view-ui.xml77
-rw-r--r--src/file-manager/nautilus-directory-view-ui.xml355
-rw-r--r--src/file-manager/nautilus-icon-view-ui.xml171
-rw-r--r--src/file-manager/nautilus-list-view-ui.xml19
-rw-r--r--src/nautilus-actions.h42
-rw-r--r--src/nautilus-application.c18
-rw-r--r--src/nautilus-arrow-toolbutton.c299
-rw-r--r--src/nautilus-arrow-toolbutton.h62
-rw-r--r--src/nautilus-desktop-window.c17
-rw-r--r--src/nautilus-history-sidebar.c1
-rw-r--r--src/nautilus-information-panel.c4
-rw-r--r--src/nautilus-main.c2
-rw-r--r--src/nautilus-navigation-window-menus.c500
-rw-r--r--src/nautilus-navigation-window-ui.xml210
-rw-r--r--src/nautilus-navigation-window.c354
-rw-r--r--src/nautilus-navigation-window.h6
-rw-r--r--src/nautilus-notes-viewer.c3
-rw-r--r--src/nautilus-profiler.c317
-rw-r--r--src/nautilus-profiler.h46
-rw-r--r--src/nautilus-shell-ui.xml268
-rw-r--r--src/nautilus-sidebar-title.c2
-rw-r--r--src/nautilus-spatial-window-ui.xml87
-rw-r--r--src/nautilus-spatial-window.c147
-rw-r--r--src/nautilus-window-manage-views.c102
-rw-r--r--src/nautilus-window-manage-views.h3
-rw-r--r--src/nautilus-window-menus.c637
-rw-r--r--src/nautilus-window-private.h70
-rw-r--r--src/nautilus-window-toolbars.c300
-rw-r--r--src/nautilus-window.c652
-rw-r--r--src/nautilus-window.h13
54 files changed, 3593 insertions, 4809 deletions
diff --git a/ChangeLog b/ChangeLog
index 28ae01af6..c33216c43 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,76 @@
+2004-11-16 Alexander Larsson <alexl@redhat.com>
+
+ * configure.in:
+ Remove bonoboui dependencies
+
+ * libnautilus-private/Makefile.am:
+ * libnautilus-private/nautilus-bonobo-extensions.[ch]:
+ * libnautilus-private/nautilus-bonobo-ui.h:
+ Remove unneeded files
+
+ * libnautilus-private/nautilus-clipboard.c:
+ Comment out for now.
+
+ * libnautilus-private/nautilus-directory-metafile-monitor.c:
+ * libnautilus-private/nautilus-metafile.c:
+ * src/nautilus-application.c:
+ * src/nautilus-history-sidebar.c:
+ * src/nautilus-information-panel.c:
+ * src/nautilus-main.c: (main):
+ * src/nautilus-notes-viewer.c:
+ * src/nautilus-sidebar-title.c:
+ * src/file-manager/fm-properties-window.c:
+ Remove bonobo includes
+
+ * libnautilus-private/nautilus-file-utilities.[ch]:
+ (nautilus_get_ui_directory), (nautilus_ui_file):
+ Util functions for ui files.
+
+ * libnautilus-private/nautilus-view.[ch]:
+ * libnautilus-private/nautilus-window-info.[ch]:
+ Remove bonoboui methods
+
+ * src/Makefile.am:
+ Add new files, remove some old ones
+ Move ui files to datadir/nautilus/ui
+
+ * src/nautilus-actions.h:
+ New file with action names
+
+ * src/nautilus-arrow-toolbutton.[ch]:
+ New widget for back/forward buttons.
+
+ * src/nautilus-desktop-window.c:
+ * src/nautilus-navigation-window-menus.c:
+ * src/nautilus-navigation-window-ui.xml:
+ * src/nautilus-navigation-window.[ch]:
+ * src/nautilus-shell-ui.xml:
+ * src/nautilus-spatial-window-ui.xml:
+ * src/nautilus-spatial-window.c:
+ * src/nautilus-window-manage-views.[ch]:
+ * src/nautilus-window-menus.c:
+ * src/nautilus-window-private.h:
+ * src/nautilus-window-toolbars.c:
+ * src/nautilus-window.[ch]:
+ Initial port to GtkUIManager
+
+ * src/nautilus-profiler.[ch]:
+ Remove
+
+ * src/file-manager/Makefile.am:
+ * src/file-manager/fm-actions.h:
+ New file with action names
+
+ * src/file-manager/fm-desktop-icon-view.c:
+ * src/file-manager/fm-directory-view.[ch]:
+ * src/file-manager/fm-icon-view.c:
+ * src/file-manager/fm-list-view.c:
+ * src/file-manager/nautilus-desktop-icon-view-ui.xml:
+ * src/file-manager/nautilus-directory-view-ui.xml:
+ * src/file-manager/nautilus-icon-view-ui.xml:
+ * src/file-manager/nautilus-list-view-ui.xml:
+ Initial port of views to GtkUIManager
+
2004-11-09 Alexander Larsson <alexl@redhat.com>
* libnautilus-private/nautilus-bonobo-extensions.[ch]:
diff --git a/configure.in b/configure.in
index f5a6de7da..5bf299716 100644
--- a/configure.in
+++ b/configure.in
@@ -5,7 +5,6 @@ dnl ===========================================================================
ART_REQUIRED=2.3.10
BONOBO_ACTIVATION_REQUIRED=2.1.0
BONOBO_REQUIRED=2.1.0
-BONOBO_UI_REQUIRED=2.2.0
EEL_REQUIRED=2.8.2
ESOUND_REQUIRED=0.2.27
GLIB_REQUIRED=2.3.0
@@ -24,7 +23,6 @@ EXIF_REQUIRED=0.5.12
AC_SUBST(ART_REQUIRED)
AC_SUBST(BONOBO_ACTIVATION_REQUIRED)
AC_SUBST(BONOBO_REQUIRED)
-AC_SUBST(BONOBO_UI_REQUIRED)
AC_SUBST(EEL_REQUIRED)
AC_SUBST(ESOUND_REQUIRED)
AC_SUBST(GLIB_REQUIRED)
@@ -86,7 +84,6 @@ PKG_CHECK_MODULES(ALL, \
gtk+-2.0 >= $GTK_REQUIRED \
libart-2.0 >= $ART_REQUIRED \
libbonobo-2.0 >= $BONOBO_REQUIRED \
- libbonoboui-2.0 >= $BONOBO_UI_REQUIRED \
libgnome-2.0 >= $GNOME_REQUIRED \
libgnomeui-2.0 >= $GNOME_UI_REQUIRED \
librsvg-2.0 >= $RSVG_REQUIRED \
@@ -285,7 +282,7 @@ LIBEGG_CFLAGS="`$PKG_CONFIG --cflags $LIBEGG_MODULES`"
AC_SUBST(LIBEGG_CFLAGS)
dnl libnautilus (must list bonobo-activation and libbonobo because idldir does not respect "requires")
-LIBNAUTILUS_MODULES="eel-2.0 bonobo-activation-2.0 libbonobo-2.0 libbonoboui-2.0"
+LIBNAUTILUS_MODULES="eel-2.0 bonobo-activation-2.0 libbonobo-2.0"
LIBNAUTILUS_CFLAGS="`$PKG_CONFIG --cflags $LIBNAUTILUS_MODULES`"
AC_SUBST(LIBNAUTILUS_CFLAGS)
LIBNAUTILUS_LIBS="`$PKG_CONFIG --libs $LIBNAUTILUS_MODULES`"
@@ -301,7 +298,7 @@ LIBNAUTILUS_EXTENSION_LIBS="`$PKG_CONFIG --libs $LIBNAUTILUS_EXTENSION_MODULES`"
AC_SUBST(LIBNAUTILUS_EXTENSION_LIBS)
dnl core nautilus (must list bonobo-activation and libbonobo because idldir does not respect "requires")
-CORE_MODULES="eel-2.0 librsvg-2.0 bonobo-activation-2.0 libbonobo-2.0 libbonoboui-2.0 esound gnome-desktop-2.0 $EXTRA_CORE_MODULES"
+CORE_MODULES="eel-2.0 librsvg-2.0 bonobo-activation-2.0 libbonobo-2.0 esound gnome-desktop-2.0 $EXTRA_CORE_MODULES"
CORE_CFLAGS="`$PKG_CONFIG --cflags $CORE_MODULES` $x_cflags"
AC_SUBST(CORE_CFLAGS)
CORE_LIBS="`$PKG_CONFIG --libs $CORE_MODULES` $CDDA_LIBS $LIBJPEG $x_libs"
@@ -310,7 +307,7 @@ CORE_IDL_INCLUDES="`$PKG_CONFIG --variable=idldir $CORE_MODULES | $srcdir/add-in
AC_SUBST(CORE_IDL_INCLUDES)
dnl typical components
-COMPONENT_MODULES="eel-2.0 libbonoboui-2.0 gnome-vfs-module-2.0 gnome-desktop-2.0"
+COMPONENT_MODULES="eel-2.0 gnome-vfs-module-2.0 gnome-desktop-2.0"
COMPONENT_CFLAGS="`$PKG_CONFIG --cflags $COMPONENT_MODULES`"
AC_SUBST(COMPONENT_CFLAGS)
COMPONENT_LIBS="`$PKG_CONFIG --libs $COMPONENT_MODULES`"
@@ -338,7 +335,7 @@ dnl -DBONOBO_DISABLE_DEPRECATED
AC_SUBST(DISABLE_DEPRECATED_CFLAGS)
dnl libbackground
-PKG_CHECK_MODULES(CAPPLET, "gtk+-2.0 gconf-2.0 libgnomeui-2.0 libbonoboui-2.0")
+PKG_CHECK_MODULES(CAPPLET, "gtk+-2.0 gconf-2.0 libgnomeui-2.0")
dnl ==========================================================================
dnl ==============================================
diff --git a/libnautilus-private/Makefile.am b/libnautilus-private/Makefile.am
index 705ca8da5..8ddffe2a0 100644
--- a/libnautilus-private/Makefile.am
+++ b/libnautilus-private/Makefile.am
@@ -51,9 +51,6 @@ libnautilus_private_la_SOURCES = \
$(nautilus_metafile_server_idl_sources) \
nautilus-audio-player.c \
nautilus-audio-player.h \
- nautilus-bonobo-extensions.c \
- nautilus-bonobo-extensions.h \
- nautilus-bonobo-ui.h \
nautilus-bookmark.c \
nautilus-bookmark.h \
nautilus-cell-renderer-pixbuf-emblem.c \
diff --git a/libnautilus-private/nautilus-bonobo-extensions.c b/libnautilus-private/nautilus-bonobo-extensions.c
deleted file mode 100644
index 4353b1415..000000000
--- a/libnautilus-private/nautilus-bonobo-extensions.c
+++ /dev/null
@@ -1,676 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-
-/* nautilus-bonobo-extensions.c - implementation of new functions that conceptually
- belong in bonobo. Perhaps some of these will be
- actually rolled into bonobo someday.
-
- Copyright (C) 2000, 2001 Eazel, 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: John Sullivan <sullivan@eazel.com>
- Darin Adler <darin@bentspoon.com>
-*/
-
-#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>
-#include <bonobo/bonobo-ui-util.h>
-#include <gtk/gtkmain.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
-
-struct NautilusBonoboActivationHandle {
- NautilusBonoboActivationHandle **early_completion_hook;
- NautilusBonoboActivationCallback callback;
- gpointer callback_data;
- Bonobo_Unknown activated_object;
- gboolean cancel;
- guint idle_id;
- guint timeout_id;
-};
-
-typedef enum {
- NUMBERED_MENU_ITEM_PLAIN,
- NUMBERED_MENU_ITEM_TOGGLE,
- NUMBERED_MENU_ITEM_RADIO
-} NumberedMenuItemType;
-
-void
-nautilus_bonobo_set_accelerator (BonoboUIComponent *ui,
- const char *path,
- const char *accelerator)
-{
- bonobo_ui_component_set_prop (ui, path, "accel", accelerator, NULL);
-}
-
-void
-nautilus_bonobo_set_label (BonoboUIComponent *ui,
- const char *path,
- const char *label)
-{
- bonobo_ui_component_set_prop (ui, path, "label", label, NULL);
-}
-
-void
-nautilus_bonobo_set_tip (BonoboUIComponent *ui,
- const char *path,
- const char *tip)
-{
- bonobo_ui_component_set_prop (ui, path, "tip", tip, NULL);
-}
-
-void
-nautilus_bonobo_set_sensitive (BonoboUIComponent *ui,
- const char *path,
- gboolean sensitive)
-{
- bonobo_ui_component_set_prop (ui, path, "sensitive", sensitive ? "1" : "0", NULL);
-}
-
-void
-nautilus_bonobo_set_toggle_state (BonoboUIComponent *ui,
- const char *path,
- gboolean state)
-{
- bonobo_ui_component_set_prop (ui, path, "state", state ? "1" : "0", NULL);
-}
-
-void
-nautilus_bonobo_set_hidden (BonoboUIComponent *ui,
- const char *path,
- gboolean hidden)
-{
- bonobo_ui_component_set_prop (ui, path, "hidden", hidden ? "1" : "0", NULL);
-}
-
-char *
-nautilus_bonobo_get_label (BonoboUIComponent *ui,
- const char *path)
-{
- return bonobo_ui_component_get_prop (ui, path, "label", NULL);
-}
-
-gboolean
-nautilus_bonobo_get_hidden (BonoboUIComponent *ui,
- const char *path)
-{
- char *value;
- gboolean hidden;
- CORBA_Environment ev;
-
- g_return_val_if_fail (BONOBO_IS_UI_COMPONENT (ui), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
-
- CORBA_exception_init (&ev);
- value = bonobo_ui_component_get_prop (ui, path, "hidden", &ev);
- CORBA_exception_free (&ev);
-
- if (value == NULL) {
- /* No hidden attribute means not hidden. */
- hidden = FALSE;
- } else {
- /* Anything other than "0" counts as TRUE */
- hidden = strcmp (value, "0") != 0;
- }
-
- g_free (value);
-
- return hidden;
-}
-
-static char *
-get_numbered_menu_item_name (guint index)
-{
- return g_strdup_printf ("%u", index);
-}
-
-char *
-nautilus_bonobo_get_numbered_menu_item_path (BonoboUIComponent *ui,
- const char *container_path,
- guint index)
-{
- char *item_name;
- char *item_path;
-
- g_return_val_if_fail (BONOBO_IS_UI_COMPONENT (ui), NULL);
- g_return_val_if_fail (container_path != NULL, NULL);
-
- item_name = get_numbered_menu_item_name (index);
- item_path = g_strconcat (container_path, "/", item_name, NULL);
- g_free (item_name);
-
- return item_path;
-}
-
-char *
-nautilus_bonobo_get_numbered_menu_item_command (BonoboUIComponent *ui,
- const char *container_path,
- guint index)
-{
- char *command_name;
- char *path;
-
- g_return_val_if_fail (BONOBO_IS_UI_COMPONENT (ui), NULL);
- g_return_val_if_fail (container_path != NULL, NULL);
-
- path = nautilus_bonobo_get_numbered_menu_item_path (ui, container_path, index);
- command_name = gnome_vfs_escape_string (path);
- g_free (path);
-
- return command_name;
-}
-
-guint
-nautilus_bonobo_get_numbered_menu_item_index_from_command (const char *command)
-{
- char *path;
- char *index_string;
- int index;
- gboolean got_index;
-
- path = gnome_vfs_unescape_string (command, NULL);
- index_string = strrchr (path, '/');
-
- if (index_string == NULL) {
- got_index = FALSE;
- } else {
- got_index = eel_str_to_int (index_string + 1, &index);
- }
- g_free (path);
-
- g_return_val_if_fail (got_index, 0);
-
- return index;
-}
-
-char *
-nautilus_bonobo_get_numbered_menu_item_container_path_from_command (const char *command)
-{
- char *path;
- char *index_string;
- char *container_path;
-
- path = gnome_vfs_unescape_string (command, NULL);
- index_string = strrchr (path, '/');
-
- container_path = index_string == NULL
- ? NULL
- : g_strndup (path, index_string - path);
- g_free (path);
-
- return container_path;
-}
-
-static void
-add_numbered_menu_item_internal (BonoboUIComponent *ui,
- const char *container_path,
- guint index,
- const char *label,
- NumberedMenuItemType type,
- GdkPixbuf *pixbuf,
- const char *radio_group_name)
-{
- char *xml_item, *xml_command;
- char *command_name;
- char *item_name, *pixbuf_data;
- char *path;
-
- g_assert (BONOBO_IS_UI_COMPONENT (ui));
- g_assert (container_path != NULL);
- g_assert (label != NULL);
- g_assert (type == NUMBERED_MENU_ITEM_PLAIN || pixbuf == NULL);
- g_assert (type == NUMBERED_MENU_ITEM_RADIO || radio_group_name == NULL);
- g_assert (type != NUMBERED_MENU_ITEM_RADIO || radio_group_name != NULL);
-
- item_name = get_numbered_menu_item_name (index);
- command_name = nautilus_bonobo_get_numbered_menu_item_command
- (ui, container_path, index);
-
- switch (type) {
- case NUMBERED_MENU_ITEM_TOGGLE:
- xml_item = g_strdup_printf ("<menuitem name=\"%s\" id=\"%s\" type=\"toggle\"/>\n",
- item_name, command_name);
- break;
- case NUMBERED_MENU_ITEM_RADIO:
- xml_item = g_strdup_printf ("<menuitem name=\"%s\" id=\"%s\" type=\"radio\" group=\"%s\"/>\n",
- item_name, command_name, radio_group_name);
- break;
- case NUMBERED_MENU_ITEM_PLAIN:
- if (pixbuf != NULL) {
- pixbuf_data = bonobo_ui_util_pixbuf_to_xml (pixbuf);
- xml_item = g_strdup_printf ("<menuitem name=\"%s\" verb=\"%s\" pixtype=\"pixbuf\" pixname=\"%s\"/>\n",
- item_name, command_name, pixbuf_data);
- g_free (pixbuf_data);
- } else {
- xml_item = g_strdup_printf ("<menuitem name=\"%s\" verb=\"%s\"/>\n",
- item_name, command_name);
- }
- break;
- default:
- g_assert_not_reached ();
- xml_item = NULL; /* keep compiler happy */
- }
-
- g_free (item_name);
-
- bonobo_ui_component_set (ui, container_path, xml_item, NULL);
-
- g_free (xml_item);
-
- path = nautilus_bonobo_get_numbered_menu_item_path (ui, container_path, index);
- nautilus_bonobo_set_label (ui, path, label);
- g_free (path);
-
- /* Make the command node here too, so callers can immediately set
- * properties on it (otherwise it doesn't get created until some
- * time later).
- */
- xml_command = g_strdup_printf ("<cmd name=\"%s\"/>\n", command_name);
- bonobo_ui_component_set (ui, "/commands", xml_command, NULL);
- g_free (xml_command);
-
- g_free (command_name);
-}
-
-/* Add a menu item specified by number into a given path. Used for
- * dynamically creating a related series of menu items. Each index
- * must be unique (normal use is to call this in a loop, and
- * increment the index for each item).
- */
-void
-nautilus_bonobo_add_numbered_menu_item (BonoboUIComponent *ui,
- const char *container_path,
- guint index,
- const char *label,
- GdkPixbuf *pixbuf)
-{
- g_return_if_fail (BONOBO_IS_UI_COMPONENT (ui));
- g_return_if_fail (container_path != NULL);
- g_return_if_fail (label != NULL);
-
- add_numbered_menu_item_internal (ui, container_path, index, label,
- NUMBERED_MENU_ITEM_PLAIN, pixbuf, NULL);
-}
-
-/* Add a menu item specified by number into a given path. Used for
- * dynamically creating a related series of toggle menu items. Each index
- * must be unique (normal use is to call this in a loop, and
- * increment the index for each item).
- */
-void
-nautilus_bonobo_add_numbered_toggle_menu_item (BonoboUIComponent *ui,
- const char *container_path,
- guint index,
- const char *label)
-{
- g_return_if_fail (BONOBO_IS_UI_COMPONENT (ui));
- g_return_if_fail (container_path != NULL);
- g_return_if_fail (label != NULL);
-
- add_numbered_menu_item_internal (ui, container_path, index, label,
- NUMBERED_MENU_ITEM_TOGGLE, NULL, NULL);
-}
-
-/* Add a menu item specified by number into a given path. Used for
- * dynamically creating a related series of radio menu items. Each index
- * must be unique (normal use is to call this in a loop, and
- * increment the index for each item).
- */
-void
-nautilus_bonobo_add_numbered_radio_menu_item (BonoboUIComponent *ui,
- const char *container_path,
- guint index,
- const char *label,
- const char *radio_group_name)
-{
- g_return_if_fail (BONOBO_IS_UI_COMPONENT (ui));
- g_return_if_fail (container_path != NULL);
- g_return_if_fail (label != NULL);
-
- add_numbered_menu_item_internal (ui, container_path, index, label,
- NUMBERED_MENU_ITEM_RADIO, NULL, radio_group_name);
-}
-
-void
-nautilus_bonobo_add_submenu (BonoboUIComponent *ui,
- const char *path,
- const char *label,
- GdkPixbuf *pixbuf)
-{
- char *xml_string, *name, *pixbuf_data, *submenu_path;
-
- g_return_if_fail (BONOBO_IS_UI_COMPONENT (ui));
- g_return_if_fail (path != NULL);
- g_return_if_fail (label != NULL);
- g_return_if_fail (pixbuf == NULL || GDK_IS_PIXBUF (pixbuf));
-
- /* Labels may contain characters that are illegal in names. So
- * we create the name by URI-encoding the label.
- */
- name = gnome_vfs_escape_string (label);
-
- if (pixbuf != NULL) {
- pixbuf_data = bonobo_ui_util_pixbuf_to_xml (pixbuf);
- xml_string = g_strdup_printf ("<submenu name=\"%s\" pixtype=\"pixbuf\" pixname=\"%s\"/>\n",
- name, pixbuf_data);
- g_free (pixbuf_data);
- } else {
- xml_string = g_strdup_printf ("<submenu name=\"%s\"/>\n", name);
- }
-
- bonobo_ui_component_set (ui, path, xml_string, NULL);
-
- g_free (xml_string);
-
- submenu_path = g_strconcat (path, "/", name, NULL);
- nautilus_bonobo_set_label (ui, submenu_path, label);
- g_free (submenu_path);
-
- g_free (name);
-}
-
-void
-nautilus_bonobo_add_menu_separator (BonoboUIComponent *ui, const char *path)
-{
- g_return_if_fail (BONOBO_IS_UI_COMPONENT (ui));
- g_return_if_fail (path != NULL);
-
- bonobo_ui_component_set (ui, path, "<separator/>", NULL);
-}
-
-static void
-remove_commands (BonoboUIComponent *ui, const char *container_path)
-{
- BonoboUINode *path_node;
- BonoboUINode *child_node;
- char *verb_name;
- char *id_name;
-
- path_node = bonobo_ui_component_get_tree (ui, container_path, TRUE, NULL);
- if (path_node == NULL) {
- return;
- }
-
- bonobo_ui_component_freeze (ui, NULL);
-
- for (child_node = bonobo_ui_node_children (path_node);
- child_node != NULL;
- child_node = bonobo_ui_node_next (child_node)) {
- verb_name = bonobo_ui_node_get_attr (child_node, "verb");
- if (verb_name != NULL) {
- bonobo_ui_component_remove_verb (ui, verb_name);
- bonobo_ui_node_free_string (verb_name);
- } else {
- /* Only look for an id if there's no verb */
- id_name = bonobo_ui_node_get_attr (child_node, "id");
- if (id_name != NULL) {
- bonobo_ui_component_remove_listener (ui, id_name);
- bonobo_ui_node_free_string (id_name);
- }
- }
- }
-
- bonobo_ui_component_thaw (ui, NULL);
-
- bonobo_ui_node_free (path_node);
-}
-
-/**
- * nautilus_bonobo_remove_menu_items_and_verbs
- *
- * Removes all menu items contained in a menu or placeholder, and
- * their verbs.
- *
- * @uih: The BonoboUIHandler for this menu item.
- * @container_path: The standard bonobo-style path specifier for this placeholder or submenu.
- */
-void
-nautilus_bonobo_remove_menu_items_and_commands (BonoboUIComponent *ui,
- const char *container_path)
-{
- char *remove_wildcard;
-
- g_return_if_fail (BONOBO_IS_UI_COMPONENT (ui));
- g_return_if_fail (container_path != NULL);
-
- remove_commands (ui, container_path);
-
- /* For speed, remove menu items themselves all in one fell swoop,
- * though we removed the verbs one-by-one.
- */
- remove_wildcard = g_strdup_printf ("%s/*", container_path);
- bonobo_ui_component_rm (ui, remove_wildcard, NULL);
- g_free (remove_wildcard);
-}
-
-/* Call to set the user-visible label of a command to a string
- * containing an underscore accelerator. The underscore is stripped
- * off before setting the label of the toolitem, because toolbar
- * button labels shouldn't have the underscore.
- */
-void
-nautilus_bonobo_set_label_for_toolitem_and_command (BonoboUIComponent *ui,
- const char *toolitem_path,
- const char *command_path,
- const char *label_with_underscore)
-{
- char *label_no_underscore;
-
- g_return_if_fail (BONOBO_IS_UI_COMPONENT (ui));
- g_return_if_fail (toolitem_path != NULL);
- g_return_if_fail (command_path != NULL);
- g_return_if_fail (label_with_underscore != NULL);
-
- label_no_underscore = eel_str_strip_chr (label_with_underscore, '_');
- nautilus_bonobo_set_label (ui,
- command_path,
- label_with_underscore);
- nautilus_bonobo_set_label (ui,
- toolitem_path,
- label_no_underscore);
-
- g_free (label_no_underscore);
-}
-
-static char *
-get_extension_menu_item_xml (NautilusMenuItem *item)
-{
- GString *ui_xml;
- char *pixbuf_data;
- GdkPixbuf *pixbuf;
- char *name;
- char *icon;
-
- ui_xml = g_string_new ("");
-
- g_object_get (G_OBJECT (item), "name", &name, "icon", &icon, NULL);
-
- g_string_append_printf (ui_xml,
- "<menuitem name=\"%s\" verb=\"%s\"",
- name, name);
-
- if (icon) {
- pixbuf = nautilus_icon_factory_get_pixbuf_from_name
- (icon,
- 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, "/>");
-
- g_free (name);
- g_free (icon);
-
- 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));
-}
-
-char *
-nautilus_bonobo_get_extension_item_command_xml (NautilusMenuItem *item)
-{
- char *name;
- char *label;
- char *tip;
- gboolean sensitive;
- char *xml;
-
- g_object_get (G_OBJECT (item),
- "name", &name, "label", &label,
- "tip", &tip, "sensitive", &sensitive,
- NULL);
-
- xml = g_strdup_printf ("<cmd name=\"%s\" label=\"%s\" tip=\"%s\" sensitive=\"%s\"/>",
- name, label, tip, sensitive ? "1" : "0");
-
- g_free (name);
- g_free (label);
- g_free (tip);
-
- return xml;
-}
-
-void
-nautilus_bonobo_add_extension_item_command (BonoboUIComponent *ui,
- NautilusMenuItem *item)
-{
- char *xml;
- char *name;
- GClosure *closure;
-
- xml = nautilus_bonobo_get_extension_item_command_xml (item);
-
- bonobo_ui_component_set (ui, "/commands", xml, NULL);
-
- g_free (xml);
-
- g_object_get (G_OBJECT (item), "name", &name, NULL);
-
- closure = g_cclosure_new
- (G_CALLBACK (extension_action_callback),
- g_object_ref (item),
- (GClosureNotify)g_object_unref);
-
- bonobo_ui_component_add_verb_full (ui, name, closure);
-
- g_free (name);
-}
-
-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;
- char *name;
- char *icon;
- gboolean priority;
-
- ui_xml = g_string_new ("");
-
-
- g_object_get (item,
- "name", &name, "priority", &priority,
- "icon", &icon,
- NULL);
- g_string_append_printf (ui_xml,
- "<toolitem name=\"%s\" verb=\"%s\"",
- name, name);
-
- if (priority) {
- g_string_append (ui_xml, " priority=\"1\"");
- }
-
- if (icon) {
- pixbuf = nautilus_icon_factory_get_pixbuf_from_name
- (icon,
- 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, "/>");
-
- g_free (name);
- g_free (icon);
-
- 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);
-}
-
-Bonobo_RegistrationResult
-nautilus_bonobo_activation_register_for_display (const char *iid,
- Bonobo_Unknown ref)
-{
- const char *display_name;
- GSList *reg_env ;
- Bonobo_RegistrationResult result;
-
- display_name = gdk_display_get_name (gdk_display_get_default());
- reg_env = bonobo_activation_registration_env_set (NULL,
- "DISPLAY", display_name);
- result = bonobo_activation_register_active_server (iid, ref, reg_env);
- bonobo_activation_registration_env_free (reg_env);
- return result;
-}
diff --git a/libnautilus-private/nautilus-bonobo-extensions.h b/libnautilus-private/nautilus-bonobo-extensions.h
deleted file mode 100644
index 19e180b04..000000000
--- a/libnautilus-private/nautilus-bonobo-extensions.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-
-/* nautilus-bonobo-extensions.h - interface for new functions that conceptually
- belong in bonobo. Perhaps some of these will be
- actually rolled into bonobo someday.
-
- Copyright (C) 2000 Eazel, 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.
-
- Author: John Sullivan <sullivan@eazel.com>
-*/
-
-#ifndef NAUTILUS_BONOBO_EXTENSIONS_H
-#define NAUTILUS_BONOBO_EXTENSIONS_H
-
-#include <bonobo/bonobo-ui-component.h>
-#include <bonobo/bonobo-xobject.h>
-#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,
- Bonobo_Unknown activated_object,
- gpointer callback_data);
-
-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);
-
-guint nautilus_bonobo_get_numbered_menu_item_index_from_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_add_extension_item_command (BonoboUIComponent *ui,
- NautilusMenuItem *item);
-char *nautilus_bonobo_get_extension_item_command_xml (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);
-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-bonobo-ui.h b/libnautilus-private/nautilus-bonobo-ui.h
deleted file mode 100644
index 41fa3747d..000000000
--- a/libnautilus-private/nautilus-bonobo-ui.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
-
-/*
- * libnautilus: A library for nautilus view implementations.
- *
- * Copyright (C) 2000 Eazel, Inc.
- *
- * This 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.
- *
- * This 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 this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Author: Maciej Stachowiak <mjs@eazel.com>
- *
- */
-
-/* nautilus-bonobo-ui.h: bonobo UI paths usable by Nautilus components
- * for merging menus and toolbars.
- */
-
-#ifndef NAUTILUS_BONOBO_UI_H
-#define NAUTILUS_BONOBO_UI_H
-
-/**
- * Components can use these menu paths with BonoboUIContainer calls to
- * place entire new menus.
- */
-
-#define NAUTILUS_MENU_PATH_FILE_MENU "/menu/File"
-#define NAUTILUS_MENU_PATH_EDIT_MENU "/menu/Edit"
-#define NAUTILUS_MENU_PATH_VIEW_MENU "/menu/View"
-#define NAUTILUS_MENU_PATH_GO_MENU "/menu/Go"
-#define NAUTILUS_MENU_PATH_BOOKMARKS_MENU "/menu/Bookmarks"
-#define NAUTILUS_MENU_PATH_PROFILER "/menu/Profiler"
-#define NAUTILUS_MENU_PATH_HELP_MENU "/menu/Help"
-
-/**
- * Components can use these menu item paths with BonoboUIContainer calls to
- * merge over certain existing items. Only items that we expect to be
- * merged over are listed here, to avoid making public details that might
- * change later.
- */
-
-#define NAUTILUS_MENU_PATH_CUT_ITEM "/menu/Edit/Cut"
-#define NAUTILUS_MENU_PATH_COPY_ITEM "/menu/Edit/Copy"
-#define NAUTILUS_MENU_PATH_PASTE_ITEM "/menu/Edit/Paste"
-#define NAUTILUS_MENU_PATH_CLEAR_ITEM "/menu/Edit/Clear"
-#define NAUTILUS_MENU_PATH_SELECT_ALL_ITEM "/menu/Edit/Select All"
-
-#define NAUTILUS_COMMAND_CUT "/commands/Cut"
-#define NAUTILUS_COMMAND_COPY "/commands/Copy"
-#define NAUTILUS_COMMAND_PASTE "/commands/Paste"
-#define NAUTILUS_COMMAND_CLEAR "/commands/Clear"
-#define NAUTILUS_COMMAND_SELECT_ALL "/commands/Select All"
-
-/**
- * Components can use these placeholder paths with BonoboUIContainer calls to
- * insert new items in well-defined positions.
- */
-
-/* Use the "new items" placeholder to insert menu items like "New xxx" */
-#define NAUTILUS_MENU_PATH_NEW_ITEMS_PLACEHOLDER "/menu/File/New Items Placeholder"
-
-/**
- * Use the "open" placeholder to insert menu items dealing with opening the
- * selected item, like "Open", "Open in New Window", etc.
- */
-#define NAUTILUS_MENU_PATH_OPEN_PLACEHOLDER "/menu/File/Open Placeholder"
-
-/**
- * Use the "file items" placeholder to insert other File menu items dealing with
- * individual files, such as "Show Properties" and "Rename"
- */
-#define NAUTILUS_MENU_PATH_FILE_ITEMS_PLACEHOLDER "/menu/File/File Items Placeholder"
-
-/**
- * Use the "global file items" placeholder to insert other File menu items
- * dealing with nautilus as a whole, such as "Empty Trash".
- */
-#define NAUTILUS_MENU_PATH_GLOBAL_FILE_ITEMS_PLACEHOLDER "/menu/File/Global File Items Placeholder"
-
-/**
- * Use the "global edit items" placeholder to insert other Edit menu items
- * dealing with nautilus as a whole, such as "Icon Captions...".
- */
-#define NAUTILUS_MENU_PATH_GLOBAL_EDIT_ITEMS_PLACEHOLDER "/menu/Edit/Global Edit Items Placeholder"
-
-/**
- * Use the "edit items" placeholder to insert other Edit menu items dealing with
- * individual files, such as "Remove Custom Image"
- */
-#define NAUTILUS_MENU_PATH_EDIT_ITEMS_PLACEHOLDER "/menu/Edit/Edit Items Placeholder"
-
-/**
- * Use the "show/hide" placeholder to insert other View menu items that
- * control the visibility of some piece of the UI, such as "Show/Hide Status Bar".
- */
-#define NAUTILUS_MENU_PATH_SHOW_HIDE_PLACEHOLDER "/menu/View/Show Hide Placeholder"
-
-/**
- * Use the "view items" placeholder to insert other View menu items that
- * are specific to a component, such as the Icon View's layout options.
- */
-#define NAUTILUS_MENU_PATH_VIEW_ITEMS_PLACEHOLDER "/menu/View/View Items Placeholder"
-
-/* Use the "extra help items" placeholder to add help-related items */
-#define NAUTILUS_MENU_PATH_EXTRA_HELP_ITEMS_PLACEHOLDER "/menu/Help/Extra Help Items"
-
-/* This holds the zooming-related items in the context menu */
-#define NAUTILUS_POPUP_PATH_ZOOM_ITEMS_PLACEHOLDER "/popups/background/Zoom Items"
-
-/* Components can use these paths with BonoboUIHandler calls to
- * locate toolbars and toolbar items for the purpose of merging.
- * Note: Not all Nautilus toolbars or toolbar items are necessarily published
- * here; these are the ones whose existence components can count on.
- */
-
-/* Main toolbar */
-#define NAUTILUS_TOOLBAR_PATH_MAIN_TOOLBAR "/Main"
-
-#endif /* NAUTILUS_BONOBO_UI_H */
diff --git a/libnautilus-private/nautilus-clipboard.c b/libnautilus-private/nautilus-clipboard.c
index 9e595e103..669fb9b15 100644
--- a/libnautilus-private/nautilus-clipboard.c
+++ b/libnautilus-private/nautilus-clipboard.c
@@ -30,7 +30,6 @@
#include <config.h>
#include "nautilus-clipboard.h"
-#include "nautilus-bonobo-ui.h"
#include <bonobo/bonobo-ui-util.h>
#include <gtk/gtkinvisible.h>
#include <gtk/gtkmain.h>
@@ -40,6 +39,8 @@
typedef void (* EditableFunction) (GtkEditable *editable);
+#ifdef BONOBO_DONE
+
static void disconnect_set_up_in_control_handlers (GtkObject *object,
gpointer callback_data);
static void selection_changed_callback (GtkWidget *widget,
@@ -401,11 +402,14 @@ initialize_clipboard_component_with_callback_data (GtkEditable *target,
return target_data;
}
+#endif
+
void
nautilus_clipboard_set_up_editable (GtkEditable *target,
Bonobo_UIContainer ui_container,
gboolean shares_selection_changes)
{
+#ifdef BONOBO_DONE
TargetCallbackData *target_data;
g_return_if_fail (GTK_IS_EDITABLE (target));
@@ -429,8 +433,11 @@ nautilus_clipboard_set_up_editable (GtkEditable *target,
* already in focus.
*/
focus_changed_callback (GTK_WIDGET (target), NULL, target_data);
+#endif
}
+#ifdef BONOBO_DONE
+
static gboolean
widget_was_set_up_with_selection_sensitivity (GtkWidget *widget)
{
@@ -464,11 +471,14 @@ control_destroyed_callback (GtkObject *object,
disconnect_set_up_in_control_handlers (object, callback_data);
}
+#endif
+
void
nautilus_clipboard_set_up_editable_in_control (GtkEditable *target,
BonoboControl *control,
gboolean shares_selection_changes)
{
+#ifdef BONOBO_DONE
g_return_if_fail (GTK_IS_EDITABLE (target));
g_return_if_fail (BONOBO_IS_CONTROL (control));
@@ -493,8 +503,11 @@ nautilus_clipboard_set_up_editable_in_control (GtkEditable *target,
G_CALLBACK (first_focus_callback), control);
g_signal_connect (target, "destroy",
G_CALLBACK (control_destroyed_callback), control);
+#endif
}
+#ifdef BONOBO_DONE
+
static void
disconnect_set_up_in_control_handlers (GtkObject *object,
gpointer callback_data)
@@ -510,3 +523,5 @@ disconnect_set_up_in_control_handlers (GtkObject *object,
G_CALLBACK (control_destroyed_callback),
callback_data);
}
+
+#endif
diff --git a/libnautilus-private/nautilus-directory-metafile-monitor.c b/libnautilus-private/nautilus-directory-metafile-monitor.c
index 3cc32d56a..4297d0f18 100644
--- a/libnautilus-private/nautilus-directory-metafile-monitor.c
+++ b/libnautilus-private/nautilus-directory-metafile-monitor.c
@@ -28,7 +28,6 @@
#include <eel/eel-gtk-macros.h>
#include <eel/eel-glib-extensions.h>
-#include "nautilus-bonobo-extensions.h"
struct NautilusMetafileMonitorDetails {
NautilusDirectory *directory;
diff --git a/libnautilus-private/nautilus-file-utilities.c b/libnautilus-private/nautilus-file-utilities.c
index 578eaf8ce..6264735d8 100644
--- a/libnautilus-private/nautilus-file-utilities.c
+++ b/libnautilus-private/nautilus-file-utilities.c
@@ -342,6 +342,25 @@ 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 5b71e461d..cefe46750 100644
--- a/libnautilus-private/nautilus-file-utilities.h
+++ b/libnautilus-private/nautilus-file-utilities.h
@@ -66,6 +66,10 @@ 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-metafile.c b/libnautilus-private/nautilus-metafile.c
index af703e224..97130e6d4 100644
--- a/libnautilus-private/nautilus-metafile.c
+++ b/libnautilus-private/nautilus-metafile.c
@@ -23,7 +23,6 @@
#include <config.h>
#include "nautilus-metafile.h"
-#include "nautilus-bonobo-extensions.h"
#include "nautilus-directory.h"
#include "nautilus-directory.h"
#include "nautilus-file-private.h"
diff --git a/libnautilus-private/nautilus-view.c b/libnautilus-private/nautilus-view.c
index 67935c381..bad36efc8 100644
--- a/libnautilus-private/nautilus-view.c
+++ b/libnautilus-private/nautilus-view.c
@@ -249,53 +249,3 @@ nautilus_view_get_zoom_level (NautilusView *view)
return (* NAUTILUS_VIEW_GET_IFACE (view)->get_zoom_level) (view);
}
-
-
-static void
-nautilus_ui_component_free (BonoboUIComponent *ui_component)
-{
- bonobo_ui_component_unset_container (ui_component, NULL);
- bonobo_object_unref (BONOBO_OBJECT (ui_component));
-}
-
-static BonoboUIComponent *
-nautilus_view_get_ui_component (NautilusView *view)
-{
- BonoboUIComponent *ui_component;
-
- ui_component = g_object_get_data (G_OBJECT (view),
- "nautilus-view-ui-component");
-
- if (ui_component == NULL) {
- ui_component = bonobo_ui_component_new_default ();
- g_object_set_data_full (G_OBJECT (view),
- "nautilus-view-ui-component",
- ui_component,
- (GDestroyNotify) nautilus_ui_component_free);
- }
-
- return ui_component;
-}
-
-
-BonoboUIComponent *
-nautilus_view_set_up_ui (NautilusView *view,
- Bonobo_UIContainer ui_container,
- const char *datadir,
- const char *ui_file_name,
- const char *application_name)
-{
- BonoboUIComponent *ui_component;
-
- /* Get the UI component that's pre-made by the control. */
- ui_component = nautilus_view_get_ui_component (view);
-
- /* Connect the UI component to the control frame's UI container. */
- bonobo_ui_component_set_container (ui_component, ui_container, NULL);
-
- /* Set up the UI from an XML file. */
- bonobo_ui_util_set_ui (ui_component, datadir, ui_file_name, application_name, NULL);
-
- return ui_component;
-}
-
diff --git a/libnautilus-private/nautilus-view.h b/libnautilus-private/nautilus-view.h
index dfc98186f..0d3ab39d6 100644
--- a/libnautilus-private/nautilus-view.h
+++ b/libnautilus-private/nautilus-view.h
@@ -52,6 +52,7 @@ struct _NautilusViewIface
/* emitted when the view-specific title as returned by get_title changes */
void (* title_changed) (NautilusView *view);
+ /* BONOBOTODO: remove this? */
void (* zoom_parameters_changed)(NautilusView *view);
void (* zoom_level_changed) (NautilusView *view);
@@ -142,15 +143,6 @@ gboolean nautilus_view_can_zoom_in (NautilusView *v
gboolean nautilus_view_can_zoom_out (NautilusView *view);
NautilusZoomLevel nautilus_view_get_zoom_level (NautilusView *view);
-/* Temporary bonoboui stuff: */
-BonoboUIComponent * nautilus_view_set_up_ui (NautilusView *view,
- Bonobo_UIContainer ui_container,
- const char *datadir,
- const char *ui_file_name,
- const char *application_name);
-
-
-
G_END_DECLS
#endif /* NAUTILUS_VIEW_H */
diff --git a/libnautilus-private/nautilus-window-info.c b/libnautilus-private/nautilus-window-info.c
index 6b8b6e679..cc2e98298 100644
--- a/libnautilus-private/nautilus-window-info.c
+++ b/libnautilus-private/nautilus-window-info.c
@@ -251,11 +251,11 @@ nautilus_window_info_set_hidden_files_mode (NautilusWindowInfo *window,
mode);
}
-Bonobo_UIContainer
-nautilus_window_info_get_ui_container (NautilusWindowInfo *window)
+GtkUIManager *
+nautilus_window_info_get_ui_manager (NautilusWindowInfo *window)
{
g_return_val_if_fail (NAUTILUS_IS_WINDOW_INFO (window), CORBA_OBJECT_NIL);
- return (* NAUTILUS_WINDOW_INFO_GET_IFACE (window)->get_ui_container) (window);
+ return (* NAUTILUS_WINDOW_INFO_GET_IFACE (window)->get_ui_manager) (window);
}
diff --git a/libnautilus-private/nautilus-window-info.h b/libnautilus-private/nautilus-window-info.h
index c2002862e..ba6bfe3c5 100644
--- a/libnautilus-private/nautilus-window-info.h
+++ b/libnautilus-private/nautilus-window-info.h
@@ -27,7 +27,7 @@
#include <glib-object.h>
#include <libnautilus-private/nautilus-view.h>
-#include <bonobo/bonobo-ui-util.h>
+#include <gtk/gtkuimanager.h>
G_BEGIN_DECLS
@@ -128,9 +128,7 @@ struct _NautilusWindowInfoIface
NautilusWindowOpenFlags flags,
GList *selection);
void (* close_window) (NautilusWindowInfo *window);
-
- /* Temporary bonoboui stuff: */
- Bonobo_UIContainer (* get_ui_container) (NautilusWindowInfo *window);
+ GtkUIManager * (* get_ui_manager) (NautilusWindowInfo *window);
};
GType nautilus_window_info_get_type (void);
@@ -158,9 +156,7 @@ GList * nautilus_window_info_get_selection
NautilusWindowShowHiddenFilesMode nautilus_window_info_get_hidden_files_mode (NautilusWindowInfo *window);
void nautilus_window_info_set_hidden_files_mode (NautilusWindowInfo *window,
NautilusWindowShowHiddenFilesMode mode);
-
-/* temporary BonoboUI stuff */
-Bonobo_UIContainer nautilus_window_info_get_ui_container (NautilusWindowInfo *window);
+GtkUIManager * nautilus_window_info_get_ui_manager (NautilusWindowInfo *window);
G_END_DECLS
diff --git a/src/Makefile.am b/src/Makefile.am
index a613dcb5b..e7a19a4b5 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -52,8 +52,11 @@ nautilus_shell_interface_idl_sources = \
nautilus_SOURCES = \
$(nautilus_shell_interface_idl_sources) \
+ nautilus-actions.h \
nautilus-application.c \
nautilus-application.h \
+ nautilus-arrow-toolbutton.c \
+ nautilus-arrow-toolbutton.h \
nautilus-bookmark-list.c \
nautilus-bookmark-list.h \
nautilus-bookmark-parsing.c \
@@ -82,6 +85,8 @@ nautilus_SOURCES = \
nautilus-location-entry.h \
nautilus-main.c \
nautilus-main.h \
+ nautilus-navigation-action.c \
+ nautilus-navigation-action.h \
nautilus-navigation-bar.c \
nautilus-navigation-bar.h \
nautilus-navigation-window-menus.c \
@@ -89,8 +94,6 @@ nautilus_SOURCES = \
nautilus-navigation-window.h \
nautilus-notes-viewer.c \
nautilus-notes-viewer.h \
- nautilus-profiler.c \
- nautilus-profiler.h \
nautilus-property-browser.c \
nautilus-property-browser.h \
nautilus-self-check-functions.c \
@@ -139,7 +142,7 @@ server_DATA = $(server_in_files:.server.in=.server)
@INTLTOOL_SERVER_RULE@
-uidir = $(datadir)/gnome-2.0/ui
+uidir = $(datadir)/nautilus/ui
ui_DATA = \
nautilus-shell-ui.xml \
nautilus-navigation-window-ui.xml \
diff --git a/src/file-manager/Makefile.am b/src/file-manager/Makefile.am
index 5f19ec508..afcf82a43 100644
--- a/src/file-manager/Makefile.am
+++ b/src/file-manager/Makefile.am
@@ -15,6 +15,7 @@ INCLUDES = \
libnautilus_file_manager_la_SOURCES= \
+ fm-actions.h \
fm-desktop-icon-view.c \
fm-desktop-icon-view.h \
fm-directory-view.c \
@@ -41,7 +42,7 @@ libnautilus_file_manager_la_SOURCES= \
$(NULL)
-uidir = $(datadir)/gnome-2.0/ui
+uidir = $(datadir)/nautilus/ui
ui_DATA = \
nautilus-desktop-icon-view-ui.xml \
nautilus-directory-view-ui.xml \
diff --git a/src/file-manager/fm-actions.h b/src/file-manager/fm-actions.h
new file mode 100644
index 000000000..b81b7fbb2
--- /dev/null
+++ b/src/file-manager/fm-actions.h
@@ -0,0 +1,66 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+
+/* fm-actions.h
+ *
+ * Copyright (C) 2004 Red Hat, Inc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; 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 FM_ACTIONS_H
+#define FM_ACTIONS_H
+
+#define FM_ACTION_OPEN "Open"
+#define FM_ACTION_OPEN_ALTERNATE "OpenAlternate"
+#define FM_ACTION_OTHER_APPLICATION1 "OtherApplication1"
+#define FM_ACTION_OTHER_APPLICATION2 "OtherApplication2"
+#define FM_ACTION_NEW_FOLDER "New Folder"
+#define FM_ACTION_PROPERTIES "Properties"
+#define FM_ACTION_NO_TEMPLATES "No Templates"
+#define FM_ACTION_EMPTY_TRASH "Empty Trash"
+#define FM_ACTION_CUT_FILES "Cut Files"
+#define FM_ACTION_COPY_FILES "Copy Files"
+#define FM_ACTION_PASTE_FILES "Paste Files"
+#define FM_ACTION_PASTE_FILES_INTO "Paste Files Into"
+#define FM_ACTION_NEW_LAUNCHER "New Launcher"
+#define FM_ACTION_EDIT_LAUNCHER "Edit Launcher"
+#define FM_ACTION_RENAME "Rename"
+#define FM_ACTION_DUPLICATE "Duplicate"
+#define FM_ACTION_CREATE_LINK "Create Link"
+#define FM_ACTION_SELECT_ALL "Select All"
+#define FM_ACTION_TRASH "Trash"
+#define FM_ACTION_DELETE "Delete"
+#define FM_ACTION_SHOW_HIDDEN_FILES "Show Hidden Files"
+#define FM_ACTION_RESET_BACKGROUND "Reset Background"
+#define FM_ACTION_CONNECT_TO_SERVER_LINK "Connect To Server Link"
+#define FM_ACTION_MOUNT_VOLUME "Mount Volume"
+#define FM_ACTION_UNMOUNT_VOLUME "Unmount Volume"
+#define FM_ACTION_SCRIPTS "Scripts"
+#define FM_ACTION_NEW_DOCUMENTS "New Documents"
+#define FM_ACTION_EMPTY_TRASH_CONDITIONAL "Empty Trash Conditional"
+#define FM_ACTION_MANUAL_LAYOUT "Manual Layout"
+#define FM_ACTION_TIGHTER_LAYOUT "Tighter Layout"
+#define FM_ACTION_REVERSED_ORDER "Reversed Order"
+#define FM_ACTION_CLEAN_UP "Clean Up"
+#define FM_ACTION_KEEP_ALIGNED "Keep Aligned"
+#define FM_ACTION_ARRANGE_ITEMS "Arrange Items"
+#define FM_ACTION_STRETCH "Stretch"
+#define FM_ACTION_UNSTRETCH "Unstretch"
+#define FM_ACTION_ZOOM_ITEMS "Zoom Items"
+
+#endif /* FM_ACTIONS_H */
diff --git a/src/file-manager/fm-desktop-icon-view.c b/src/file-manager/fm-desktop-icon-view.c
index 1d8963c54..2c40b2442 100644
--- a/src/file-manager/fm-desktop-icon-view.c
+++ b/src/file-manager/fm-desktop-icon-view.c
@@ -27,9 +27,9 @@
#include <config.h>
#include "fm-icon-container.h"
#include "fm-desktop-icon-view.h"
+#include "fm-actions.h"
#include <X11/Xatom.h>
-#include <bonobo/bonobo-ui-util.h>
#include <gtk/gtkmain.h>
#include <dirent.h>
#include <eel/eel-glib-extensions.h>
@@ -45,7 +45,6 @@
#include <libgnome/gnome-i18n.h>
#include <libgnome/gnome-util.h>
#include <libgnomevfs/gnome-vfs.h>
-#include <libnautilus-private/nautilus-bonobo-extensions.h>
#include <libnautilus-private/nautilus-desktop-icon-file.h>
#include <libnautilus-private/nautilus-directory-background.h>
#include <libnautilus-private/nautilus-directory-notify.h>
@@ -82,8 +81,8 @@
struct FMDesktopIconViewDetails
{
- BonoboUIComponent *ui;
GdkWindow *root_window;
+ GtkActionGroup *desktop_action_group;
/* For the desktop rescanning
*/
@@ -244,12 +243,6 @@ fm_desktop_icon_view_destroy (GtkObject *object)
default_zoom_level_changed,
icon_view);
- /* Clean up details */
- if (icon_view->details->ui != NULL) {
- bonobo_ui_component_unset_container (icon_view->details->ui, NULL);
- bonobo_object_unref (icon_view->details->ui);
- icon_view->details->ui = NULL;
- }
GTK_OBJECT_CLASS (parent_class)->destroy (object);
}
@@ -559,7 +552,7 @@ fm_desktop_icon_view_init (FMDesktopIconView *desktop_icon_view)
}
static void
-new_terminal_callback (BonoboUIComponent *component, gpointer data, const char *verb)
+action_new_terminal_callback (GtkAction *action, gpointer data)
{
g_assert (FM_DIRECTORY_VIEW (data));
@@ -567,7 +560,7 @@ new_terminal_callback (BonoboUIComponent *component, gpointer data, const char *
}
static void
-new_launcher_callback (BonoboUIComponent *component, gpointer data, const char *verb)
+action_new_launcher_callback (GtkAction *action, gpointer data)
{
char *desktop_directory;
@@ -585,9 +578,8 @@ new_launcher_callback (BonoboUIComponent *component, gpointer data, const char *
}
static void
-change_background_callback (BonoboUIComponent *component,
- gpointer data,
- const char *verb)
+action_change_background_callback (GtkAction *action,
+ gpointer data)
{
g_assert (FM_DIRECTORY_VIEW (data));
@@ -599,25 +591,14 @@ change_background_callback (BonoboUIComponent *component,
}
static void
-empty_trash_callback (BonoboUIComponent *component,
- gpointer data,
- const char *verb)
+action_empty_trash_conditional_callback (GtkAction *action,
+ gpointer data)
{
g_assert (FM_IS_DIRECTORY_VIEW (data));
nautilus_file_operations_empty_trash (GTK_WIDGET (data));
}
-static void
-reset_background_callback (BonoboUIComponent *component,
- gpointer data,
- const char *verb)
-{
- eel_background_reset
- (fm_directory_view_get_background
- (FM_DIRECTORY_VIEW (data)));
-}
-
static gboolean
trash_link_is_selection (FMDirectoryView *view)
{
@@ -649,6 +630,7 @@ real_update_menus (FMDirectoryView *view)
FMDesktopIconView *desktop_view;
char *label;
gboolean include_empty_trash;
+ GtkAction *action;
g_assert (FM_IS_DESKTOP_ICON_VIEW (view));
@@ -656,59 +638,72 @@ real_update_menus (FMDirectoryView *view)
desktop_view = FM_DESKTOP_ICON_VIEW (view);
- bonobo_ui_component_freeze (desktop_view->details->ui, NULL);
-
/* Empty Trash */
include_empty_trash = trash_link_is_selection (view);
- nautilus_bonobo_set_hidden
- (desktop_view->details->ui,
- DESKTOP_COMMAND_EMPTY_TRASH_CONDITIONAL,
- !include_empty_trash);
+ action = gtk_action_group_get_action (desktop_view->details->desktop_action_group,
+ FM_ACTION_EMPTY_TRASH_CONDITIONAL);
+ gtk_action_set_visible (action,
+ include_empty_trash);
if (include_empty_trash) {
label = g_strdup (_("Empty Trash"));
- nautilus_bonobo_set_label
- (desktop_view->details->ui,
- DESKTOP_COMMAND_EMPTY_TRASH_CONDITIONAL,
- label);
- nautilus_bonobo_set_sensitive
- (desktop_view->details->ui,
- DESKTOP_COMMAND_EMPTY_TRASH_CONDITIONAL,
- !nautilus_trash_monitor_is_empty ());
+ g_object_set (action , "label", label, NULL);
+ gtk_action_set_sensitive (action,
+ !nautilus_trash_monitor_is_empty ());
g_free (label);
}
-
- bonobo_ui_component_thaw (desktop_view->details->ui, NULL);
}
+static GtkActionEntry desktop_view_entries[] = {
+ { "New Terminal", NULL, /* name, stock id */
+ N_("Open T_erminal"), NULL, /* label, accelerator */
+ N_("Open a new GNOME terminal window"), /* tooltip */
+ G_CALLBACK (action_new_terminal_callback) },
+ { "New Launcher Desktop", NULL, /* name, stock id */
+ N_("Create L_auncher"), NULL, /* label, accelerator */
+ N_("Create a new launcher"), /* tooltip */
+ G_CALLBACK (action_new_launcher_callback) },
+ { "Change Background", NULL, /* name, stock id */
+ N_("Change Desktop _Background"), NULL, /* label, accelerator */
+ N_("Show a window that lets you set your desktop background's pattern or color"), /* tooltip */
+ G_CALLBACK (action_change_background_callback) },
+ { "Empty Trash Conditional", NULL, /* name, stock id */
+ N_("Empty Trash"), NULL, /* label, accelerator */
+ N_("Delete all items in the Trash"), /* tooltip */
+ G_CALLBACK (action_empty_trash_conditional_callback) },
+};
+
static void
real_merge_menus (FMDirectoryView *view)
{
FMDesktopIconView *desktop_view;
- Bonobo_UIContainer ui_container;
- BonoboUIVerb verbs [] = {
- BONOBO_UI_VERB ("Change Background", change_background_callback),
- BONOBO_UI_VERB ("Empty Trash Conditional", empty_trash_callback),
- BONOBO_UI_VERB ("New Terminal", new_terminal_callback),
- BONOBO_UI_VERB ("New Launcher Desktop", new_launcher_callback),
- BONOBO_UI_VERB ("Reset Background", reset_background_callback),
- BONOBO_UI_VERB_END
- };
+ GtkUIManager *ui_manager;
+ GtkActionGroup *action_group;
+ GError *error;
+ char *file;
EEL_CALL_PARENT (FM_DIRECTORY_VIEW_CLASS, merge_menus, (view));
desktop_view = FM_DESKTOP_ICON_VIEW (view);
- desktop_view->details->ui = bonobo_ui_component_new ("Desktop Icon View");
-
- ui_container = fm_directory_view_get_bonobo_ui_container (view);
- bonobo_ui_component_set_container (desktop_view->details->ui,
- ui_container, NULL);
- bonobo_object_release_unref (ui_container, NULL);
- bonobo_ui_util_set_ui (desktop_view->details->ui,
- DATADIR,
- "nautilus-desktop-icon-view-ui.xml",
- "nautilus", NULL);
- bonobo_ui_component_add_verb_list_with_data (desktop_view->details->ui, verbs, view);
+ ui_manager = fm_directory_view_get_ui_manager (view);
+
+ action_group = gtk_action_group_new ("DesktopViewActions");
+ gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
+ desktop_view->details->desktop_action_group = action_group;
+ gtk_action_group_add_actions (action_group,
+ desktop_view_entries, G_N_ELEMENTS (desktop_view_entries),
+ 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);
+ }
+ g_free (file);
}
static gboolean
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index ebd5f58fb..ee8b5ce7e 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -32,13 +32,10 @@
#include "fm-directory-view.h"
#include "fm-list-view.h"
+#include "fm-actions.h"
#include "fm-error-reporting.h"
#include "fm-properties-window.h"
#include <libgnome/gnome-url.h>
-#include <bonobo/bonobo-control.h>
-#include <bonobo/bonobo-window.h>
-#include <bonobo/bonobo-ui-util.h>
-#include <bonobo/bonobo-exception.h>
#include <eel/eel-alert-dialog.h>
#include <eel/eel-background.h>
#include <eel/eel-glib-extensions.h>
@@ -58,6 +55,7 @@
#include <gtk/gtkstock.h>
#include <gtk/gtkmessagedialog.h>
#include <gtk/gtkhbox.h>
+#include <gtk/gtktoggleaction.h>
#include <gtk/gtkentry.h>
#include <libgnome/gnome-i18n.h>
#include <libgnome/gnome-util.h>
@@ -71,7 +69,6 @@
#include <libgnomevfs/gnome-vfs-utils.h>
#include <libnautilus-private/nautilus-recent.h>
#include <libnautilus-extension/nautilus-menu-provider.h>
-#include <libnautilus-private/nautilus-bonobo-extensions.h>
#include <libnautilus-private/nautilus-clipboard-monitor.h>
#include <libnautilus-private/nautilus-desktop-icon-file.h>
#include <libnautilus-private/nautilus-desktop-directory.h>
@@ -91,10 +88,8 @@
#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-bonobo-ui.h>
#include <unistd.h>
-
/* Number of seconds until cancel dialog shows up */
#define DELAY_UNTIL_CANCEL_MSECS 5000
@@ -113,77 +108,49 @@
/* MOD2 is num lock -- I would include MOD3-5 if I was sure they were not lock keys */
#define ALL_NON_LOCK_MODIFIER_KEYS (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)
-/* Paths to use when referring to bonobo menu items. Paths used by
- * subclasses are in fm-directory-view.h
- */
-#define FM_DIRECTORY_VIEW_COMMAND_RENAME "/commands/Rename"
-#define FM_DIRECTORY_VIEW_COMMAND_OPEN "/commands/Open"
-#define FM_DIRECTORY_VIEW_COMMAND_OPEN_ALTERNATE "/commands/OpenAlternate"
-#define FM_DIRECTORY_VIEW_COMMAND_OPEN_WITH "/commands/Open With"
-#define FM_DIRECTORY_VIEW_COMMAND_NEW_FOLDER "/commands/New Folder"
-#define FM_DIRECTORY_VIEW_COMMAND_NEW_LAUNCHER "/commands/New Launcher"
-#define FM_DIRECTORY_VIEW_COMMAND_EDIT_LAUNCHER "/commands/Edit Launcher"
-#define FM_DIRECTORY_VIEW_COMMAND_DELETE "/commands/Delete"
-#define FM_DIRECTORY_VIEW_COMMAND_TRASH "/commands/Trash"
-#define FM_DIRECTORY_VIEW_COMMAND_EMPTY_TRASH "/commands/Empty Trash"
-#define FM_DIRECTORY_VIEW_COMMAND_DUPLICATE "/commands/Duplicate"
-#define FM_DIRECTORY_VIEW_COMMAND_CREATE_LINK "/commands/Create Link"
-#define FM_DIRECTORY_VIEW_COMMAND_PROPERTIES "/commands/Properties"
-#define FM_DIRECTORY_VIEW_COMMAND_OTHER_APPLICATION "/commands/OtherApplication"
-#define FM_DIRECTORY_VIEW_COMMAND_CUT_FILES "/commands/Cut Files"
-#define FM_DIRECTORY_VIEW_COMMAND_COPY_FILES "/commands/Copy Files"
-#define FM_DIRECTORY_VIEW_COMMAND_PASTE_FILES "/commands/Paste Files"
-#define FM_DIRECTORY_VIEW_COMMAND_PASTE_FILES_INTO "/commands/Paste Files Into"
-#define FM_DIRECTORY_VIEW_COMMAND_MOUNT_VOLUME_CONDITIONAL "/commands/Mount Volume Conditional"
-#define FM_DIRECTORY_VIEW_COMMAND_UNMOUNT_VOLUME_CONDITIONAL "/commands/Unmount Volume Conditional"
-#define FM_DIRECTORY_VIEW_COMMAND_PROTECT_VOLUME_CONDITIONAL "/commands/Protect Conditional"
-#define FM_DIRECTORY_VIEW_COMMAND_FORMAT_VOLUME_CONDITIONAL "/commands/Format Conditional"
-#define FM_DIRECTORY_VIEW_COMMAND_MEDIA_PROPERTIES_VOLUME_CONDITIONAL "/commands/Media Properties Conditional"
-#define FM_DIRECTORY_VIEW_COMMAND_CONNECT_TO_SERVER_LINK_CONDITIONAL "/commands/Connect To Server Link Conditional"
-
-#define FM_DIRECTORY_VIEW_MENU_PATH_OPEN_WITH "/menu/File/Open Placeholder/Open With"
-#define FM_DIRECTORY_VIEW_MENU_PATH_NEW_DOCUMENTS "/menu/File/New Items Placeholder/New Documents"
-#define FM_DIRECTORY_VIEW_MENU_PATH_NEW_DOCUMENTS_NO_TEMPLATES "/menu/File/New Items Placeholder/New Documents/No Templates"
-#define FM_DIRECTORY_VIEW_MENU_PATH_SCRIPTS "/menu/File/Open Placeholder/Scripts"
-#define FM_DIRECTORY_VIEW_MENU_PATH_TRASH "/menu/Edit/Dangerous File Items Placeholder/Trash"
-#define FM_DIRECTORY_VIEW_MENU_PATH_DELETE "/menu/Edit/Dangerous File Items Placeholder/Delete"
-#define FM_DIRECTORY_VIEW_MENU_PATH_EMPTY_TRASH "/menu/File/Global File Items Placeholder/Empty Trash"
-#define FM_DIRECTORY_VIEW_MENU_PATH_CREATE_LINK "/menu/Edit/File Items Placeholder/Create Link"
-#define FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER "/menu/File/Open Placeholder/Open With/Applications Placeholder"
-#define FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_PLACEHOLDER "/menu/File/Open Placeholder/Applications Placeholder"
-#define FM_DIRECTORY_VIEW_MENU_PATH_OTHER_APPLICATION_PLACEHOLDER "/menu/File/Open Placeholder/OtherApplicationPlaceholder"
-#define FM_DIRECTORY_VIEW_MENU_PATH_OTHER_APPLICATION "/menu/File/Open Placeholder/OtherApplicationPlaceholder/OtherApplication"
-#define FM_DIRECTORY_VIEW_MENU_PATH_SCRIPTS_PLACEHOLDER "/menu/File/Open Placeholder/Scripts/Scripts Placeholder"
-#define FM_DIRECTORY_VIEW_MENU_PATH_SCRIPTS_SEPARATOR "/menu/File/Open Placeholder/Scripts/After Scripts"
-#define FM_DIRECTORY_VIEW_MENU_PATH_NEW_DOCUMENTS_PLACEHOLDER "/menu/File/New Items Placeholder/New Documents/New Documents Placeholder"
-#define FM_DIRECTORY_VIEW_MENU_PATH_NEW_DOCUMENTS_SEPARATOR "/menu/File/New Items Placeholder/New Documents/After New Documents"
-#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/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"
-
-#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_SCRIPTS "/popups/background/Before Zoom Items/Scripts"
-#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_SCRIPTS_PLACEHOLDER "/popups/background/Before Zoom Items/Scripts/Scripts Placeholder"
-#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_SCRIPTS_SEPARATOR "/popups/background/Before Zoom Items/Scripts/After Scripts"
-#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS "/popups/background/Before Zoom Items/New Documents"
-#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS_NO_TEMPLATES "/popups/background/Before Zoom Items/New Documents/No Templates"
-#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS_PLACEHOLDER "/popups/background/Before Zoom Items/New Documents/New Documents Placeholder"
-#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS_SEPARATOR "/popups/background/Before Zoom Items/New Documents/After New Documents"
-
-#define FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER "/popups/selection/Open Placeholder/Open With/Applications Placeholder"
-#define FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_PLACEHOLDER "/popups/selection/Open Placeholder/Applications Placeholder"
-#define FM_DIRECTORY_VIEW_POPUP_PATH_OPEN_PLACEHOLDER "/popups/selection/Open Placeholder"
-#define FM_DIRECTORY_VIEW_POPUP_PATH_OTHER_APPLICATION_PLACEHOLDER "/popups/selection/Open Placeholder/OtherApplicationPlaceholder"
-#define FM_DIRECTORY_VIEW_POPUP_PATH_OTHER_APPLICATION "/popups/selection/Open Placeholder/OtherApplicationPlaceholder/OtherApplication"
-
-#define FM_DIRECTORY_VIEW_POPUP_PATH_SCRIPTS_PLACEHOLDER "/popups/selection/Open Placeholder/Scripts/Scripts Placeholder"
-#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_EXTENSION_ACTIONS "/popups/selection/Extension Actions"
+#define FM_DIRECTORY_VIEW_MENU_PATH_OPEN_WITH "/MenuBar/File/Open Placeholder/Open With"
+#define FM_DIRECTORY_VIEW_MENU_PATH_NEW_DOCUMENTS "/MenuBar/File/New Items Placeholder/New Documents"
+#define FM_DIRECTORY_VIEW_MENU_PATH_NEW_DOCUMENTS_NO_TEMPLATES "/MenuBar/File/New Items Placeholder/New Documents/No Templates"
+#define FM_DIRECTORY_VIEW_MENU_PATH_SCRIPTS "/MenuBar/File/Open Placeholder/Scripts"
+#define FM_DIRECTORY_VIEW_MENU_PATH_TRASH "/MenuBar/Edit/Dangerous File Items Placeholder/Trash"
+#define FM_DIRECTORY_VIEW_MENU_PATH_DELETE "/MenuBar/Edit/Dangerous File Items Placeholder/Delete"
+#define FM_DIRECTORY_VIEW_MENU_PATH_EMPTY_TRASH "/MenuBar/File/Global File Items Placeholder/Empty Trash"
+#define FM_DIRECTORY_VIEW_MENU_PATH_CREATE_LINK "/MenuBar/Edit/File Items Placeholder/Create Link"
+#define FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER "/MenuBar/File/Open Placeholder/Open With/Applications Placeholder"
+#define FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_PLACEHOLDER "/MenuBar/File/Open Placeholder/Applications Placeholder"
+#define FM_DIRECTORY_VIEW_MENU_PATH_OTHER_APPLICATION_PLACEHOLDER "/MenuBar/File/Open Placeholder/OtherApplicationPlaceholder"
+#define FM_DIRECTORY_VIEW_MENU_PATH_OTHER_APPLICATION "/MenuBar/File/Open Placeholder/OtherApplicationPlaceholder/OtherApplication"
+#define FM_DIRECTORY_VIEW_MENU_PATH_SCRIPTS_PLACEHOLDER "/MenuBar/File/Open Placeholder/Scripts/Scripts Placeholder"
+#define FM_DIRECTORY_VIEW_MENU_PATH_SCRIPTS_SEPARATOR "/MenuBar/File/Open Placeholder/Scripts/After Scripts"
+#define FM_DIRECTORY_VIEW_MENU_PATH_NEW_DOCUMENTS_PLACEHOLDER "/MenuBar/File/New Items Placeholder/New Documents/New Documents Placeholder"
+#define FM_DIRECTORY_VIEW_MENU_PATH_NEW_DOCUMENTS_SEPARATOR "/MenuBar/File/New Items Placeholder/New Documents/After New Documents"
+#define FM_DIRECTORY_VIEW_MENU_PATH_CUT_FILES "/MenuBar/Edit/Cut"
+#define FM_DIRECTORY_VIEW_MENU_PATH_COPY_FILES "/MenuBar/Edit/Copy"
+#define FM_DIRECTORY_VIEW_MENU_PATH_PASTE_FILES "/MenuBar/Edit/Paste"
+#define FM_DIRECTORY_VIEW_MENU_PATH_EXTENSION_ACTIONS_PLACEHOLDER "/MenuBar/Edit/Extension Actions"
+
+#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND "/background"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_SELECTION "/selection"
+
+#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_SCRIPTS "/background/Before Zoom Items/Scripts"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_SCRIPTS_PLACEHOLDER "/background/Before Zoom Items/Scripts/Scripts Placeholder"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_SCRIPTS_SEPARATOR "/background/Before Zoom Items/Scripts/After Scripts"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS "/background/Before Zoom Items/New Documents"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS_NO_TEMPLATES "/background/Before Zoom Items/New Documents/No Templates"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS_PLACEHOLDER "/background/Before Zoom Items/New Documents/New Documents Placeholder"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS_SEPARATOR "/background/Before Zoom Items/New Documents/After New Documents"
+
+#define FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER "/selection/Open Placeholder/Open With/Applications Placeholder"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_PLACEHOLDER "/selection/Open Placeholder/Applications Placeholder"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_OPEN_PLACEHOLDER "/selection/Open Placeholder"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_OTHER_APPLICATION_PLACEHOLDER "/selection/Open Placeholder/OtherApplicationPlaceholder"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_OTHER_APPLICATION "/selection/Open Placeholder/OtherApplicationPlaceholder/OtherApplication"
+
+#define FM_DIRECTORY_VIEW_POPUP_PATH_SCRIPTS_PLACEHOLDER "/selection/Open Placeholder/Scripts/Scripts Placeholder"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_SCRIPTS_SEPARATOR "/selection/Open Placeholder/Scripts/After Scripts"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_OPEN_WITH "/selection/Open Placeholder/Open With"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_SCRIPTS "/selection/Open Placeholder/Scripts"
+#define FM_DIRECTORY_VIEW_POPUP_PATH_EXTENSION_ACTIONS "/selection/Extension Actions"
#define MAX_MENU_LEVELS 5
@@ -228,11 +195,19 @@ struct FMDirectoryViewDetails
NautilusWindowInfo *window;
NautilusDirectory *model;
NautilusFile *directory_as_file;
- BonoboUIComponent *ui;
+ GtkActionGroup *dir_action_group;
GList *scripts_directory_list;
+ GtkActionGroup *scripts_action_group;
+ guint scripts_merge_id;
+
GList *templates_directory_list;
+ GtkActionGroup *templates_action_group;
+ guint templates_merge_id;
+ GtkActionGroup *extensions_menu_action_group;
+ guint extensions_menu_merge_id;
+
guint display_selection_idle_id;
guint update_menus_timeout_id;
guint update_status_idle_id;
@@ -261,7 +236,6 @@ struct FMDirectoryViewDetails
* after it finishes loading the directory and its view.
*/
gboolean loading;
- gboolean menus_merged;
gboolean menu_states_untrustworthy;
gboolean scripts_invalid;
gboolean templates_invalid;
@@ -283,6 +257,8 @@ struct FMDirectoryViewDetails
gboolean send_selection_change_to_shell;
NautilusFile *file_monitored_for_open_with;
+ GtkActionGroup *open_with_action_group;
+ guint open_with_merge_id;
};
typedef enum {
@@ -380,6 +356,29 @@ static gboolean activate_check_mime_types (FMDirectoryView
NautilusFile *file,
gboolean warn_on_mismatch);
+static void action_open_scripts_folder_callback (GtkAction *action,
+ gpointer callback_data);
+static void action_cut_files_callback (GtkAction *action,
+ gpointer callback_data);
+static void action_copy_files_callback (GtkAction *action,
+ gpointer callback_data);
+static void action_paste_files_callback (GtkAction *action,
+ gpointer callback_data);
+static void action_rename_callback (GtkAction *action,
+ gpointer callback_data);
+static void action_show_hidden_files_callback (GtkAction *action,
+ gpointer callback_data);
+static void action_reset_background_callback (GtkAction *action,
+ gpointer callback_data);
+static void action_paste_files_into_callback (GtkAction *action,
+ gpointer callback_data);
+static void action_connect_to_server_link_callback (GtkAction *action,
+ gpointer data);
+static void action_mount_volume_callback (GtkAction *action,
+ gpointer data);
+static void action_unmount_volume_callback (GtkAction *action,
+ gpointer data);
+
EEL_CLASS_BOILERPLATE (FMDirectoryView, fm_directory_view, GTK_TYPE_SCROLLED_WINDOW)
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, add_file)
@@ -585,7 +584,8 @@ selection_not_empty_in_menu_callback (FMDirectoryView *view, GList *selection)
}
static void
-open_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_open_callback (GtkAction *action,
+ gpointer callback_data)
{
GList *selection;
FMDirectoryView *view;
@@ -600,7 +600,8 @@ open_callback (BonoboUIComponent *component, gpointer callback_data, const char
}
static void
-open_close_parent_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_open_close_parent_callback (GtkAction *action,
+ gpointer callback_data)
{
GList *selection;
FMDirectoryView *view;
@@ -616,7 +617,8 @@ open_close_parent_callback (BonoboUIComponent *component, gpointer callback_data
static void
-open_alternate_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_open_alternate_callback (GtkAction *action,
+ gpointer callback_data)
{
FMDirectoryView *view;
GList *selection;
@@ -777,7 +779,8 @@ open_with_other_program (FMDirectoryView *view)
}
static void
-other_application_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_other_application_callback (GtkAction *action,
+ gpointer callback_data)
{
g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
@@ -800,8 +803,10 @@ edit_launcher (FMDirectoryView *view,
g_free (uri);
}
+ /* BONOBOTODO: do we use this anymore? */
static void
-edit_launcher_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_edit_launcher_callback (GtkAction *action,
+ gpointer callback_data)
{
GList *selection;
FMDirectoryView *view;
@@ -830,7 +835,8 @@ trash_or_delete_selected_files (FMDirectoryView *view)
}
static void
-trash_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_trash_callback (GtkAction *action,
+ gpointer callback_data)
{
trash_or_delete_selected_files (FM_DIRECTORY_VIEW (callback_data));
}
@@ -909,7 +915,8 @@ delete_selected_files (FMDirectoryView *view)
}
static void
-delete_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_delete_callback (GtkAction *action,
+ gpointer callback_data)
{
if (!show_delete_command_auto_value) {
return;
@@ -918,7 +925,8 @@ delete_callback (BonoboUIComponent *component, gpointer callback_data, const cha
}
static void
-duplicate_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_duplicate_callback (GtkAction *action,
+ gpointer callback_data)
{
FMDirectoryView *view;
GList *selection;
@@ -942,7 +950,8 @@ duplicate_callback (BonoboUIComponent *component, gpointer callback_data, const
}
static void
-create_link_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_create_link_callback (GtkAction *action,
+ gpointer callback_data)
{
FMDirectoryView *view;
GList *selection;
@@ -962,9 +971,8 @@ create_link_callback (BonoboUIComponent *component, gpointer callback_data, cons
}
static void
-bonobo_menu_select_all_callback (BonoboUIComponent *component,
- gpointer callback_data,
- const char *verb)
+action_select_all_callback (GtkAction *action,
+ gpointer callback_data)
{
g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
@@ -1041,9 +1049,8 @@ select_pattern (FMDirectoryView *view)
}
static void
-bonobo_menu_select_pattern_callback (BonoboUIComponent *component,
- gpointer callback_data,
- const char *verb)
+action_select_pattern_callback (GtkAction *action,
+ gpointer callback_data)
{
g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
@@ -1051,9 +1058,8 @@ bonobo_menu_select_pattern_callback (BonoboUIComponent *component,
}
static void
-reset_to_defaults_callback (BonoboUIComponent *component,
- gpointer callback_data,
- const char *verb)
+action_reset_to_defaults_callback (GtkAction *action,
+ gpointer callback_data)
{
g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
@@ -1062,10 +1068,7 @@ reset_to_defaults_callback (BonoboUIComponent *component,
static void
-show_hidden_files_toggle_callback (BonoboUIComponent *component,
- const char *path,
- Bonobo_UIComponent_EventType type,
- const char *state,
+action_show_hidden_files_callback (GtkAction *action,
gpointer callback_data)
{
FMDirectoryView *directory_view;
@@ -1073,13 +1076,9 @@ show_hidden_files_toggle_callback (BonoboUIComponent *component,
g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
directory_view = FM_DIRECTORY_VIEW (callback_data);
-
- if (strcmp (state, "") == 0) {
- /* State goes blank when component is removed; ignore this. */
- return;
- }
- directory_view->details->show_hidden_files = strcmp (state, "1") == 0;
+ directory_view->details->show_hidden_files = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+
if (directory_view->details->show_hidden_files) {
mode = NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_ENABLE;
} else {
@@ -1092,9 +1091,8 @@ show_hidden_files_toggle_callback (BonoboUIComponent *component,
}
static void
-bonobo_menu_empty_trash_callback (BonoboUIComponent *component,
- gpointer callback_data,
- const char *verb)
+action_empty_trash_callback (GtkAction *action,
+ gpointer callback_data)
{
g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
@@ -1102,7 +1100,8 @@ bonobo_menu_empty_trash_callback (BonoboUIComponent *component,
}
static void
-new_folder_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_new_folder_callback (GtkAction *action,
+ gpointer callback_data)
{
g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
@@ -1110,7 +1109,8 @@ new_folder_callback (BonoboUIComponent *component, gpointer callback_data, const
}
static void
-new_empty_file_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_new_empty_file_callback (GtkAction *action,
+ gpointer callback_data)
{
g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
@@ -1118,7 +1118,8 @@ new_empty_file_callback (BonoboUIComponent *component, gpointer callback_data, c
}
static void
-new_launcher_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_new_launcher_callback (GtkAction *action,
+ gpointer callback_data)
{
char *parent_uri;
FMDirectoryView *view;
@@ -1139,7 +1140,8 @@ new_launcher_callback (BonoboUIComponent *component, gpointer callback_data, con
}
static void
-open_properties_window_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_properties_callback (GtkAction *action,
+ gpointer callback_data)
{
FMDirectoryView *view;
GList *selection;
@@ -1214,34 +1216,6 @@ we_are_in_vfolder_desktop_dir (FMDirectoryView *view)
}
}
-static void
-parent_set_callback (GtkWidget *widget,
- GtkWidget *previous_parent,
- gpointer callback_data)
-{
- FMDirectoryView *view;
-
- g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
-
- view = FM_DIRECTORY_VIEW (callback_data);
-
- if (widget->parent != NULL) {
- /* Add new menu items and perhaps whole menus */
- fm_directory_view_merge_menus (view);
-
- /* Set initial sensitivity, wording, toggle state, etc. */
- fm_directory_view_update_menus (view);
-
- /* initialise show hidden mode */
- fm_directory_view_init_show_hidden_files (view);
- }
-
- /*
- * Nothing to do on deactivate case, which never happens because
- * of the way Nautilus content views are handled.
- */
-}
-
/* Preferences changed callbacks */
static void
text_attribute_names_changed_callback (gpointer callback_data)
@@ -1492,7 +1466,17 @@ static void
fm_directory_view_set_parent_window (FMDirectoryView *directory_view,
NautilusWindowInfo *window)
{
- directory_view->details->window = window;
+
+ directory_view->details->window = window;
+
+ /* Add new menu items and perhaps whole menus */
+ fm_directory_view_merge_menus (directory_view);
+
+ /* Set initial sensitivity, wording, toggle state, etc. */
+ fm_directory_view_update_menus (directory_view);
+
+ /* initialise show hidden mode */
+ fm_directory_view_init_show_hidden_files (directory_view);
}
static GtkWidget *
@@ -1639,8 +1623,6 @@ fm_directory_view_init (FMDirectoryView *view)
view->details->sort_directories_first =
eel_preferences_get_boolean (NAUTILUS_PREFERENCES_SORT_DIRECTORIES_FIRST);
- g_signal_connect_object (view, "parent_set",
- G_CALLBACK (parent_set_callback), view, 0);
g_signal_connect_object (nautilus_trash_monitor_get (), "trash_state_changed",
G_CALLBACK (fm_directory_view_trash_state_changed_callback), view, 0);
@@ -1721,8 +1703,6 @@ fm_directory_view_destroy (GtkObject *object)
fm_directory_view_ignore_hidden_file_preferences (view);
- eel_remove_weak_pointer (&view->details->ui);
-
EEL_CALL_PARENT (GTK_OBJECT_CLASS, destroy, (object));
}
@@ -2052,7 +2032,8 @@ done_loading (FMDirectoryView *view)
}
static void
-reset_background_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_reset_background_callback (GtkAction *action,
+ gpointer callback_data)
{
g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
@@ -2488,7 +2469,7 @@ static gboolean
update_menus_timeout_callback (gpointer data)
{
FMDirectoryView *view;
-
+
view = FM_DIRECTORY_VIEW (data);
g_object_ref (G_OBJECT (view));
@@ -2912,25 +2893,10 @@ fm_directory_view_get_item_count (FMDirectoryView *view)
get_item_count, (view));
}
-/**
- * fm_directory_view_get_bonobo_ui_container:
- *
- * Get the BonoboUIContainer for this FMDirectoryView.
- * This is normally called only by subclasses in order to
- * install and modify bonobo menus and such.
- * @view: FMDirectoryView of interest.
- *
- * Return value: BonoboUIContainer for this view.
- *
- **/
-Bonobo_UIContainer
-fm_directory_view_get_bonobo_ui_container (FMDirectoryView *view)
+GtkUIManager *
+fm_directory_view_get_ui_manager (FMDirectoryView *view)
{
- Bonobo_UIContainer ui_container;
- g_return_val_if_fail (FM_IS_DIRECTORY_VIEW (view), NULL);
-
- ui_container = nautilus_window_info_get_ui_container (view->details->window);
- return bonobo_object_dup_ref (ui_container, NULL);
+ return nautilus_window_info_get_ui_manager (view->details->window);
}
/**
@@ -3565,7 +3531,8 @@ fm_directory_view_get_directory_as_file (FMDirectoryView *view)
}
static void
-bonobo_launch_application_callback (BonoboUIComponent *component, gpointer callback_data, const char *path)
+open_with_launch_application_callback (GtkAction *action,
+ gpointer callback_data)
{
ApplicationLaunchParameters *launch_parameters;
@@ -3574,108 +3541,176 @@ bonobo_launch_application_callback (BonoboUIComponent *component, gpointer callb
(launch_parameters->application,
launch_parameters->file,
launch_parameters->directory_view);
-}
+}
-static void
-add_numbered_menu_item (BonoboUIComponent *ui,
- const char *parent_path,
- const char *label,
- const char *tip,
- int index,
- GdkPixbuf *pixbuf,
- gpointer callback,
- gpointer callback_data,
- GDestroyNotify destroy_notify)
+static char *
+escape_action_name (const char *action_name,
+ const char *prefix)
{
- char *escaped_parent_path, *escaped_label, *verb_name, *item_path;
+ GString *s;
- if (parent_path == NULL) {
- return;
+ if (action_name == NULL) {
+ return NULL;
}
- escaped_parent_path = eel_str_double_underscores (parent_path);
+ s = g_string_new (prefix);
- escaped_label = eel_str_double_underscores (label);
- nautilus_bonobo_add_numbered_menu_item
- (ui,
- escaped_parent_path,
- index,
- escaped_label,
- pixbuf);
- g_free (escaped_label);
+ while (*action_name != 0) {
+ switch (*action_name) {
+ case '\\':
+ g_string_append (s, "\\\\");
+ break;
+ case '/':
+ g_string_append (s, "\\s");
+ break;
+ case '&':
+ g_string_append (s, "\\a");
+ break;
+ case '"':
+ g_string_append (s, "\\q");
+ break;
+ default:
+ g_string_append_c (s, *action_name);
+ }
+
+ action_name ++;
+ }
+ return g_string_free (s, FALSE);
+}
- item_path = nautilus_bonobo_get_numbered_menu_item_path
- (ui, escaped_parent_path, index);
- nautilus_bonobo_set_tip (ui, item_path, tip);
- g_free (item_path);
+static char *
+escape_action_path (const char *action_path)
+{
+ GString *s;
+
+ if (action_path == NULL) {
+ return NULL;
+ }
+
+ s = g_string_sized_new (strlen (action_path) + 2);
- verb_name = nautilus_bonobo_get_numbered_menu_item_command
- (ui, escaped_parent_path, index);
- bonobo_ui_component_add_verb_full (ui, verb_name,
- g_cclosure_new (callback, callback_data,
- (GClosureNotify) destroy_notify));
- g_free (verb_name);
+ while (*action_path != 0) {
+ switch (*action_path) {
+ case '\\':
+ g_string_append (s, "\\\\");
+ break;
+ case '&':
+ g_string_append (s, "\\a");
+ break;
+ case '"':
+ g_string_append (s, "\\q");
+ break;
+ default:
+ g_string_append_c (s, *action_path);
+ }
- g_free (escaped_parent_path);
+ action_path ++;
+ }
+ return g_string_free (s, FALSE);
}
+
static void
-add_submenu (BonoboUIComponent *ui,
+add_submenu (GtkUIManager *ui_manager,
+ GtkActionGroup *action_group,
+ guint merge_id,
const char *parent_path,
+ const char *uri,
const char *label,
GdkPixbuf *pixbuf)
{
- char *escaped_parent_path, *escaped_label;
-
+ char *escaped_label;
+ char *action_name;
+ char *submenu_name;
+ char *escaped_submenu_name;
+ GtkAction *action;
+
if (parent_path != NULL) {
- escaped_parent_path = eel_str_double_underscores (parent_path);
+ action_name = escape_action_name (uri, "submenu_");
+ submenu_name = g_path_get_basename (uri);
+ escaped_submenu_name = escape_action_path (submenu_name);
escaped_label = eel_str_double_underscores (label);
- nautilus_bonobo_add_submenu (ui, escaped_parent_path, escaped_label, pixbuf);
+
+ action = gtk_action_new (action_name,
+ escaped_label,
+ NULL,
+ NULL);
+ g_object_set_data_full (G_OBJECT (action), "menu-icon",
+ g_object_ref (pixbuf),
+ g_object_unref);
+
+ g_object_set (action, "hide-if-empty", FALSE, NULL);
+
+ gtk_action_group_add_action (action_group,
+ action);
+ g_object_unref (action);
+
+ gtk_ui_manager_add_ui (ui_manager,
+ merge_id,
+ parent_path,
+ escaped_submenu_name,
+ action_name,
+ GTK_UI_MANAGER_MENU,
+ FALSE);
+ g_free (action_name);
g_free (escaped_label);
- g_free (escaped_parent_path);
+ g_free (submenu_name);
+ g_free (escaped_submenu_name);
}
}
static void
-add_application_to_bonobo_menu (FMDirectoryView *directory_view,
- GnomeVFSMimeApplication *application,
- NautilusFile *file,
- int index,
- const char *menu_placeholder,
- const char *popup_placeholder)
+add_application_to_open_with_menu (FMDirectoryView *view,
+ GnomeVFSMimeApplication *application,
+ NautilusFile *file,
+ int index,
+ const char *menu_placeholder,
+ const char *popup_placeholder)
{
ApplicationLaunchParameters *launch_parameters;
char *tip;
char *label;
+ char *action_name;
+ GtkAction *action;
launch_parameters = application_launch_parameters_new
- (application, file, directory_view);
+ (application, file, view);
label = g_strdup_printf (_("Open with \"%s\""), application->name);
tip = g_strdup_printf (_("Use \"%s\" to open the selected item"), application->name);
- add_numbered_menu_item (directory_view->details->ui,
- menu_placeholder,
- label,
- tip,
- index,
- NULL,
- bonobo_launch_application_callback,
- launch_parameters,
- (GDestroyNotify) application_launch_parameters_free);
-
+ action_name = g_strdup_printf ("open_with_%d", index);
- /* Use same launch parameters and no DestroyNotify for popup item, which has same
- * lifetime as the item in the File menu in the menu bar.
- */
- add_numbered_menu_item (directory_view->details->ui,
- popup_placeholder,
- label,
- tip,
- index,
- NULL,
- bonobo_launch_application_callback,
- launch_parameters,
- NULL);
+ action = gtk_action_new (action_name,
+ label,
+ tip,
+ NULL);
+
+ g_signal_connect_data (action, "activate",
+ G_CALLBACK (open_with_launch_application_callback),
+ launch_parameters,
+ (GClosureNotify)application_launch_parameters_free, 0);
+
+ gtk_action_group_add_action (view->details->open_with_action_group,
+ action);
+ g_object_unref (action);
+
+ gtk_ui_manager_add_ui (nautilus_window_info_get_ui_manager (view->details->window),
+ view->details->open_with_merge_id,
+ menu_placeholder,
+ action_name,
+ action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+
+ gtk_ui_manager_add_ui (nautilus_window_info_get_ui_manager (view->details->window),
+ view->details->open_with_merge_id,
+ popup_placeholder,
+ action_name,
+ action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+
+ g_free (action_name);
g_free (label);
g_free (tip);
}
@@ -3816,7 +3851,7 @@ get_activation_action (NautilusFile *file)
}
static void
-reset_bonobo_open_with_menu (FMDirectoryView *view, GList *selection)
+reset_open_with_menu (FMDirectoryView *view, GList *selection)
{
GList *applications, *node;
NautilusFile *file;
@@ -3825,17 +3860,34 @@ reset_bonobo_open_with_menu (FMDirectoryView *view, GList *selection)
int num_applications;
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 */
- nautilus_bonobo_remove_menu_items_and_commands
- (view->details->ui, FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_PLACEHOLDER);
- nautilus_bonobo_remove_menu_items_and_commands
- (view->details->ui, FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_PLACEHOLDER);
- nautilus_bonobo_remove_menu_items_and_commands
- (view->details->ui, FM_DIRECTORY_VIEW_MENU_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER);
- nautilus_bonobo_remove_menu_items_and_commands
- (view->details->ui, FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER);
+
+ 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;
+ }
+ 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. */
@@ -3889,11 +3941,11 @@ reset_bonobo_open_with_menu (FMDirectoryView *view, GList *selection)
popup_path = FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_PLACEHOLDER;
}
- add_application_to_bonobo_menu (view,
- node->data,
- file,
- index,
- menu_path,popup_path);
+ add_application_to_open_with_menu (view,
+ node->data,
+ file,
+ index,
+ menu_path, popup_path);
}
gnome_vfs_mime_application_list_free (applications);
@@ -3902,28 +3954,21 @@ reset_bonobo_open_with_menu (FMDirectoryView *view, GList *selection)
submenu_visible = (num_applications > 3);
}
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_OTHER_APPLICATION,
- !other_applications_visible);
-
- /* It's OK to set the visibility of the menu items (rather than the verbs)
- * here because these are submenu titles, not items with verbs.
- */
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_MENU_PATH_OPEN_WITH,
- !submenu_visible);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_POPUP_PATH_OPEN_WITH,
- !submenu_visible);
-
-
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_POPUP_PATH_OTHER_APPLICATION_PLACEHOLDER,
- submenu_visible);
-
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_MENU_PATH_OTHER_APPLICATION_PLACEHOLDER,
- submenu_visible);
+ if (submenu_visible) {
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_OTHER_APPLICATION1);
+ gtk_action_set_visible (action, other_applications_visible);
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_OTHER_APPLICATION2);
+ gtk_action_set_visible (action, FALSE);
+ } else {
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_OTHER_APPLICATION1);
+ gtk_action_set_visible (action, FALSE);
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_OTHER_APPLICATION2);
+ gtk_action_set_visible (action, other_applications_visible);
+ }
}
static GList *
@@ -3960,6 +4005,7 @@ typedef struct
GList *selection;
} ExtensionActionCallbackData;
+
static void
extension_action_callback_data_free (ExtensionActionCallbackData *data)
{
@@ -4014,8 +4060,8 @@ extension_action_slow_mime_types_ready_callback (GList *selection,
}
static void
-extension_action_callback (BonoboUIComponent *component,
- gpointer callback_data, const char *path)
+extension_action_callback (GtkAction *action,
+ gpointer callback_data)
{
ExtensionActionCallbackData *data;
@@ -4028,37 +4074,67 @@ extension_action_callback (BonoboUIComponent *component,
callback_data);
}
-static void
-add_extension_command_for_files (FMDirectoryView *view,
- NautilusMenuItem *item,
- GList *files)
+static GtkAction *
+add_extension_action_for_files (FMDirectoryView *view,
+ NautilusMenuItem *item,
+ GList *files)
{
- char *xml;
- char *name;
+ char *name, *label, *tip, *icon;
+ gboolean sensitive, priority;
+ GtkAction *action;
+ GdkPixbuf *pixbuf;
ExtensionActionCallbackData *data;
- GClosure *closure;
-
- xml = nautilus_bonobo_get_extension_item_command_xml (item);
-
- bonobo_ui_component_set (view->details->ui, "/commands", xml, NULL);
-
- g_free (xml);
+
+ g_object_get (G_OBJECT (item),
+ "name", &name, "label", &label,
+ "tip", &tip, "icon", &icon,
+ "sensitive", &sensitive,
+ "priority", &priority,
+ NULL);
+
+ action = gtk_action_new (name,
+ label,
+ tip,
+ icon);
+
+ /* TODO: This should really use themed icons, but that
+ doesn't work here yet */
+ if (icon != NULL) {
+ pixbuf = nautilus_icon_factory_get_pixbuf_from_name
+ (icon,
+ NULL,
+ NAUTILUS_ICON_SIZE_FOR_MENUS,
+ NULL);
+ if (pixbuf != NULL) {
+ g_object_set_data_full (G_OBJECT (action), "menu-icon",
+ pixbuf,
+ g_object_unref);
+ }
+ }
- g_object_get (G_OBJECT (item), "name", &name, NULL);
+ gtk_action_set_sensitive (action, sensitive);
+ g_object_set (action, "is-important", priority, NULL);
data = g_new0 (ExtensionActionCallbackData, 1);
data->item = g_object_ref (item);
data->view = view;
data->selection = nautilus_file_list_copy (files);
- closure = g_cclosure_new
- (G_CALLBACK (extension_action_callback),
- data,
- (GClosureNotify)extension_action_callback_data_free);
-
- bonobo_ui_component_add_verb_full (view->details->ui, name, closure);
+ g_signal_connect_data (action, "activate",
+ G_CALLBACK (extension_action_callback),
+ data,
+ (GClosureNotify)extension_action_callback_data_free, 0);
+
+ gtk_action_group_add_action (view->details->extensions_menu_action_group,
+ GTK_ACTION (action));
+ g_object_unref (action);
g_free (name);
+ g_free (label);
+ g_free (tip);
+ g_free (icon);
+
+ return action;
}
static void
@@ -4182,20 +4258,34 @@ add_extension_menu_items (FMDirectoryView *view,
GList *files,
GList *menu_items)
{
+ GtkUIManager *ui_manager;
GList *l;
+
+ ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
+
for (l = menu_items; l; l = l->next) {
NautilusMenuItem *item;
+ GtkAction *action;
item = NAUTILUS_MENU_ITEM (l->data);
- add_extension_command_for_files (view, item, files);
-
- 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);
+ action = add_extension_action_for_files (view, item, files);
+
+ gtk_ui_manager_add_ui (ui_manager,
+ view->details->extensions_menu_merge_id,
+ FM_DIRECTORY_VIEW_POPUP_PATH_EXTENSION_ACTIONS,
+ gtk_action_get_name (action),
+ gtk_action_get_name (action),
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+
+ gtk_ui_manager_add_ui (ui_manager,
+ view->details->extensions_menu_merge_id,
+ FM_DIRECTORY_VIEW_MENU_PATH_EXTENSION_ACTIONS_PLACEHOLDER,
+ gtk_action_get_name (action),
+ gtk_action_get_name (action),
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
}
}
@@ -4247,12 +4337,32 @@ reset_extension_actions_menu (FMDirectoryView *view, GList *selection)
GList *unique_selection;
GList *items;
GList *l;
-
+ GtkUIManager *ui_manager;
+ guint merge_id;
+ GtkActionGroup *action_group;
+
/* 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_MENU_PATH_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;
+ }
+
+ 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 */
/* only query for the unique files */
unique_selection = get_unique_files (selection);
@@ -4413,7 +4523,7 @@ unset_script_environment_variables (void)
}
static void
-run_script_callback (BonoboUIComponent *component, gpointer callback_data, const char *path)
+run_script_callback (GtkAction *action, gpointer callback_data)
{
ScriptLaunchParameters *launch_parameters;
GdkScreen *screen;
@@ -4472,63 +4582,87 @@ run_script_callback (BonoboUIComponent *component, gpointer callback_data, const
static void
add_script_to_scripts_menus (FMDirectoryView *directory_view,
- NautilusFile *file,
- int index,
- const char *menu_path,
- const char *popup_path,
- const char *popup_bg_path)
+ NautilusFile *file,
+ const char *menu_path,
+ const char *popup_path,
+ const char *popup_bg_path)
{
ScriptLaunchParameters *launch_parameters;
char *tip;
char *name;
+ char *uri;
+ char *action_name;
+ char *escaped_label;
GdkPixbuf *pixbuf;
+ GtkUIManager *ui_manager;
+ GtkAction *action;
name = nautilus_file_get_display_name (file);
+ uri = nautilus_file_get_uri (file);
tip = g_strdup_printf (_("Run \"%s\" on any selected items"), name);
launch_parameters = script_launch_parameters_new (file, directory_view);
pixbuf = nautilus_icon_factory_get_pixbuf_for_file
(file, NULL, NAUTILUS_ICON_SIZE_FOR_MENUS);
- add_numbered_menu_item (directory_view->details->ui,
- menu_path,
- name,
- tip,
- index,
- pixbuf,
- run_script_callback,
- launch_parameters,
- (GDestroyNotify) script_launch_parameters_free);
-
- /* Use same launch parameters and no DestroyNotify for popup item, which has same
- * lifetime as the item in the File menu in the menu bar.
- */
- add_numbered_menu_item (directory_view->details->ui,
- popup_path,
- name,
- tip,
- index,
- pixbuf,
- run_script_callback,
- launch_parameters,
- NULL);
- add_numbered_menu_item (directory_view->details->ui,
- popup_bg_path,
- name,
- tip,
- index,
- pixbuf,
- run_script_callback,
- launch_parameters,
- NULL);
+ action_name = escape_action_name (uri, "script_");
+ escaped_label = eel_str_double_underscores (name);
+
+ action = gtk_action_new (action_name,
+ escaped_label,
+ tip,
+ NULL);
+
+ g_object_set_data_full (G_OBJECT (action), "menu-icon",
+ g_object_ref (pixbuf),
+ g_object_unref);
+
+ g_signal_connect_data (action, "activate",
+ G_CALLBACK (run_script_callback),
+ launch_parameters,
+ (GClosureNotify)script_launch_parameters_free, 0);
+
+ gtk_action_group_add_action (directory_view->details->scripts_action_group,
+ action);
+ g_object_unref (action);
+
+ ui_manager = nautilus_window_info_get_ui_manager (directory_view->details->window);
+
+ gtk_ui_manager_add_ui (ui_manager,
+ directory_view->details->scripts_merge_id,
+ menu_path,
+ action_name,
+ action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+ gtk_ui_manager_add_ui (ui_manager,
+ directory_view->details->scripts_merge_id,
+ popup_path,
+ action_name,
+ action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+ gtk_ui_manager_add_ui (ui_manager,
+ directory_view->details->scripts_merge_id,
+ popup_bg_path,
+ action_name,
+ action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+
g_object_unref (pixbuf);
g_free (name);
+ g_free (uri);
g_free (tip);
+ g_free (action_name);
+ g_free (escaped_label);
}
static void
add_submenu_to_directory_menus (FMDirectoryView *directory_view,
+ GtkActionGroup *action_group,
+ guint merge_id,
NautilusFile *file,
const char *menu_path,
const char *popup_path,
@@ -4536,15 +4670,20 @@ add_submenu_to_directory_menus (FMDirectoryView *directory_view,
{
char *name;
GdkPixbuf *pixbuf;
+ char *uri;
+ GtkUIManager *ui_manager;
+ ui_manager = nautilus_window_info_get_ui_manager (directory_view->details->window);
+ uri = nautilus_file_get_uri (file);
name = nautilus_file_get_display_name (file);
pixbuf = nautilus_icon_factory_get_pixbuf_for_file
(file, NULL, NAUTILUS_ICON_SIZE_FOR_MENUS);
- add_submenu (directory_view->details->ui, menu_path, name, pixbuf);
- add_submenu (directory_view->details->ui, popup_path, name, pixbuf);
- add_submenu (directory_view->details->ui, popup_bg_path, name, pixbuf);
+ add_submenu (ui_manager, action_group, merge_id, menu_path, uri, name, pixbuf);
+ add_submenu (ui_manager, action_group, merge_id, popup_path, uri, name, pixbuf);
+ add_submenu (ui_manager, action_group, merge_id, popup_bg_path, uri, name, pixbuf);
g_object_unref (pixbuf);
g_free (name);
+ g_free (uri);
}
static gboolean
@@ -4581,10 +4720,9 @@ update_directory_in_scripts_menu (FMDirectoryView *view, NautilusDirectory *dire
NautilusDirectory *dir;
char *uri;
char *escaped_path;
- int i;
uri = nautilus_directory_get_uri (directory);
- escaped_path = gnome_vfs_escape_path_string (uri + scripts_directory_uri_length);
+ escaped_path = escape_action_path (uri + scripts_directory_uri_length);
g_free (uri);
menu_path = g_strconcat (FM_DIRECTORY_VIEW_MENU_PATH_SCRIPTS_PLACEHOLDER,
escaped_path,
@@ -4604,12 +4742,11 @@ update_directory_in_scripts_menu (FMDirectoryView *view, NautilusDirectory *dire
file_list = nautilus_file_list_sort_by_display_name (filtered);
any_scripts = FALSE;
- i = 0;
for (node = file_list; node != NULL; node = node->next) {
file = node->data;
if (file_is_launchable (file)) {
- add_script_to_scripts_menus (view, file, i++, menu_path, popup_path, popup_bg_path);
+ add_script_to_scripts_menus (view, file, menu_path, popup_path, popup_bg_path);
any_scripts = TRUE;
} else if (nautilus_file_is_directory (file)) {
uri = nautilus_file_get_uri (file);
@@ -4618,7 +4755,10 @@ update_directory_in_scripts_menu (FMDirectoryView *view, NautilusDirectory *dire
add_directory_to_scripts_directory_list (view, dir);
nautilus_directory_unref (dir);
- add_submenu_to_directory_menus (view, file, menu_path, popup_path, popup_bg_path);
+ add_submenu_to_directory_menus (view,
+ view->details->scripts_action_group,
+ view->details->scripts_merge_id,
+ file, menu_path, popup_path, popup_bg_path);
any_scripts = TRUE;
}
@@ -4642,18 +4782,35 @@ update_scripts_menu (FMDirectoryView *view)
GList *sorted_copy, *node;
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
valid before we begin our task then we can lose script menu updates that
occur before we finish. */
view->details->scripts_invalid = FALSE;
- nautilus_bonobo_remove_menu_items_and_commands
- (view->details->ui, FM_DIRECTORY_VIEW_MENU_PATH_SCRIPTS_PLACEHOLDER);
- nautilus_bonobo_remove_menu_items_and_commands
- (view->details->ui, FM_DIRECTORY_VIEW_POPUP_PATH_SCRIPTS_PLACEHOLDER);
- nautilus_bonobo_remove_menu_items_and_commands
- (view->details->ui, FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_SCRIPTS_PLACEHOLDER);
+ 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 */
/* As we walk through the directories, remove any that no longer belong. */
any_scripts = FALSE;
@@ -4672,28 +4829,12 @@ update_scripts_menu (FMDirectoryView *view)
}
nautilus_directory_list_free (sorted_copy);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_MENU_PATH_SCRIPTS,
- !any_scripts);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_POPUP_PATH_SCRIPTS,
- !any_scripts);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_SCRIPTS,
- !any_scripts);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_MENU_PATH_SCRIPTS_SEPARATOR,
- !any_scripts);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_POPUP_PATH_SCRIPTS_SEPARATOR,
- !any_scripts);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_SCRIPTS_SEPARATOR,
- !any_scripts);
-}
-
-static void
-create_template_callback (BonoboUIComponent *component, gpointer callback_data, const char *path)
+ action = gtk_action_group_get_action (view->details->dir_action_group, FM_ACTION_SCRIPTS);
+ gtk_action_set_visible (action, any_scripts);
+}
+
+static void
+create_template_callback (GtkAction *action, gpointer callback_data)
{
CreateTemplateParameters *parameters;
@@ -4702,22 +4843,23 @@ create_template_callback (BonoboUIComponent *component, gpointer callback_data,
fm_directory_view_new_file (parameters->directory_view, parameters->file);
}
-
static void
add_template_to_templates_menus (FMDirectoryView *directory_view,
NautilusFile *file,
- int index,
const char *menu_path,
const char *popup_bg_path)
{
- char *tip;
- char *name;
- char *dot;
+ char *tip, *uri, *name;
+ char *dot, *escaped_label;
GdkPixbuf *pixbuf;
+ char *action_name;
CreateTemplateParameters *parameters;
+ GtkUIManager *ui_manager;
+ GtkAction *action;
+
name = nautilus_file_get_display_name (file);
-
+ uri = nautilus_file_get_uri (file);
tip = g_strdup_printf (_("Create Document from template \"%s\""), name);
/* Remove extension */
@@ -4729,33 +4871,53 @@ add_template_to_templates_menus (FMDirectoryView *directory_view,
pixbuf = nautilus_icon_factory_get_pixbuf_for_file
(file, NULL, NAUTILUS_ICON_SIZE_FOR_MENUS);
+ action_name = escape_action_name (uri, "template_");
+ escaped_label = eel_str_double_underscores (name);
+
parameters = create_template_parameters_new (file, directory_view);
- add_numbered_menu_item (directory_view->details->ui,
- menu_path,
- name,
- tip,
- index,
- pixbuf,
- create_template_callback,
- parameters,
- (GDestroyNotify) create_templates_parameters_free);
-
- /* Use same uri and no DestroyNotify for popup item, which has same
- * lifetime as the item in the File menu in the menu bar.
- */
- add_numbered_menu_item (directory_view->details->ui,
- popup_bg_path,
- name,
- tip,
- index,
- pixbuf,
- create_template_callback,
- parameters,
- NULL);
+ action = gtk_action_new (action_name,
+ escaped_label,
+ tip,
+ NULL);
+
+ g_object_set_data_full (G_OBJECT (action), "menu-icon",
+ g_object_ref (pixbuf),
+ g_object_unref);
+
+ g_signal_connect_data (action, "activate",
+ G_CALLBACK (create_template_callback),
+ parameters,
+ (GClosureNotify)create_templates_parameters_free, 0);
+
+ gtk_action_group_add_action (directory_view->details->templates_action_group,
+ action);
+ g_object_unref (action);
+
+ ui_manager = nautilus_window_info_get_ui_manager (directory_view->details->window);
+
+ gtk_ui_manager_add_ui (ui_manager,
+ directory_view->details->templates_merge_id,
+ menu_path,
+ action_name,
+ action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+
+ gtk_ui_manager_add_ui (ui_manager,
+ directory_view->details->templates_merge_id,
+ popup_bg_path,
+ action_name,
+ action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+
g_object_unref (pixbuf);
+ g_free (escaped_label);
g_free (name);
g_free (tip);
+ g_free (uri);
+ g_free (action_name);
}
@@ -4793,18 +4955,16 @@ update_directory_in_templates_menu (FMDirectoryView *view, NautilusDirectory *di
NautilusDirectory *dir;
char *escaped_path;
char *uri;
- int i;
uri = nautilus_directory_get_uri (directory);
- escaped_path = gnome_vfs_escape_path_string (uri + templates_directory_uri_length);
+ escaped_path = escape_action_path (uri + templates_directory_uri_length);
g_free (uri);
menu_path = g_strconcat (FM_DIRECTORY_VIEW_MENU_PATH_NEW_DOCUMENTS_PLACEHOLDER,
escaped_path,
NULL);
popup_bg_path = g_strconcat (FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS_PLACEHOLDER,
escaped_path,
- NULL);;
-
+ NULL);
g_free (escaped_path);
file_list = nautilus_directory_get_file_list (directory);
@@ -4814,7 +4974,6 @@ update_directory_in_templates_menu (FMDirectoryView *view, NautilusDirectory *di
file_list = nautilus_file_list_sort_by_display_name (filtered);
any_templates = FALSE;
- i = 0;
for (node = file_list; node != NULL; node = node->next) {
file = node->data;
@@ -4825,13 +4984,16 @@ update_directory_in_templates_menu (FMDirectoryView *view, NautilusDirectory *di
add_directory_to_templates_directory_list (view, dir);
nautilus_directory_unref (dir);
- add_submenu_to_directory_menus (view, file, menu_path, NULL, popup_bg_path);
+ add_submenu_to_directory_menus (view,
+ view->details->templates_action_group,
+ view->details->templates_merge_id,
+ file, menu_path, NULL, popup_bg_path);
any_templates = TRUE;
}
g_free (uri);
} else if (nautilus_file_can_read (file)) {
- add_template_to_templates_menus (view, file, i++, menu_path, popup_bg_path);
+ add_template_to_templates_menus (view, file, menu_path, popup_bg_path);
any_templates = TRUE;
}
}
@@ -4852,17 +5014,36 @@ update_templates_menu (FMDirectoryView *view)
gboolean any_templates;
GList *sorted_copy, *node;
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
valid before we begin our task then we can lose template menu updates that
occur before we finish. */
view->details->templates_invalid = FALSE;
- nautilus_bonobo_remove_menu_items_and_commands
- (view->details->ui, FM_DIRECTORY_VIEW_MENU_PATH_NEW_DOCUMENTS_PLACEHOLDER);
- nautilus_bonobo_remove_menu_items_and_commands
- (view->details->ui, FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS_PLACEHOLDER);
+ 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;
+ }
+
+ 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 */
/* As we walk through the directories, remove any that no longer belong. */
any_templates = FALSE;
@@ -4881,19 +5062,14 @@ update_templates_menu (FMDirectoryView *view)
}
nautilus_directory_list_free (sorted_copy);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_MENU_PATH_NEW_DOCUMENTS_NO_TEMPLATES,
- any_templates);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS_NO_TEMPLATES,
- any_templates);
+ action = gtk_action_group_get_action (view->details->dir_action_group, FM_ACTION_NO_TEMPLATES);
+ gtk_action_set_visible (action, !any_templates);
}
static void
-open_scripts_folder_callback (BonoboUIComponent *component,
- gpointer callback_data,
- const char *verb)
+action_open_scripts_folder_callback (GtkAction *action,
+ gpointer callback_data)
{
FMDirectoryView *view;
@@ -4923,21 +5099,6 @@ open_scripts_folder_callback (BonoboUIComponent *component,
fm_directory_view_get_containing_window (view));
}
-static BonoboWindow *
-get_bonobo_window (FMDirectoryView *view)
-{
- GtkWidget *window;
-
- /* Note: This works only because we are in the same process
- * as the Nautilus shell. Bonobo components in their own
- * processes can't do this.
- */
- window = gtk_widget_get_ancestor (GTK_WIDGET (view), BONOBO_TYPE_WINDOW);
- g_assert (window != NULL);
-
- return BONOBO_WINDOW (window);
-}
-
static void
popup_menu_hidden (FMDirectoryView *view)
{
@@ -4947,18 +5108,19 @@ popup_menu_hidden (FMDirectoryView *view)
static GtkMenu *
create_popup_menu (FMDirectoryView *view, const char *popup_path)
{
- GtkMenu *menu;
+ GtkWidget *menu;
- menu = GTK_MENU (gtk_menu_new ());
- gtk_menu_set_screen (menu, gtk_widget_get_screen (GTK_WIDGET (view)));
+ menu = gtk_ui_manager_get_widget (nautilus_window_info_get_ui_manager (view->details->window),
+ popup_path);
+ gtk_menu_set_screen (GTK_MENU (menu),
+ gtk_widget_get_screen (GTK_WIDGET (view)));
gtk_widget_show (GTK_WIDGET (menu));
- bonobo_window_add_popup (get_bonobo_window (view), menu, popup_path);
-
+ /* BONOBOTODO: This is likely still needed, but perhaps not? */
g_signal_connect_object (menu, "hide",
G_CALLBACK (popup_menu_hidden), G_OBJECT (view), G_CONNECT_SWAPPED);
-
- return menu;
+
+ return GTK_MENU (menu);
}
typedef struct {
@@ -5120,17 +5282,15 @@ copy_or_cut_files (FMDirectoryView *view,
}
static void
-copy_files_callback (BonoboUIComponent *component,
- gpointer callback_data,
- const char *verb)
+action_copy_files_callback (GtkAction *action,
+ gpointer callback_data)
{
copy_or_cut_files (callback_data, FALSE);
}
static void
-cut_files_callback (BonoboUIComponent *component,
- gpointer callback_data,
- const char *verb)
+action_cut_files_callback (GtkAction *action,
+ gpointer callback_data)
{
copy_or_cut_files (callback_data, TRUE);
}
@@ -5239,9 +5399,8 @@ paste_into_clipboard_received_callback (GtkClipboard *clipboard,
}
static void
-paste_files_callback (BonoboUIComponent *component,
- gpointer callback_data,
- const char *verb)
+action_paste_files_callback (GtkAction *action,
+ gpointer callback_data)
{
FMDirectoryView *view;
@@ -5254,9 +5413,8 @@ paste_files_callback (BonoboUIComponent *component,
}
static void
-paste_files_into_callback (BonoboUIComponent *component,
- gpointer callback_data,
- const char *verb)
+action_paste_files_into_callback (GtkAction *action,
+ gpointer callback_data)
{
FMDirectoryView *view;
@@ -5269,7 +5427,8 @@ paste_files_into_callback (BonoboUIComponent *component,
}
static void
-rename_file_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_rename_callback (GtkAction *action,
+ gpointer callback_data)
{
FMDirectoryView *view;
NautilusFile *file;
@@ -5300,9 +5459,8 @@ drive_mounted_callback (gboolean succeeded,
static void
-mount_volume_callback (BonoboUIComponent *component,
- gpointer data,
- const char *verb)
+action_mount_volume_callback (GtkAction *action,
+ gpointer data)
{
NautilusFile *file;
GList *selection;
@@ -5366,9 +5524,8 @@ volume_or_drive_unmounted_callback (gboolean succeeded,
static void
-unmount_volume_callback (BonoboUIComponent *component,
- gpointer data,
- const char *verb)
+action_unmount_volume_callback (GtkAction *action,
+ gpointer data)
{
NautilusFile *file;
GList *selection;
@@ -5451,9 +5608,8 @@ entry_activate_callback (GtkEntry *entry,
}
static void
-connect_to_server_link_callback (BonoboUIComponent *component,
- gpointer data,
- const char *verb)
+action_connect_to_server_link_callback (GtkAction *action,
+ gpointer data)
{
NautilusFile *file;
GList *selection;
@@ -5540,6 +5696,7 @@ fm_directory_view_init_show_hidden_files (FMDirectoryView *view)
NautilusWindowShowHiddenFilesMode mode;
gboolean show_hidden_changed;
gboolean show_hidden_default_setting;
+ GtkAction *action;
if (view->details->ignore_hidden_file_preferences) {
return;
@@ -5567,9 +5724,10 @@ fm_directory_view_init_show_hidden_files (FMDirectoryView *view)
}
}
- nautilus_bonobo_set_toggle_state (view->details->ui,
- "/commands/Show Hidden Files",
- view->details->show_hidden_files);
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_SHOW_HIDDEN_FILES);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ view->details->show_hidden_files);
if (show_hidden_changed && (view->details->model != NULL)) {
load_directory (view, view->details->model);
@@ -5577,69 +5735,176 @@ fm_directory_view_init_show_hidden_files (FMDirectoryView *view)
}
+static GtkActionEntry directory_view_entries[] = {
+ { "New Documents", NULL, N_("Create _Document") }, /* name, stock id, label */
+ { "Open With", NULL, N_("Open Wit_h"), /* name, stock id, label */
+ NULL, N_("Choose a program with which to open the selected item") },
+ { "Scripts", NULL, N_("_Scripts"), /* name, stock id, label */
+ NULL, N_("Run or manage scripts from ~/.gnome2/nautilus-scripts") },
+ { "Properties", GTK_STOCK_PROPERTIES, /* name, stock id */
+ N_("_Properties"), "<alt>Return", /* label, accelerator */
+ N_("View or modify the properties of each selected item"), /* tooltip */
+ G_CALLBACK (action_properties_callback) },
+ { "New Folder", NULL, /* name, stock id */
+ N_("Create _Folder"), "<control><shift>N", /* label, accelerator */
+ N_("Create a new empty folder inside this folder"), /* tooltip */
+ G_CALLBACK (action_new_folder_callback) },
+ { "No Templates", NULL, N_("No templates Installed") }, /* name, stock id, label */
+ { "New Empty File", NULL, /* name, stock id */
+ N_("_Empty File"), NULL, /* label, accelerator */
+ N_("Create a new empty file inside this folder"), /* tooltip */
+ G_CALLBACK (action_new_empty_file_callback) },
+ { "New Launcher", NULL, /* name, stock id */
+ N_("Create L_auncher"), NULL, /* label, accelerator */
+ N_("Create a new launcher"), /* tooltip */
+ G_CALLBACK (action_new_launcher_callback) },
+ { "Open", GTK_STOCK_OPEN, /* name, stock id */
+ N_("_Open"), "<control>o", /* label, accelerator */
+ N_("Open the selected item in this window"), /* tooltip */
+ G_CALLBACK (action_open_callback) },
+ { "OpenAlternate", NULL, /* name, stock id */
+ N_("Open in Navigation Window"), "<control><shift>o", /* label, accelerator */
+ N_("Open each selected item in a navigation window"), /* tooltip */
+ G_CALLBACK (action_open_alternate_callback) },
+ { "OtherApplication1", NULL, /* name, stock id */
+ N_("Open with Other _Application..."), NULL, /* label, accelerator */
+ N_("Choose another application with which to open the selected item"), /* tooltip */
+ G_CALLBACK (action_other_application_callback) },
+ { "OtherApplication2", NULL, /* name, stock id */
+ N_("Open with Other _Application..."), NULL, /* label, accelerator */
+ N_("Choose another application with which to open the selected item"), /* tooltip */
+ G_CALLBACK (action_other_application_callback) },
+ { "Edit Launcher", NULL, /* name, stock id */
+ N_("Edit Launcher"), NULL, /* label, accelerator */
+ N_("Edit the launcher information"), /* tooltip */
+ G_CALLBACK (action_edit_launcher_callback) },
+ { "Open Scripts Folder", NULL, /* name, stock id */
+ N_("_Open Scripts Folder"), NULL, /* label, accelerator */
+ N_("Show the folder containing the scripts that appear in this menu"), /* tooltip */
+ G_CALLBACK (action_open_scripts_folder_callback) },
+ { "Empty Trash", NULL, /* name, stock id */
+ N_("_Empty Trash"), NULL, /* label, accelerator */
+ N_("Delete all items in the Trash"), /* tooltip */
+ G_CALLBACK (action_empty_trash_callback) },
+ { "Cut Files", GTK_STOCK_CUT, /* name, stock id */
+ N_("Cu_t Files"), "<control>x", /* label, accelerator */
+ N_("Prepare the selected files to be moved with a Paste Files command"), /* tooltip */
+ G_CALLBACK (action_cut_files_callback) },
+ { "Copy Files", GTK_STOCK_COPY, /* name, stock id */
+ N_("_Copy Files"), "<control>c", /* label, accelerator */
+ N_("Prepare the selected files to be copied with a Paste Files command"), /* tooltip */
+ G_CALLBACK (action_copy_files_callback) },
+ { "Paste Files", GTK_STOCK_PASTE, /* name, stock id */
+ N_("_Paste Files"), "<control>v", /* label, accelerator */
+ N_("Move or copy files previously selected by a Cut Files or Copy Files command"), /* tooltip */
+ G_CALLBACK (action_paste_files_callback) },
+ { "Paste Files Into", GTK_STOCK_PASTE, /* name, stock id */
+ N_("_Paste Files Into Folder"), NULL, /* label, accelerator */
+ N_("Move or copy files previously selected by a Cut Files or Copy Files command into the selected folder"), /* tooltip */
+ G_CALLBACK (action_paste_files_into_callback) },
+ { "Select All", NULL, /* name, stock id */
+ N_("_Select _All Files"), "<control>A", /* label, accelerator */
+ N_("Select all items in this window"), /* tooltip */
+ G_CALLBACK (action_select_all_callback) },
+ { "Select Pattern", NULL, /* name, stock id */
+ N_("Select _Pattern"), "<control>S", /* label, accelerator */
+ N_("Select items in this window matching a given pattern"), /* tooltip */
+ G_CALLBACK (action_select_pattern_callback) },
+ { "Duplicate", NULL, /* name, stock id */
+ N_("D_uplicate"), NULL, /* label, accelerator */
+ N_("Duplicate each selected item"), /* tooltip */
+ G_CALLBACK (action_duplicate_callback) },
+ { "Create Link", NULL, /* name, stock id */
+ N_("Ma_ke Link"), "<control>M", /* label, accelerator */
+ N_("Create a symbolic link for each selected item"), /* tooltip */
+ G_CALLBACK (action_create_link_callback) },
+ { "Rename", NULL, /* name, stock id */
+ N_("_Rename..."), "F2", /* label, accelerator */
+ N_("Rename selected item"), /* tooltip */
+ G_CALLBACK (action_rename_callback) },
+ { "Trash", GTK_STOCK_DELETE, /* name, stock id */
+ N_("Mo_ve to Trash"), "<control>T", /* label, accelerator */
+ N_("Move each selected item to the Trash"), /* tooltip */
+ G_CALLBACK (action_trash_callback) },
+ { "Delete", NULL, /* name, stock id */
+ N_("_Delete"), "<shift>Delete", /* label, accelerator */
+ N_("Delete each selected item, without moving to the Trash"), /* tooltip */
+ G_CALLBACK (action_delete_callback) },
+ { "Reset to Defaults", NULL, /* name, stock id */
+ N_("Reset View to _Defaults"), NULL, /* label, accelerator */
+ N_("Reset sorting order and zoom level to match preferences for this view"), /* tooltip */
+ G_CALLBACK (action_reset_to_defaults_callback) },
+ { "Reset Background", NULL, /* name, stock id */
+ N_("Use _Default Background"), NULL, /* label, accelerator */
+ N_("Use the default background for this location"), /* tooltip */
+ G_CALLBACK (action_reset_background_callback) },
+ { "Connect To Server Link", NULL, /* name, stock id */
+ N_("Connect To This Server"), NULL, /* label, accelerator */
+ N_("Make a permanent connection to this server"), /* tooltip */
+ G_CALLBACK (action_connect_to_server_link_callback) },
+ { "Mount Volume", NULL, /* name, stock id */
+ N_("_Mount Volume"), NULL, /* label, accelerator */
+ N_("Mount the selected volume"), /* tooltip */
+ G_CALLBACK (action_mount_volume_callback) },
+ { "Unmount Volume", NULL, /* name, stock id */
+ N_("_Unmount Volume"), NULL, /* label, accelerator */
+ N_("Unmount the selected volume"), /* tooltip */
+ G_CALLBACK (action_unmount_volume_callback) },
+ { "OpenCloseParent", NULL, /* name, stock id */
+ N_("Open File and Close window"), "<alt><shift>Down", /* label, accelerator */
+ NULL, /* tooltip */
+ G_CALLBACK (action_open_close_parent_callback) },
+};
+
+static GtkToggleActionEntry directory_view_toggle_entries[] = {
+ { "Show Hidden Files", NULL, /* name, stock id */
+ N_("Show _Hidden Files"), NULL, /* label, accelerator */
+ N_("Toggles the display of hidden files in the current window"), /* tooltip */
+ G_CALLBACK (action_show_hidden_files_callback),
+ TRUE },
+};
+
static void
real_merge_menus (FMDirectoryView *view)
{
- BonoboUIVerb verbs [] = {
- BONOBO_UI_VERB ("Rename", rename_file_callback),
- BONOBO_UI_VERB ("Copy Files", copy_files_callback),
- BONOBO_UI_VERB ("Create Link", create_link_callback),
- BONOBO_UI_VERB ("Cut Files", cut_files_callback),
- BONOBO_UI_VERB ("Delete", delete_callback),
- BONOBO_UI_VERB ("Duplicate", duplicate_callback),
- BONOBO_UI_VERB ("Empty Trash", bonobo_menu_empty_trash_callback),
- BONOBO_UI_VERB ("New Folder", new_folder_callback),
- BONOBO_UI_VERB ("New Empty File", new_empty_file_callback),
- BONOBO_UI_VERB ("New Launcher", new_launcher_callback),
- BONOBO_UI_VERB ("Open Scripts Folder", open_scripts_folder_callback),
- BONOBO_UI_VERB ("Open", open_callback),
- BONOBO_UI_VERB ("OpenCloseParent", open_close_parent_callback),
- BONOBO_UI_VERB ("OpenAlternate", open_alternate_callback),
- BONOBO_UI_VERB ("OtherApplication", other_application_callback),
- BONOBO_UI_VERB ("Edit Launcher", edit_launcher_callback),
- BONOBO_UI_VERB ("Paste Files", paste_files_callback),
- BONOBO_UI_VERB ("Paste Files Into", paste_files_into_callback),
- BONOBO_UI_VERB ("Reset Background", reset_background_callback),
- BONOBO_UI_VERB ("Reset to Defaults", reset_to_defaults_callback),
- BONOBO_UI_VERB ("Select All", bonobo_menu_select_all_callback),
- BONOBO_UI_VERB ("Select Pattern", bonobo_menu_select_pattern_callback),
- BONOBO_UI_VERB ("Properties", open_properties_window_callback),
- BONOBO_UI_VERB ("Trash", trash_callback),
- BONOBO_UI_VERB ("Mount Volume Conditional", mount_volume_callback),
- BONOBO_UI_VERB ("Unmount Volume Conditional", unmount_volume_callback),
- BONOBO_UI_VERB ("Connect To Server Link Conditional", connect_to_server_link_callback),
- BONOBO_UI_VERB_END
- };
-
- view->details->ui = nautilus_view_set_up_ui (NAUTILUS_VIEW (view),
- nautilus_window_info_get_ui_container (view->details->window),
- DATADIR,
- "nautilus-directory-view-ui.xml",
- "nautilus");
- eel_add_weak_pointer (&view->details->ui);
-
- bonobo_ui_component_add_verb_list_with_data (view->details->ui, verbs, view);
-
- bonobo_ui_component_add_listener
- (view->details->ui,
- "Show Hidden Files",
- show_hidden_files_toggle_callback,
- view);
-
- nautilus_bonobo_set_toggle_state (view->details->ui,
- "/commands/Show Hidden Files",
- view->details->show_hidden_files);
-
+ GtkUIManager *ui_manager;
+ char *file;
+ GError *error;
+ GtkActionGroup *action_group;
+ GtkAction *action;
+
+ ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
+
+ action_group = gtk_action_group_new ("DirViewActions");
+ gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
+ view->details->dir_action_group = action_group;
+ gtk_action_group_add_actions (action_group,
+ directory_view_entries, G_N_ELEMENTS (directory_view_entries),
+ view);
+ gtk_action_group_add_toggle_actions (action_group,
+ directory_view_toggle_entries, G_N_ELEMENTS (directory_view_toggle_entries),
+ view);
+
+ action = gtk_action_group_get_action (action_group, FM_ACTION_NO_TEMPLATES);
+ gtk_action_set_sensitive (action, FALSE);
+
+ 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-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);
+ }
+ 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);
- /* Do one-time state changes here; context-dependent ones go in update_menus */
- if (!fm_directory_view_supports_zooming (view)) {
- nautilus_bonobo_set_hidden
- (view->details->ui, NAUTILUS_POPUP_PATH_ZOOM_ITEMS_PLACEHOLDER, TRUE);
- }
-
+
view->details->scripts_invalid = TRUE;
view->details->templates_invalid = TRUE;
}
@@ -5654,7 +5919,10 @@ clipboard_targets_received (GtkClipboard *clipboard,
GdkAtom *targets;
int n_targets;
int i;
-
+ GList *selection;
+ int count;
+ GtkAction *action;
+
view = FM_DIRECTORY_VIEW (user_data);
can_paste = FALSE;
@@ -5667,30 +5935,38 @@ clipboard_targets_received (GtkClipboard *clipboard,
g_free (targets);
}
+
+
+ selection = fm_directory_view_get_selection (view);
+ count = g_list_length (selection);
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_PASTE_FILES);
+ gtk_action_set_sensitive (action,
+ can_paste && !fm_directory_view_is_read_only (view));
- if (view->details->ui != NULL) {
- GList *selection;
- int count;
-
- selection = fm_directory_view_get_selection (view);
- count = g_list_length (selection);
-
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_PASTE_FILES,
- can_paste && !fm_directory_view_is_read_only (view));
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_PASTE_FILES_INTO,
- can_paste && count == 1 && nautilus_file_is_directory (NAUTILUS_FILE (selection->data)) && nautilus_file_can_write (NAUTILUS_FILE (selection->data)));
-
- nautilus_file_list_free (selection);
- }
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_PASTE_FILES_INTO);
+ gtk_action_set_sensitive (action,
+ can_paste && count == 1 &&
+ nautilus_file_is_directory (NAUTILUS_FILE (selection->data)) &&
+ nautilus_file_can_write (NAUTILUS_FILE (selection->data)));
+
+ nautilus_file_list_free (selection);
+
g_object_unref (view);
}
static gboolean
showing_trash_directory (FMDirectoryView *view)
{
- return nautilus_file_is_in_trash (fm_directory_view_get_directory_as_file (view));
+ NautilusFile *file;
+
+ file = fm_directory_view_get_directory_as_file (view);
+ if (file != NULL) {
+ return nautilus_file_is_in_trash (file);
+ }
+ return FALSE;
}
static gboolean
@@ -5758,21 +6034,16 @@ real_update_menus_volumes (FMDirectoryView *view,
NautilusFile *file;
gboolean show_mount;
gboolean show_unmount;
- gboolean show_properties;
- gboolean show_format;
- gboolean show_protect;
gboolean unmount_is_eject;
gboolean show_connect;
GnomeVFSVolume *volume;
GnomeVFSDrive *drive;
+ GtkAction *action;
char *uri;
show_mount = FALSE;
show_unmount = FALSE;
unmount_is_eject = FALSE;
- show_properties = FALSE;
- show_format = FALSE;
- show_protect = FALSE;
show_connect = FALSE;
if (selection_count == 1) {
@@ -5807,31 +6078,24 @@ real_update_menus_volumes (FMDirectoryView *view,
}
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_CONNECT_TO_SERVER_LINK_CONDITIONAL,
- !show_connect);
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_CONNECT_TO_SERVER_LINK);
+ gtk_action_set_visible (action, show_connect);
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_MOUNT_VOLUME);
+ gtk_action_set_visible (action, show_mount);
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_UNMOUNT_VOLUME);
+ gtk_action_set_visible (action, show_unmount);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_MOUNT_VOLUME_CONDITIONAL,
- !show_mount);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_UNMOUNT_VOLUME_CONDITIONAL,
- !show_unmount);
if (show_unmount) {
- nautilus_bonobo_set_label (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_UNMOUNT_VOLUME_CONDITIONAL,
- unmount_is_eject? _("E_ject"):_("_Unmount Volume"));
+ g_object_set (action, "label",
+ unmount_is_eject? _("E_ject"):_("_Unmount Volume"),
+ NULL);
}
-
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_PROTECT_VOLUME_CONDITIONAL,
- !show_protect);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_FORMAT_VOLUME_CONDITIONAL,
- !show_format);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_MEDIA_PROPERTIES_VOLUME_CONDITIONAL,
- !show_properties);
+
}
static void
@@ -5842,6 +6106,7 @@ real_update_paste_menu (FMDirectoryView *view,
gboolean can_paste_files_into;
gboolean selection_is_read_only;
gboolean is_read_only;
+ GtkAction *action;
selection_is_read_only = selection_count == 1
&& !nautilus_file_can_write (NAUTILUS_FILE (selection->data));
@@ -5850,16 +6115,15 @@ real_update_paste_menu (FMDirectoryView *view,
can_paste_files_into = selection_count == 1 &&
nautilus_file_is_directory (NAUTILUS_FILE (selection->data));
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_PASTE_FILES);
+ gtk_action_set_sensitive (action, !is_read_only);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_PASTE_FILES_INTO,
- !can_paste_files_into);
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_PASTE_FILES_INTO,
- !selection_is_read_only);
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_PASTE_FILES,
- is_read_only);
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_PASTE_FILES_INTO);
+ gtk_action_set_visible (action, can_paste_files_into);
+ gtk_action_set_sensitive (action, !selection_is_read_only);
if (!selection_is_read_only || !is_read_only) {
/* Ask the clipboard */
g_object_ref (view); /* Need to keep the object alive until we get the reply */
@@ -5876,17 +6140,10 @@ clipboard_changed_callback (NautilusClipboardMonitor *monitor, FMDirectoryView *
GList *selection;
gint selection_count;
- if (view->details->ui == NULL) {
- return;
- }
selection = fm_directory_view_get_selection (view);
selection_count = g_list_length (selection);
- bonobo_ui_component_freeze (view->details->ui, NULL);
-
real_update_paste_menu (view, selection, selection_count);
-
- bonobo_ui_component_thaw (view->details->ui, NULL);
nautilus_file_list_free (selection);
@@ -5897,7 +6154,7 @@ real_update_menus (FMDirectoryView *view)
{
GList *selection;
gint selection_count;
- const char *tip, *accelerator, *label;
+ const char *tip, *label;
char *label_with_underscore;
gboolean selection_contains_special_link;
gboolean is_read_only;
@@ -5910,13 +6167,10 @@ real_update_menus (FMDirectoryView *view)
gboolean vfolder_directory;
gboolean show_open_alternate;
gboolean can_open;
- ActivationAction action;
+ ActivationAction activation_action;
EelBackground *background;
+ GtkAction *action;
- if (view->details->ui == NULL) {
- return;
- }
-
selection = fm_directory_view_get_selection (view);
selection_count = g_list_length (selection);
@@ -5935,20 +6189,19 @@ real_update_menus (FMDirectoryView *view)
vfolder_directory = we_are_in_vfolder_desktop_dir (view);
- bonobo_ui_component_freeze (view->details->ui, NULL);
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_RENAME);
+ gtk_action_set_sensitive (action,
+ selection_count == 1 &&
+ fm_directory_view_can_rename_file (view, selection->data));
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_RENAME,
- selection_count == 1 &&
- fm_directory_view_can_rename_file (view, selection->data));
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_NEW_FOLDER);
+ gtk_action_set_sensitive (action, can_create_files);
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_NEW_FOLDER,
- can_create_files);
-
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_OPEN,
- selection_count != 0);
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_OPEN);
+ gtk_action_set_sensitive (action, selection_count != 0);
label_with_underscore = NULL;
can_open = TRUE;
@@ -5957,12 +6210,12 @@ real_update_menus (FMDirectoryView *view)
file = NAUTILUS_FILE (selection->data);
- action = get_activation_action (file);
+ activation_action = get_activation_action (file);
/* Only use the default app for open if there is not
a mime mismatch, otherwise we can't use it in the
open with menu */
- if (action == ACTIVATION_ACTION_OPEN_IN_APPLICATION &&
+ if (activation_action == ACTIVATION_ACTION_OPEN_IN_APPLICATION &&
activate_check_mime_types (view, file, FALSE)) {
GnomeVFSMimeApplication *app;
@@ -5976,23 +6229,24 @@ real_update_menus (FMDirectoryView *view)
}
}
}
+
+ g_object_set (action, "label",
+ label_with_underscore ? label_with_underscore : _("_Open"),
+ NULL);
+ gtk_action_set_visible (action, can_open);
- nautilus_bonobo_set_label
- (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_OPEN,
- label_with_underscore ? label_with_underscore : _("_Open"));
- nautilus_bonobo_set_hidden
- (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_OPEN,
- !can_open);
g_free (label_with_underscore);
if (nautilus_window_info_get_window_type (view->details->window) == NAUTILUS_WINDOW_NAVIGATION) {
show_open_alternate = TRUE;
- label_with_underscore = g_strdup_printf (ngettext("Open in New Window",
- "Open in %d New Windows",
- selection_count),
- selection_count);
+ if (selection_count == 0) {
+ label_with_underscore = g_strdup (_("Open in New Window"));
+ } else {
+ label_with_underscore = g_strdup_printf (ngettext("Open in New Window",
+ "Open in %d New Windows",
+ selection_count),
+ selection_count);
+ }
} else {
show_open_alternate = file_list_all_are_folders (selection);
if (selection_count <= 1) {
@@ -6001,159 +6255,130 @@ real_update_menus (FMDirectoryView *view)
label_with_underscore = g_strdup_printf (_("Browse Folders"));
}
}
-
- nautilus_bonobo_set_label
- (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_OPEN_ALTERNATE,
- label_with_underscore);
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_OPEN_ALTERNATE);
+ g_object_set (action, "label",
+ label_with_underscore,
+ NULL);
g_free (label_with_underscore);
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_OPEN_ALTERNATE,
- selection_count != 0);
-
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_OPEN_ALTERNATE,
- !show_open_alternate);
+ gtk_action_set_sensitive (action, selection_count != 0);
+ gtk_action_set_visible (action, show_open_alternate);
/* Broken into its own function just for convenience */
- reset_bonobo_open_with_menu (view, selection);
+ reset_open_with_menu (view, selection);
reset_extension_actions_menu (view, selection);
if (all_selected_items_in_trash (view)) {
label = _("_Delete from Trash");
- accelerator = "*ctl*t";
tip = _("Delete all selected items permanently");
show_separate_delete_command = FALSE;
} else {
label = _("Mo_ve to Trash");
- accelerator = "*ctl*t";
tip = _("Move each selected item to the Trash");
show_separate_delete_command = show_delete_command_auto_value;
}
- nautilus_bonobo_set_label
- (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_TRASH,
- label);
- nautilus_bonobo_set_accelerator (view->details->ui,
- FM_DIRECTORY_VIEW_MENU_PATH_TRASH,
- accelerator);
- nautilus_bonobo_set_tip (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_TRASH,
- tip);
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_TRASH,
- can_delete_files);
-
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_DELETE,
- !show_separate_delete_command);
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_TRASH);
+ g_object_set (action,
+ "label", label,
+ "tooltip", tip,
+ NULL);
+ gtk_action_set_sensitive (action, can_delete_files);
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_DELETE);
+ gtk_action_set_visible (action, show_separate_delete_command);
+
if (show_separate_delete_command) {
- nautilus_bonobo_set_label
- (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_DELETE, _("_Delete"));
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_DELETE,
- can_delete_files);
+ g_object_set (action,
+ "label", _("_Delete"),
+ NULL);
+ gtk_action_set_sensitive (action, can_delete_files);
}
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_DUPLICATE,
- can_duplicate_files);
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_DUPLICATE);
+ gtk_action_set_sensitive (action, can_duplicate_files);
background = fm_directory_view_get_background (view);
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_RESET_BACKGROUND,
- background != NULL
- && nautilus_file_background_is_set (background));
-
- nautilus_bonobo_set_label
- (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_CREATE_LINK,
- selection_count > 1
- ? _("Ma_ke Links")
- : _("Ma_ke Link"));
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_CREATE_LINK,
- can_link_files);
-
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_PROPERTIES,
- selection_count != 0
- && fm_directory_view_supports_properties (view));
-
- nautilus_bonobo_set_label
- (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_EMPTY_TRASH,
- _("_Empty Trash"));
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_EMPTY_TRASH,
- !nautilus_trash_monitor_is_empty ());
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_EMPTY_TRASH,
- !should_show_empty_trash (view));
-
- nautilus_bonobo_set_sensitive (view->details->ui,
- NAUTILUS_COMMAND_SELECT_ALL,
- !fm_directory_view_is_empty (view));
-
- nautilus_bonobo_set_label
- (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_CUT_FILES,
- selection_count == 1
- ? _("Cu_t File")
- : _("Cu_t Files"));
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_CUT_FILES,
- can_delete_files);
-
- nautilus_bonobo_set_label
- (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_COPY_FILES,
- selection_count == 1
- ? _("_Copy File")
- : _("_Copy Files"));
-
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_COPY_FILES,
- can_copy_files);
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_RESET_BACKGROUND);
+ gtk_action_set_sensitive (action,
+ background != NULL &&
+ nautilus_file_background_is_set (background));
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_CREATE_LINK);
+ gtk_action_set_sensitive (action, can_link_files);
+ g_object_set (action, "label",
+ selection_count > 1
+ ? _("Ma_ke Links")
+ : _("Ma_ke Link"),
+ NULL);
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_PROPERTIES);
+ gtk_action_set_sensitive (action,
+ selection_count != 0 &&
+ fm_directory_view_supports_properties (view));
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_EMPTY_TRASH);
+ g_object_set (action,
+ "label", _("_Empty Trash"),
+ NULL);
+ gtk_action_set_sensitive (action, !nautilus_trash_monitor_is_empty ());
+ gtk_action_set_visible (action, should_show_empty_trash (view));
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_SELECT_ALL);
+ gtk_action_set_sensitive (action, !fm_directory_view_is_empty (view));
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_CUT_FILES);
+ g_object_set (action, "label",
+ selection_count == 1
+ ? _("Cu_t File")
+ : _("Cu_t Files"),
+ NULL);
+ gtk_action_set_sensitive (action, can_delete_files);
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_COPY_FILES);
+ g_object_set (action, "label",
+ selection_count == 1
+ ? _("_Copy File")
+ : _("_Copy Files"),
+ NULL);
+ gtk_action_set_sensitive (action, can_copy_files);
real_update_paste_menu (view, selection, selection_count);
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_NEW_LAUNCHER,
- ! vfolder_directory);
-
- nautilus_bonobo_set_hidden (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_EDIT_LAUNCHER,
- ! vfolder_directory);
-
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_NEW_LAUNCHER,
- can_create_files);
-
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_COMMAND_EDIT_LAUNCHER,
- selection_count == 1);
-
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_NEW_LAUNCHER);
+ gtk_action_set_visible (action, vfolder_directory);
+ gtk_action_set_sensitive (action, can_create_files);
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_EDIT_LAUNCHER);
+ gtk_action_set_visible (action, vfolder_directory);
+ gtk_action_set_sensitive (action, selection_count == 1);
real_update_menus_volumes (view, selection, selection_count);
-
- bonobo_ui_component_thaw (view->details->ui, NULL);
nautilus_file_list_free (selection);
if (view->details->scripts_invalid) {
update_scripts_menu (view);
}
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_MENU_PATH_NEW_DOCUMENTS,
- can_create_files);
- nautilus_bonobo_set_sensitive (view->details->ui,
- FM_DIRECTORY_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS,
- can_create_files);
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_NEW_DOCUMENTS);
+ gtk_action_set_sensitive (action, can_create_files);
+
if (can_create_files && view->details->templates_invalid) {
update_templates_menu (view);
}
@@ -6224,8 +6449,7 @@ schedule_update_menus (FMDirectoryView *view)
view->details->menu_states_untrustworthy = TRUE;
- if (view->details->menus_merged
- && view->details->update_menus_timeout_id == 0) {
+ if (view->details->update_menus_timeout_id == 0) {
view->details->update_menus_timeout_id
= g_timeout_add (300, update_menus_timeout_callback, view);
}
@@ -6978,11 +7202,6 @@ fm_directory_view_merge_menus (FMDirectoryView *view)
{
g_return_if_fail (FM_IS_DIRECTORY_VIEW (view));
- /* Remember that the menus have been merged so that we
- * won't try to update them before merging them.
- */
- view->details->menus_merged = TRUE;
-
EEL_CALL_METHOD
(FM_DIRECTORY_VIEW_CLASS, view,
merge_menus, (view));
@@ -7195,7 +7414,13 @@ fm_directory_view_is_empty (FMDirectoryView *view)
static gboolean
real_is_read_only (FMDirectoryView *view)
{
- return !nautilus_file_can_write (fm_directory_view_get_directory_as_file (view));
+ NautilusFile *file;
+
+ file = fm_directory_view_get_directory_as_file (view);
+ if (file != NULL) {
+ return !nautilus_file_can_write (file);
+ }
+ return FALSE;
}
gboolean
@@ -7314,6 +7539,7 @@ filtering_changed_callback (gpointer callback_data)
FMDirectoryView *directory_view;
gboolean new_show_hidden;
NautilusWindowShowHiddenFilesMode mode;
+ GtkAction *action;
directory_view = FM_DIRECTORY_VIEW (callback_data);
new_show_hidden = eel_preferences_get_boolean (NAUTILUS_PREFERENCES_SHOW_HIDDEN_FILES);
@@ -7324,9 +7550,11 @@ filtering_changed_callback (gpointer callback_data)
&& mode == NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_DEFAULT) {
directory_view->details->show_hidden_files = new_show_hidden;
directory_view->details->show_backup_files = new_show_hidden;
- nautilus_bonobo_set_toggle_state (directory_view->details->ui,
- "/commands/Show Hidden Files",
- directory_view->details->show_hidden_files);
+
+ action = gtk_action_group_get_action (directory_view->details->dir_action_group,
+ FM_ACTION_SHOW_HIDDEN_FILES);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ directory_view->details->show_hidden_files);
/* Reload the current uri so that the filtering changes take place. */
if (directory_view->details->model != NULL) {
diff --git a/src/file-manager/fm-directory-view.h b/src/file-manager/fm-directory-view.h
index c97c057c6..c6c4e92b6 100644
--- a/src/file-manager/fm-directory-view.h
+++ b/src/file-manager/fm-directory-view.h
@@ -40,15 +40,10 @@
#include <eel/eel-string-list.h>
#include <libnautilus-private/nautilus-view.h>
#include <libnautilus-private/nautilus-window-info.h>
-#include <bonobo/bonobo-ui-component.h>
typedef struct FMDirectoryView FMDirectoryView;
typedef struct FMDirectoryViewClass FMDirectoryViewClass;
-
-/* Bonobo command paths that are used by subclasses. Others are defined in fm-directory-view.c */
-#define FM_DIRECTORY_VIEW_COMMAND_RESET_BACKGROUND "/commands/Reset Background"
-
#define FM_TYPE_DIRECTORY_VIEW (fm_directory_view_get_type ())
#define FM_DIRECTORY_VIEW(obj) (GTK_CHECK_CAST ((obj), FM_TYPE_DIRECTORY_VIEW, FMDirectoryView))
#define FM_DIRECTORY_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FM_TYPE_DIRECTORY_VIEW, FMDirectoryViewClass))
@@ -357,7 +352,7 @@ gboolean fm_directory_view_confirm_multiple_windows (FMDirect
void fm_directory_view_queue_file_change (FMDirectoryView *view,
NautilusFile *file);
void fm_directory_view_notify_selection_changed (FMDirectoryView *view);
-Bonobo_UIContainer fm_directory_view_get_bonobo_ui_container (FMDirectoryView *view);
+GtkUIManager * fm_directory_view_get_ui_manager (FMDirectoryView *view);
EelStringList * fm_directory_view_get_emblem_names_to_exclude (FMDirectoryView *view);
NautilusDirectory *fm_directory_view_get_model (FMDirectoryView *view);
GtkWindow *fm_directory_view_get_containing_window (FMDirectoryView *view);
diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c
index c5cecdd96..fc9e75402 100644
--- a/src/file-manager/fm-icon-view.c
+++ b/src/file-manager/fm-icon-view.c
@@ -25,11 +25,11 @@
#include <config.h>
#include "fm-icon-view.h"
+#include "fm-actions.h"
#include "fm-icon-container.h"
#include "fm-desktop-icon-view.h"
#include "fm-error-reporting.h"
#include <stdlib.h>
-#include <bonobo/bonobo-ui-util.h>
#include <eel/eel-background.h>
#include <eel/eel-glib-extensions.h>
#include <eel/eel-gtk-extensions.h>
@@ -43,6 +43,7 @@
#include <gtk/gtkmenu.h>
#include <gtk/gtkmenuitem.h>
#include <gtk/gtkradiomenuitem.h>
+#include <gtk/gtkradioaction.h>
#include <gtk/gtksignal.h>
#include <gtk/gtkwindow.h>
#include <libgnome/gnome-i18n.h>
@@ -56,7 +57,6 @@
#include <libgnomevfs/gnome-vfs-utils.h>
#include <libgnomevfs/gnome-vfs-xfer.h>
#include <libnautilus-private/nautilus-audio-player.h>
-#include <libnautilus-private/nautilus-bonobo-extensions.h>
#include <libnautilus-private/nautilus-directory-background.h>
#include <libnautilus-private/nautilus-directory.h>
#include <libnautilus-private/nautilus-dnd.h>
@@ -68,7 +68,6 @@
#include <libnautilus-private/nautilus-link.h>
#include <libnautilus-private/nautilus-metadata.h>
#include <libnautilus-private/nautilus-sound.h>
-#include <libnautilus-private/nautilus-bonobo-ui.h>
#include <libnautilus-private/nautilus-view-factory.h>
#include <libnautilus-private/nautilus-clipboard.h>
#include <locale.h>
@@ -81,36 +80,12 @@
#define USE_OLD_AUDIO_PREVIEW 1
#define READ_CHUNK_SIZE 16384
-/* Paths to use when creating & referring to Bonobo menu items */
-#define MENU_PATH_STRETCH_ICON "/menu/Edit/Edit Items Placeholder/Stretch"
-#define MENU_PATH_UNSTRETCH_ICONS "/menu/Edit/Edit Items Placeholder/Unstretch"
-#define MENU_PATH_LAY_OUT "/menu/View/View Items Placeholder/Arrange Items"
-#define MENU_PATH_MANUAL_LAYOUT "/menu/View/View Items Placeholder/Arrange Items/Manual Layout"
-#define MENU_PATH_TIGHTER_LAYOUT "/menu/View/View Items Placeholder/Arrange Items/Tighter Layout"
-#define MENU_PATH_SORT_REVERSED "/menu/View/View Items Placeholder/Arrange Items/Reversed Order"
-#define MENU_PATH_CLEAN_UP "/menu/View/View Items Placeholder/Clean Up"
-
-#define POPUP_PATH_LAY_OUT "/popups/background/Before Zoom Items/View Items/Arrange Items"
-
-#define POPUP_PATH_ICON_APPEARANCE "/popups/selection/Icon Appearance Items"
-
-#define COMMAND_PREFIX "/commands/"
-#define COMMAND_STRETCH_ICON "/commands/Stretch"
-#define COMMAND_UNSTRETCH_ICONS "/commands/Unstretch"
-#define COMMAND_TIGHTER_LAYOUT "/commands/Tighter Layout"
-#define COMMAND_SORT_REVERSED "/commands/Reversed Order"
-#define COMMAND_CLEAN_UP "/commands/Clean Up"
-#define COMMAND_KEEP_ALIGNED "/commands/Keep Aligned"
-
-#define ID_MANUAL_LAYOUT "Manual Layout"
-#define ID_TIGHTER_LAYOUT "Tighter Layout"
-#define ID_SORT_REVERSED "Reversed Order"
-#define ID_KEEP_ALIGNED "Keep Aligned"
+#define POPUP_PATH_ICON_APPEARANCE "/selection/Icon Appearance Items"
typedef struct {
NautilusFileSortType sort_type;
const char *metadata_text;
- const char *id;
+ const char *action;
const char *menu_label;
const char *menu_hint;
} SortCriterion;
@@ -127,14 +102,13 @@ struct FMIconViewDetails
GList *icons_not_positioned;
guint react_to_icon_change_idle_id;
- gboolean menus_ready;
gboolean loading;
const SortCriterion *sort;
gboolean sort_reversed;
- BonoboUIComponent *ui;
+ GtkActionGroup *icon_action_group;
NautilusAudioPlayerData *audio_player_data;
int audio_preview_timeout;
@@ -191,27 +165,27 @@ static gboolean default_sort_in_reverse_order = FALSE;
static int preview_sound_auto_value;
static gboolean gnome_esd_enabled_auto_value;
-static void fm_icon_view_set_directory_sort_by (FMIconView *icon_view,
- NautilusFile *file,
- const char *sort_by);
-static void fm_icon_view_set_zoom_level (FMIconView *view,
- NautilusZoomLevel new_level,
- gboolean always_emit);
-static void fm_icon_view_update_click_mode (FMIconView *icon_view);
-static void fm_icon_view_set_directory_tighter_layout (FMIconView *icon_view,
- NautilusFile *file,
- gboolean tighter_layout);
-static const SortCriterion *get_sort_criterion_by_id (const char *id);
-static const SortCriterion *get_sort_criterion_by_sort_type (NautilusFileSortType sort_type);
-static void set_sort_criterion_by_id (FMIconView *icon_view,
- const char *id);
-static gboolean set_sort_reversed (FMIconView *icon_view,
- gboolean new_value);
-static void switch_to_manual_layout (FMIconView *view);
-static void preview_audio (FMIconView *icon_view,
- NautilusFile *file,
- gboolean start_flag);
-static void update_layout_menus (FMIconView *view);
+static void fm_icon_view_set_directory_sort_by (FMIconView *icon_view,
+ NautilusFile *file,
+ const char *sort_by);
+static void fm_icon_view_set_zoom_level (FMIconView *view,
+ NautilusZoomLevel new_level,
+ gboolean always_emit);
+static void fm_icon_view_update_click_mode (FMIconView *icon_view);
+static void fm_icon_view_set_directory_tighter_layout (FMIconView *icon_view,
+ NautilusFile *file,
+ gboolean tighter_layout);
+static const SortCriterion *get_sort_criterion_by_sort_type (NautilusFileSortType sort_type);
+static void set_sort_criterion_by_sort_type (FMIconView *icon_view,
+ NautilusFileSortType sort_type);
+static gboolean set_sort_reversed (FMIconView *icon_view,
+ gboolean new_value);
+static void switch_to_manual_layout (FMIconView *view);
+static void preview_audio (FMIconView *icon_view,
+ NautilusFile *file,
+ gboolean start_flag);
+static void update_layout_menus (FMIconView *view);
+
static void fm_icon_view_iface_init (NautilusViewIface *iface);
@@ -226,15 +200,6 @@ fm_icon_view_destroy (GtkObject *object)
icon_view = FM_ICON_VIEW (object);
- /* don't try to update menus during the destroy process */
- icon_view->details->menus_ready = FALSE;
-
- if (icon_view->details->ui != NULL) {
- bonobo_ui_component_unset_container (icon_view->details->ui, NULL);
- bonobo_object_unref (icon_view->details->ui);
- icon_view->details->ui = NULL;
- }
-
if (icon_view->details->react_to_icon_change_idle_id != 0) {
g_source_remove (icon_view->details->react_to_icon_change_idle_id);
icon_view->details->react_to_icon_change_idle_id = 0;
@@ -354,7 +319,8 @@ set_sort_criterion (FMIconView *icon_view, const SortCriterion *sort)
}
static void
-show_stretch_handles_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_stretch_callback (GtkAction *action,
+ gpointer callback_data)
{
g_assert (FM_IS_ICON_VIEW (callback_data));
@@ -363,7 +329,8 @@ show_stretch_handles_callback (BonoboUIComponent *component, gpointer callback_d
}
static void
-unstretch_icons_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_unstretch_callback (GtkAction *action,
+ gpointer callback_data)
{
g_assert (FM_IS_ICON_VIEW (callback_data));
@@ -398,7 +365,7 @@ fm_icon_view_real_clean_up (FMIconView *icon_view)
}
static void
-clean_up_callback (BonoboUIComponent *component, gpointer callback_data, const char *verb)
+action_clean_up_callback (GtkAction *action, gpointer callback_data)
{
fm_icon_view_clean_up (FM_ICON_VIEW (callback_data));
}
@@ -415,21 +382,13 @@ set_tighter_layout (FMIconView *icon_view, gboolean new_value)
}
static void
-tighter_layout_state_changed_callback (BonoboUIComponent *component,
- const char *path,
- Bonobo_UIComponent_EventType type,
- const char *state,
- gpointer user_data)
+action_tighter_layout_callback (GtkAction *action,
+ gpointer user_data)
{
- g_assert (strcmp (path, ID_TIGHTER_LAYOUT) == 0);
g_assert (FM_IS_ICON_VIEW (user_data));
- if (strcmp (state, "") == 0) {
- /* State goes blank when component is removed; ignore this. */
- return;
- }
-
- set_tighter_layout (FM_ICON_VIEW (user_data), strcmp (state, "1") == 0);
+ set_tighter_layout (FM_ICON_VIEW (user_data),
+ gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
}
@@ -448,16 +407,21 @@ fm_icon_view_using_tighter_layout (FMIconView *icon_view)
}
static void
-handle_radio_item (FMIconView *view,
- const char *id)
+action_sort_radio_callback (GtkAction *action,
+ GtkRadioAction *current,
+ FMIconView *view)
{
+ NautilusFileSortType sort_type;
+
+ sort_type = gtk_radio_action_get_current_value (current);
+
/* Note that id might be a toggle item.
* Ignore non-sort ids so that they don't cause sorting.
*/
- if (strcmp (id, ID_MANUAL_LAYOUT) == 0) {
+ if (sort_type == NAUTILUS_FILE_SORT_NONE) {
switch_to_manual_layout (view);
- } else if (get_sort_criterion_by_id (id) != NULL) {
- set_sort_criterion_by_id (view, id);
+ } else {
+ set_sort_criterion_by_sort_type (view, sort_type);
}
}
@@ -626,55 +590,46 @@ fm_icon_view_supports_labels_beside_icons (FMIconView *view)
static void
update_layout_menus (FMIconView *view)
{
- char *path;
gboolean is_auto_layout;
-
- if (!view->details->menus_ready) {
+ GtkAction *action;
+ const char *action_name;
+
+ if (view->details->icon_action_group == NULL) {
return;
}
is_auto_layout = fm_icon_view_using_auto_layout (view);
- bonobo_ui_component_freeze (view->details->ui, NULL);
-
if (fm_icon_view_supports_auto_layout (view)) {
/* Mark sort criterion. */
- path = g_strconcat (COMMAND_PREFIX,
- is_auto_layout ? view->details->sort->id : ID_MANUAL_LAYOUT,
- NULL);
- nautilus_bonobo_set_toggle_state (view->details->ui, path, TRUE);
- g_free (path);
-
- /* Set the checkmark for the "tighter layout" item */
- nautilus_bonobo_set_toggle_state
- (view->details->ui, COMMAND_TIGHTER_LAYOUT, fm_icon_view_using_tighter_layout (view));
-
- /* Set the checkmark for the "reversed order" item */
- nautilus_bonobo_set_toggle_state
- (view->details->ui, COMMAND_SORT_REVERSED, view->details->sort_reversed);
-
- /* Sort order isn't relevant for manual layout. */
- nautilus_bonobo_set_sensitive
- (view->details->ui, COMMAND_SORT_REVERSED, is_auto_layout);
+ action_name = is_auto_layout ? view->details->sort->action : FM_ACTION_MANUAL_LAYOUT;
+ action = gtk_action_group_get_action (view->details->icon_action_group,
+ action_name);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
+
+ action = gtk_action_group_get_action (view->details->icon_action_group,
+ FM_ACTION_TIGHTER_LAYOUT);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ fm_icon_view_using_tighter_layout (view));
+ action = gtk_action_group_get_action (view->details->icon_action_group,
+ FM_ACTION_REVERSED_ORDER);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ view->details->sort_reversed);
+ gtk_action_set_sensitive (action, is_auto_layout);
}
/* Clean Up is only relevant for manual layout */
- nautilus_bonobo_set_sensitive
- (view->details->ui, COMMAND_CLEAN_UP, !is_auto_layout);
+ action = gtk_action_group_get_action (view->details->icon_action_group,
+ FM_ACTION_CLEAN_UP);
+ gtk_action_set_sensitive (action, !is_auto_layout);
-
- nautilus_bonobo_set_hidden (view->details->ui,
- COMMAND_KEEP_ALIGNED,
- !fm_icon_view_supports_keep_aligned (view));
-
- nautilus_bonobo_set_toggle_state
- (view->details->ui, COMMAND_KEEP_ALIGNED,
- nautilus_icon_container_is_keep_aligned (get_icon_container (view)));
-
- nautilus_bonobo_set_sensitive
- (view->details->ui, COMMAND_KEEP_ALIGNED, !is_auto_layout);
-
- bonobo_ui_component_thaw (view->details->ui, NULL);
+ action = gtk_action_group_get_action (view->details->icon_action_group,
+ FM_ACTION_KEEP_ALIGNED);
+ gtk_action_set_visible (action,
+ fm_icon_view_supports_keep_aligned (view));
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ nautilus_icon_container_is_keep_aligned (get_icon_container (view)));
+ gtk_action_set_sensitive (action, !is_auto_layout);
}
@@ -1019,20 +974,6 @@ get_sort_criterion_by_metadata_text (const char *metadata_text)
}
static const SortCriterion *
-get_sort_criterion_by_id (const char *id)
-{
- guint i;
-
- /* Figure out what the new sort setting should be. */
- for (i = 0; i < G_N_ELEMENTS (sort_criteria); i++) {
- if (strcmp (sort_criteria[i].id, id) == 0) {
- return &sort_criteria[i];
- }
- }
- return NULL;
-}
-
-static const SortCriterion *
get_sort_criterion_by_sort_type (NautilusFileSortType sort_type)
{
guint i;
@@ -1158,6 +1099,9 @@ fm_icon_view_begin_loading (FMDirectoryView *view)
nautilus_icon_container_set_auto_layout
(get_icon_container (icon_view),
fm_icon_view_get_directory_auto_layout (icon_view, file));
+
+ /* e.g. keep aligned may have changed */
+ update_layout_menus (icon_view);
}
static void
@@ -1318,16 +1262,15 @@ fm_icon_view_get_item_count (FMDirectoryView *view)
return count;
}
-
static void
-set_sort_criterion_by_id (FMIconView *icon_view, const char *id)
+set_sort_criterion_by_sort_type (FMIconView *icon_view,
+ NautilusFileSortType sort_type)
{
const SortCriterion *sort;
g_assert (FM_IS_ICON_VIEW (icon_view));
- g_assert (id != NULL);
- sort = get_sort_criterion_by_id (id);
+ sort = get_sort_criterion_by_sort_type (sort_type);
g_return_if_fail (sort != NULL);
if (sort == icon_view->details->sort
@@ -1339,50 +1282,32 @@ set_sort_criterion_by_id (FMIconView *icon_view, const char *id)
nautilus_icon_container_sort (get_icon_container (icon_view));
}
+
static void
-sort_reversed_state_changed_callback (BonoboUIComponent *component,
- const char *path,
- Bonobo_UIComponent_EventType type,
- const char *state,
- gpointer user_data)
+action_reversed_order_callback (GtkAction *action,
+ gpointer user_data)
{
FMIconView *icon_view;
- g_assert (strcmp (path, ID_SORT_REVERSED) == 0);
-
icon_view = FM_ICON_VIEW (user_data);
- if (strcmp (state, "") == 0) {
- /* State goes blank when component is removed; ignore this. */
- return;
- }
-
- if (set_sort_reversed (icon_view, strcmp (state, "1") == 0)) {
+ if (set_sort_reversed (icon_view,
+ gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)))) {
nautilus_icon_container_sort (get_icon_container (icon_view));
}
}
static void
-keep_aligned_state_changed_callback (BonoboUIComponent *component,
- const char *path,
- Bonobo_UIComponent_EventType type,
- const char *state,
- gpointer user_data)
+action_keep_aligned_callback (GtkAction *action,
+ gpointer user_data)
{
FMIconView *icon_view;
NautilusFile *file;
gboolean keep_aligned;
- g_assert (strcmp (path, ID_KEEP_ALIGNED) == 0);
-
icon_view = FM_ICON_VIEW (user_data);
- if (strcmp (state, "") == 0) {
- /* State goes blank when component is removed; ignore this. */
- return;
- }
-
- keep_aligned = strcmp (state, "1") == 0 ? TRUE : FALSE;
+ keep_aligned = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
file = fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (icon_view));
fm_icon_view_set_directory_keep_aligned (icon_view,
@@ -1452,87 +1377,142 @@ fm_icon_view_start_renaming_file (FMDirectoryView *view, NautilusFile *file)
(get_icon_container (FM_ICON_VIEW (view)));
}
-static void
-handle_ui_event (BonoboUIComponent *ui,
- const char *id,
- Bonobo_UIComponent_EventType type,
- const char *state,
- FMIconView *view)
-{
- if (type == Bonobo_UIComponent_STATE_CHANGED
- && strcmp (state, "1") == 0) {
- handle_radio_item (view, id);
- }
-}
+static GtkActionEntry icon_view_entries[] = {
+ { "Arrange Items", NULL, N_("Arran_ge Items") }, /* name, stock id, label */
+ { "Stretch", NULL, /* name, stock id */
+ N_("Str_etch Icon"), NULL, /* label, accelerator */
+ N_("Make the selected icon stretchable"), /* tooltip */
+ G_CALLBACK (action_stretch_callback) },
+ { "Unstretch", NULL, /* name, stock id */
+ N_("Restore Icons' Original Si_zes"), NULL, /* label, accelerator */
+ N_("Restore each selected icon to its original size"), /* tooltip */
+ G_CALLBACK (action_unstretch_callback) },
+ { "Clean Up", NULL, /* name, stock id */
+ N_("Clean _Up by Name"), NULL, /* label, accelerator */
+ N_("Reposition icons to better fit in the window and avoaction overlapping"), /* tooltip */
+ G_CALLBACK (action_clean_up_callback) },
+};
+
+static GtkToggleActionEntry icon_view_toggle_entries[] = {
+ { "Tighter Layout", NULL, /* name, stock id */
+ N_("Compact _Layout"), NULL, /* label, accelerator */
+ N_("Toggle using a tighter layout scheme"), /* tooltip */
+ G_CALLBACK (action_tighter_layout_callback),
+ 0 },
+ { "Reversed Order", NULL, /* name, stock id */
+ N_("Re_versed Order"), NULL, /* label, accelerator */
+ N_("Display icons in the opposite order"), /* tooltip */
+ G_CALLBACK (action_reversed_order_callback),
+ 0 },
+ { "Keep Aligned", NULL, /* name, stock id */
+ N_("_Keep Aligned"), NULL, /* label, accelerator */
+ N_("Keep icons lined up on a grid"), /* tooltip */
+ G_CALLBACK (action_keep_aligned_callback),
+ 0 },
+};
+
+static GtkRadioActionEntry arrange_radio_entries[] = {
+ { "Manual Layout", NULL,
+ N_("_Manually"), NULL,
+ N_("Leave icons wherever they are dropped"),
+ NAUTILUS_FILE_SORT_NONE },
+ { "Sort by Name", NULL,
+ N_("By _Name"), NULL,
+ N_("Keep icons sorted by name in rows"),
+ NAUTILUS_FILE_SORT_BY_DISPLAY_NAME },
+ { "Sort by Size", NULL,
+ N_("By _Size"), NULL,
+ N_("Keep icons sorted by size in rows"),
+ NAUTILUS_FILE_SORT_BY_SIZE },
+ { "Sort by Type", NULL,
+ N_("By _Type"), NULL,
+ N_("Keep icons sorted by type in rows"),
+ NAUTILUS_FILE_SORT_BY_TYPE },
+ { "Sort by Modification Date", NULL,
+ N_("By Modification _Date"), NULL,
+ N_("Keep icons sorted by modification date in rows"),
+ NAUTILUS_FILE_SORT_BY_MTIME },
+ { "Sort by Emblems", NULL,
+ N_("By _Emblems"), NULL,
+ N_("Keep icons sorted by emblems in rows"),
+ NAUTILUS_FILE_SORT_BY_EMBLEMS },
+};
static void
fm_icon_view_merge_menus (FMDirectoryView *view)
{
FMIconView *icon_view;
- Bonobo_UIContainer ui_container;
- BonoboUIVerb verbs [] = {
- BONOBO_UI_VERB ("Stretch", show_stretch_handles_callback),
- BONOBO_UI_VERB ("Unstretch", unstretch_icons_callback),
- BONOBO_UI_VERB ("Clean Up", clean_up_callback),
- BONOBO_UI_VERB_END
- };
+ GtkUIManager *ui_manager;
+ GtkActionGroup *action_group;
+ GtkAction *action;
+ GError *error;
+ char *file;
g_assert (FM_IS_ICON_VIEW (view));
- FM_DIRECTORY_VIEW_CLASS (fm_icon_view_parent_class)->merge_menus(view);
+ FM_DIRECTORY_VIEW_CLASS (fm_icon_view_parent_class)->merge_menus (view);
icon_view = FM_ICON_VIEW (view);
- icon_view->details->ui = bonobo_ui_component_new ("Icon View");
- g_signal_connect_object (icon_view->details->ui,
- "ui_event", G_CALLBACK (handle_ui_event), icon_view, 0);
- ui_container = fm_directory_view_get_bonobo_ui_container (view);
- bonobo_ui_component_set_container (icon_view->details->ui,
- ui_container, NULL);
- bonobo_object_release_unref (ui_container, NULL);
- bonobo_ui_util_set_ui (icon_view->details->ui,
- DATADIR,
- "nautilus-icon-view-ui.xml",
- "nautilus", NULL);
-
- bonobo_ui_component_add_verb_list_with_data (icon_view->details->ui, verbs, view);
-
- bonobo_ui_component_add_listener (icon_view->details->ui, ID_TIGHTER_LAYOUT, tighter_layout_state_changed_callback, view);
- bonobo_ui_component_add_listener (icon_view->details->ui, ID_SORT_REVERSED, sort_reversed_state_changed_callback, view);
- bonobo_ui_component_add_listener (icon_view->details->ui, ID_KEEP_ALIGNED, keep_aligned_state_changed_callback, view);
- icon_view->details->menus_ready = TRUE;
+ ui_manager = fm_directory_view_get_ui_manager (FM_DIRECTORY_VIEW (icon_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,
+ icon_view_entries, G_N_ELEMENTS (icon_view_entries),
+ icon_view);
+ gtk_action_group_add_toggle_actions (action_group,
+ icon_view_toggle_entries, G_N_ELEMENTS (icon_view_toggle_entries),
+ icon_view);
+ gtk_action_group_add_radio_actions (action_group,
+ arrange_radio_entries,
+ G_N_ELEMENTS (arrange_radio_entries),
+ -1,
+ G_CALLBACK (action_sort_radio_callback),
+ icon_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);
+ }
+ g_free (file);
- bonobo_ui_component_freeze (icon_view->details->ui, NULL);
-
/* Do one-time state-setting here; context-dependent state-setting
* is done in update_menus.
*/
if (!fm_icon_view_supports_auto_layout (icon_view)) {
- nautilus_bonobo_set_hidden
- (icon_view->details->ui, POPUP_PATH_LAY_OUT, TRUE);
+ action = gtk_action_group_get_action (action_group,
+ FM_ACTION_ARRANGE_ITEMS);
+ gtk_action_set_visible (action, FALSE);
}
if (FM_IS_DESKTOP_ICON_VIEW (icon_view)) {
- bonobo_ui_component_set (icon_view->details->ui,
- POPUP_PATH_ICON_APPEARANCE,
- "<menuitem name=\"Stretch\" verb=\"Stretch\"/>",
- NULL);
- bonobo_ui_component_set (icon_view->details->ui,
- POPUP_PATH_ICON_APPEARANCE,
- "<menuitem name=\"Unstretch\" verb=\"Unstretch\"/>",
- NULL);
+ guint merge_id;
+
+ merge_id = gtk_ui_manager_new_merge_id (ui_manager);
+ gtk_ui_manager_add_ui (ui_manager,
+ 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,
+ POPUP_PATH_ICON_APPEARANCE,
+ FM_ACTION_UNSTRETCH,
+ FM_ACTION_UNSTRETCH,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
}
- nautilus_bonobo_set_hidden
- (icon_view->details->ui, POPUP_PATH_ICON_APPEARANCE, TRUE);
-
- nautilus_bonobo_set_hidden
- (icon_view->details->ui, POPUP_PATH_ICON_APPEARANCE,
- !FM_IS_DESKTOP_ICON_VIEW (view));
-
update_layout_menus (icon_view);
-
- bonobo_ui_component_thaw (icon_view->details->ui, NULL);
}
static void
@@ -1541,47 +1521,34 @@ fm_icon_view_update_menus (FMDirectoryView *view)
FMIconView *icon_view;
GList *selection;
int selection_count;
+ GtkAction *action;
NautilusIconContainer *icon_container;
icon_view = FM_ICON_VIEW (view);
- /* don't update if the menus aren't ready */
- if (!icon_view->details->menus_ready) {
- return;
- }
-
FM_DIRECTORY_VIEW_CLASS (fm_icon_view_parent_class)->update_menus(view);
- /* don't update if we have no remote BonoboUIContainer */
- if (bonobo_ui_component_get_container (icon_view->details->ui)
- == CORBA_OBJECT_NIL) {
- return;
- }
-
selection = fm_directory_view_get_selection (view);
selection_count = g_list_length (selection);
icon_container = get_icon_container (icon_view);
- bonobo_ui_component_freeze (icon_view->details->ui, NULL);
-
- nautilus_bonobo_set_sensitive (icon_view->details->ui,
- COMMAND_STRETCH_ICON,
- selection_count == 1
- && icon_container != NULL
- && !nautilus_icon_container_has_stretch_handles (icon_container));
-
- nautilus_bonobo_set_label
- (icon_view->details->ui,
- COMMAND_UNSTRETCH_ICONS,
- eel_g_list_more_than_one_item (selection)
- ? _("Restore Icons' Original Si_zes")
- : _("Restore Icon's Original Si_ze"));
- nautilus_bonobo_set_sensitive (icon_view->details->ui,
- COMMAND_UNSTRETCH_ICONS,
- icon_container != NULL
- && nautilus_icon_container_is_stretched (icon_container));
-
- bonobo_ui_component_thaw (icon_view->details->ui, NULL);
+ action = gtk_action_group_get_action (icon_view->details->icon_action_group,
+ FM_ACTION_STRETCH);
+ gtk_action_set_sensitive (action,
+ selection_count == 1
+ && icon_container != NULL
+ && !nautilus_icon_container_has_stretch_handles (icon_container));
+
+ action = gtk_action_group_get_action (icon_view->details->icon_action_group,
+ FM_ACTION_UNSTRETCH);
+ g_object_set (action, "label",
+ eel_g_list_more_than_one_item (selection)
+ ? _("Restore Icons' Original Si_zes")
+ : _("Restore Icon's Original Si_ze"),
+ NULL);
+ gtk_action_set_sensitive (action,
+ icon_container != NULL
+ && nautilus_icon_container_is_stretched (icon_container));
nautilus_file_list_free (selection);
}
diff --git a/src/file-manager/fm-list-view.c b/src/file-manager/fm-list-view.c
index fdaf8bf2f..12eaa8210 100644
--- a/src/file-manager/fm-list-view.c
+++ b/src/file-manager/fm-list-view.c
@@ -32,7 +32,6 @@
#include "fm-error-reporting.h"
#include "fm-list-model.h"
#include <string.h>
-#include <bonobo/bonobo-ui-util.h>
#include <eel/eel-cell-renderer-pixbuf-list.h>
#include <eel/eel-vfs-extensions.h>
#include <eel/eel-glib-extensions.h>
@@ -57,6 +56,7 @@
#include <libnautilus-private/nautilus-directory-background.h>
#include <libnautilus-private/nautilus-dnd.h>
#include <libnautilus-private/nautilus-file-dnd.h>
+#include <libnautilus-private/nautilus-file-utilities.h>
#include <libnautilus-private/nautilus-global-preferences.h>
#include <libnautilus-private/nautilus-icon-dnd.h>
#include <libnautilus-private/nautilus-icon-factory.h>
@@ -78,6 +78,7 @@ typedef struct {
struct FMListViewDetails {
GtkTreeView *tree_view;
FMListModel *model;
+ GtkActionGroup *list_action_group;
GtkTreeViewColumn *file_name_column;
int file_name_column_num;
@@ -105,7 +106,6 @@ struct FMListViewDetails {
/* typeahead selection state */
TypeSelectState *type_select_state;
- BonoboUIComponent *ui;
gboolean menus_ready;
GHashTable *columns;
@@ -1601,9 +1601,8 @@ create_column_editor (FMListView *view)
}
static void
-visible_columns_callback (BonoboUIComponent *component,
- gpointer callback_data,
- const char *verb)
+action_visible_columns_callback (GtkAction *action,
+ gpointer callback_data)
{
FMListView *list_view;
@@ -1619,31 +1618,45 @@ visible_columns_callback (BonoboUIComponent *component,
}
}
+static GtkActionEntry list_view_entries[] = {
+ { "Visible Columns", NULL, /* name, stock id */
+ N_("Visible _Columns..."), NULL, /* label, accelerator */
+ N_("Select the columns visible in this folder"), /* tooltip */
+ G_CALLBACK (action_visible_columns_callback) },
+};
+
static void
fm_list_view_merge_menus (FMDirectoryView *view)
{
FMListView *list_view;
- Bonobo_UIContainer ui_container;
- BonoboUIVerb verbs [] = {
- BONOBO_UI_VERB ("Visible Columns", visible_columns_callback),
- BONOBO_UI_VERB_END
- };
-
+ GtkUIManager *ui_manager;
+ GtkActionGroup *action_group;
+ GError *error;
+ char *file;
+
EEL_CALL_PARENT (FM_DIRECTORY_VIEW_CLASS, merge_menus, (view));
list_view = FM_LIST_VIEW (view);
- list_view->details->ui = bonobo_ui_component_new ("List View");
- ui_container = fm_directory_view_get_bonobo_ui_container (view);
- bonobo_ui_component_set_container (list_view->details->ui,
- ui_container, NULL);
- bonobo_object_release_unref (ui_container, NULL);
- bonobo_ui_util_set_ui (list_view->details->ui,
- DATADIR,
- "nautilus-list-view-ui.xml",
- "nautilus", NULL);
+ ui_manager = fm_directory_view_get_ui_manager (view);
+
+ action_group = gtk_action_group_new ("ListViewActions");
+ gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
+ list_view->details->list_action_group = action_group;
+ gtk_action_group_add_actions (action_group,
+ list_view_entries, G_N_ELEMENTS (list_view_entries),
+ list_view);
- bonobo_ui_component_add_verb_list_with_data (list_view->details->ui, verbs, 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);
+ }
+ g_free (file);
list_view->details->menus_ready = TRUE;
}
@@ -2005,12 +2018,6 @@ fm_list_view_dispose (GObject *object)
list_view->details->drag_dest = NULL;
}
- if (list_view->details->ui != NULL) {
- bonobo_ui_component_unset_container (list_view->details->ui, NULL);
- bonobo_object_unref (list_view->details->ui);
- list_view->details->ui = NULL;
- }
-
G_OBJECT_CLASS (parent_class)->dispose (object);
}
diff --git a/src/file-manager/fm-properties-window.c b/src/file-manager/fm-properties-window.c
index e25793163..7ee0da117 100644
--- a/src/file-manager/fm-properties-window.c
+++ b/src/file-manager/fm-properties-window.c
@@ -77,8 +77,6 @@
#include <libnautilus-private/nautilus-undo-signal-handlers.h>
#include <libnautilus-private/nautilus-mime-actions.h>
#include <libnautilus-private/nautilus-undo.h>
-#include <bonobo/bonobo-widget.h>
-#include <bonobo/bonobo-exception.h>
#include <string.h>
static GHashTable *windows;
diff --git a/src/file-manager/nautilus-desktop-icon-view-ui.xml b/src/file-manager/nautilus-desktop-icon-view-ui.xml
index b1417c7df..470e5d5b9 100644
--- a/src/file-manager/nautilus-desktop-icon-view-ui.xml
+++ b/src/file-manager/nautilus-desktop-icon-view-ui.xml
@@ -1,60 +1,23 @@
-<Root>
-<commands>
- <cmd name="Change Background"
- _label="Change Desktop _Background"
- _tip="Show a window that lets you set your desktop background's pattern or color"/>
- <cmd name="Close" sensitive="0"/>
- <cmd name="Add Bookmark" sensitive="0"/>
- <cmd name="Empty Trash Conditional"
- _label="Empty Trash"
- _tip="Delete all items in the Trash"/>
- <cmd name="New Terminal"
- _label="Open T_erminal"
- _tip="Open a new GNOME terminal window"/>
- <cmd name="New Launcher Desktop"
- _label="Create L_auncher"
- _tip="Create a new launcher"/>
- <cmd name="Reset Background"
- _label="Use _Default Background"
- _tip="Use the default desktop background"/>
-</commands>
-<menu>
- <!-- By re-labelling these submenus to names without underscores, we
- prevent the user from bringing up the otherwise-invisible menu bar
- menus on the desktop from the keyboard. Setting the labels to "" in
- code does not work (presumably Bonobo bug), but doing so here does.
- -->
- <submenu name="File" label=""/>
- <submenu name="Edit" label=""/>
- <submenu name="View" label=""/>
- <submenu name="Go" label=""/>
- <submenu name="Bookmarks" label=""/>
- <submenu name="Profiler" label=""/>
- <submenu name="Help" label=""/>
- <submenu name="Preferences" label=""/>
-</menu>
-<popups>
- <popup name="background">
- <placeholder name="Before Zoom Items">
- <placeholder name="New Window Items">
- <menuitem name="New Terminal" verb="New Terminal"/>
- </placeholder>
- <placeholder name="New Object Items">
- <menuitem name="New Launcher" verb="New Launcher Desktop"/>
- </placeholder>
+<ui>
+<popup name="background">
+ <placeholder name="Before Zoom Items">
+ <placeholder name="New Window Items">
+ <menuitem name="New Terminal" action="New Terminal"/>
</placeholder>
- <placeholder name="After Zoom Items">
- <placeholder name="Background Items">
- <menuitem name="Use Default Background" verb="Reset Background"/>
- <menuitem name="Change Background" verb="Change Background"/>
- </placeholder>
+ <placeholder name="New Object Items">
+ <menuitem name="New Launcher" action="New Launcher Desktop"/>
</placeholder>
- </popup>
-
- <popup name="selection">
- <placeholder name="Empty Trash Holder" delimit="top">
- <menuitem name="Empty Trash" verb="Empty Trash Conditional"/>
+ </placeholder>
+ <placeholder name="After Zoom Items">
+ <placeholder name="Background Items">
+ <menuitem name="Change Background" action="Change Background"/>
</placeholder>
- </popup>
-</popups>
-</Root>
+ </placeholder>
+</popup>
+
+<popup name="selection">
+ <placeholder name="Empty Trash Holder">
+ <menuitem name="Empty Trash" action="Empty Trash Conditional"/>
+ </placeholder>
+</popup>
+</ui>
diff --git a/src/file-manager/nautilus-directory-view-ui.xml b/src/file-manager/nautilus-directory-view-ui.xml
index bac7f6969..f0deab266 100644
--- a/src/file-manager/nautilus-directory-view-ui.xml
+++ b/src/file-manager/nautilus-directory-view-ui.xml
@@ -1,4 +1,5 @@
-<Root>
+<ui>
+<!--
<commands>
<cmd name="Rename"
_label="_Rename..."
@@ -91,264 +92,220 @@
_label="Connect To This Server"
_tip="Make a permanent connection to this server"/>
</commands>
+-->
+<!--
<keybindings>
- <accel name="*Control*BackSpace" verb="Trash"/>
- <accel name="*Control*T" verb="Trash"/>
- <accel name="KP_Delete" verb="Trash"/>
- <accel name="Delete" verb="Trash"/>
- <accel name="*Shift*KP_Delete" verb="Delete"/>
- <accel name="*Shift*Delete" verb="Delete"/>
- <accel name="*Alt*Down" verb="Open"/>
- <accel name="*Alt**Shift*Down" verb="OpenCloseParent"/>
- <accel name="*Control*i" verb="Properties"/>
- <accel name="*Shift**Control*n" verb="New Folder"/>
- <accel name="*Control*o" verb="Open"/>
- <accel name="*Control**Shift*o" verb="OpenAlternate"/>
- <accel name="*Alt*Return" verb="Properties"/>
- <accel name="*Control*x" verb="Cut Files"/>
- <accel name="*Control*c" verb="Copy Files"/>
- <accel name="*Control*v" verb="Paste Files"/>
- <accel name="*Control*m" verb="Create Link"/>
- <accel name="F2" verb="Rename"/>
- <accel name="*Control*a" verb="Select All"/>
- <accel name="*Control*s" verb="Select Pattern"/>
+ <accel name="*Control*BackSpace" action="Trash"/>
+ <accel name="*Control*T" action="Trash"/>
+ <accel name="KP_Delete" action="Trash"/>
+ <accel name="Delete" action="Trash"/>
+ <accel name="*Shift*KP_Delete" action="Delete"/>
+ <accel name="*Shift*Delete" action="Delete"/>
+ <accel name="*Alt*Down" action="Open"/>
+ <accel name="*Alt**Shift*Down" action="OpenCloseParent"/>
+ <accel name="*Control*i" action="Properties"/>
+ <accel name="*Shift**Control*n" action="New Folder"/>
+ <accel name="*Control*o" action="Open"/>
+ <accel name="*Control**Shift*o" action="OpenAlternate"/>
+ <accel name="*Alt*Return" action="Properties"/>
+ <accel name="*Control*x" action="Cut Files"/>
+ <accel name="*Control*c" action="Copy Files"/>
+ <accel name="*Control*v" action="Paste Files"/>
+ <accel name="*Control*m" action="Create Link"/>
+ <accel name="F2" action="Rename"/>
+ <accel name="*Control*a" action="Select All"/>
+ <accel name="*Control*s" action="Select Pattern"/>
</keybindings>
-<menu>
- <submenu name="File">
+-->
+<accelerator action="OpenCloseParent"/>
+
+<menubar name="MenuBar">
+ <menu action="File">
<placeholder name="New Items Placeholder">
<menuitem name="New Folder"
- accel="*Shift**Control*n"
- verb="New Folder"/>
- <submenu name="New Documents"
- _label="Create _Document">
+ action="New Folder"/>
+ <menu action="New Documents">
<menuitem name="No Templates"
- _label="No templates Installed"
- sensitive="0"/>
- <placeholder name="New Documents Placeholder" delimit="none"/>
+ action="No Templates"/>
+ <placeholder name="New Documents Placeholder"/>
<separator name="After New Documents"/>
<menuitem name="New Empty File"
- verb="New Empty File"/>
- </submenu>
+ action="New Empty File"/>
+ </menu>
<menuitem name="New Launcher"
- pixtype="stock" pixname="gtk-new"
- verb="New Launcher"/>
+ action="New Launcher"/>
</placeholder>
<placeholder name="Open Placeholder">
<menuitem name="Open"
- accel="*Control*o"
- pixtype="stock" pixname="gtk-open"
- verb="Open"/>
+ action="Open"/>
<menuitem name="OpenAlternate"
- accel="*Control**Shift*o"
- verb="OpenAlternate"/>
- <placeholder name="Applications Placeholder" delimit="top"/>
- <submenu name="Open With"
- _label="Open Wit_h"
- _tip="Choose a program with which to open the selected item">
- <placeholder name="Applications Placeholder" delimit="none"/>
+ action="OpenAlternate"/>
+ <placeholder name="Applications Placeholder"/>
+ <menu action="Open With">
+ <placeholder name="Applications Placeholder"/>
<separator/>
<menuitem name="OtherApplication"
- verb="OtherApplication"/>
- </submenu>
+ action="OtherApplication1"/>
+ </menu>
<placeholder name="OtherApplicationPlaceholder">
<menuitem name="OtherApplication"
- verb="OtherApplication"/>
+ action="OtherApplication2"/>
</placeholder>
<menuitem name="Edit Launcher"
- verb="Edit Launcher"/>
- <submenu name="Scripts"
- _label="_Scripts"
- _tip="Run or manage scripts from ~/Nautilus/scripts">
- <placeholder name="Scripts Placeholder" delimit="none"/>
+ action="Edit Launcher"/>
+ <menu action="Scripts">
+ <placeholder name="Scripts Placeholder"/>
<separator name="After Scripts"/>
<menuitem name="Open Scripts Folder"
- verb="Open Scripts Folder"/>
- </submenu>
+ action="Open Scripts Folder"/>
+ </menu>
</placeholder>
<placeholder name="File Items Placeholder">
<menuitem name="Properties"
- pixtype="stock" pixname="gtk-properties"
- accel="*Alt*Return"
- verb="Properties"/>
+ action="Properties"/>
</placeholder>
<placeholder name="Global File Items Placeholder">
<menuitem name="Empty Trash"
- verb="Empty Trash"/>
+ action="Empty Trash"/>
</placeholder>
- </submenu>
+ </menu>
- <submenu name="Edit">
+ <menu action="Edit">
<menuitem name="Cut"
- accel="*Control*x"
- pixtype="stock" pixname="gtk-cut"
- verb="Cut Files"/>
+ action="Cut Files"/>
<menuitem name="Copy"
- accel="*Control*c"
- pixtype="stock" pixname="gtk-copy"
- verb="Copy Files"/>
+ action="Copy Files"/>
<menuitem name="Paste"
- accel="*Control*v"
- pixtype="stock" pixname="gtk-paste"
- verb="Paste Files"/>
+ action="Paste Files"/>
<placeholder name="Select Items">
<menuitem name="Select All"
- accel="*Control*a"
- verb="Select All"/>
+ action="Select All"/>
<menuitem name="Select Pattern"
- accel="*Control*s"
- verb="Select Pattern"/>
+ action="Select Pattern"/>
</placeholder>
<placeholder name="File Items Placeholder">
<menuitem name="Duplicate"
- verb="Duplicate"/>
+ action="Duplicate"/>
<menuitem name="Create Link"
- accel="*Control*m"
- verb="Create Link"/>
+ action="Create Link"/>
<menuitem name="Rename"
- accel="F2"
- verb="Rename"/>
+ action="Rename"/>
</placeholder>
<placeholder name="Dangerous File Items Placeholder">
<menuitem name="Trash"
- pixtype="stock" pixname="gtk-delete"
- verb="Trash"/>
+ action="Trash"/>
<menuitem name="Delete"
- accel="*Shift*Delete"
- verb="Delete"/>
+ action="Delete"/>
</placeholder>
<placeholder name="Extension Actions"/>
- </submenu>
+ </menu>
- <submenu name="View">
+ <menu action="View">
<placeholder name="View Preferences Placeholder">
<menuitem name="Reset to Defaults"
- verb="Reset to Defaults"/>
+ action="Reset to Defaults"/>
<menuitem name="Show Hidden Files"
- type="toggle"
- accel="*Control*h"
- verb="Show Hidden Files"/>
+ action="Show Hidden Files"/>
</placeholder>
- </submenu>
-</menu>
-<popups>
- <popup name="background">
- <placeholder name="Before Zoom Items">
- <placeholder name="New Object Items">
- <menuitem name="New Folder"
- verb="New Folder"/>
- <menuitem name="New Launcher"
- pixtype="stock" pixname="gtk-new"
- verb="New Launcher"/>
- </placeholder>
- <submenu name="New Documents"
- _label="Create _Document">
- <menuitem name="No Templates"
- _label="No templates Installed"
- sensitive="0"/>
- <placeholder name="New Documents Placeholder" delimit="none"/>
- <separator name="After New Documents"/>
- <menuitem name="New Empty File"
- verb="New Empty File"/>
- </submenu>
- <submenu name="Scripts"
- _label="_Scripts"
- _tip="Run or manage scripts from ~/Nautilus/scripts"
- tearoff="0">
- <placeholder name="Scripts Placeholder" delimit="none"/>
- <separator name="After Scripts"/>
- <menuitem name="Open Scripts Folder" verb="Open Scripts Folder"/>
- </submenu>
- <placeholder name="View Items" delimit="top"/>
- <placeholder name="File Clipboard Actions" delimit="top">
- <menuitem name="Paste Files"
- pixtype="stock" pixname="gtk-paste"
- verb="Paste Files"/>
- </placeholder>
- </placeholder>
- <placeholder name="After Zoom Items">
- <placeholder name="Background Items" delimit="none">
- <menuitem name="Use Default Background" verb="Reset Background"/>
- </placeholder>
- </placeholder>
- </popup>
-
- <popup name="selection" tearoff="0">
- <placeholder name="Open Placeholder" delimit="none">
- <menuitem name="Open"
- pixtype="stock" pixname="gtk-open"
- verb="Open"/>
- <menuitem name="OpenAlternate"
- verb="OpenAlternate"/>
- <placeholder name="Applications Placeholder" delimit="top"/>
- <submenu name="Open With"
- _label="Open Wit_h"
- tearoff="0"
- _tip="Choose a program with which to open the selected item">
- <placeholder name="Applications Placeholder" delimit="none"/>
- <separator/>
- <menuitem name="OtherApplication" verb="OtherApplication"/>
- </submenu>
- <placeholder name="OtherApplicationPlaceholder">
- <menuitem name="OtherApplication"
- verb="OtherApplication"/>
- </placeholder>
- <menuitem name="Edit Launcher"
- verb="Edit Launcher"/>
- <submenu name="Scripts"
- _label="_Scripts"
- _tip="Run or manage scripts from ~/Nautilus/scripts"
- tearoff="0">
- <placeholder name="Scripts Placeholder" delimit="none"/>
- <separator name="After Scripts"/>
- <menuitem name="Open Scripts Folder" verb="Open Scripts Folder"/>
- </submenu>
-
+ </menu>
+</menubar>
+<popup name="background">
+ <placeholder name="Before Zoom Items">
+ <placeholder name="New Object Items">
+ <menuitem name="New Folder"
+ action="New Folder"/>
+ <menuitem name="New Launcher"
+ action="New Launcher"/>
</placeholder>
- <placeholder name="File Clipboard Actions" delimit="top">
- <menuitem name="Cut Files"
- pixtype="stock" pixname="gtk-cut"
- verb="Cut Files"/>
- <menuitem name="Copy Files"
- pixtype="stock" pixname="gtk-copy"
- verb="Copy Files"/>
- <menuitem name="Paste Files Into"
- pixtype="stock" pixname="gtk-paste"
- verb="Paste Files Into"/>
+ <menu action="New Documents">
+ <menuitem name="No Templates"
+ action="No Templates"/>
+ <placeholder name="New Documents Placeholder"/>
+ <separator name="After New Documents"/>
+ <menuitem name="New Empty File"
+ action="New Empty File"/>
+ </menu>
+ <menu action="Scripts">
+ <placeholder name="Scripts Placeholder"/>
+ <separator name="After Scripts"/>
+ <menuitem name="Open Scripts Folder"
+ action="Open Scripts Folder"/>
+ </menu>
+ <placeholder name="View Items"/>
+ <placeholder name="File Clipboard Actions">
+ <menuitem name="Paste Files"
+ action="Paste Files"/>
</placeholder>
- <placeholder name="File Actions" delimit="top">
- <menuitem name="Create Link" verb="Create Link"/>
- <menuitem name="Rename" verb="Rename"/>
+ </placeholder>
+ <placeholder name="After Zoom Items">
+ <placeholder name="Background Items">
+ <menuitem name="Use Default Background"
+ action="Reset Background"/>
</placeholder>
- <placeholder name="Dangerous File Actions" delimit="top">
- <menuitem name="Trash"
- pixtype="stock" pixname="gtk-delete"
- verb="Trash"/>
- <menuitem name="Delete" verb="Delete"/>
+ </placeholder>
+</popup>
+
+<popup name="selection">
+ <placeholder name="Open Placeholder">
+ <menuitem name="Open" action="Open"/>
+ <menuitem name="OpenAlternate"
+ action="OpenAlternate"/>
+ <placeholder name="Applications Placeholder"/>
+ <menu action="Open With">
+ <placeholder name="Applications Placeholder"/>
+ <separator/>
+ <menuitem name="OtherApplication" action="OtherApplication1"/>
+ </menu>
+ <placeholder name="OtherApplicationPlaceholder">
+ <menuitem name="OtherApplication"
+ action="OtherApplication2"/>
</placeholder>
+ <menuitem name="Edit Launcher"
+ action="Edit Launcher"/>
+ <menu action="Scripts">
+ <placeholder name="Scripts Placeholder"/>
+ <separator name="After Scripts"/>
+ <menuitem name="Open Scripts Folder"
+ action="Open Scripts Folder"/>
+ </menu>
- <placeholder name="Icon Appearance Items" delimit="top">
- </placeholder>
+ </placeholder>
+ <placeholder name="File Clipboard Actions">
+ <menuitem name="Cut Files"
+ action="Cut Files"/>
+ <menuitem name="Copy Files"
+ action="Copy Files"/>
+ <menuitem name="Paste Files Into"
+ action="Paste Files Into"/>
+ </placeholder>
+ <placeholder name="File Actions">
+ <menuitem name="Create Link" action="Create Link"/>
+ <menuitem name="Rename" action="Rename"/>
+ </placeholder>
+ <placeholder name="Dangerous File Actions">
+ <menuitem name="Trash"
+ action="Trash"/>
+ <menuitem name="Delete" action="Delete"/>
+ </placeholder>
+
+ <placeholder name="Icon Appearance Items">
+ </placeholder>
- <placeholder name="Extension Actions" delimit="top"/>
- <separator/>
+ <placeholder name="Extension Actions"/>
+ <separator/>
- <menuitem name="Properties"
- pixtype="stock" pixname="gtk-properties"
- verb="Properties"/>
- <placeholder name="Removabel Media Holder" delimit="top">
- <menuitem name="Mount Volume" verb="Mount Volume Conditional"/>
- <menuitem name="Unmount Volume" verb="Unmount Volume Conditional"/>
- <menuitem name="Protect Media" verb="Protect Conditional"/>
- <menuitem name="Format Media" verb="Format Conditional"/>
- <menuitem name="Media Properties" verb="Media Properties Conditional"/>
- </placeholder>
- <menuitem name="Connect To Server Link" verb="Connect To Server Link Conditional"/>
- </popup>
-</popups>
-</Root>
+ <menuitem name="Properties"
+ action="Properties"/>
+ <placeholder name="Removabel Media Holder">
+ <menuitem name="Mount Volume" action="Mount Volume"/>
+ <menuitem name="Unmount Volume" action="Unmount Volume"/>
+ </placeholder>
+ <menuitem name="Connect To Server Link" action="Connect To Server Link"/>
+</popup>
+</ui>
diff --git a/src/file-manager/nautilus-icon-view-ui.xml b/src/file-manager/nautilus-icon-view-ui.xml
index 15206ec7e..dde7078c2 100644
--- a/src/file-manager/nautilus-icon-view-ui.xml
+++ b/src/file-manager/nautilus-icon-view-ui.xml
@@ -1,138 +1,77 @@
-<Root>
-<commands>
- <cmd name="Stretch"
- _label="Str_etch Icon"
- _tip="Make the selected icon stretchable"/>
- <cmd name="Unstretch"
- _label="Restore Icons' Original Si_zes"
- _tip="Restore each selected icon to its original size"/>
- <cmd name="Manual Layout"
- _label="_Manually"
- _tip="Leave icons wherever they are dropped"/>
- <cmd name="Sort by Name"
- _label="By _Name"
- _tip="Keep icons sorted by name in rows"/>
- <cmd name="Sort by Size"
- _label="By _Size"
- _tip="Keep icons sorted by size in rows"/>
- <cmd name="Sort by Type"
- _label="By _Type"
- _tip="Keep icons sorted by type in rows"/>
- <cmd name="Sort by Modification Date"
- _label="By Modification _Date"
- _tip="Keep icons sorted by modification date in rows"/>
- <cmd name="Sort by Emblems"
- _label="By _Emblems"
- _tip="Keep icons sorted by emblems in rows"/>
- <cmd name="Keep Aligned"
- _label="_Keep Aligned"
- _tip="Keep icons lined up on a grid"/>
- <cmd name="Tighter Layout"
- _label="Compact _Layout"
- _tip="Toggle using a tighter layout scheme"/>
- <cmd name="Reversed Order"
- _label="Re_versed Order"
- _tip="Display icons in the opposite order"/>
- <cmd name="Clean Up"
- _label="Clean _Up by Name"
- _tip="Reposition icons to better fit in the window and avoid overlapping"/>
-</commands>
-<menu>
- <submenu name="Edit">
+<ui>
+<menubar name="MenuBar">
+ <menu action="Edit">
<placeholder name="Edit Items Placeholder">
<menuitem name="Stretch"
- verb="Stretch"/>
+ action="Stretch"/>
<menuitem name="Unstretch"
- verb="Unstretch"/>
+ action="Unstretch"/>
</placeholder>
- </submenu>
-
- <submenu name="View">
+ </menu>
+ <menu action="View">
<placeholder name="View Items Placeholder">
- <submenu name="Arrange Items" _label="Arran_ge Items">
+ <menu action="Arrange Items">
<menuitem name="Manual Layout"
- type="radio" group="layout group"
- id="Manual Layout"/>
+ action="Manual Layout"/>
<placeholder name="Auto Layout">
<menuitem name="Sort by Name"
- type="radio" group="layout group"
- id="Sort by Name"/>
+ action="Sort by Name"/>
<menuitem name="Sort by Size"
- type="radio" group="layout group"
- id="Sort by Size"/>
+ action="Sort by Size"/>
<menuitem name="Sort by Type"
- type="radio" group="layout group"
- id="Sort by Type"/>
+ action="Sort by Type"/>
<menuitem name="Sort by Modification Date"
- type="radio" group="layout group"
- id="Sort by Modification Date"/>
+ action="Sort by Modification Date"/>
<menuitem name="Sort by Emblems"
- type="radio" group="layout group"
- id="Sort by Emblems"/>
+ action="Sort by Emblems"/>
</placeholder>
<separator/>
<menuitem name="Tighter Layout"
- id="Tighter Layout"
- type="toggle"/>
+ action="Tighter Layout"/>
<menuitem name="Reversed Order"
- id="Reversed Order"
- type="toggle"/>
- </submenu>
+ action="Reversed Order"/>
+ </menu>
<menuitem name="Clean Up"
- verb="Clean Up"/>
+ action="Clean Up"/>
<menuitem name="Keep Aligned"
- id="Keep Aligned"
- type="toggle"/>
+ action="Keep Aligned"/>
</placeholder>
- </submenu>
-</menu>
-<popups>
- <popup name="background">
- <placeholder name="Before Zoom Items">
- <placeholder name="View Items">
- <submenu name="Arrange Items" _label="Arran_ge Items" tearoff="0">
- <menuitem name="Manual Layout"
- type="radio" group="context menu layout group"
- id="Manual Layout"/>
- <placeholder name="Auto Layout">
- <menuitem name="Sort by Name"
- type="radio" group="context menu layout group"
- id="Sort by Name"/>
- <menuitem name="Sort by Size"
- type="radio" group="context menu layout group"
- id="Sort by Size"/>
- <menuitem name="Sort by Type"
- type="radio" group="context menu layout group"
- id="Sort by Type"/>
- <menuitem name="Sort by Modification Date"
- type="radio" group="context menu layout group"
- id="Sort by Modification Date"/>
- <menuitem name="Sort by Emblems"
- type="radio" group="context menu layout group"
- id="Sort by Emblems"/>
- </placeholder>
- <separator/>
-
- <menuitem name="Tighter Layout"
- id="Tighter Layout"
- type="toggle"/>
- <menuitem name="Reversed Order"
- id="Reversed Order"
- type="toggle"/>
- </submenu>
-
- <menuitem name="Clean Up" verb="Clean Up"/>
- <menuitem name="Keep Aligned"
- id="Keep Aligned"
- type="toggle"/>
- </placeholder>
- </placeholder>
- </popup>
- <popup name="selection">
- <placeholder name="Icon Appearance Items">
+ </menu>
+</menubar>
+<popup name="background">
+ <placeholder name="Before Zoom Items">
+ <placeholder name="View Items">
+ <menu action="Arrange Items">
+ <menuitem name="Manual Layout"
+ action="Manual Layout"/>
+ <placeholder name="Auto Layout">
+ <menuitem name="Sort by Name"
+ action="Sort by Name"/>
+ <menuitem name="Sort by Size"
+ action="Sort by Size"/>
+ <menuitem name="Sort by Type"
+ action="Sort by Type"/>
+ <menuitem name="Sort by Modification Date"
+ action="Sort by Modification Date"/>
+ <menuitem name="Sort by Emblems"
+ action="Sort by Emblems"/>
+ </placeholder>
+ <separator/>
+ <menuitem name="Tighter Layout"
+ action="Tighter Layout"/>
+ <menuitem name="Reversed Order"
+ action="Reversed Order"/>
+ </menu>
+ <menuitem name="Clean Up" action="Clean Up"/>
+ <menuitem name="Keep Aligned"
+ action="Keep Aligned"/>
</placeholder>
- </popup>
-</popups>
-</Root>
+ </placeholder>
+</popup>
+<popup name="selection">
+ <placeholder name="Icon Appearance Items">
+ </placeholder>
+</popup>
+</ui>
diff --git a/src/file-manager/nautilus-list-view-ui.xml b/src/file-manager/nautilus-list-view-ui.xml
index 3c59dfec7..b6f847ea6 100644
--- a/src/file-manager/nautilus-list-view-ui.xml
+++ b/src/file-manager/nautilus-list-view-ui.xml
@@ -1,16 +1,11 @@
-<Root>
-<commands>
- <cmd name="Visible Columns"
- _label="Visible _Columns..."
- _tip="Select the columns visible in this folder"/>
-</commands>
-<menu>
- <submenu name="View">
+<ui>
+<menubar name="MenuBar">
+ <menu action="View">
<placeholder name="View Items Placeholder">
<menuitem name="Visible Columns"
- verb="Visible Columns"/>
+ action="Visible Columns"/>
</placeholder>
- </submenu>
-</menu>
-</Root>
+ </menu>
+</menubar>
+</ui>
diff --git a/src/nautilus-actions.h b/src/nautilus-actions.h
new file mode 100644
index 000000000..c27af81dc
--- /dev/null
+++ b/src/nautilus-actions.h
@@ -0,0 +1,42 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
+/*
+ * Nautilus
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * Nautilus is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * Nautilus 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *
+ */
+
+#ifndef NAUTILUS_ACTIONS_H
+#define NAUTILUS_ACTIONS_H
+
+#define NAUTILUS_ACTION_STOP "Stop"
+#define NAUTILUS_ACTION_RELOAD "Reload"
+#define NAUTILUS_ACTION_BACK "Back"
+#define NAUTILUS_ACTION_UP "Up"
+#define NAUTILUS_ACTION_FORWARD "Forward"
+#define NAUTILUS_ACTION_SHOW_HIDE_SIDEBAR "Show Hide Sidebar"
+#define NAUTILUS_ACTION_SHOW_HIDE_STATUSBAR "Show Hide Statusbar"
+#define NAUTILUS_ACTION_SHOW_HIDE_LOCATION_BAR "Show Hide Location Bar"
+#define NAUTILUS_ACTION_GO_TO_BURN_CD "Go to Burn CD"
+#define NAUTILUS_ACTION_ZOOM_IN "Zoom In"
+#define NAUTILUS_ACTION_ZOOM_OUT "Zoom Out"
+#define NAUTILUS_ACTION_ZOOM_NORMAL "Zoom Normal"
+
+#endif /* NAUTILUS_ACTIONS_H */
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index 56044ee6b..a83a946be 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -79,7 +79,6 @@
#include <libnautilus-private/nautilus-metafile-factory.h>
#include <libnautilus-private/nautilus-module.h>
#include <libnautilus-private/nautilus-sound.h>
-#include <libnautilus-private/nautilus-bonobo-extensions.h>
#include <libnautilus-private/nautilus-undo-manager.h>
#include <libnautilus-private/nautilus-desktop-link-monitor.h>
#include <libnautilus-private/nautilus-directory-private.h>
@@ -428,6 +427,23 @@ initialize_kde_trash_hack (void)
g_free (desktop_dir);
}
+
+static Bonobo_RegistrationResult
+nautilus_bonobo_activation_register_for_display (const char *iid,
+ Bonobo_Unknown ref)
+{
+ const char *display_name;
+ GSList *reg_env ;
+ Bonobo_RegistrationResult result;
+
+ display_name = gdk_display_get_name (gdk_display_get_default());
+ reg_env = bonobo_activation_registration_env_set (NULL,
+ "DISPLAY", display_name);
+ result = bonobo_activation_register_active_server (iid, ref, reg_env);
+ bonobo_activation_registration_env_free (reg_env);
+ return result;
+}
+
void
nautilus_application_startup (NautilusApplication *application,
gboolean kill_shell,
diff --git a/src/nautilus-arrow-toolbutton.c b/src/nautilus-arrow-toolbutton.c
new file mode 100644
index 000000000..c2005f102
--- /dev/null
+++ b/src/nautilus-arrow-toolbutton.c
@@ -0,0 +1,299 @@
+/*
+ * Copyright (C) 2002 Christophe Fergeau
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Based on ephy-arrow-toolbutton.c from Epiphany
+ */
+
+#include <config.h>
+
+#include "nautilus-arrow-toolbutton.h"
+
+#include <gtk/gtkarrow.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmain.h>
+#include <gdk/gdkkeysyms.h>
+
+#define NAUTILUS_ARROW_TOOLBUTTON_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), NAUTILUS_TYPE_ARROW_TOOLBUTTON, NautilusArrowToolButtonPrivate))
+
+struct NautilusArrowToolButtonPrivate
+{
+ GtkWidget *arrow_widget;
+ GtkWidget *button;
+ GtkMenu *menu;
+};
+
+enum NautilusArrowToolButtonSignalsEnum {
+ NAUTILUS_ARROW_TOOL_BUTTON_MENU_ACTIVATED,
+ NAUTILUS_ARROW_TOOL_BUTTON_LAST_SIGNAL
+};
+
+/* GObject boilerplate code */
+static void nautilus_arrow_toolbutton_init (NautilusArrowToolButton *arrow_toolbutton);
+static void nautilus_arrow_toolbutton_class_init (NautilusArrowToolButtonClass *klass);
+static void nautilus_arrow_toolbutton_finalize (GObject *object);
+
+static GObjectClass *parent_class = NULL;
+
+static gint NautilusArrowToolButtonSignals[NAUTILUS_ARROW_TOOL_BUTTON_LAST_SIGNAL];
+
+GType
+nautilus_arrow_toolbutton_get_type (void)
+{
+ static GType nautilus_arrow_toolbutton_type = 0;
+
+ if (nautilus_arrow_toolbutton_type == 0) {
+ static const GTypeInfo our_info = {
+ sizeof (NautilusArrowToolButtonClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) nautilus_arrow_toolbutton_class_init,
+ NULL,
+ NULL, /* class_data */
+ sizeof (NautilusArrowToolButton),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) nautilus_arrow_toolbutton_init
+ };
+
+ nautilus_arrow_toolbutton_type = g_type_register_static (GTK_TYPE_TOOL_BUTTON,
+ "NautilusArrowToolButton",
+ &our_info, 0);
+ }
+
+ return nautilus_arrow_toolbutton_type;
+}
+
+
+static gboolean
+nautilus_arrow_toolbutton_set_tooltip (GtkToolItem *tool_item,
+ GtkTooltips *tooltips,
+ const char *tip_text,
+ const char *tip_private)
+{
+ NautilusArrowToolButton *button = NAUTILUS_ARROW_TOOLBUTTON (tool_item);
+
+ g_return_val_if_fail (NAUTILUS_IS_ARROW_TOOLBUTTON (button), FALSE);
+
+ gtk_tooltips_set_tip (tooltips, button->priv->arrow_widget, tip_text, tip_private);
+ gtk_tooltips_set_tip (tooltips, button->priv->button, tip_text, tip_private);
+
+ return TRUE;
+}
+
+static void
+nautilus_arrow_toolbutton_class_init (NautilusArrowToolButtonClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkToolItemClass *tool_item_class = GTK_TOOL_ITEM_CLASS (klass);
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ object_class->finalize = nautilus_arrow_toolbutton_finalize;
+
+ tool_item_class->set_tooltip = nautilus_arrow_toolbutton_set_tooltip;
+
+ NautilusArrowToolButtonSignals[NAUTILUS_ARROW_TOOL_BUTTON_MENU_ACTIVATED] =
+ g_signal_new
+ ("menu-activated", G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_RUN_LAST | G_SIGNAL_RUN_CLEANUP,
+ G_STRUCT_OFFSET (NautilusArrowToolButtonClass, menu_activated),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ g_type_class_add_private (object_class, sizeof (NautilusArrowToolButtonPrivate));
+}
+
+static void
+button_state_changed_cb (GtkWidget *widget,
+ GtkStateType previous_state,
+ NautilusArrowToolButton *b)
+{
+ NautilusArrowToolButtonPrivate *p = b->priv;
+ GtkWidget *button;
+ GtkStateType state = GTK_WIDGET_STATE (widget);
+
+ button = (widget == p->arrow_widget) ? p->button : p->arrow_widget;
+
+ g_signal_handlers_block_by_func
+ (G_OBJECT (button),
+ G_CALLBACK (button_state_changed_cb),
+ b);
+ if (state == GTK_STATE_PRELIGHT &&
+ previous_state != GTK_STATE_ACTIVE) {
+ gtk_widget_set_state (button, state);
+ } else if (state == GTK_STATE_NORMAL) {
+ gtk_widget_set_state (button, state);
+ } else if (state == GTK_STATE_ACTIVE) {
+ gtk_widget_set_state (button, GTK_STATE_NORMAL);
+ }
+ g_signal_handlers_unblock_by_func
+ (G_OBJECT (button),
+ G_CALLBACK (button_state_changed_cb),
+ b);
+}
+
+static void
+menu_position_under_widget (GtkMenu *menu,
+ gint *x,
+ gint *y,
+ gboolean *push_in,
+ gpointer user_data)
+{
+ GtkWidget *w = GTK_WIDGET (user_data);
+ gint screen_width, screen_height;
+ GtkRequisition requisition;
+ gboolean rtl;
+
+ rtl = (gtk_widget_get_direction (w) == GTK_TEXT_DIR_RTL);
+
+ gdk_window_get_origin (w->window, x, y);
+ gtk_widget_size_request (GTK_WIDGET (menu), &requisition);
+
+ /* FIXME multihead */
+ screen_width = gdk_screen_width ();
+ screen_height = gdk_screen_height ();
+
+ if (rtl)
+ {
+ *x += w->allocation.x + w->allocation.width - requisition.width;
+ }
+ else
+ {
+ *x += w->allocation.x;
+ }
+
+ *y += w->allocation.y + w->allocation.height;
+
+ *x = CLAMP (*x, 0, MAX (0, screen_width - requisition.width));
+ *y = CLAMP (*y, 0, MAX (0, screen_height - requisition.height));
+}
+
+
+static void
+popup_menu_under_arrow (NautilusArrowToolButton *b, GdkEventButton *event)
+{
+ NautilusArrowToolButtonPrivate *p = b->priv;
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (p->arrow_widget), TRUE);
+
+ g_signal_emit (b, NautilusArrowToolButtonSignals[NAUTILUS_ARROW_TOOL_BUTTON_MENU_ACTIVATED], 0);
+ gtk_menu_popup (p->menu, NULL, NULL, menu_position_under_widget, b,
+ event ? event->button : 0,
+ event ? event->time : gtk_get_current_event_time ());
+}
+
+static void
+menu_deactivated_cb (GtkMenuShell *ms, NautilusArrowToolButton *b)
+{
+ NautilusArrowToolButtonPrivate *p = b->priv;
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (p->arrow_widget), FALSE);
+}
+
+static gboolean
+arrow_button_press_event_cb (GtkWidget *widget, GdkEventButton *event, NautilusArrowToolButton *b)
+{
+ popup_menu_under_arrow (b, event);
+ return TRUE;
+}
+
+static gboolean
+arrow_key_press_event_cb (GtkWidget *widget, GdkEventKey *event, NautilusArrowToolButton *b)
+{
+ if (event->keyval == GDK_space
+ || event->keyval == GDK_KP_Space
+ || event->keyval == GDK_Return
+ || event->keyval == GDK_KP_Enter
+ || event->keyval == GDK_Menu) {
+ popup_menu_under_arrow (b, NULL);
+ }
+
+ return FALSE;
+}
+
+static void
+nautilus_arrow_toolbutton_init (NautilusArrowToolButton *arrowtb)
+{
+ GtkWidget *hbox;
+ GtkWidget *arrow;
+ GtkWidget *arrow_button;
+ GtkWidget *real_button;
+
+ arrowtb->priv = NAUTILUS_ARROW_TOOLBUTTON_GET_PRIVATE (arrowtb);
+
+ gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (arrowtb), FALSE);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox);
+ real_button = GTK_BIN (arrowtb)->child;
+ g_object_ref (real_button);
+ gtk_container_remove (GTK_CONTAINER (arrowtb), real_button);
+ gtk_container_add (GTK_CONTAINER (hbox), real_button);
+ gtk_container_add (GTK_CONTAINER (arrowtb), hbox);
+ g_object_unref (real_button);
+
+ arrow_button = gtk_toggle_button_new ();
+ gtk_widget_show (arrow_button);
+ arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+ gtk_widget_show (arrow);
+ gtk_button_set_relief (GTK_BUTTON (arrow_button), GTK_RELIEF_NONE);
+ gtk_container_add (GTK_CONTAINER (arrow_button), arrow);
+
+ gtk_box_pack_end (GTK_BOX (hbox), arrow_button,
+ FALSE, FALSE, 0);
+
+ arrowtb->priv->button = real_button;
+ arrowtb->priv->arrow_widget = arrow_button;
+
+ arrowtb->priv->menu = GTK_MENU (gtk_menu_new ());
+ g_object_ref (arrowtb->priv->menu);
+ gtk_object_sink (GTK_OBJECT (arrowtb->priv->menu));
+
+ g_signal_connect (arrowtb->priv->menu, "deactivate",
+ G_CALLBACK (menu_deactivated_cb), arrowtb);
+
+ g_signal_connect (real_button, "state_changed",
+ G_CALLBACK (button_state_changed_cb),
+ arrowtb);
+ g_signal_connect (arrow_button, "state_changed",
+ G_CALLBACK (button_state_changed_cb),
+ arrowtb);
+ g_signal_connect (arrow_button, "key_press_event",
+ G_CALLBACK (arrow_key_press_event_cb),
+ arrowtb);
+ g_signal_connect (arrow_button, "button_press_event",
+ G_CALLBACK (arrow_button_press_event_cb),
+ arrowtb);
+}
+
+static void
+nautilus_arrow_toolbutton_finalize (GObject *object)
+{
+ NautilusArrowToolButton *arrow_toolbutton = NAUTILUS_ARROW_TOOLBUTTON (object);
+
+ g_object_unref (arrow_toolbutton->priv->menu);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+GtkMenuShell *
+nautilus_arrow_toolbutton_get_menu (NautilusArrowToolButton *b)
+{
+ return GTK_MENU_SHELL (b->priv->menu);
+}
diff --git a/src/nautilus-arrow-toolbutton.h b/src/nautilus-arrow-toolbutton.h
new file mode 100644
index 000000000..dd82be308
--- /dev/null
+++ b/src/nautilus-arrow-toolbutton.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2002 Christophe Fergeau
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Based on ephy-arrow-toolbutton.h from Epiphany
+ */
+
+#ifndef NAUTILUS_ARROW_TOOLBUTTON_H
+#define NAUTILUS_ARROW_TOOLBUTTON_H
+
+#include <glib.h>
+#include <gtk/gtkmenushell.h>
+#include <gtk/gtktoolbutton.h>
+
+G_BEGIN_DECLS
+
+#define NAUTILUS_TYPE_ARROW_TOOLBUTTON (nautilus_arrow_toolbutton_get_type ())
+#define NAUTILUS_ARROW_TOOLBUTTON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NAUTILUS_TYPE_ARROW_TOOLBUTTON, NautilusArrowToolButton))
+#define NAUTILUS_ARROW_TOOLBUTTON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NAUTILUS_TYPE_ARROW_TOOLBUTTON, NautilusArrowToolButtonClass))
+#define NAUTILUS_IS_ARROW_TOOLBUTTON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NAUTILUS_TYPE_ARROW_TOOLBUTTON))
+#define NAUTILUS_IS_ARROW_TOOLBUTTON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NAUTILUS_TYPE_ARROW_TOOLBUTTON))
+#define NAUTILUS_ARROW_TOOLBUTTON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NAUTILUS_TYPE_ARROW_TOOLBUTTON, NautilusArrowToolButtonClass))
+
+typedef struct NautilusArrowToolButtonClass NautilusArrowToolButtonClass;
+typedef struct NautilusArrowToolButton NautilusArrowToolButton;
+typedef struct NautilusArrowToolButtonPrivate NautilusArrowToolButtonPrivate;
+
+struct NautilusArrowToolButton
+{
+ GtkToolButton parent;
+
+ /*< private >*/
+ NautilusArrowToolButtonPrivate *priv;
+};
+
+struct NautilusArrowToolButtonClass
+{
+ GtkToolButtonClass parent_class;
+
+ void (*menu_activated) (NautilusArrowToolButton *b);
+};
+
+GType nautilus_arrow_toolbutton_get_type (void);
+
+GtkMenuShell *nautilus_arrow_toolbutton_get_menu (NautilusArrowToolButton *b);
+
+G_END_DECLS;
+
+#endif /* NAUTILUS_ARROW_TOOLBUTTON_H */
diff --git a/src/nautilus-desktop-window.c b/src/nautilus-desktop-window.c
index 99709f4d2..9799a821e 100644
--- a/src/nautilus-desktop-window.c
+++ b/src/nautilus-desktop-window.c
@@ -34,7 +34,6 @@
#include <libgnome/gnome-macros.h>
#include <libgnomevfs/gnome-vfs-utils.h>
#include <libnautilus-private/nautilus-file-utilities.h>
-#include <libnautilus-private/nautilus-bonobo-extensions.h>
#define STATUS_BAR_PATH "/status"
#define MENU_BAR_PATH "/menu"
@@ -63,6 +62,9 @@ nautilus_desktop_window_instance_init (NautilusDesktopWindow *window)
g_object_set_data (G_OBJECT (window), "is_desktop_window",
GINT_TO_POINTER (1));
+
+ gtk_widget_hide (NAUTILUS_WINDOW (window)->details->statusbar);
+ gtk_widget_hide (NAUTILUS_WINDOW (window)->details->menubar);
}
static gint
@@ -360,17 +362,6 @@ real_get_title (NautilusWindow *window)
}
static void
-real_merge_menus (NautilusWindow *window)
-{
- EEL_CALL_PARENT (NAUTILUS_WINDOW_CLASS, merge_menus, (window));
-
- nautilus_bonobo_set_hidden (window->details->shell_ui,
- STATUS_BAR_PATH, TRUE);
- nautilus_bonobo_set_hidden (window->details->shell_ui,
- MENU_BAR_PATH, TRUE);
-}
-
-static void
nautilus_desktop_window_class_init (NautilusDesktopWindowClass *class)
{
G_OBJECT_CLASS (class)->finalize = finalize;
@@ -384,8 +375,6 @@ nautilus_desktop_window_class_init (NautilusDesktopWindowClass *class)
NAUTILUS_WINDOW_CLASS (class)->add_current_location_to_history_list
= real_add_current_location_to_history_list;
- NAUTILUS_WINDOW_CLASS (class)->merge_menus
- = real_merge_menus;
NAUTILUS_WINDOW_CLASS (class)->get_title
= real_get_title;
}
diff --git a/src/nautilus-history-sidebar.c b/src/nautilus-history-sidebar.c
index 88cd73555..52351b002 100644
--- a/src/nautilus-history-sidebar.c
+++ b/src/nautilus-history-sidebar.c
@@ -27,7 +27,6 @@
#include <config.h>
-#include <bonobo/bonobo-ui-util.h>
#include <eel/eel-debug.h>
#include <eel/eel-gtk-extensions.h>
#include <eel/eel-glib-extensions.h>
diff --git a/src/nautilus-information-panel.c b/src/nautilus-information-panel.c
index 89d68ab36..0dbc59857 100644
--- a/src/nautilus-information-panel.c
+++ b/src/nautilus-information-panel.c
@@ -28,10 +28,6 @@
#include "nautilus-sidebar-title.h"
-#include <bonobo/bonobo-property-bag-client.h>
-#include <bonobo/bonobo-ui-util.h>
-#include <bonobo/bonobo-exception.h>
-
#include <eel/eel-background.h>
#include <eel/eel-glib-extensions.h>
#include <eel/eel-gtk-extensions.h>
diff --git a/src/nautilus-main.c b/src/nautilus-main.c
index 4dc524e9e..0545a46e1 100644
--- a/src/nautilus-main.c
+++ b/src/nautilus-main.c
@@ -36,7 +36,6 @@
#include "nautilus-window.h"
#include <bonobo-activation/bonobo-activation.h>
#include <bonobo/bonobo-main.h>
-#include <bonobo/bonobo-ui-main.h>
#include <dlfcn.h>
#include <eel/eel-debug.h>
#include <eel/eel-glib-extensions.h>
@@ -345,7 +344,6 @@ main (int argc, char *argv[])
}
eel_debug_shut_down ();
- bonobo_ui_debug_shutdown ();
/* If told to restart, exec() myself again. This is used when
* the program is told to restart with CORBA, for example when
diff --git a/src/nautilus-navigation-window-menus.c b/src/nautilus-navigation-window-menus.c
index bbbf64123..2b6327825 100644
--- a/src/nautilus-navigation-window-menus.c
+++ b/src/nautilus-navigation-window-menus.c
@@ -29,6 +29,8 @@
#include <locale.h>
+#include "nautilus-actions.h"
+#include "nautilus-navigation-action.h"
#include "nautilus-application.h"
#include "nautilus-bookmark-list.h"
#include "nautilus-bookmark-parsing.h"
@@ -38,7 +40,6 @@
#include "nautilus-signaller.h"
#include "nautilus-window-manage-views.h"
#include "nautilus-window-private.h"
-#include <bonobo/bonobo-ui-util.h>
#include <eel/eel-debug.h>
#include <eel/eel-glib-extensions.h>
#include <eel/eel-gnome-extensions.h>
@@ -57,71 +58,43 @@
#include <libgnomevfs/gnome-vfs-file-info.h>
#include <libgnomevfs/gnome-vfs-utils.h>
#include <libgnomevfs/gnome-vfs-ops.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-undo-manager.h>
-#include <libnautilus-private/nautilus-bonobo-ui.h>
-#ifdef ENABLE_PROFILER
-#include "nautilus-profiler.h"
-#endif
-
-#define STATIC_BOOKMARKS_FILE_NAME "static_bookmarks.xml"
-
-/* Private menu definitions; others are in <libnautilus-private/nautilus-bonobo-ui.h>.
- * These are not part of the published set, either because they are
- * development-only or because we expect to change them and
- * don't want other code relying on their existence.
- */
-
-#define MENU_PATH_SHOW_HIDE_SIDEBAR "/menu/View/Show Hide Placeholder/Show Hide Sidebar"
-#define MENU_PATH_SHOW_HIDE_LOCATION_BAR "/menu/View/Show Hide Placeholder/Show Hide Location Bar"
-
-#define MENU_PATH_HISTORY_PLACEHOLDER "/menu/Go/History Placeholder"
-#define MENU_PATH_BUILT_IN_BOOKMARKS_PLACEHOLDER "/menu/Bookmarks/Built-in Bookmarks Placeholder"
-#define MENU_PATH_BOOKMARKS_PLACEHOLDER "/menu/Bookmarks/Bookmarks Placeholder"
-
-#define COMMAND_SHOW_HIDE_SIDEBAR "/commands/Show Hide Sidebar"
-#define COMMAND_SHOW_HIDE_LOCATION_BAR "/commands/Show Hide Location Bar"
-#define COMMAND_SHOW_HIDE_STATUS_BAR "/commands/Show Hide Statusbar"
-
-#define ID_SHOW_HIDE_SIDEBAR "Show Hide Sidebar"
-#define ID_SHOW_HIDE_LOCATION_BAR "Show Hide Location Bar"
+#define MENU_PATH_HISTORY_PLACEHOLDER "/MenuBar/Other Menus/Go/History Placeholder"
+#define MENU_PATH_BOOKMARKS_PLACEHOLDER "/MenuBar/Other Menus/Bookmarks/Bookmarks Placeholder"
#define RESPONSE_FORGET 1000
static GtkWindow *bookmarks_window = NULL;
static NautilusBookmarkList *bookmarks = NULL;
+static void schedule_refresh_go_menu (NautilusNavigationWindow *window);
static void append_dynamic_bookmarks (NautilusNavigationWindow *window);
-static NautilusBookmarkList *get_bookmark_list (void);
-static void refresh_bookmarks_menu (NautilusNavigationWindow *window);
static void schedule_refresh_bookmarks_menu (NautilusNavigationWindow *window);
-static void edit_bookmarks (NautilusNavigationWindow *window);
+static void refresh_bookmarks_menu (NautilusNavigationWindow *window);
static void add_bookmark_for_current_location (NautilusNavigationWindow *window);
-static void schedule_refresh_go_menu (NautilusWindow *window);
+static void edit_bookmarks (NautilusNavigationWindow *window);
+static NautilusBookmarkList *get_bookmark_list (void);
static void
-file_menu_close_all_windows_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_close_all_windows_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_application_close_all_navigation_windows ();
}
static void
-go_menu_back_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_back_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_navigation_window_go_back (NAUTILUS_NAVIGATION_WINDOW (user_data));
}
static void
-go_menu_forward_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_forward_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_navigation_window_go_forward (NAUTILUS_NAVIGATION_WINDOW (user_data));
}
@@ -175,30 +148,21 @@ forget_history_if_confirmed (NautilusWindow *window)
}
static void
-go_menu_forget_history_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_clear_history_callback (GtkAction *action,
+ gpointer user_data)
{
forget_history_if_confirmed (NAUTILUS_WINDOW (user_data));
}
static void
-view_menu_show_hide_sidebar_state_changed_callback (BonoboUIComponent *component,
- const char *path,
- Bonobo_UIComponent_EventType type,
- const char *state,
- gpointer user_data)
+action_show_hide_sidebar_callback (GtkAction *action,
+ gpointer user_data)
{
NautilusNavigationWindow *window;
window = NAUTILUS_NAVIGATION_WINDOW (user_data);
- if (strcmp (state, "") == 0) {
- /* State goes blank when component is removed; ignore this. */
- return;
- }
-
- if (!strcmp (state, "1")) {
+ if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
nautilus_navigation_window_show_sidebar (window);
} else {
nautilus_navigation_window_hide_sidebar (window);
@@ -206,78 +170,72 @@ view_menu_show_hide_sidebar_state_changed_callback (BonoboUIComponent *component
}
static void
-view_menu_show_hide_location_bar_state_changed_callback (BonoboUIComponent *component,
- const char *path,
- Bonobo_UIComponent_EventType type,
- const char *state,
- gpointer user_data)
+action_show_hide_location_bar_callback (GtkAction *action,
+ gpointer user_data)
{
NautilusNavigationWindow *window;
window = NAUTILUS_NAVIGATION_WINDOW (user_data);
- if (strcmp (state, "") == 0) {
- /* State goes blank when component is removed; ignore this. */
- return;
- }
-
- if (!strcmp (state, "1")) {
+ if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
nautilus_navigation_window_show_location_bar (window, TRUE);
} else {
nautilus_navigation_window_hide_location_bar (window, TRUE);
}
}
+static void
+action_show_hide_statusbar_callback (GtkAction *action,
+ gpointer user_data)
+{
+ NautilusNavigationWindow *window;
+
+ window = NAUTILUS_NAVIGATION_WINDOW (user_data);
+
+ if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
+ nautilus_navigation_window_show_status_bar (window);
+ } else {
+ nautilus_navigation_window_hide_status_bar (window);
+ }
+}
+
void
nautilus_navigation_window_update_show_hide_menu_items (NautilusNavigationWindow *window)
{
- g_assert (NAUTILUS_IS_NAVIGATION_WINDOW (window));
-
- nautilus_window_ui_freeze (NAUTILUS_WINDOW (window));
+ GtkAction *action;
- bonobo_ui_component_freeze (NAUTILUS_WINDOW (window)->details->shell_ui, NULL);
-
- nautilus_bonobo_set_toggle_state (NAUTILUS_WINDOW (window)->details->shell_ui,
- COMMAND_SHOW_HIDE_SIDEBAR,
- nautilus_navigation_window_sidebar_showing (window));
- nautilus_bonobo_set_toggle_state (NAUTILUS_WINDOW (window)->details->shell_ui,
- COMMAND_SHOW_HIDE_LOCATION_BAR,
- nautilus_navigation_window_location_bar_showing (window));
+ g_assert (NAUTILUS_IS_NAVIGATION_WINDOW (window));
- bonobo_ui_component_thaw (NAUTILUS_WINDOW (window)->details->shell_ui,
- NULL);
+ action = gtk_action_group_get_action (window->details->navigation_action_group,
+ NAUTILUS_ACTION_SHOW_HIDE_SIDEBAR);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ nautilus_navigation_window_sidebar_showing (window));
+
+ action = gtk_action_group_get_action (window->details->navigation_action_group,
+ NAUTILUS_ACTION_SHOW_HIDE_LOCATION_BAR);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ nautilus_navigation_window_location_bar_showing (window));
- nautilus_window_ui_thaw (NAUTILUS_WINDOW (window));
+ action = gtk_action_group_get_action (window->details->navigation_action_group,
+ NAUTILUS_ACTION_SHOW_HIDE_STATUSBAR);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ nautilus_navigation_window_status_bar_showing (window));
}
static void
-bookmarks_menu_add_bookmark_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_add_bookmark_callback (GtkAction *action,
+ gpointer user_data)
{
add_bookmark_for_current_location (NAUTILUS_NAVIGATION_WINDOW (user_data));
}
static void
-bookmarks_menu_edit_bookmarks_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_edit_bookmarks_callback (GtkAction *action,
+ gpointer user_data)
{
edit_bookmarks (NAUTILUS_NAVIGATION_WINDOW (user_data));
}
-
-static void
-append_separator (NautilusNavigationWindow *window, const char *path)
-{
- nautilus_window_ui_freeze (NAUTILUS_WINDOW (window));
-
- nautilus_bonobo_add_menu_separator
- (NAUTILUS_WINDOW (window)->details->shell_ui, path);
-
- nautilus_window_ui_thaw (NAUTILUS_WINDOW (window));
-}
-
static void
free_bookmark_list (void)
{
@@ -347,63 +305,6 @@ show_bogus_bookmark_window (NautilusWindow *window,
g_free (detail);
}
-static void
-create_menu_item_from_node (NautilusNavigationWindow *window,
- xmlNodePtr node,
- const char *menu_path,
- int *index)
-{
- NautilusBookmark *bookmark;
- xmlChar *xml_folder_name;
- int sub_index;
- char *sub_menu_path, *escaped_name;
-
- g_assert (NAUTILUS_IS_NAVIGATION_WINDOW (window));
-
- if (node->type != XML_ELEMENT_NODE) {
- return;
- }
-
- nautilus_window_ui_freeze (NAUTILUS_WINDOW (window));
-
- if (strcmp (node->name, "bookmark") == 0) {
- bookmark = nautilus_bookmark_new_from_node (node);
- nautilus_menus_append_bookmark_to_menu
- (NAUTILUS_WINDOW (window),
- NAUTILUS_WINDOW (window)->details->shell_ui,
- bookmark,
- menu_path,
- *index,
- G_CALLBACK (schedule_refresh_bookmarks_menu),
- show_bogus_bookmark_window);
- g_object_unref (bookmark);
- } else if (strcmp (node->name, "separator") == 0) {
- append_separator (window, menu_path);
- } else if (strcmp (node->name, "folder") == 0) {
- xml_folder_name = eel_xml_get_property_translated (node, "name");
- nautilus_bonobo_add_submenu (NAUTILUS_WINDOW (window)->details->shell_ui, menu_path, xml_folder_name, NULL);
-
- /* Construct path and make sure it is escaped properly */
- escaped_name = gnome_vfs_escape_string (xml_folder_name);
- sub_menu_path = g_strdup_printf ("%s/%s", menu_path, escaped_name);
- g_free (escaped_name);
-
- for (node = eel_xml_get_children (node), sub_index = 0;
- node != NULL;
- node = node->next) {
- create_menu_item_from_node (window, node, sub_menu_path, &sub_index);
- }
- g_free (sub_menu_path);
- xmlFree (xml_folder_name);
- } else {
- g_warning ("found unknown node '%s', ignoring", node->name);
- }
-
- (*index)++;
-
- nautilus_window_ui_thaw (NAUTILUS_WINDOW (window));
-}
-
static GtkWindow *
get_or_create_bookmarks_window (GObject *undo_manager_source)
{
@@ -462,16 +363,8 @@ refresh_bookmarks_menu (NautilusNavigationWindow *window)
/* Unregister any pending call to this function. */
nautilus_navigation_window_remove_bookmarks_menu_callback (window);
- g_object_ref (G_OBJECT (window));
- bonobo_ui_component_freeze
- (NAUTILUS_WINDOW (window)->details->shell_ui, NULL);
-
nautilus_navigation_window_remove_bookmarks_menu_items (window);
-
append_dynamic_bookmarks (window);
-
- bonobo_ui_component_thaw (NAUTILUS_WINDOW (window)->details->shell_ui, NULL);
- g_object_unref (G_OBJECT (window));
}
/**
@@ -500,7 +393,7 @@ nautilus_navigation_window_initialize_bookmarks_menu (NautilusNavigationWindow *
}
void
-nautilus_window_remove_go_menu_callback (NautilusWindow *window)
+nautilus_navigation_window_remove_go_menu_callback (NautilusNavigationWindow *window)
{
if (window->details->refresh_go_menu_idle_id != 0) {
g_source_remove (window->details->refresh_go_menu_idle_id);
@@ -509,15 +402,21 @@ nautilus_window_remove_go_menu_callback (NautilusWindow *window)
}
void
-nautilus_window_remove_go_menu_items (NautilusWindow *window)
+nautilus_navigation_window_remove_go_menu_items (NautilusNavigationWindow *window)
{
- nautilus_window_ui_freeze (window);
-
- nautilus_bonobo_remove_menu_items_and_commands
- (window->details->shell_ui,
- MENU_PATH_HISTORY_PLACEHOLDER);
-
- nautilus_window_ui_thaw (window);
+ GtkUIManager *ui_manager;
+
+ ui_manager = nautilus_window_get_ui_manager (NAUTILUS_WINDOW (window));
+ if (window->details->go_menu_merge_id != 0) {
+ gtk_ui_manager_remove_ui (ui_manager,
+ window->details->go_menu_merge_id);
+ window->details->go_menu_merge_id = 0;
+ }
+ if (window->details->go_menu_action_group != NULL) {
+ gtk_ui_manager_remove_action_group (ui_manager,
+ window->details->go_menu_action_group);
+ window->details->go_menu_action_group = NULL;
+ }
}
/**
@@ -527,53 +426,61 @@ nautilus_window_remove_go_menu_items (NautilusWindow *window)
* @window: The NautilusWindow whose Go menu will be refreshed.
**/
static void
-refresh_go_menu (NautilusWindow *window)
+refresh_go_menu (NautilusNavigationWindow *window)
{
+ GtkUIManager *ui_manager;
GList *node;
int index;
- g_assert (NAUTILUS_IS_WINDOW (window));
+ g_assert (NAUTILUS_IS_NAVIGATION_WINDOW (window));
/* Unregister any pending call to this function. */
- nautilus_window_remove_go_menu_callback (window);
-
- bonobo_ui_component_freeze (window->details->shell_ui, NULL);
+ nautilus_navigation_window_remove_go_menu_callback (window);
/* Remove old set of history items. */
- nautilus_window_remove_go_menu_items (window);
+ nautilus_navigation_window_remove_go_menu_items (window);
+ ui_manager = nautilus_window_get_ui_manager (NAUTILUS_WINDOW (window));
+
+ window->details->go_menu_merge_id = gtk_ui_manager_new_merge_id (ui_manager);
+ window->details->go_menu_action_group = gtk_action_group_new ("GoMenuGroup");
+
+ gtk_ui_manager_insert_action_group (ui_manager,
+ window->details->go_menu_action_group,
+ -1);
+
+
/* Add in a new set of history items. */
for (node = nautilus_get_history_list (), index = 0;
node != NULL && index < 10;
node = node->next, index++) {
nautilus_menus_append_bookmark_to_menu
- (window,
- window->details->shell_ui,
+ (NAUTILUS_WINDOW (window),
NAUTILUS_BOOKMARK (node->data),
MENU_PATH_HISTORY_PLACEHOLDER,
index,
+ window->details->go_menu_action_group,
+ window->details->go_menu_merge_id,
G_CALLBACK (schedule_refresh_go_menu),
show_bogus_bookmark_window);
}
-
- bonobo_ui_component_thaw (window->details->shell_ui, NULL);
}
static gboolean
refresh_go_menu_idle_callback (gpointer data)
{
- g_assert (NAUTILUS_IS_WINDOW (data));
+ g_assert (NAUTILUS_IS_NAVIGATION_WINDOW (data));
- refresh_go_menu (NAUTILUS_WINDOW (data));
+ refresh_go_menu (NAUTILUS_NAVIGATION_WINDOW (data));
/* Don't call this again (unless rescheduled) */
return FALSE;
}
static void
-schedule_refresh_go_menu (NautilusWindow *window)
+schedule_refresh_go_menu (NautilusNavigationWindow *window)
{
- g_assert (NAUTILUS_IS_WINDOW (window));
+ g_assert (NAUTILUS_IS_NAVIGATION_WINDOW (window));
if (window->details->refresh_go_menu_idle_id == 0) {
window->details->refresh_go_menu_idle_id
@@ -599,6 +506,128 @@ nautilus_navigation_window_initialize_go_menu (NautilusNavigationWindow *window)
G_CALLBACK (schedule_refresh_go_menu), window, G_CONNECT_SWAPPED);
}
+static void
+action_new_window_callback (GtkAction *action,
+ gpointer user_data)
+{
+ NautilusWindow *current_window;
+ NautilusWindow *new_window;
+
+ current_window = NAUTILUS_WINDOW (user_data);
+ new_window = nautilus_application_create_navigation_window (
+ current_window->application,
+ gtk_window_get_screen (GTK_WINDOW (current_window)));
+ nautilus_window_go_home (new_window);
+}
+
+static void
+action_go_to_location_callback (GtkAction *action,
+ gpointer user_data)
+{
+ NautilusWindow *window;
+
+ window = NAUTILUS_WINDOW (user_data);
+
+ nautilus_window_prompt_for_location (window);
+}
+
+static GtkActionEntry navigation_entries[] = {
+ { "Go", NULL, N_("_Go") }, /* name, stock id, label */
+ { "Bookmarks", NULL, N_("_Bookmarks") }, /* name, stock id, label */
+ { "New Window", NULL, N_("Open New _Window"), /* name, stock id, label */
+ "<control>L", N_("Open another Nautilus window for the displayed location"),
+ G_CALLBACK (action_new_window_callback) },
+ { "Close All Windows", NULL, N_("Close _All Windows"), /* name, stock id, label */
+ "<control><shift>W", N_("Close all Navigation windows"),
+ G_CALLBACK (action_close_all_windows_callback) },
+ { "Go to Location", NULL, N_("_Location..."), /* name, stock id, label */
+ "<control>L", N_("Specify a location to open"),
+ G_CALLBACK (action_go_to_location_callback) },
+ { "Clear History", NULL, N_("_Clear History"), /* name, stock id, label */
+ NULL, N_("Clear contents of Go menu and Back/Forward lists"),
+ G_CALLBACK (action_clear_history_callback) },
+ { "Add Bookmark", GTK_STOCK_ADD, N_("_Add Bookmark"), /* name, stock id, label */
+ "<control>d", N_("Add a bookmark for the current location to this menu"),
+ G_CALLBACK (action_add_bookmark_callback) },
+ { "Edit Bookmarks", NULL, N_("_Edit Bookmarks"), /* name, stock id, label */
+ "<control>b", N_("Display a window that allows editing the bookmarks in this menu"),
+ G_CALLBACK (action_edit_bookmarks_callback) },
+};
+
+static GtkToggleActionEntry navigation_toggle_entries[] = {
+ { "Show Hide Sidebar", NULL, /* name, stock id */
+ N_("_Side Pane"), "F9", /* label, accelerator */
+ N_("Change the visibility of this window's sidebar"), /* tooltip */
+ G_CALLBACK (action_show_hide_sidebar_callback),
+ TRUE}, /* is_active */
+ { "Show Hide Location Bar", NULL, /* name, stock id */
+ N_("Location _Bar"), NULL, /* label, accelerator */
+ N_("Change the visibility of this window's location bar"), /* tooltip */
+ G_CALLBACK (action_show_hide_location_bar_callback),
+ TRUE }, /* is_active */
+ { "Show Hide Statusbar", NULL, /* name, stock id */
+ N_("St_atusbar"), NULL, /* label, accelerator */
+ N_("Change the visibility of this window's statusbar"), /* tooltip */
+ G_CALLBACK (action_show_hide_statusbar_callback),
+ TRUE }, /* is_active */
+};
+
+void
+nautilus_navigation_window_initialize_actions (NautilusNavigationWindow *window)
+{
+ GtkActionGroup *action_group;
+ GtkUIManager *ui_manager;
+ GtkAction *action;
+
+ action_group = gtk_action_group_new ("NavigationActions");
+ gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
+ window->details->navigation_action_group = action_group;
+ gtk_action_group_add_actions (action_group,
+ navigation_entries, G_N_ELEMENTS (navigation_entries),
+ window);
+ gtk_action_group_add_toggle_actions (action_group,
+ navigation_toggle_entries, G_N_ELEMENTS (navigation_toggle_entries),
+ window);
+
+ action = g_object_new (NAUTILUS_TYPE_NAVIGATION_ACTION,
+ "name", "Back",
+ "label", _("_Back"),
+ "stock_id", GTK_STOCK_GO_BACK,
+ "tooltip", _("Go to the previous visited location"),
+ "window", window,
+ "direction", NAUTILUS_NAVIGATION_DIRECTION_BACK,
+ "is_important", TRUE,
+ NULL);
+ g_signal_connect (action, "activate",
+ G_CALLBACK (action_back_callback), window);
+ gtk_action_group_add_action_with_accel (action_group,
+ action,
+ "<alt>Left");
+ g_object_unref (action);
+
+ action = g_object_new (NAUTILUS_TYPE_NAVIGATION_ACTION,
+ "name", "Forward",
+ "label", _("_Forward"),
+ "stock_id", GTK_STOCK_GO_FORWARD,
+ "tooltip", _("Go to the next visited location"),
+ "window", window,
+ "direction", NAUTILUS_NAVIGATION_DIRECTION_FORWARD,
+ "is_important", TRUE,
+ NULL);
+ g_signal_connect (action, "activate",
+ G_CALLBACK (action_forward_callback), window);
+ gtk_action_group_add_action_with_accel (action_group,
+ action,
+ "<alt>Right");
+ g_object_unref (action);
+
+ ui_manager = nautilus_window_get_ui_manager (NAUTILUS_WINDOW (window));
+
+ gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
+ g_object_unref (action_group); /* owned by ui_manager */
+}
+
+
/**
* nautilus_window_initialize_menus
*
@@ -606,56 +635,27 @@ nautilus_navigation_window_initialize_go_menu (NautilusNavigationWindow *window)
* @window: A recently-created NautilusWindow.
*/
void
-nautilus_navigation_window_initialize_menus_part_1 (NautilusNavigationWindow *navigation_window)
+nautilus_navigation_window_initialize_menus (NautilusNavigationWindow *window)
{
- NautilusWindow *window;
- BonoboUIVerb verbs [] = {
- BONOBO_UI_VERB ("Close All Windows", file_menu_close_all_windows_callback),
- BONOBO_UI_VERB ("Back", go_menu_back_callback),
- BONOBO_UI_VERB ("Forward", go_menu_forward_callback),
- BONOBO_UI_VERB ("Clear History", go_menu_forget_history_callback),
- BONOBO_UI_VERB ("Add Bookmark", bookmarks_menu_add_bookmark_callback),
- BONOBO_UI_VERB ("Edit Bookmarks", bookmarks_menu_edit_bookmarks_callback),
-
- BONOBO_UI_VERB_END
- };
-
- window = NAUTILUS_WINDOW (navigation_window);
-
- nautilus_window_ui_freeze (window);
-
- bonobo_ui_component_freeze (window->details->shell_ui, NULL);
-
- nautilus_navigation_window_update_show_hide_menu_items (navigation_window);
-
- bonobo_ui_component_add_verb_list_with_data (window->details->shell_ui,
- verbs, window);
-
- bonobo_ui_component_add_listener
- (window->details->shell_ui,
- ID_SHOW_HIDE_SIDEBAR,
- view_menu_show_hide_sidebar_state_changed_callback,
- window);
- bonobo_ui_component_add_listener
- (window->details->shell_ui,
- ID_SHOW_HIDE_LOCATION_BAR,
- view_menu_show_hide_location_bar_state_changed_callback,
- window);
-
- bonobo_ui_component_thaw (window->details->shell_ui, NULL);
+ GtkUIManager *ui_manager;
+ GError *error;
+ char *file;
+
+ ui_manager = nautilus_window_get_ui_manager (NAUTILUS_WINDOW (window));
- nautilus_window_ui_thaw (window);
-}
+ error = NULL;
+ file = nautilus_ui_file ("nautilus-navigation-window-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);
+ }
+ g_free (file);
-void
-nautilus_navigation_window_initialize_menus_part_2 (NautilusNavigationWindow *window)
-{
- nautilus_window_ui_freeze (NAUTILUS_WINDOW (window));
+ nautilus_navigation_window_update_show_hide_menu_items (window);
nautilus_navigation_window_initialize_go_menu (window);
nautilus_navigation_window_initialize_bookmarks_menu (window);
- nautilus_window_ui_thaw (NAUTILUS_WINDOW (window));
}
void
@@ -670,16 +670,19 @@ nautilus_navigation_window_remove_bookmarks_menu_callback (NautilusNavigationWin
void
nautilus_navigation_window_remove_bookmarks_menu_items (NautilusNavigationWindow *window)
{
- nautilus_window_ui_freeze (NAUTILUS_WINDOW (window));
-
- nautilus_bonobo_remove_menu_items_and_commands
- (NAUTILUS_WINDOW (window)->details->shell_ui,
- MENU_PATH_BUILT_IN_BOOKMARKS_PLACEHOLDER);
- nautilus_bonobo_remove_menu_items_and_commands
- (NAUTILUS_WINDOW (window)->details->shell_ui,
- MENU_PATH_BOOKMARKS_PLACEHOLDER);
-
- nautilus_window_ui_thaw (NAUTILUS_WINDOW (window));
+ GtkUIManager *ui_manager;
+
+ ui_manager = nautilus_window_get_ui_manager (NAUTILUS_WINDOW (window));
+ if (window->details->bookmarks_merge_id != 0) {
+ gtk_ui_manager_remove_ui (ui_manager,
+ window->details->bookmarks_merge_id);
+ window->details->bookmarks_merge_id = 0;
+ }
+ if (window->details->bookmarks_action_group != NULL) {
+ gtk_ui_manager_remove_action_group (ui_manager,
+ window->details->bookmarks_action_group);
+ window->details->bookmarks_action_group = NULL;
+ }
}
static void
@@ -688,20 +691,33 @@ append_dynamic_bookmarks (NautilusNavigationWindow *window)
NautilusBookmarkList *bookmarks;
guint bookmark_count;
guint index;
-
+ GtkUIManager *ui_manager;
+
g_assert (NAUTILUS_IS_NAVIGATION_WINDOW (window));
+ g_assert (window->details->bookmarks_merge_id == 0);
+ g_assert (window->details->bookmarks_action_group == NULL);
bookmarks = get_bookmark_list ();
+ ui_manager = nautilus_window_get_ui_manager (NAUTILUS_WINDOW (window));
+
+ window->details->bookmarks_merge_id = gtk_ui_manager_new_merge_id (ui_manager);
+ window->details->bookmarks_action_group = gtk_action_group_new ("BookmarksGroup");
+
+ gtk_ui_manager_insert_action_group (ui_manager,
+ window->details->bookmarks_action_group,
+ -1);
+
/* append new set of bookmarks */
bookmark_count = nautilus_bookmark_list_length (bookmarks);
for (index = 0; index < bookmark_count; ++index) {
nautilus_menus_append_bookmark_to_menu
(NAUTILUS_WINDOW (window),
- NAUTILUS_WINDOW (window)->details->shell_ui,
nautilus_bookmark_list_item_at (bookmarks, index),
MENU_PATH_BOOKMARKS_PLACEHOLDER,
index,
+ window->details->bookmarks_action_group,
+ window->details->bookmarks_merge_id,
G_CALLBACK (schedule_refresh_bookmarks_menu),
show_bogus_bookmark_window);
}
@@ -729,3 +745,5 @@ schedule_refresh_bookmarks_menu (NautilusNavigationWindow *window)
window);
}
}
+
+
diff --git a/src/nautilus-navigation-window-ui.xml b/src/nautilus-navigation-window-ui.xml
index 2de31422d..5828dc738 100644
--- a/src/nautilus-navigation-window-ui.xml
+++ b/src/nautilus-navigation-window-ui.xml
@@ -1,179 +1,105 @@
-<Root>
+<ui>
-<!-- A description of each placeholder's purpose is in libnautilus/nautilus-bonobo-ui.h -->
-
-<commands>
- <!-- We define commands here for (at least) all the items
- for which we share tip or sensitivity state between more
- than one item (usually 1 menuitem and 1 toolitem.
- -->
-
+<!--
<cmd name="Back" accel="*Alt*Left"
_tip="Go to the previous visited location"/>
<cmd name="Forward" accel="*Alt*Right"
_tip="Go to the next visited location"/>
-</commands>
+-->
-<menu>
- <submenu name="File">
+<menubar name="MenuBar">
+ <menu action="File">
<placeholder name="New Items Placeholder">
<menuitem name="New Window"
- _label="Open New _Window"
- _tip="Open another Nautilus window for the displayed location"
- accel="*Control*N"
- verb="New Window"/>
+ action="New Window"/>
</placeholder>
- <placeholder name="Location Placeholder">
- <menuitem name="Connect to Server"
- _label="Connect to _Server..."
- verb="Connect to Server"/>
- </placeholder>
<placeholder name="Close Items Placeholder">
<menuitem name="Close All Windows"
- _label="Close _All Windows"
- _tip="Close all Navigation windows"
- accel="*Control**Shift*w"
- verb="Close All Windows"/>
+ action="Close All Windows"/>
</placeholder>
- </submenu>
- <submenu name="View" _label="_View">
- <placeholder name="Show Hide Placeholder" delimit="top">
+ </menu>
+ <menu action="View">
+ <placeholder name="Show Hide Placeholder">
<menuitem name="Show Hide Sidebar"
- type="toggle"
- _label="_Side Pane"
- _tip="Change the visibility of this window's sidebar"
- accel="F9"
- id="Show Hide Sidebar"/>
+ action="Show Hide Sidebar"/>
<menuitem name="Show Hide Location Bar"
- type="toggle"
- _label="Location _Bar"
- _tip="Change the visibility of this window's location bar"
- id="Show Hide Location Bar"/>
+ action="Show Hide Location Bar"/>
<menuitem name="Show Hide Statusbar"
- type="toggle"
- _label="St_atusbar"
- _tip="Change the visibility of this window's statusbar"
- id="Show Hide Statusbar"/>
+ action="Show Hide Statusbar"/>
</placeholder>
- </submenu>
-
- <submenu name="Go" _label="_Go">
- <placeholder name="Navigation Items">
- <menuitem name="Up"
- _label="_Up"
- accel="*Alt*Up"
- pixtype="stock" pixname="gtk-go-up"
- verb="Up"/>
- <menuitem name="Back"
- _label="_Back"
- pixtype="stock" pixname="gtk-go-back"
- verb="Back"/>
- <menuitem name="Forward"
- _label="_Forward"
- pixtype="stock" pixname="gtk-go-forward"
- verb="Forward"/>
- </placeholder>
- <separator/>
- <menuitem name="Home"
- _label="_Home"
- accel="*Alt*Home"
- pixtype="stock" pixname="gtk-home"
- verb="Home"/>
- <menuitem name="Computer"
- _label="_Computer"
- pixtype="stock" pixname="gnome-fs-client"
- verb="Go to Computer"/>
- <menuitem name="Go to Templates"
- _label="_Templates"
- _tip="Go to templates folder"
- verb="Go to Templates"/>
- <menuitem name="Go to Trash"
- _label="_Trash"
- _tip="Go to the trash folder"
- verb="Go to Trash"/>
- <menuitem name="Go to Burn CD"
- _label="CD _Creator"
- _tip="Go to the CD/DVD Creator"
- verb="Go to Burn CD"/>
- <menuitem name="Go to Location"
- _label="_Location..."
- accel="*Control*l"
- verb="Go to Location"/>
+ </menu>
- <separator/>
+ <placeholder name="Other Menus">
+ <menu action="Go">
+ <placeholder name="Navigation Items">
+ <menuitem name="Up"
+ action="Up"/>
+ <menuitem name="Back"
+ action="Back"/>
+ <menuitem name="Forward"
+ action="Forward"/>
+ </placeholder>
+ <separator/>
+ <menuitem name="Home"
+ action="Home"/>
+ <menuitem name="Computer"
+ action="Go to Computer"/>
+ <menuitem name="Go to Templates"
+ action="Go to Templates"/>
+ <menuitem name="Go to Trash"
+ action="Go to Trash"/>
+ <menuitem name="Go to Burn CD"
+ action="Go to Burn CD"/>
+ <menuitem name="Go to Location"
+ action="Go to Location"/>
- <menuitem name="Clear History"
- _label="_Clear History"
- _tip="Clear contents of Go menu and Back/Forward lists"
- verb="Clear History"/>
+ <separator/>
- <placeholder name="History Placeholder" delimit="top"/>
- </submenu>
+ <menuitem name="Clear History"
+ action="Clear History"/>
+ <placeholder name="History Placeholder"/>
+ </menu>
- <submenu name="Bookmarks" _label="_Bookmarks">
- <menuitem name="Add Bookmark"
- _label="_Add Bookmark"
- _tip="Add a bookmark for the current location to this menu"
- accel="*Control*d"
- pixtype="stock" pixname="gtk-add"
- verb="Add Bookmark"/>
- <menuitem name="Edit Bookmarks"
- _label="_Edit Bookmarks"
- _tip="Display a window that allows editing the bookmarks in this menu"
- accel="*Control*b"
- verb="Edit Bookmarks"/>
+ <menu action="Bookmarks">
+ <menuitem name="Add Bookmark"
+ action="Add Bookmark"/>
+ <menuitem name="Edit Bookmark"
+ action="Edit Bookmarks"/>
- <placeholder name="Built-in Bookmarks Placeholder" delimit="top"/>
- <placeholder name="Bookmarks Placeholder" delimit="top"/>
- </submenu>
-</menu>
-
-<dockitem name="Location Bar" behavior="exclusive,never vertical">
- <control name="Wrapper" behavior="expandable"/>
-</dockitem>
+ <placeholder name="Bookmarks Placeholder"/>
+ </menu>
+ </placeholder>
+</menubar>
-<dockitem name="Toolbar" behavior="exclusive">
+<toolbar name="Toolbar">
<toolitem name="Back"
- _label="Back"
- priority="1"
- pixtype="stock" pixname="gtk-go-back"
- verb="Back"/>
- <control name="BackMenu"/>
+ action="Back"/>
+<!-- <control name="BackMenu"/> -->
<toolitem name="Forward"
- _label="Forward"
- pixtype="stock" pixname="gtk-go-forward"
- verb="Forward"/>
- <control name="ForwardMenu"/>
+ action="Forward"/>
+<!-- <control name="ForwardMenu"/> -->
+
<toolitem name="Up"
- _label="Up"
- pixtype="stock" pixname="gtk-go-up"
- verb="Up"/>
- <toolitem name="Stop" _label="Stop"
- pixtype="stock" pixname="gtk-stop"
- verb="Stop"/>
+ action="Up"/>
+ <toolitem name="Stop"
+ action="Stop"/>
<toolitem name="Reload"
- _label="Reload"
- pixtype="stock" pixname="gtk-refresh"
- verb="Reload"/>
+ action="Reload"/>
<separator/>
<toolitem name="Home"
- _label="Home"
- priority="1"
- pixtype="stock" pixname="gtk-home"
- verb="Home"/>
+ action="Home"/>
<toolitem name="Computer"
- _label="Computer"
- priority="1"
- pixtype="stock" pixname="gnome-fs-client"
- verb="Go to Computer"/>
+ action="Go to Computer"/>
- <placeholder name="Extra Buttons Placeholder" delimit="top">
+ <placeholder name="Extra Buttons Placeholder">
<placeholder name="Extension Actions"/>
</placeholder>
+<!--
<control name="SpaceWrapper" behavior="expandable"/>
<control name="ThrobberWrapper" behavior="pack-end"/>
-</dockitem>
-</Root>
+-->
+</toolbar>
+</ui>
diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c
index 40efce909..18551f3e6 100644
--- a/src/nautilus-navigation-window.c
+++ b/src/nautilus-navigation-window.c
@@ -31,6 +31,7 @@
#include <config.h>
#include "nautilus-window-private.h"
+#include "nautilus-actions.h"
#include "nautilus-application.h"
#include "nautilus-bookmarks-window.h"
#include "nautilus-main.h"
@@ -38,9 +39,6 @@
#include "nautilus-location-bar.h"
#include "nautilus-window-manage-views.h"
#include "nautilus-zoom-control.h"
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-property-bag-client.h>
-#include <bonobo/bonobo-ui-util.h>
#include <eel/eel-accessibility.h>
#include <eel/eel-debug.h>
#include <eel/eel-gdk-extensions.h>
@@ -65,7 +63,6 @@
#include <libgnomeui/gnome-window-icon.h>
#include <libgnomevfs/gnome-vfs-uri.h>
#include <libgnomevfs/gnome-vfs-utils.h>
-#include <libnautilus-private/nautilus-bonobo-extensions.h>
#include <libnautilus-private/nautilus-file-utilities.h>
#include <libnautilus-private/nautilus-file-attributes.h>
#include <libnautilus-private/nautilus-global-preferences.h>
@@ -77,7 +74,6 @@
#include <libnautilus-private/nautilus-sidebar.h>
#include <libnautilus-private/nautilus-theme.h>
#include <libnautilus-private/nautilus-view-factory.h>
-#include <libnautilus-private/nautilus-bonobo-ui.h>
#include <libnautilus-private/nautilus-clipboard.h>
#include <libnautilus-private/nautilus-undo.h>
#include <libnautilus-private/nautilus-module.h>
@@ -110,10 +106,14 @@ enum {
static int side_pane_width_auto_value = SIDE_PANE_MINIMUM_WIDTH;
-static void add_sidebar_panels (NautilusNavigationWindow *window);
-static void load_view_as_menu (NautilusWindow *window);
-static void side_panel_image_changed_callback (NautilusSidebar *side_panel,
- gpointer callback_data);
+static void add_sidebar_panels (NautilusNavigationWindow *window);
+static void load_view_as_menu (NautilusWindow *window);
+static void side_panel_image_changed_callback (NautilusSidebar *side_panel,
+ gpointer callback_data);
+static void navigation_bar_location_changed_callback (GtkWidget *widget,
+ const char *uri,
+ NautilusNavigationWindow *window);
+
GNOME_CLASS_BOILERPLATE (NautilusNavigationWindow, nautilus_navigation_window,
NautilusWindow, NAUTILUS_TYPE_WINDOW)
@@ -121,6 +121,11 @@ GNOME_CLASS_BOILERPLATE (NautilusNavigationWindow, nautilus_navigation_window,
static void
nautilus_navigation_window_instance_init (NautilusNavigationWindow *window)
{
+ GtkUIManager *ui_manager;
+ GtkWidget *toolbar;
+ GtkWidget *location_bar_box;
+ GtkWidget *view_as_menu_vbox;
+
window->details = g_new0 (NautilusNavigationWindowDetails, 1);
window->details->tooltips = gtk_tooltips_new ();
@@ -128,23 +133,89 @@ nautilus_navigation_window_instance_init (NautilusNavigationWindow *window)
gtk_object_sink (GTK_OBJECT (window->details->tooltips));
window->details->content_paned = nautilus_horizontal_splitter_new ();
+ gtk_table_attach (GTK_TABLE (NAUTILUS_WINDOW (window)->details->table),
+ window->details->content_paned,
+ /* X direction */ /* Y direction */
+ 0, 1, 3, 4,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
+ 0, 0);
gtk_widget_show (window->details->content_paned);
- bonobo_window_set_contents (BONOBO_WINDOW (window), window->details->content_paned);
-}
-static void
-file_menu_new_window_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
-{
- NautilusWindow *window = NAUTILUS_WINDOW (user_data);
+ nautilus_navigation_window_initialize_actions (window);
+ nautilus_navigation_window_initialize_menus (window);
+
+ ui_manager = nautilus_window_get_ui_manager (NAUTILUS_WINDOW (window));
+ toolbar = gtk_ui_manager_get_widget (ui_manager, "/Toolbar");
+ window->details->toolbar = toolbar;
+ gtk_table_attach (GTK_TABLE (NAUTILUS_WINDOW (window)->details->table),
+ toolbar,
+ /* X direction */ /* Y direction */
+ 0, 1, 1, 2,
+ GTK_EXPAND | GTK_FILL, 0,
+ 0, 0);
+ gtk_widget_show (toolbar);
+
+ nautilus_navigation_window_initialize_toolbars (window);
+
+ /* Set initial sensitivity of some buttons & menu items
+ * now that they're all created.
+ */
+ nautilus_navigation_window_allow_back (window, FALSE);
+ nautilus_navigation_window_allow_forward (window, FALSE);
+
+ /* set up location bar */
+ location_bar_box = gtk_hbox_new (FALSE, GNOME_PAD);
+ window->details->location_bar_box = location_bar_box;
+ gtk_container_set_border_width (GTK_CONTAINER (location_bar_box), GNOME_PAD_SMALL);
+
+ window->navigation_bar = nautilus_location_bar_new (window);
+ gtk_widget_show (GTK_WIDGET (window->navigation_bar));
+
+ g_signal_connect_object (window->navigation_bar, "location_changed",
+ G_CALLBACK (navigation_bar_location_changed_callback), window, 0);
- const gchar *uri = nautilus_window_get_location (window);
+ gtk_box_pack_start (GTK_BOX (location_bar_box), window->navigation_bar,
+ TRUE, TRUE, GNOME_PAD_SMALL);
- window = nautilus_application_create_navigation_window (window->application,
- gtk_window_get_screen (GTK_WINDOW (window)));
+ /* Option menu for content view types; it's empty here, filled in when a uri is set.
+ * Pack it into vbox so it doesn't grow vertically when location bar does.
+ */
+ view_as_menu_vbox = gtk_vbox_new (FALSE, GNOME_PAD_SMALL);
+ gtk_widget_show (view_as_menu_vbox);
+ gtk_box_pack_end (GTK_BOX (location_bar_box), view_as_menu_vbox, FALSE, FALSE, 0);
+
+ window->view_as_option_menu = gtk_option_menu_new ();
+ gtk_box_pack_end (GTK_BOX (view_as_menu_vbox), window->view_as_option_menu, TRUE, FALSE, 0);
+ gtk_widget_show (window->view_as_option_menu);
- nautilus_window_open_location (window, uri, FALSE);
+ /* Allocate the zoom control and place on the right next to the menu.
+ * It gets shown later, if the view-frame contains something zoomable.
+ */
+ window->zoom_control = nautilus_zoom_control_new ();
+ g_signal_connect_object (window->zoom_control, "zoom_in",
+ G_CALLBACK (nautilus_window_zoom_in),
+ window, G_CONNECT_SWAPPED);
+ g_signal_connect_object (window->zoom_control, "zoom_out",
+ G_CALLBACK (nautilus_window_zoom_out),
+ window, G_CONNECT_SWAPPED);
+ g_signal_connect_object (window->zoom_control, "zoom_to_level",
+ G_CALLBACK (nautilus_window_zoom_to_level),
+ window, G_CONNECT_SWAPPED);
+ g_signal_connect_object (window->zoom_control, "zoom_to_default",
+ G_CALLBACK (nautilus_window_zoom_to_default),
+ window, G_CONNECT_SWAPPED);
+ gtk_box_pack_end (GTK_BOX (location_bar_box), window->zoom_control, FALSE, FALSE, 0);
+
+ gtk_widget_show (location_bar_box);
+
+ gtk_table_attach (GTK_TABLE (NAUTILUS_WINDOW (window)->details->table),
+ location_bar_box,
+ /* X direction */ /* Y direction */
+ 0, 1, 2, 3,
+ GTK_EXPAND | GTK_FILL, 0,
+ 0, 0);
+
+
}
static void
@@ -315,11 +386,12 @@ nautilus_navigation_window_unrealize (GtkWidget *widget)
NautilusNavigationWindow *window;
window = NAUTILUS_NAVIGATION_WINDOW (widget);
-
+#ifdef BONOBO_DONE
if (window->details->throbber_property_bag != CORBA_OBJECT_NIL) {
bonobo_object_release_unref (window->details->throbber_property_bag, NULL);
window->details->throbber_property_bag = CORBA_OBJECT_NIL;
}
+#endif
GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
}
@@ -357,6 +429,7 @@ nautilus_navigation_window_finalize (GObject *object)
window = NAUTILUS_NAVIGATION_WINDOW (object);
nautilus_navigation_window_remove_bookmarks_menu_callback (window);
+ nautilus_navigation_window_remove_go_menu_callback (window);
nautilus_navigation_window_clear_back_list (window);
nautilus_navigation_window_clear_forward_list (window);
@@ -461,34 +534,23 @@ nautilus_navigation_window_go_home (NautilusNavigationWindow *window)
void
nautilus_navigation_window_allow_back (NautilusNavigationWindow *window, gboolean allow)
{
- nautilus_window_ui_freeze (NAUTILUS_WINDOW (window));
-
- nautilus_bonobo_set_sensitive (NAUTILUS_WINDOW (window)->details->shell_ui,
- NAUTILUS_COMMAND_BACK, allow);
- /* Have to handle non-standard Back button explicitly (it's
- * non-standard to support right-click menu).
- */
- gtk_widget_set_sensitive
- (GTK_WIDGET (window->details->back_button_item), allow);
+ GtkAction *action;
- nautilus_window_ui_thaw (NAUTILUS_WINDOW (window));
+ action = gtk_action_group_get_action (window->details->navigation_action_group,
+ NAUTILUS_ACTION_BACK);
+
+ gtk_action_set_sensitive (action, allow);
}
void
nautilus_navigation_window_allow_forward (NautilusNavigationWindow *window, gboolean allow)
{
- nautilus_window_ui_freeze (NAUTILUS_WINDOW (window));
-
- nautilus_bonobo_set_sensitive (NAUTILUS_WINDOW (window)->details->shell_ui,
- NAUTILUS_COMMAND_FORWARD, allow);
-
- /* Have to handle non-standard Forward button explicitly (it's
- * non-standard to support right-click menu).
- */
- gtk_widget_set_sensitive
- (GTK_WIDGET (window->details->forward_button_item), allow);
+ GtkAction *action;
- nautilus_window_ui_thaw (NAUTILUS_WINDOW (window));
+ action = gtk_action_group_get_action (window->details->navigation_action_group,
+ NAUTILUS_ACTION_FORWARD);
+
+ gtk_action_set_sensitive (action, allow);
}
static void
@@ -629,113 +691,6 @@ real_set_title (NautilusWindow *window, const char *title)
}
static void
-real_merge_menus (NautilusWindow *nautilus_window)
-{
- NautilusNavigationWindow *window;
- GtkWidget *location_bar_box;
- GtkWidget *view_as_menu_vbox;
- BonoboControl *location_bar_wrapper;
- BonoboUIVerb verbs [] = {
- BONOBO_UI_VERB ("New Window", file_menu_new_window_callback),
- BONOBO_UI_VERB_END
- };
-
- EEL_CALL_PARENT (NAUTILUS_WINDOW_CLASS,
- merge_menus, (nautilus_window));
-
- window = NAUTILUS_NAVIGATION_WINDOW (nautilus_window);
-
- bonobo_ui_util_set_ui (NAUTILUS_WINDOW (window)->details->shell_ui,
- DATADIR,
- "nautilus-navigation-window-ui.xml",
- "nautilus", NULL);
-
- bonobo_ui_component_freeze
- (NAUTILUS_WINDOW (window)->details->shell_ui, NULL);
-
- bonobo_ui_component_add_verb_list_with_data (nautilus_window->details->shell_ui,
- verbs, window);
-
- nautilus_navigation_window_initialize_menus_part_1 (window);
- nautilus_navigation_window_initialize_toolbars (window);
-
- /* Set initial sensitivity of some buttons & menu items
- * now that they're all created.
- */
- nautilus_navigation_window_allow_back (window, FALSE);
- nautilus_navigation_window_allow_forward (window, FALSE);
-
- /* set up location bar */
- location_bar_box = gtk_hbox_new (FALSE, GNOME_PAD);
- gtk_container_set_border_width (GTK_CONTAINER (location_bar_box), GNOME_PAD_SMALL);
-
- window->navigation_bar = nautilus_location_bar_new (window);
- gtk_widget_show (GTK_WIDGET (window->navigation_bar));
-
- g_signal_connect_object (window->navigation_bar, "location_changed",
- G_CALLBACK (navigation_bar_location_changed_callback), window, 0);
-
- gtk_box_pack_start (GTK_BOX (location_bar_box), window->navigation_bar,
- TRUE, TRUE, GNOME_PAD_SMALL);
-
- /* Option menu for content view types; it's empty here, filled in when a uri is set.
- * Pack it into vbox so it doesn't grow vertically when location bar does.
- */
- view_as_menu_vbox = gtk_vbox_new (FALSE, GNOME_PAD_SMALL);
- gtk_widget_show (view_as_menu_vbox);
- gtk_box_pack_end (GTK_BOX (location_bar_box), view_as_menu_vbox, FALSE, FALSE, 0);
-
- window->view_as_option_menu = gtk_option_menu_new ();
- gtk_box_pack_end (GTK_BOX (view_as_menu_vbox), window->view_as_option_menu, TRUE, FALSE, 0);
- gtk_widget_show (window->view_as_option_menu);
-
- /* Allocate the zoom control and place on the right next to the menu.
- * It gets shown later, if the view-frame contains something zoomable.
- */
- window->zoom_control = nautilus_zoom_control_new ();
- g_signal_connect_object (window->zoom_control, "zoom_in",
- G_CALLBACK (nautilus_window_zoom_in),
- window, G_CONNECT_SWAPPED);
- g_signal_connect_object (window->zoom_control, "zoom_out",
- G_CALLBACK (nautilus_window_zoom_out),
- window, G_CONNECT_SWAPPED);
- g_signal_connect_object (window->zoom_control, "zoom_to_level",
- G_CALLBACK (nautilus_window_zoom_to_level),
- window, G_CONNECT_SWAPPED);
- g_signal_connect_object (window->zoom_control, "zoom_to_default",
- G_CALLBACK (nautilus_window_zoom_to_default),
- window, G_CONNECT_SWAPPED);
- gtk_box_pack_end (GTK_BOX (location_bar_box), window->zoom_control, FALSE, FALSE, 0);
-
- gtk_widget_show (location_bar_box);
-
- /* Wrap the location bar in a control and set it up. */
- location_bar_wrapper = bonobo_control_new (location_bar_box);
- bonobo_ui_component_object_set (NAUTILUS_WINDOW (window)->details->shell_ui,
- "/Location Bar/Wrapper",
- BONOBO_OBJREF (location_bar_wrapper),
- NULL);
-
- bonobo_object_unref (location_bar_wrapper);
-
- bonobo_ui_component_thaw (NAUTILUS_WINDOW (window)->details->shell_ui,
- NULL);
-}
-
-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 (NautilusView *view,
NautilusNavigationWindow *window)
{
@@ -832,9 +787,7 @@ nautilus_navigation_window_show_location_bar_temporarily (NautilusNavigationWind
static void
real_prompt_for_location (NautilusWindow *window)
{
- if (!window->details->updating_bonobo_state) {
- nautilus_navigation_window_show_location_bar_temporarily (NAUTILUS_NAVIGATION_WINDOW (window), FALSE);
- }
+ nautilus_navigation_window_show_location_bar_temporarily (NAUTILUS_NAVIGATION_WINDOW (window), FALSE);
}
void
@@ -910,44 +863,12 @@ add_sidebar_panels (NautilusNavigationWindow *window)
NAUTILUS_SIDEBAR (current));
}
-static void
-show_dock_item (NautilusNavigationWindow *window, const char *dock_item_path)
-{
- nautilus_window_ui_freeze (NAUTILUS_WINDOW (window));
-
- nautilus_bonobo_set_hidden (NAUTILUS_WINDOW (window)->details->shell_ui,
- dock_item_path,
- FALSE);
- nautilus_navigation_window_update_show_hide_menu_items (window);
-
- nautilus_window_ui_thaw (NAUTILUS_WINDOW (window));
-}
-
-static void
-hide_dock_item (NautilusNavigationWindow *window, const char *dock_item_path)
-{
- nautilus_window_ui_freeze (NAUTILUS_WINDOW (window));
-
- nautilus_bonobo_set_hidden (NAUTILUS_WINDOW (window)->details->shell_ui,
- dock_item_path,
- TRUE);
- nautilus_navigation_window_update_show_hide_menu_items (window);
-
- nautilus_window_ui_thaw (NAUTILUS_WINDOW (window));
-}
-
-static gboolean
-dock_item_showing (NautilusNavigationWindow *window, const char *dock_item_path)
-{
- return !nautilus_bonobo_get_hidden (NAUTILUS_WINDOW (window)->details->shell_ui,
- dock_item_path);
-}
-
void
nautilus_navigation_window_hide_location_bar (NautilusNavigationWindow *window, gboolean save_preference)
{
window->details->temporary_navigation_bar = FALSE;
- hide_dock_item (window, LOCATION_BAR_PATH);
+ gtk_widget_hide (window->details->location_bar_box);
+ nautilus_navigation_window_update_show_hide_menu_items (window);
if (save_preference &&
eel_preferences_key_is_writable (NAUTILUS_PREFERENCES_START_WITH_LOCATION_BAR)) {
eel_preferences_set_boolean (NAUTILUS_PREFERENCES_START_WITH_LOCATION_BAR, FALSE);
@@ -957,7 +878,8 @@ nautilus_navigation_window_hide_location_bar (NautilusNavigationWindow *window,
void
nautilus_navigation_window_show_location_bar (NautilusNavigationWindow *window, gboolean save_preference)
{
- show_dock_item (window, LOCATION_BAR_PATH);
+ gtk_widget_show (window->details->location_bar_box);
+ nautilus_navigation_window_update_show_hide_menu_items (window);
if (save_preference &&
eel_preferences_key_is_writable (NAUTILUS_PREFERENCES_START_WITH_LOCATION_BAR)) {
eel_preferences_set_boolean (NAUTILUS_PREFERENCES_START_WITH_LOCATION_BAR, TRUE);
@@ -967,19 +889,61 @@ nautilus_navigation_window_show_location_bar (NautilusNavigationWindow *window,
gboolean
nautilus_navigation_window_location_bar_showing (NautilusNavigationWindow *window)
{
- return dock_item_showing (window, LOCATION_BAR_PATH);
+ if (window->details->location_bar_box != NULL) {
+ return GTK_WIDGET_VISIBLE (window->details->location_bar_box);
+ }
+ /* If we're not visible yet we haven't changed visibility, so its TRUE */
+ return TRUE;
}
gboolean
nautilus_navigation_window_toolbar_showing (NautilusNavigationWindow *window)
{
- return dock_item_showing (window, TOOLBAR_PATH);
+ if (window->details->toolbar != NULL) {
+ return GTK_WIDGET_VISIBLE (window->details->toolbar);
+ }
+ /* If we're not visible yet we haven't changed visibility, so its TRUE */
+ return TRUE;
+}
+
+void
+nautilus_navigation_window_hide_status_bar (NautilusNavigationWindow *window)
+{
+ gtk_widget_hide (NAUTILUS_WINDOW (window)->details->statusbar);
+
+ nautilus_navigation_window_update_show_hide_menu_items (window);
+ if (eel_preferences_key_is_writable (NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR) &&
+ eel_preferences_get_boolean (NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR)) {
+ eel_preferences_set_boolean (NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR, FALSE);
+ }
+}
+
+void
+nautilus_navigation_window_show_status_bar (NautilusNavigationWindow *window)
+{
+ gtk_widget_show (NAUTILUS_WINDOW (window)->details->statusbar);
+
+ nautilus_navigation_window_update_show_hide_menu_items (window);
+ if (eel_preferences_key_is_writable (NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR) &&
+ !eel_preferences_get_boolean (NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR)) {
+ eel_preferences_set_boolean (NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR, TRUE);
+ }
+}
+
+gboolean
+nautilus_navigation_window_status_bar_showing (NautilusNavigationWindow *window)
+{
+ if (NAUTILUS_WINDOW (window)->details->statusbar != NULL) {
+ return GTK_WIDGET_VISIBLE (NAUTILUS_WINDOW (window)->details->statusbar);
+ }
+ /* If we're not visible yet we haven't changed visibility, so its TRUE */
+ return TRUE;
}
void
nautilus_navigation_window_hide_sidebar (NautilusNavigationWindow *window)
{
- if (NAUTILUS_IS_DESKTOP_WINDOW (window) || window->sidebar == NULL) {
+ if (window->sidebar == NULL) {
return;
}
@@ -995,7 +959,7 @@ nautilus_navigation_window_hide_sidebar (NautilusNavigationWindow *window)
void
nautilus_navigation_window_show_sidebar (NautilusNavigationWindow *window)
{
- if (NAUTILUS_IS_DESKTOP_WINDOW (window) || window->sidebar != NULL) {
+ if (window->sidebar != NULL) {
return;
}
@@ -1073,9 +1037,9 @@ nautilus_navigation_window_show (GtkWidget *widget)
}
if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR)) {
- nautilus_window_show_status_bar (NAUTILUS_WINDOW (window));
+ nautilus_navigation_window_show_status_bar (window);
} else {
- nautilus_window_hide_status_bar (NAUTILUS_WINDOW (window));
+ nautilus_navigation_window_hide_status_bar (window);
}
GTK_WIDGET_CLASS (parent_class)->show (widget);
@@ -1132,8 +1096,6 @@ nautilus_navigation_window_class_init (NautilusNavigationWindowClass *class)
GTK_OBJECT_CLASS (class)->destroy = nautilus_navigation_window_destroy;
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-navigation-window.h b/src/nautilus-navigation-window.h
index b795660c8..9a822dd2f 100644
--- a/src/nautilus-navigation-window.h
+++ b/src/nautilus-navigation-window.h
@@ -102,5 +102,11 @@ void nautilus_navigation_window_add_sidebar_panel (NautilusNavigationWind
NautilusSidebar *sidebar_panel);
void nautilus_navigation_window_remove_sidebar_panel (NautilusNavigationWindow *window,
NautilusSidebar *sidebar_panel);
+void nautilus_navigation_window_hide_status_bar (NautilusNavigationWindow *window);
+void nautilus_navigation_window_show_status_bar (NautilusNavigationWindow *window);
+gboolean nautilus_navigation_window_status_bar_showing (NautilusNavigationWindow *window);
+void nautilus_navigation_window_back_or_forward (NautilusNavigationWindow *window,
+ gboolean back,
+ guint distance);
#endif
diff --git a/src/nautilus-notes-viewer.c b/src/nautilus-notes-viewer.c
index 2e08d5b40..191c58add 100644
--- a/src/nautilus-notes-viewer.c
+++ b/src/nautilus-notes-viewer.c
@@ -38,13 +38,12 @@
#include <gtk/gtktextview.h>
#include <gtk/gtkvbox.h>
#include <gtk/gtkscrolledwindow.h>
-#include <bonobo/bonobo-property-bag.h>
+#include <libgnome/gnome-i18n.h>
#include <libnautilus-private/nautilus-file-attributes.h>
#include <libnautilus-private/nautilus-file.h>
#include <libnautilus-private/nautilus-global-preferences.h>
#include <libnautilus-private/nautilus-metadata.h>
#include <libnautilus-private/nautilus-clipboard.h>
-#include <libnautilus-private/nautilus-bonobo-extensions.h>
#include <libnautilus-private/nautilus-theme.h>
#include <libnautilus-private/nautilus-module.h>
#include <libnautilus-private/nautilus-sidebar-provider.h>
diff --git a/src/nautilus-profiler.c b/src/nautilus-profiler.c
deleted file mode 100644
index 852667437..000000000
--- a/src/nautilus-profiler.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-
-/*
- * Nautilus
- *
- * Copyright (C) 2000 Eazel, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program 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
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ramiro Estrugo <ramiro@eazel.com>
- */
-
-/* nautilus-profiler.c: Nautilus profiler hooks and reporting.
- */
-
-#include <config.h>
-#include "nautilus-profiler.h"
-
-#ifdef ENABLE_PROFILER
-
-#include <eel/eel-gtk-extensions.h>
-#include <eel/eel-vfs-extensions.h>
-#include <glib.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtkscrolledwindow.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtktextbuffer.h>
-#include <gtk/gtktextview.h>
-#include <gtk/gtkvbox.h>
-#include <gtk/gtkvscrollbar.h>
-#include <gtk/gtkwindow.h>
-#include <libgnome/gnome-i18n.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-/* These are defined in eazel-tools/profiler/profiler.C */
-extern void profile_on (void);
-extern void profile_off (void);
-extern void profile_reset (void);
-extern void profile_dump (const char *file_name, gboolean);
-
-void
-nautilus_profiler_bonobo_ui_reset_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
-{
- profile_reset ();
-}
-
-void
-nautilus_profiler_bonobo_ui_start_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
-{
- profile_on ();
-}
-
-void
-nautilus_profiler_bonobo_ui_stop_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
-{
- profile_off ();
-}
-
-static void
-widget_set_busy_cursor (GtkWidget *widget)
-{
- GdkCursor *cursor;
-
- g_return_if_fail (GTK_IS_WIDGET (widget));
- g_return_if_fail (GTK_WIDGET_REALIZED (GTK_WIDGET (widget)));
-
- cursor = gdk_cursor_new (GDK_WATCH);
-
- gdk_window_set_cursor (GTK_WIDGET (widget)->window, cursor);
-
- gdk_flush ();
-
- gdk_cursor_unref (cursor);
-}
-
-static void
-widget_clear_busy_cursor (GtkWidget *widget)
-{
- g_return_if_fail (GTK_IS_WIDGET (widget));
- g_return_if_fail (GTK_WIDGET_REALIZED (GTK_WIDGET (widget)));
-
- gdk_window_set_cursor (GTK_WIDGET (widget)->window, NULL);
-
- gdk_flush ();
-}
-
-typedef struct
-{
- GtkWidget *main_box;
- GtkWidget *text;
- GtkTextBuffer *text_buffer;
-} ScrolledText;
-
-static ScrolledText *
-scrolled_text_new (void)
-{
- ScrolledText *scrolled_text;
- GtkWidget *scrolled_window;
-
- scrolled_text = g_new (ScrolledText, 1);
-
- scrolled_text->main_box = gtk_hbox_new (FALSE, 0);
- scrolled_text->text_buffer = gtk_text_buffer_new (NULL);
-
- gtk_text_buffer_create_tag (scrolled_text->text_buffer, "fixed_font",
- "family", "monospace",
- "wrap_mode", GTK_WRAP_NONE,
- NULL);
-
-
- scrolled_text->text = gtk_text_view_new_with_buffer (scrolled_text->text_buffer);
-
- scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_container_add (GTK_CONTAINER (scrolled_window),
- scrolled_text->text);
-
- gtk_box_pack_start (GTK_BOX (scrolled_text->main_box), scrolled_window, TRUE, TRUE, 0);
-
- gtk_widget_show_all (scrolled_window);
-
- return scrolled_text;
-}
-
-typedef struct
-{
- GtkWidget *window;
- ScrolledText *scrolled_text;
-} DumpDialog;
-
-static void
-window_delete_event (GtkWidget *widget, GdkEvent *event, gpointer callback_data)
-{
- g_return_if_fail (GTK_IS_WINDOW (widget));
-
- gtk_widget_hide (widget);
-}
-
-static void
-window_print_button_callback (GtkWidget *widget, gpointer callback_data)
-{
- DumpDialog *dump_dialog = (DumpDialog *) callback_data;
-
- g_return_if_fail (dump_dialog != NULL);
-
- /* Implement me */
- g_assert_not_reached ();
-}
-
-static void
-window_save_button_callback (GtkWidget *widget, gpointer callback_data)
-{
- DumpDialog *dump_dialog = (DumpDialog *) callback_data;
-
- g_return_if_fail (dump_dialog != NULL);
-
- /* Implement me */
- g_assert_not_reached ();
-}
-
-static DumpDialog *
-dump_dialog_new (const char *title)
-{
- DumpDialog *dump_dialog;
- GtkWidget *print_button;
- GtkWidget *save_button;
- GtkWidget *main_box;
- GtkWidget *button_box;
-
- dump_dialog = g_new (DumpDialog, 1);
-
- dump_dialog->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- eel_gtk_window_set_up_close_accelerator
- (GTK_WINDOW (dump_dialog->window));
- g_signal_connect (dump_dialog->window, "delete_event",
- G_CALLBACK (window_delete_event), dump_dialog->window);
-
- gtk_widget_set_size_request (dump_dialog->window, 700, 700);
-
- main_box = gtk_vbox_new (FALSE, 0);
- dump_dialog->scrolled_text = scrolled_text_new ();
- gtk_text_view_set_editable (GTK_TEXT_VIEW (dump_dialog->scrolled_text->text), FALSE);
-
- print_button = gtk_button_new_with_label (_("Print"));
- save_button = gtk_button_new_with_label (_("Save"));
-
- gtk_widget_set_sensitive (print_button, FALSE);
- gtk_widget_set_sensitive (save_button, FALSE);
-
- g_signal_connect_object (print_button, "clicked",
- G_CALLBACK (window_print_button_callback), dump_dialog, 0);
- g_signal_connect_object (save_button, "clicked",
- G_CALLBACK (window_save_button_callback), dump_dialog, 0);
-
- gtk_container_add (GTK_CONTAINER (dump_dialog->window), main_box);
-
- button_box = gtk_hbox_new (FALSE, 4);
- gtk_container_set_border_width (GTK_CONTAINER (button_box), 4);
-
- gtk_box_pack_start (GTK_BOX (main_box), dump_dialog->scrolled_text->main_box, TRUE, TRUE, 0);
- gtk_box_pack_end (GTK_BOX (main_box), button_box, FALSE, FALSE, 0);
-
- gtk_box_pack_end (GTK_BOX (button_box), print_button, FALSE, FALSE, 0);
- gtk_box_pack_end (GTK_BOX (button_box), save_button, FALSE, FALSE, 0);
-
- gtk_widget_show_all (dump_dialog->window);
-
- return dump_dialog;
-}
-
-static void
-dump_dialog_show (const char *dump_data, const char *title)
-{
- static DumpDialog *dump_dialog = NULL;
- GtkTextBuffer *buffer;
- GtkTextIter start_iter, end_iter;
-
- g_return_if_fail (dump_data != NULL);
-
- if (dump_dialog == NULL) {
- dump_dialog = dump_dialog_new (_("Profile Dump"));
- }
-
- buffer = dump_dialog->scrolled_text->text_buffer;
-
- /* delete existing text in buffer */
- gtk_text_buffer_get_bounds (buffer, &start_iter, &end_iter);
- gtk_text_buffer_delete (buffer, &start_iter, &end_iter);
-
- gtk_text_buffer_get_start_iter (buffer, &start_iter);
-
- gtk_text_buffer_insert_with_tags_by_name (buffer, &start_iter,
- dump_data, -1,
- "fixed_font",
- NULL);
-
- if (title != NULL) {
- gtk_window_set_title (GTK_WINDOW (dump_dialog->window), title);
- }
-
- gtk_widget_show (dump_dialog->window);
-}
-
-
-void
-nautilus_profiler_bonobo_ui_report_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *path)
-{
- char *dump_file_name;
- char *uri;
- int fd;
-
- int dump_size = 0;
- char *dump_contents = NULL;
-
- GtkWidget *window = NULL;
-
- g_return_if_fail (component != NULL);
- g_return_if_fail (GTK_IS_WINDOW (user_data));
-
- dump_file_name = g_strdup ("/tmp/nautilus-profile-log-XXXXXX");
-
- fd = mkstemp (dump_file_name);
-
- if (fd != -1) {
- close (fd);
- } else {
- g_free (dump_file_name);
- dump_file_name = g_strdup_printf ("/tmp/nautilus-profile-log.%d", getpid ());
- }
-
- window = GTK_WIDGET (user_data);
-
- widget_set_busy_cursor (window);
-
- profile_dump (dump_file_name, TRUE);
-
- uri = gnome_vfs_get_uri_from_local_path (dump_file_name);
-
- if (eel_read_entire_file (uri, &dump_size, &dump_contents) == GNOME_VFS_OK) {
- dump_dialog_show (dump_contents, uri);
- }
-
- widget_clear_busy_cursor (window);
-
- remove (dump_file_name);
-
- g_free (dump_file_name);
-}
-
-#endif
diff --git a/src/nautilus-profiler.h b/src/nautilus-profiler.h
deleted file mode 100644
index fd5384433..000000000
--- a/src/nautilus-profiler.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-
-/*
- * Nautilus
- *
- * Copyright (C) 2000 Eazel, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program 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
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ramiro Estrugo <ramiro@eazel.com>
- */
-
-/* nautilus-profiler.h: Nautilus profiler hooks and reporting. */
-
-#ifndef NAUTILUS_PROFILER_H
-#define NAUTILUS_PROFILER_H
-
-#include <libnautilus-private/nautilus-bonobo-extensions.h>
-
-void nautilus_profiler_bonobo_ui_reset_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb);
-void nautilus_profiler_bonobo_ui_start_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb);
-void nautilus_profiler_bonobo_ui_stop_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb);
-void nautilus_profiler_bonobo_ui_report_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb);
-
-#endif /* NAUTILUS_PROFILER_H */
diff --git a/src/nautilus-shell-ui.xml b/src/nautilus-shell-ui.xml
index bb58aa87e..f51524d23 100644
--- a/src/nautilus-shell-ui.xml
+++ b/src/nautilus-shell-ui.xml
@@ -1,232 +1,112 @@
-<Root>
-
-<!-- A description of each placeholder's purpose is in libnautilus/nautilus-bonobo-ui.h -->
-
-<commands>
- <!-- We define commands here for (at least) all the items
- for which we share tip or sensitivity state between more
- than one item (usually 1 menuitem and 1 toolitem.
- -->
- <cmd name="Up"
- _tip="Go up one level"/>
- <cmd name="Home"
- _tip="Go to the home location"/>
- <cmd name="Stop"
- _tip="Stop loading this location"/>
- <cmd name="Select All" accel="*Control*a" sensitive="0"/>
- <cmd name="Cut" accel="*Control*x" sensitive="0"/>
- <cmd name="Copy" accel="*Control*c" sensitive="0"/>
- <cmd name="Paste" accel="*Control*v" sensitive="0"/>
- <cmd name="Clear" sensitive="0"/>
- <cmd name="Reload"
- _tip="Display the latest contents of the current location"/>
- <cmd name="Go to Burn CD"
- _label="_CD/DVD Creator"
- _tip="Go to Empty CD folder"/>
- <cmd name="Zoom In" _label="Zoom _In"
- _tip="Show the contents in more detail"/>
- <cmd name="Zoom Out" _label="Zoom _Out"
- _tip="Show the contents in less detail"/>
- <cmd name="Zoom Normal" _label="Normal Si_ze"
- _tip="Show the contents at the normal size"/>
-</commands>
-
-<keybindings>
- <accel name="*Control*equal" verb="Zoom In"/>
- <accel name="*Control**Shift*plus" verb="Zoom In"/>
- <accel name="BackSpace" verb="Up"/>
- <accel name="*Control*r" verb="Reload"/>
-</keybindings>
+<ui>
+<!--
+<accelerator action="Zoom In"/>
+<accelerator action="Zoom In"/>
+<accelerator action="Up"/>
+<accelerator action="Reload"/>
+-->
-<menu>
- <submenu name="File" _label="_File">
+<menubar name="MenuBar">
+ <menu action="File">
- <placeholder name="New Items Placeholder" delimit="none">
+ <placeholder name="New Items Placeholder">
</placeholder>
-
- <placeholder name="Open Placeholder" delimit="top"/>
- <placeholder name="Location Placeholder" delimit="top"/>
-
- <placeholder name="General Status Placeholder" delimit="top"/>
- <placeholder name="File Items Placeholder" delimit="top"/>
- <placeholder name="Global File Items Placeholder" delimit="top"/>
- <placeholder name="Extension Actions" delimit="top"/>
+ <placeholder name="Open Placeholder"/>
+ <placeholder name="Location Placeholder"/>
+ <menuitem name="Connect to Server"
+ action="Connect to Server"/>
+ <placeholder name="General Status Placeholder"/>
+ <placeholder name="File Items Placeholder"/>
+ <placeholder name="Global File Items Placeholder"/>
+ <placeholder name="Extension Actions"/>
<separator/>
<placeholder name="Close Items Placeholder"/>
<menuitem name="Close"
- _label="_Close"
- _tip="Close this folder"
- accel="*Control*w"
- pixtype="stock" pixname="gtk-close"
- verb="Close"/>
- </submenu>
-
- <submenu name="Edit" _label="_Edit">
-
-<!-- FIXME bugzilla.gnome.org 43515
-
- Undo is disabled until we have a better implementation.
- Both here and in nautilus-undo-signal-handlers.c.
-
- <menuitem name="Undo"
- _label="_Undo"
- _tip="Undo the last text change"
- pixtype="stock" pixname="gtk-undo"
- accel="*Control*z"
- verb="Undo"/>
-
- <separator/>
+ action="Close"/>
+ </menu>
+
+ <menu action="Edit">
+<!-- BONOBOTODO: These should be in the dir-view?
+ <menuitem name="Cut" action="Cut"/>
+ <menuitem name="Copy" action ="Copy"/>
+ <menuitem name="Paste" action="Paste"/>
+ <menuitem name="Clear" action="Clear"/>
-->
- <menuitem name="Cut"
- _label="Cut _Text"
- pixtype="stock" pixname="gtk-cut"
- verb="Cut"/>
- <menuitem name="Copy"
- _label="_Copy Text"
- pixtype="stock" pixname="gtk-copy"
- verb="Copy"/>
- <menuitem name="Paste"
- _label="_Paste Text"
- pixtype="stock" pixname="gtk-paste"
- verb="Paste"/>
- <menuitem name="Clear"
- _label="C_lear Text"
- pixtype="stock" pixname="gtk-clear"
- verb="Clear"/>
-
<separator/>
<placeholder name="Select Items">
+<!-- BONOBOTODO: This should go in fm-directory-view?
<menuitem name="Select All"
- _label="Select _All"
- verb="Select All"/>
+ action="Select All"/>
+-->
</placeholder>
-
- <placeholder name="File Items Placeholder" delimit="top"/>
- <placeholder name="Dangerous File Items Placeholder" delimit="top"/>
- <placeholder name="Edit Items Placeholder" delimit="top"/>
- <placeholder name="Global Edit Items Placeholder" delimit="none"/>
+ <placeholder name="File Items Placeholder"/>
+ <placeholder name="Dangerous File Items Placeholder"/>
+ <placeholder name="Edit Items Placeholder"/>
+ <placeholder name="Global Edit Items Placeholder"/>
- <placeholder name="Extension Actions" delimit="top"/>
+ <placeholder name="Extension Actions"/>
<separator/>
+ <menuitem name="Backgrounds and Emblems" action="Backgrounds and Emblems"/>
+ <menuitem name="Preferences" action="Preferences"/>
+ </menu>
- <menuitem name="Backgrounds and Emblems"
- _label="_Backgrounds and Emblems..."
- _tip="Display patterns, colors, and emblems that can be used to customize appearance"
- verb="Backgrounds and Emblems"/>
-
- <menuitem name="Preferences"
- _label="Prefere_nces"
- _tip="Edit Nautilus preferences"
- pixtype="stock" pixname="gtk-preferences"
- verb="Preferences"/>
- </submenu>
-
- <submenu name="View" _label="_View">
- <menuitem name="Stop"
- _label="_Stop"
- pixtype="stock" pixname="gtk-stop"
- verb="Stop"/>
- <menuitem name="Reload"
- _label="_Reload"
- accel="*Control*r"
- pixtype="stock" pixname="refresh"
- verb="Reload"/>
+ <menu action="View">
+ <menuitem name="Stop" action="Stop"/>
+ <menuitem name="Reload" action="Reload"/>
- <placeholder name="Show Hide Placeholder" delimit="top">
+ <placeholder name="Show Hide Placeholder">
</placeholder>
- <placeholder name="View Preferences Placeholder" delimit = "top"/>
- <placeholder name="View Items Placeholder" delimit="top"/>
+ <placeholder name="View Preferences Placeholder"/>
+ <placeholder name="View Items Placeholder"/>
- <placeholder name="Zoom Items Placeholder" delimit="top">
+ <placeholder name="Zoom Items Placeholder">
<menuitem name="Zoom In"
- accel="*Control*plus"
- pixtype="stock" pixname="zoom-in"
- verb="Zoom In"/>
+ action="Zoom In"/>
<menuitem name="Zoom Out"
- accel="*Control*minus"
- pixtype="stock" pixname="zoom-out"
- verb="Zoom Out"/>
+ action="Zoom Out"/>
<menuitem name="Zoom Normal"
- pixtype="stock" pixname="zoom-100"
- verb="Zoom Normal"/>
+ action="Zoom Normal"/>
</placeholder>
<placeholder name="View Choices">
- <placeholder name="Extra Viewer" delimit="top"/>
+ <placeholder name="Extra Viewer"/>
<separator name="Before Short List"/>
<placeholder name="Short List"/>
</placeholder>
- </submenu>
+ </menu>
- <placeholder/>
-
- <submenu name="Profiler" _label="_Profiler">
- <menuitem name="Start Profiling"
- _label="_Start Profiling"
- _tip="Start Profiling"
- verb="Start Profiling"/>
- <menuitem name="Stop Profiling"
- _label="_Stop Profiling"
- _tip="Stop Profiling"
- verb="Stop Profiling"/>
- <menuitem name="Reset Profiling"
- _label="_Reset Profiling"
- _tip="Reset Profiling"
- verb="Reset Profiling"/>
- <menuitem name="Report Profiling"
- _label="_Report Profiling"
- _tip="Report Profiling"
- verb="Report Profiling"/>
- </submenu>
+ <placeholder name="Other Menus"/>
- <submenu name="Help" _label="_Help">
+ <menu action="Help">
<menuitem name="Nautilus Manual"
- _label="_Contents"
- _tip="Display Nautilus help"
- accel="F1"
- pixtype="stock" pixname="gtk-help"
- verb="Nautilus Manual"/>
+ action="Nautilus Manual"/>
<menuitem name="About Nautilus"
- _label="_About"
- _tip="Display credits for the creators of Nautilus"
- pixtype="stock" pixname="about"
- verb="About Nautilus"/>
- </submenu>
-</menu>
+ action="About Nautilus"/>
+ </menu>
+</menubar>
-<status>
- <control name="StatusButton" behavior="pack-start"/>
- <!-- the name "main" is required by Bonobo -->
- <item name="main"/>
-</status>
-
-<popups>
- <popup name="background" tearoff="0">
- <placeholder name="Before Zoom Items" delimit="none">
- <placeholder name="New Window Items" delimit="none">
- </placeholder>
- <placeholder name="New Object Items" delimit="none">
- </placeholder>
- <placeholder name="Extension Actions" delimit="top"/>
+<popup name="background">
+ <placeholder name="Before Zoom Items">
+ <placeholder name="New Window Items">
</placeholder>
- <placeholder name="Zoom Items" delimit="top">
- <menuitem name="Zoom In"
- pixtype="stock" pixname="zoom-in"
- verb="Zoom In"/>
- <menuitem name="Zoom Out"
- pixtype="stock" pixname="zoom-out"
- verb="Zoom Out"/>
- <menuitem name="Zoom Normal"
- pixtype="stock" pixname="zoom-100"
- verb="Zoom Normal"/>
+ <placeholder name="New Object Items">
</placeholder>
- <placeholder name="After Zoom Items" delimit="top"/>
- </popup>
-</popups>
-
-</Root>
+ <placeholder name="Extension Actions"/>
+ </placeholder>
+ <placeholder name="Zoom Items">
+ <menuitem name="Zoom In"
+ action="Zoom In"/>
+ <menuitem name="Zoom Out"
+ action="Zoom Out"/>
+ <menuitem name="Zoom Normal"
+ action="Zoom Normal"/>
+ </placeholder>
+ <placeholder name="After Zoom Items"/>
+</popup>
+
+</ui>
diff --git a/src/nautilus-sidebar-title.c b/src/nautilus-sidebar-title.c
index 1244f4e17..9d13134e3 100644
--- a/src/nautilus-sidebar-title.c
+++ b/src/nautilus-sidebar-title.c
@@ -30,8 +30,6 @@
#include "nautilus-window.h"
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-property-bag-client.h>
#include <eel/eel-background.h>
#include <eel/eel-gdk-extensions.h>
#include <eel/eel-gdk-pixbuf-extensions.h>
diff --git a/src/nautilus-spatial-window-ui.xml b/src/nautilus-spatial-window-ui.xml
index 06d94de48..4b003990d 100644
--- a/src/nautilus-spatial-window-ui.xml
+++ b/src/nautilus-spatial-window-ui.xml
@@ -1,69 +1,40 @@
-<Root>
+<ui>
-<!-- A description of each placeholder's purpose is in libnautilus/nautilus-bonobo-ui.h -->
+<accelerator action="Go Up Close"/>
+<!--
+<accelerator action="Home"/>
+-->
-<commands>
-</commands>
-
-<keybindings>
- <accel name="*Alt**Shift*Up" verb="UpCloseCurrent"/>
- <accel name="*Shift*BackSpace" verb="UpCloseCurrent"/>
- <accel name="*Alt*Home" verb="Home"/>
-</keybindings>
-<menu>
- <submenu name="File">
+<menubar name="MenuBar">
+ <menu action="File">
<placeholder name="Location Placeholder">
<menuitem name="Up"
- _label="Open _Parent"
- _tip="Open the parent folder"
- accel="*Alt*Up"
- verb="Up"/>
+ action="Up"/>
<menuitem name="Go to Location"
- _label="Open _Location..."
- accel="*Control*l"
- verb="Go to Location"/>
- <menuitem name="Connect to Server"
- _label="Connect to _Server..."
- verb="Connect to Server"/>
+ action="Go to Location"/>
</placeholder>
<placeholder name="Close Items Placeholder">
- <menuitem name="Close With Parents"
- _label="Close P_arent Folders"
- _tip="Close this folder's parents"
- accel="*Control**Shift*w"
- verb="Close Parent Folders"/>
+ <menuitem name="Close Parent Folders"
+ action="Close Parent Folders"/>
<menuitem name="Close All Folders"
- _label="Clos_e All Folders"
- _tip="Close all folder windows"
- accel="*Control*q"
- verb="Close All Folders"/>
+ action="Close All Folders"/>
</placeholder>
- </submenu>
+ </menu>
- <submenu name="Places" _label="_Places">
- <menuitem name="Home"
- _label="_Home"
- accel="*Alt*Home"
- pixtype="stock" pixname="gtk-home"
- verb="Home"/>
- <menuitem name="Go to Computer"
- _label="_Computer"
- _tip="Go to Computer"
- pixtype="stock" pixname="gnome-fs-client"
- verb="Go to Computer"/>
- <menuitem name="Go to Templates"
- _label="_Templates"
- _tip="Go to templates folder"
- verb="Go to Templates"/>
- <menuitem name="Go to Trash"
- _label="_Trash"
- _tip="Go to the trash folder"
- verb="Go to Trash"/>
- <menuitem name="Go to Burn CD"
- _label="CD _Creator"
- _tip="Go to the CD/DVD Creator"
- verb="Go to Burn CD"/>
- </submenu>
-</menu>
+ <placeholder name="Other Menus">
+ <menu action="Places">
+ <menuitem name="Home"
+ action="Home"/>
+ <menuitem name="Go to Computer"
+ action="Go to Computer"/>
+ <menuitem name="Go to Templates"
+ action="Go to Templates"/>
+ <menuitem name="Go to Trash"
+ action="Go to Trash"/>
+ <menuitem name="Go to Burn CD"
+ action="Go to Burn CD"/>
+ </menu>
+ </placeholder>
+</menubar>
-</Root>
+</ui>
diff --git a/src/nautilus-spatial-window.c b/src/nautilus-spatial-window.c
index a5f94c07c..35b024b27 100644
--- a/src/nautilus-spatial-window.c
+++ b/src/nautilus-spatial-window.c
@@ -39,9 +39,6 @@
#include "nautilus-signaller.h"
#include "nautilus-window-manage-views.h"
#include "nautilus-zoom-control.h"
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-property-bag-client.h>
-#include <bonobo/bonobo-ui-util.h>
#include <eel/eel-debug.h>
#include <eel/eel-gdk-extensions.h>
#include <eel/eel-gdk-pixbuf-extensions.h>
@@ -56,6 +53,7 @@
#include <gtk/gtkoptionmenu.h>
#include <gtk/gtktogglebutton.h>
#include <gtk/gtkvbox.h>
+#include <gtk/gtkuimanager.h>
#include <libgnome/gnome-i18n.h>
#include <libgnome/gnome-macros.h>
#include <libgnome/gnome-util.h>
@@ -64,7 +62,6 @@
#include <libgnomeui/gnome-window-icon.h>
#include <libgnomevfs/gnome-vfs-uri.h>
#include <libgnomevfs/gnome-vfs-utils.h>
-#include <libnautilus-private/nautilus-bonobo-extensions.h>
#include <libnautilus-private/nautilus-file-utilities.h>
#include <libnautilus-private/nautilus-file-attributes.h>
#include <libnautilus-private/nautilus-global-preferences.h>
@@ -73,7 +70,6 @@
#include <libnautilus-private/nautilus-metadata.h>
#include <libnautilus-private/nautilus-mime-actions.h>
#include <libnautilus-private/nautilus-program-choosing.h>
-#include <libnautilus-private/nautilus-bonobo-ui.h>
#include <libnautilus-private/nautilus-clipboard.h>
#include <libnautilus-private/nautilus-undo.h>
#include <math.h>
@@ -81,14 +77,14 @@
#define MAX_TITLE_LENGTH 180
-struct _NautilusSpatialWindowDetails {
+struct _NautilusSpatialWindowDetails {
+ GtkActionGroup *spatial_action_group; /* owned by ui_manager */
char *last_geometry;
guint save_geometry_timeout_id;
GtkWidget *content_box;
GtkWidget *location_button;
GtkWidget *location_label;
- GtkWidget *location_statusbar;
GnomeVFSURI *location;
};
@@ -299,25 +295,22 @@ nautilus_spatial_window_show (GtkWidget *widget)
}
static void
-file_menu_close_parent_windows_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_close_parent_folders_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_application_close_parent_windows (NAUTILUS_SPATIAL_WINDOW (user_data));
}
static void
-file_menu_close_all_windows_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_close_all_folders_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_application_close_all_spatial_windows ();
}
static void
-go_up_close_current_window_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_go_up_close_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_window_go_up (NAUTILUS_WINDOW (user_data), TRUE);
}
@@ -351,38 +344,6 @@ real_set_title (NautilusWindow *window, const char *title)
}
static void
-real_merge_menus (NautilusWindow *nautilus_window)
-{
- NautilusSpatialWindow *window;
- BonoboControl *control;
- BonoboUIVerb verbs [] = {
- BONOBO_UI_VERB ("Close Parent Folders", file_menu_close_parent_windows_callback),
- BONOBO_UI_VERB ("Close All Folders", file_menu_close_all_windows_callback),
- BONOBO_UI_VERB ("UpCloseCurrent", go_up_close_current_window_callback),
- BONOBO_UI_VERB_END
- };
-
- EEL_CALL_PARENT (NAUTILUS_WINDOW_CLASS,
- merge_menus, (nautilus_window));
-
- window = NAUTILUS_SPATIAL_WINDOW (nautilus_window);
-
- bonobo_ui_util_set_ui (NAUTILUS_WINDOW (window)->details->shell_ui,
- DATADIR,
- "nautilus-spatial-window-ui.xml",
- "nautilus", NULL);
-
- bonobo_ui_component_add_verb_list_with_data (nautilus_window->details->shell_ui,
- verbs, window);
-
- control = bonobo_control_new (window->details->location_statusbar);
- bonobo_ui_component_object_set (nautilus_window->details->shell_ui,
- "/status/StatusButton",
- BONOBO_OBJREF (control),
- NULL);
-}
-
-static void
real_set_content_view_widget (NautilusWindow *window,
NautilusView *new_view)
{
@@ -515,7 +476,9 @@ menu_popup_pos (GtkMenu *menu,
gtk_widget_size_request (widget, &button_requisition);
gdk_window_get_origin (widget->window, x, y);
-
+ *x += widget->allocation.x;
+ *y += widget->allocation.y;
+
*y -= menu_requisition.height - button_requisition.height;
*push_in = TRUE;
@@ -604,28 +567,55 @@ nautilus_spatial_window_set_location_button (NautilusSpatialWindow *window,
}
static void
+action_go_to_location_callback (GtkAction *action,
+ gpointer user_data)
+{
+ NautilusWindow *window;
+
+ window = NAUTILUS_WINDOW (user_data);
+
+ nautilus_window_prompt_for_location (window);
+}
+
+static GtkActionEntry spatial_entries[] = {
+ { "Places", NULL, N_("_Places") }, /* name, stock id, label */
+ { "Go to Location", NULL, N_("Open _Location..."), /* name, stock id, label */
+ "<control>L", N_("Specify a location to open"),
+ G_CALLBACK (action_go_to_location_callback) },
+ { "Close Parent Folders", NULL, N_("Close P_arent Folders"), /* name, stock id, label */
+ "<control><shift>W", N_("Close this folder's parents"),
+ G_CALLBACK (action_close_parent_folders_callback) },
+ { "Close All Folders", NULL, N_("Clos_e All Folders"), /* name, stock id, label */
+ "<control>Q", N_("Close all folder windows"),
+ G_CALLBACK (action_close_all_folders_callback) },
+ { "Go Up Close", NULL, N_("Go up and close the current window"), /* name, stock id, label */
+ "<alt><shift>Up", NULL,
+ G_CALLBACK (action_go_up_close_callback) },
+};
+
+static void
nautilus_spatial_window_instance_init (NautilusSpatialWindow *window)
{
- GtkShadowType shadow_type;
- GtkWidget *frame;
GtkRcStyle *rc_style;
GtkWidget *arrow;
GtkWidget *hbox;
+ GtkActionGroup *action_group;
+ GtkUIManager *ui_manager;
+ GError *error;
+ char *file;
window->details = g_new0 (NautilusSpatialWindowDetails, 1);
window->affect_spatial_window_on_next_location_change = TRUE;
window->details->content_box =
gtk_hbox_new (FALSE, 0);
+ gtk_table_attach (GTK_TABLE (NAUTILUS_WINDOW (window)->details->table),
+ window->details->content_box,
+ /* X direction */ /* Y direction */
+ 0, 1, 1, 4,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
+ 0, 0);
gtk_widget_show (window->details->content_box);
- bonobo_window_set_contents (BONOBO_WINDOW (window),
- window->details->content_box);
-
- window->details->location_statusbar = gtk_statusbar_new ();
- gtk_widget_show (window->details->location_statusbar);
- gtk_widget_hide (GTK_STATUSBAR (window->details->location_statusbar)->frame);
- gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (window->details->location_statusbar),
- FALSE);
window->details->location_button = gtk_button_new ();
gtk_button_set_relief (GTK_BUTTON (window->details->location_button),
@@ -652,22 +642,37 @@ nautilus_spatial_window_instance_init (NautilusSpatialWindow *window)
gtk_box_pack_start (GTK_BOX (hbox), arrow, FALSE, FALSE, 0);
gtk_widget_show (arrow);
- frame = gtk_frame_new (NULL);
- gtk_widget_style_get (GTK_WIDGET (window->details->location_statusbar),
- "shadow_type", &shadow_type, NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (frame), shadow_type);
- gtk_box_pack_start (GTK_BOX (window->details->location_statusbar),
- frame, TRUE, TRUE, 0);
- gtk_widget_show (frame);
-
- gtk_container_add (GTK_CONTAINER (frame),
- window->details->location_button);
gtk_widget_set_sensitive (window->details->location_button, FALSE);
g_signal_connect (window->details->location_button,
"clicked",
G_CALLBACK (location_button_clicked_callback), window);
- gtk_widget_show (window->details->location_statusbar);
+ gtk_box_pack_start (GTK_BOX (NAUTILUS_WINDOW (window)->details->statusbar),
+ window->details->location_button,
+ FALSE, TRUE, 0);
+
+ gtk_box_reorder_child (GTK_BOX (NAUTILUS_WINDOW (window)->details->statusbar),
+ window->details->location_button, 0);
+
+ action_group = gtk_action_group_new ("SpatialActions");
+ gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
+ window->details->spatial_action_group = action_group;
+ gtk_action_group_add_actions (action_group,
+ spatial_entries, G_N_ELEMENTS (spatial_entries),
+ window);
+
+ ui_manager = nautilus_window_get_ui_manager (NAUTILUS_WINDOW (window));
+ 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-spatial-window-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);
+ }
+ g_free (file);
+ return;
}
static void
@@ -686,8 +691,6 @@ nautilus_spatial_window_class_init (NautilusSpatialWindowClass *class)
real_prompt_for_location;
NAUTILUS_WINDOW_CLASS (class)->set_title =
real_set_title;
- NAUTILUS_WINDOW_CLASS (class)->merge_menus =
- real_merge_menus;
NAUTILUS_WINDOW_CLASS (class)->set_content_view_widget =
real_set_content_view_widget;
NAUTILUS_WINDOW_CLASS (class)->close =
diff --git a/src/nautilus-window-manage-views.c b/src/nautilus-window-manage-views.c
index 272ec62b7..a8419e34b 100644
--- a/src/nautilus-window-manage-views.c
+++ b/src/nautilus-window-manage-views.c
@@ -28,14 +28,12 @@
#include <config.h>
#include "nautilus-window-manage-views.h"
+#include "nautilus-actions.h"
#include "nautilus-application.h"
#include "nautilus-location-bar.h"
#include "nautilus-main.h"
#include "nautilus-window-private.h"
#include "nautilus-zoom-control.h"
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-ui-util.h>
-#include <bonobo/bonobo-property-bag-client.h>
#include <eel/eel-accessibility.h>
#include <eel/eel-debug.h>
#include <eel/eel-gdk-extensions.h>
@@ -53,7 +51,6 @@
#include <libgnomevfs/gnome-vfs-async-ops.h>
#include <libgnomevfs/gnome-vfs-uri.h>
#include <libgnomevfs/gnome-vfs-utils.h>
-#include <libnautilus-private/nautilus-bonobo-extensions.h>
#include <libnautilus-private/nautilus-file-attributes.h>
#include <libnautilus-private/nautilus-file-utilities.h>
#include <libnautilus-private/nautilus-file.h>
@@ -105,6 +102,8 @@ static void load_new_location (NautilusWindow
gboolean tell_new_content_view);
static void location_has_really_changed (NautilusWindow *window);
static void update_for_new_location (NautilusWindow *window);
+static void zoom_parameters_changed_callback (NautilusView *view,
+ NautilusWindow *window);
void
nautilus_window_report_selection_changed (NautilusWindowInfo *window)
@@ -947,6 +946,7 @@ create_content_view (NautilusWindow *window,
{
NautilusView *view;
GList *selection;
+ GtkAction *action;
/* FIXME bugzilla.gnome.org 41243:
* We should use inheritance instead of these special cases
@@ -959,21 +959,16 @@ create_content_view (NautilusWindow *window,
*/
view_id = NAUTILUS_DESKTOP_ICON_VIEW_IID;
}
-
- nautilus_window_ui_freeze (window);
-
- bonobo_ui_component_freeze (window->details->shell_ui, NULL);
- nautilus_bonobo_set_sensitive (window->details->shell_ui,
- NAUTILUS_COMMAND_ZOOM_IN,
- FALSE);
- nautilus_bonobo_set_sensitive (window->details->shell_ui,
- NAUTILUS_COMMAND_ZOOM_OUT,
- FALSE);
- nautilus_bonobo_set_sensitive (window->details->shell_ui,
- NAUTILUS_COMMAND_ZOOM_NORMAL,
- FALSE);
-
- bonobo_ui_component_thaw (window->details->shell_ui, NULL);
+
+ action = gtk_action_group_get_action (window->details->main_action_group,
+ NAUTILUS_ACTION_ZOOM_IN);
+ gtk_action_set_sensitive (action, FALSE);
+ action = gtk_action_group_get_action (window->details->main_action_group,
+ NAUTILUS_ACTION_ZOOM_OUT);
+ gtk_action_set_sensitive (action, FALSE);
+ action = gtk_action_group_get_action (window->details->main_action_group,
+ NAUTILUS_ACTION_ZOOM_NORMAL);
+ gtk_action_set_sensitive (action, FALSE);
if (window->content_view != NULL &&
eel_strcmp (nautilus_view_get_view_id (window->content_view),
@@ -1020,7 +1015,6 @@ create_content_view (NautilusWindow *window,
nautilus_window_go_home (NAUTILUS_WINDOW (window));
}
- nautilus_window_ui_thaw (window);
}
static void
@@ -1104,8 +1098,6 @@ location_has_really_changed (NautilusWindow *window)
if (window->details->pending_location != NULL) {
/* Tell the window we are finished. */
update_for_new_location (window);
-
-
}
free_location_change (window);
@@ -1152,13 +1144,17 @@ update_for_new_location (NautilusWindow *window)
/* Check if we can go up. */
update_up_button (window);
+
+ /* Set up the initial zoom levels */
+ zoom_parameters_changed_callback (window->content_view,
+ 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)) {
/* Check if the back and forward buttons need enabling or disabling. */
@@ -1496,27 +1492,36 @@ static void
zoom_level_changed_callback (NautilusView *view,
NautilusWindow *window)
{
+ GtkAction *action;
+ gboolean supports_zooming;
+
g_assert (NAUTILUS_IS_WINDOW (window));
/* This is called each time the component successfully completed
* a zooming operation.
*/
- nautilus_window_ui_freeze (window);
-
- nautilus_bonobo_set_sensitive (window->details->shell_ui,
- NAUTILUS_COMMAND_ZOOM_IN,
- nautilus_view_can_zoom_in (view));
- nautilus_bonobo_set_sensitive (window->details->shell_ui,
- NAUTILUS_COMMAND_ZOOM_OUT,
- nautilus_view_can_zoom_out (view));
- nautilus_bonobo_set_sensitive (window->details->shell_ui,
- NAUTILUS_COMMAND_ZOOM_NORMAL,
- TRUE);
-
- /* FIXME bugzilla.gnome.org 43442: Desensitize "Zoom Normal"? */
+ supports_zooming = nautilus_view_supports_zooming (view);
- nautilus_window_ui_thaw (window);
+ action = gtk_action_group_get_action (window->details->main_action_group,
+ NAUTILUS_ACTION_ZOOM_IN);
+ gtk_action_set_visible (action, supports_zooming);
+ gtk_action_set_sensitive (action,
+ nautilus_view_can_zoom_in (view));
+
+ action = gtk_action_group_get_action (window->details->main_action_group,
+ NAUTILUS_ACTION_ZOOM_OUT);
+ gtk_action_set_visible (action, supports_zooming);
+ gtk_action_set_sensitive (action,
+ nautilus_view_can_zoom_out (view));
+
+ action = gtk_action_group_get_action (window->details->main_action_group,
+ NAUTILUS_ACTION_ZOOM_NORMAL);
+ gtk_action_set_visible (action, supports_zooming);
+ gtk_action_set_sensitive (action,
+ TRUE);
+
+ /* FIXME bugzilla.gnome.org 43442: Desensitize "Zoom Normal"? */
}
static void
@@ -1524,6 +1529,7 @@ zoom_parameters_changed_callback (NautilusView *view,
NautilusWindow *window)
{
float zoom_level;
+ GtkAction *action;
g_assert (NAUTILUS_IS_WINDOW (window));
@@ -1535,19 +1541,15 @@ zoom_parameters_changed_callback (NautilusView *view,
*/
zoom_level = nautilus_view_get_zoom_level (view);
if (zoom_level == 0.0) {
- nautilus_window_ui_freeze (window);
-
- nautilus_bonobo_set_sensitive (window->details->shell_ui,
- NAUTILUS_COMMAND_ZOOM_IN,
- FALSE);
- nautilus_bonobo_set_sensitive (window->details->shell_ui,
- NAUTILUS_COMMAND_ZOOM_OUT,
- FALSE);
- nautilus_bonobo_set_sensitive (window->details->shell_ui,
- NAUTILUS_COMMAND_ZOOM_NORMAL,
- FALSE);
-
- nautilus_window_ui_thaw (window);
+ action = gtk_action_group_get_action (window->details->main_action_group,
+ NAUTILUS_ACTION_ZOOM_IN);
+ gtk_action_set_sensitive (action, FALSE);
+ action = gtk_action_group_get_action (window->details->main_action_group,
+ NAUTILUS_ACTION_ZOOM_OUT);
+ gtk_action_set_sensitive (action, FALSE);
+ action = gtk_action_group_get_action (window->details->main_action_group,
+ NAUTILUS_ACTION_ZOOM_NORMAL);
+ gtk_action_set_sensitive (action, FALSE);
/* Don't attempt to set 0.0 as zoom level. */
return;
diff --git a/src/nautilus-window-manage-views.h b/src/nautilus-window-manage-views.h
index 0c436b8b1..22d3f0188 100644
--- a/src/nautilus-window-manage-views.h
+++ b/src/nautilus-window-manage-views.h
@@ -53,9 +53,6 @@ const char *nautilus_window_get_content_view_id (NautilusW
char *nautilus_window_get_view_label (NautilusWindow *window);
void nautilus_navigation_window_set_sidebar_panels (NautilusNavigationWindow *window,
GList *view_identifier_list);
-void nautilus_navigation_window_back_or_forward (NautilusNavigationWindow *window,
- gboolean back,
- guint distance);
/* NautilusWindowInfo implementation: */
diff --git a/src/nautilus-window-menus.c b/src/nautilus-window-menus.c
index a34bec831..7b526de1d 100644
--- a/src/nautilus-window-menus.c
+++ b/src/nautilus-window-menus.c
@@ -29,6 +29,7 @@
#include <locale.h>
+#include "nautilus-actions.h"
#include "nautilus-application.h"
#include "nautilus-connect-server-dialog.h"
#include "nautilus-file-management-properties.h"
@@ -37,7 +38,6 @@
#include "nautilus-window-manage-views.h"
#include "nautilus-window-private.h"
#include "nautilus-desktop-window.h"
-#include <bonobo/bonobo-ui-util.h>
#include <eel/eel-debug.h>
#include <eel/eel-glib-extensions.h>
#include <eel/eel-gnome-extensions.h>
@@ -58,42 +58,13 @@
#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-private/nautilus-bonobo-ui.h>
-#ifdef ENABLE_PROFILER
-#include "nautilus-profiler.h"
-#endif
-
-/* Private menu definitions; others are in <libnautilus-private/nautilus-bonobo-ui.h>.
- * These are not part of the published set, either because they are
- * development-only or because we expect to change them and
- * don't want other code relying on their existence.
- */
-
-#define MENU_PATH_SHOW_HIDE_SIDEBAR "/menu/View/Show Hide Placeholder/Show Hide Sidebar"
-#define MENU_PATH_SHOW_HIDE_TOOLBAR "/menu/View/Show Hide Placeholder/Show Hide Toolbar"
-#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"
-#define COMMAND_SHOW_HIDE_LOCATION_BAR "/commands/Show Hide Location Bar"
-#define COMMAND_SHOW_HIDE_STATUS_BAR "/commands/Show Hide Statusbar"
-#define COMMAND_GO_BURN_CD "/commands/Go to Burn CD"
-
-#define ID_SHOW_HIDE_SIDEBAR "Show Hide Sidebar"
-#define ID_SHOW_HIDE_TOOLBAR "Show Hide Toolbar"
-#define ID_SHOW_HIDE_LOCATION_BAR "Show Hide Location Bar"
-#define ID_SHOW_HIDE_STATUS_BAR "Show Hide Statusbar"
+#define MENU_PATH_EXTENSION_ACTIONS "/MenuBar/File/Extension Actions"
+#define POPUP_PATH_EXTENSION_ACTIONS "/background/Before Zoom Items/Extension Actions"
#define COMPUTER_URI "computer:"
#define BURN_CD_URI "burn:"
@@ -139,13 +110,6 @@ bookmark_holder_free (BookmarkHolder *bookmark_holder)
g_free (bookmark_holder);
}
-/* Private menu definitions; others are in <libnautilus-private/nautilus-bonobo-ui.h>.
- * These are not part of the published set, either because they are
- * development-only or because we expect to change them and
- * don't want other code relying on their existence.
- */
-
-
static void
bookmark_holder_free_cover (gpointer callback_data, GClosure *closure)
{
@@ -153,7 +117,7 @@ bookmark_holder_free_cover (gpointer callback_data, GClosure *closure)
}
static void
-activate_bookmark_in_menu_item (BonoboUIComponent *component, gpointer user_data, const char *path)
+activate_bookmark_in_menu_item (GtkAction *action, gpointer user_data)
{
BookmarkHolder *holder;
char *uri;
@@ -171,23 +135,22 @@ activate_bookmark_in_menu_item (BonoboUIComponent *component, gpointer user_data
void
nautilus_menus_append_bookmark_to_menu (NautilusWindow *window,
- BonoboUIComponent *uic,
NautilusBookmark *bookmark,
const char *parent_path,
guint index_in_parent,
+ GtkActionGroup *action_group,
+ guint merge_id,
GCallback refresh_callback,
NautilusBookmarkFailedCallback failed_callback)
{
BookmarkHolder *bookmark_holder;
- char *raw_name, *display_name, *truncated_name, *verb_name;
- char *ui_path;
+ char *raw_name, *display_name, *truncated_name, *action_name;
GdkPixbuf *pixbuf;
+ GtkAction *action;
g_assert (NAUTILUS_IS_WINDOW (window));
g_assert (NAUTILUS_IS_BOOKMARK (bookmark));
- nautilus_window_ui_freeze (window);
-
bookmark_holder = bookmark_holder_new (bookmark, window, refresh_callback, failed_callback);
/* We double the underscores here to escape them so Bonobo will know they are
@@ -203,60 +166,53 @@ nautilus_menus_append_bookmark_to_menu (NautilusWindow *window,
/* Create menu item with pixbuf */
pixbuf = nautilus_bookmark_get_pixbuf (bookmark, NAUTILUS_ICON_SIZE_FOR_MENUS, FALSE);
- nautilus_bonobo_add_numbered_menu_item
- (uic,
- parent_path,
- index_in_parent,
- display_name,
- pixbuf);
- g_object_unref (pixbuf);
- g_free (display_name);
+
+ action_name = g_strdup_printf ("bookmark_%d", index_in_parent);
+
+ action = gtk_action_new (action_name,
+ display_name,
+ _("Go to the location specified by this bookmark"),
+ NULL);
- /* Add the status tip */
- ui_path = nautilus_bonobo_get_numbered_menu_item_path
- (uic, parent_path, index_in_parent);
- nautilus_bonobo_set_tip (uic, ui_path, _("Go to the location specified by this bookmark"));
- g_free (ui_path);
-
- /* Add verb to new bookmark menu item */
- verb_name = nautilus_bonobo_get_numbered_menu_item_command
- (uic, parent_path, index_in_parent);
- bonobo_ui_component_add_verb_full (uic, verb_name,
- g_cclosure_new (G_CALLBACK (activate_bookmark_in_menu_item),
- bookmark_holder,
- bookmark_holder_free_cover));
- g_free (verb_name);
-
- nautilus_window_ui_thaw (window);
-}
+ /* TODO: This should really use themed icons and
+ nautilus_bookmark_get_icon (bookmark), but that doesn't work yet*/
+ g_object_set_data_full (G_OBJECT (action), "menu-icon",
+ g_object_ref (pixbuf),
+ g_object_unref);
+
+ g_signal_connect_data (action, "activate",
+ G_CALLBACK (activate_bookmark_in_menu_item),
+ bookmark_holder,
+ bookmark_holder_free_cover, 0);
-static void
-file_menu_new_window_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
-{
- NautilusWindow *current_window;
- NautilusWindow *new_window;
+ gtk_action_group_add_action (action_group,
+ GTK_ACTION (action));
+
+ g_object_unref (action);
- current_window = NAUTILUS_WINDOW (user_data);
- new_window = nautilus_application_create_navigation_window (
- current_window->application,
- gtk_window_get_screen (GTK_WINDOW (current_window)));
- nautilus_window_go_home (new_window);
+ gtk_ui_manager_add_ui (window->details->ui_manager,
+ merge_id,
+ parent_path,
+ action_name,
+ action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+
+ g_object_unref (pixbuf);
+ g_free (action_name);
+ g_free (display_name);
}
static void
-file_menu_close_window_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_close_window_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_window_close (NAUTILUS_WINDOW (user_data));
}
static void
-connect_to_server_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_connect_to_server_callback (GtkAction *action,
+ gpointer user_data)
{
GtkWidget *dialog;
@@ -283,63 +239,38 @@ have_burn_uri (void)
}
static void
-go_menu_location_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
-{
- NautilusWindow *window;
-
- window = NAUTILUS_WINDOW (user_data);
-
- nautilus_window_prompt_for_location (window);
-}
-
-static void
-stop_button_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_stop_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_window_stop_loading (NAUTILUS_WINDOW (user_data));
}
static void
-edit_menu_undo_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_undo_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_undo_manager_undo
(NAUTILUS_WINDOW (user_data)->application->undo_manager);
}
static void
-go_menu_up_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
-{
- nautilus_window_go_up (NAUTILUS_WINDOW (user_data), FALSE);
-}
-
-static void
-go_menu_home_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_home_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_window_go_home (NAUTILUS_WINDOW (user_data));
}
static void
-go_menu_go_to_computer_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_go_to_computer_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
COMPUTER_URI);
}
static void
-go_menu_go_to_templates_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_go_to_templates_callback (GtkAction *action,
+ gpointer user_data)
{
char *uri;
@@ -351,92 +282,45 @@ go_menu_go_to_templates_callback (BonoboUIComponent *component,
}
static void
-go_menu_go_to_trash_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_go_to_trash_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
EEL_TRASH_URI);
}
static void
-go_menu_go_to_burn_cd_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_go_to_burn_cd_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
BURN_CD_URI);
}
static void
-view_menu_reload_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_reload_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_window_reload (NAUTILUS_WINDOW (user_data));
}
static void
-view_menu_show_hide_statusbar_state_changed_callback (BonoboUIComponent *component,
- const char *path,
- Bonobo_UIComponent_EventType type,
- const char *state,
- gpointer user_data)
-{
- NautilusWindow *window;
-
- window = NAUTILUS_WINDOW (user_data);
-
- if (strcmp (state, "") == 0) {
- /* State goes blank when component is removed; ignore this. */
- return;
- }
-
- if (!strcmp (state, "1")) {
- nautilus_window_show_status_bar (window);
- } else {
- nautilus_window_hide_status_bar (window);
- }
-}
-
-void
-nautilus_window_update_show_hide_menu_items (NautilusWindow *window)
-{
- g_assert (NAUTILUS_IS_WINDOW (window));
-
- nautilus_window_ui_freeze (window);
-
- bonobo_ui_component_freeze (window->details->shell_ui, NULL);
-
- nautilus_bonobo_set_toggle_state (window->details->shell_ui,
- COMMAND_SHOW_HIDE_STATUS_BAR,
- nautilus_window_status_bar_showing (window));
-
- bonobo_ui_component_thaw (window->details->shell_ui, NULL);
-
- nautilus_window_ui_thaw (window);
-}
-
-static void
-view_menu_zoom_in_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_zoom_in_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_window_zoom_in (NAUTILUS_WINDOW (user_data));
}
static void
-view_menu_zoom_out_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_zoom_out_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_window_zoom_out (NAUTILUS_WINDOW (user_data));
}
static void
-view_menu_zoom_normal_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_zoom_normal_callback (GtkAction *action,
+ gpointer user_data)
{
nautilus_window_zoom_to_default (NAUTILUS_WINDOW (user_data));
}
@@ -451,9 +335,8 @@ preferences_respond_callback (GtkDialog *dialog,
}
static void
-preferences_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_preferences_callback (GtkAction *action,
+ gpointer user_data)
{
GtkWindow *window;
@@ -463,9 +346,8 @@ preferences_callback (BonoboUIComponent *component,
}
static void
-backgrounds_and_emblems_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_backgrounds_and_emblems_callback (GtkAction *action,
+ gpointer user_data)
{
GtkWindow *window;
@@ -475,9 +357,8 @@ backgrounds_and_emblems_callback (BonoboUIComponent *component,
}
static void
-help_menu_about_nautilus_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_about_nautilus_callback (GtkAction *action,
+ gpointer user_data)
{
static GtkWidget *about = NULL;
const char *authors[] = {
@@ -567,9 +448,15 @@ help_menu_about_nautilus_callback (BonoboUIComponent *component,
}
static void
-help_menu_nautilus_manual_callback (BonoboUIComponent *component,
- gpointer user_data,
- const char *verb)
+action_up_callback (GtkAction *action,
+ gpointer user_data)
+{
+ nautilus_window_go_up (NAUTILUS_WINDOW (user_data), FALSE);
+}
+
+static void
+action_nautilus_manual_callback (GtkAction *action,
+ gpointer user_data)
{
NautilusWindow *window;
GError *error;
@@ -605,6 +492,159 @@ help_menu_nautilus_manual_callback (BonoboUIComponent *component,
}
}
+static void
+menu_item_select_cb (GtkMenuItem *proxy,
+ NautilusWindow *window)
+{
+ GtkAction *action;
+ char *message;
+
+ action = g_object_get_data (G_OBJECT (proxy), "gtk-action");
+ g_return_if_fail (action != NULL);
+
+ g_object_get (G_OBJECT (action), "tooltip", &message, NULL);
+ if (message) {
+ gtk_statusbar_push (GTK_STATUSBAR (window->details->statusbar),
+ window->details->help_message_cid, message);
+ g_free (message);
+ }
+}
+
+static void
+menu_item_deselect_cb (GtkMenuItem *proxy,
+ NautilusWindow *window)
+{
+ gtk_statusbar_pop (GTK_STATUSBAR (window->details->statusbar),
+ window->details->help_message_cid);
+}
+
+static void
+disconnect_proxy_cb (GtkUIManager *manager,
+ GtkAction *action,
+ GtkWidget *proxy,
+ NautilusWindow *window)
+{
+ if (GTK_IS_MENU_ITEM (proxy)) {
+ g_signal_handlers_disconnect_by_func
+ (proxy, G_CALLBACK (menu_item_select_cb), window);
+ g_signal_handlers_disconnect_by_func
+ (proxy, G_CALLBACK (menu_item_deselect_cb), window);
+ }
+}
+
+static void
+connect_proxy_cb (GtkUIManager *manager,
+ GtkAction *action,
+ GtkWidget *proxy,
+ NautilusWindow *window)
+{
+ GdkPixbuf *icon;
+
+ if (GTK_IS_MENU_ITEM (proxy)) {
+ g_signal_connect (proxy, "select",
+ G_CALLBACK (menu_item_select_cb), window);
+ g_signal_connect (proxy, "deselect",
+ G_CALLBACK (menu_item_deselect_cb), window);
+
+
+ /* This is a way to easily get pixbufs into the menu items */
+ icon = g_object_get_data (G_OBJECT (action), "menu-icon");
+ if (icon != NULL) {
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (proxy),
+ gtk_image_new_from_pixbuf (icon));
+ }
+ }
+ if (GTK_IS_TOOL_BUTTON (proxy)) {
+ icon = g_object_get_data (G_OBJECT (action), "toolbar-icon");
+ if (icon != NULL) {
+ gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (proxy),
+ gtk_image_new_from_pixbuf (icon));
+ }
+ }
+
+}
+
+static GtkActionEntry main_entries[] = {
+ { "File", NULL, N_("_File") }, /* name, stock id, label */
+ { "Edit", NULL, N_("_Edit") }, /* name, stock id, label */
+ { "View", NULL, N_("_View") }, /* name, stock id, label */
+ { "Help", NULL, N_("_Help") }, /* name, stock id, label */
+ { "Close", GTK_STOCK_CLOSE, /* name, stock id */
+ N_("_Close"), "<control>W", /* label, accelerator */
+ N_("Close this folder"), /* tooltip */
+ G_CALLBACK (action_close_window_callback) },
+ { "Backgrounds and Emblems", NULL,
+ N_("_Backgrounds and Emblems..."),
+ NULL, N_("Display patterns, colors, and emblems that can be used to customize appearance"),
+ G_CALLBACK (action_backgrounds_and_emblems_callback) },
+ { "Preferences", GTK_STOCK_PREFERENCES,
+ N_("Prefere_nces"),
+ NULL, N_("Edit Nautilus preferences"),
+ G_CALLBACK (action_preferences_callback) },
+ { "Undo", NULL, N_("_Undo"), /* name, stock id, label */
+ "<control>Z", N_("Undo the last text change"),
+ G_CALLBACK (action_undo_callback) },
+ { "Up", GTK_STOCK_GO_UP, N_("Open _Parent"), /* name, stock id, label */
+ "<alt>Up", N_("Open the parent folder"),
+ G_CALLBACK (action_up_callback) },
+ { "Stop", GTK_STOCK_STOP, /* name, stock id */
+ N_("_Stop"), NULL, /* label, accelerator */
+ NULL, /* tooltip */
+ G_CALLBACK (action_stop_callback) },
+ { "Reload", GTK_STOCK_REFRESH, /* name, stock id */
+ N_("_Reload"), "<control>R", /* label, accelerator */
+ NULL, /* tooltip */
+ G_CALLBACK (action_reload_callback) },
+ { "Reload", GTK_STOCK_REFRESH, /* name, stock id */
+ N_("_Reload"), "<control>R", /* label, accelerator */
+ NULL, /* tooltip */
+ G_CALLBACK (action_reload_callback) },
+ { "Nautilus Manual", GTK_STOCK_HELP, /* name, stock id */
+ N_("_Contents"), "F1", /* label, accelerator */
+ N_("Display Nautilus help"), /* tooltip */
+ G_CALLBACK (action_nautilus_manual_callback) },
+ { "About Nautilus", GTK_STOCK_ABOUT, /* name, stock id */
+ N_("_About"), NULL, /* label, accelerator */
+ N_("Display credits for the creators of Nautilus"), /* tooltip */
+ G_CALLBACK (action_about_nautilus_callback) },
+ { "Zoom In", GTK_STOCK_ZOOM_IN, /* name, stock id */
+ N_("Zoom _In"), "<control>plus", /* label, accelerator */
+ N_("Show the contents in more detail"), /* tooltip */
+ G_CALLBACK (action_zoom_in_callback) },
+ { "Zoom Out", GTK_STOCK_ZOOM_OUT, /* name, stock id */
+ N_("Zoom _Out"), "<control>minus", /* label, accelerator */
+ N_("Show the contents in less detail"), /* tooltip */
+ G_CALLBACK (action_zoom_out_callback) },
+ { "Zoom Normal", GTK_STOCK_ZOOM_100, /* name, stock id */
+ N_("Normal Si_ze"), NULL, /* label, accelerator */
+ N_("Show the contents at the normal size"), /* tooltip */
+ G_CALLBACK (action_zoom_normal_callback) },
+ { "Connect to Server", NULL, /* name, stock id */
+ N_("Connect to _Server..."), NULL, /* label, accelerator */
+ N_("Set up a connection to a network server"), /* tooltip */
+ G_CALLBACK (action_connect_to_server_callback) },
+ { "Home", GTK_STOCK_HOME, /* name, stock id */
+ N_("_Home"), "<alt>Home", /* label, accelerator */
+ N_("Go to the home folder"), /* tooltip */
+ G_CALLBACK (action_home_callback) },
+ { "Go to Computer", "gnome-fs-client", /* name, stock id */
+ N_("_Computer"), NULL, /* label, accelerator */
+ N_("Go to the computer location"), /* tooltip */
+ G_CALLBACK (action_go_to_computer_callback) },
+ { "Go to Templates", NULL, /* name, stock id */
+ N_("T_emplates"), NULL, /* label, accelerator */
+ N_("Go to the templates folder"), /* tooltip */
+ G_CALLBACK (action_go_to_templates_callback) },
+ { "Go to Trash", NULL, /* name, stock id */
+ N_("_Trash"), NULL, /* label, accelerator */
+ N_("Go to the trash folder"), /* tooltip */
+ G_CALLBACK (action_go_to_trash_callback) },
+ { "Go to Burn CD", NULL, /* name, stock id */
+ N_("CD _Creator"), NULL, /* label, accelerator */
+ N_("Go to the CD/DVD Creator"), /* tooltip */
+ G_CALLBACK (action_go_to_burn_cd_callback) },
+};
+
/**
* nautilus_window_initialize_menus
*
@@ -612,72 +652,49 @@ help_menu_nautilus_manual_callback (BonoboUIComponent *component,
* @window: A recently-created NautilusWindow.
*/
void
-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 ("Connect to Server", connect_to_server_callback),
- BONOBO_UI_VERB ("Undo", edit_menu_undo_callback),
- BONOBO_UI_VERB ("Backgrounds and Emblems", backgrounds_and_emblems_callback),
- BONOBO_UI_VERB ("Up", go_menu_up_callback),
- BONOBO_UI_VERB ("Home", go_menu_home_callback),
- BONOBO_UI_VERB ("Go to Computer", go_menu_go_to_computer_callback),
- BONOBO_UI_VERB ("Go to Templates", go_menu_go_to_templates_callback),
- BONOBO_UI_VERB ("Go to Trash", go_menu_go_to_trash_callback),
- BONOBO_UI_VERB ("Go to Burn CD", go_menu_go_to_burn_cd_callback),
- BONOBO_UI_VERB ("Go to Location", go_menu_location_callback),
- BONOBO_UI_VERB ("Reload", view_menu_reload_callback),
- BONOBO_UI_VERB ("Zoom In", view_menu_zoom_in_callback),
- BONOBO_UI_VERB ("Zoom Out", view_menu_zoom_out_callback),
- BONOBO_UI_VERB ("Zoom Normal", view_menu_zoom_normal_callback),
-
-#ifdef ENABLE_PROFILER
- BONOBO_UI_VERB ("Start Profiling", nautilus_profiler_bonobo_ui_start_callback),
- BONOBO_UI_VERB ("Stop Profiling", nautilus_profiler_bonobo_ui_stop_callback),
- BONOBO_UI_VERB ("Reset Profiling", nautilus_profiler_bonobo_ui_reset_callback),
- BONOBO_UI_VERB ("Report Profiling", nautilus_profiler_bonobo_ui_report_callback),
-#endif
-
- BONOBO_UI_VERB ("About Nautilus", help_menu_about_nautilus_callback),
- BONOBO_UI_VERB ("Nautilus Manual", help_menu_nautilus_manual_callback),
- BONOBO_UI_VERB ("Preferences", preferences_callback),
- BONOBO_UI_VERB ("Stop", stop_button_callback),
-
- BONOBO_UI_VERB_END
- };
-
- nautilus_window_ui_freeze (window);
-
- bonobo_ui_component_freeze (window->details->shell_ui, NULL);
-
- nautilus_window_update_show_hide_menu_items (window);
-
- bonobo_ui_component_add_verb_list_with_data (window->details->shell_ui, verbs, window);
-
- bonobo_ui_component_add_listener
- (window->details->shell_ui,
- ID_SHOW_HIDE_STATUS_BAR,
- view_menu_show_hide_statusbar_state_changed_callback,
- window);
+nautilus_window_initialize_menus (NautilusWindow *window)
+{
+ GtkActionGroup *action_group;
+ GtkUIManager *ui_manager;
+ GtkAction *action;
+ char *file;
+ GError *error;
+
+ action_group = gtk_action_group_new ("ShellActions");
+ gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
+ window->details->main_action_group = action_group;
+ gtk_action_group_add_actions (action_group,
+ main_entries, G_N_ELEMENTS (main_entries),
+ window);
+
+ action = gtk_action_group_get_action (action_group, NAUTILUS_ACTION_UP);
+ g_object_set (action, "short_label", _("_Up"), NULL);
+
+ window->details->ui_manager = gtk_ui_manager_new ();
+ ui_manager = window->details->ui_manager;
+ gtk_window_add_accel_group (GTK_WINDOW (window),
+ gtk_ui_manager_get_accel_group (ui_manager));
+
+ g_signal_connect (ui_manager, "connect_proxy",
+ G_CALLBACK (connect_proxy_cb), window);
+ g_signal_connect (ui_manager, "disconnect_proxy",
+ G_CALLBACK (disconnect_proxy_cb), window);
+
+ gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
+ g_object_unref (action_group); /* owned by ui manager */
- /* Register to catch Bonobo UI events so we can notice View As changes */
- g_signal_connect_object (window->details->shell_ui, "ui_event",
- G_CALLBACK (nautilus_window_handle_ui_event_callback), window, 0);
+ error = NULL;
+ file = nautilus_ui_file ("nautilus-shell-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);
+ }
+ g_free (file);
- bonobo_ui_component_thaw (window->details->shell_ui, NULL);
-
if (!have_burn_uri ()) {
- nautilus_bonobo_set_hidden (window->details->shell_ui,
- COMMAND_GO_BURN_CD,
- TRUE);
+ action = gtk_action_group_get_action (action_group, NAUTILUS_ACTION_GO_TO_BURN_CD);
+ gtk_action_set_visible (action, FALSE);
}
-
-#ifndef ENABLE_PROFILER
- nautilus_bonobo_set_hidden (window->details->shell_ui, NAUTILUS_MENU_PATH_PROFILER, TRUE);
-#endif
-
- nautilus_window_ui_thaw (window);
}
static GList *
@@ -706,37 +723,113 @@ get_extension_menus (NautilusWindow *window)
return items;
}
+static void
+extension_action_callback (GtkAction *action,
+ gpointer callback_data)
+{
+ nautilus_menu_item_activate (NAUTILUS_MENU_ITEM (callback_data));
+}
+
void
nautilus_window_load_extension_menus (NautilusWindow *window)
{
+ char *name, *label, *tip, *icon;
+ gboolean sensitive, priority;
+ GtkActionGroup *action_group;
+ GtkAction *action;
+ GdkPixbuf *pixbuf;
GList *items;
GList *l;
+ int i;
+ guint merge_id;
+
+ if (window->details->extensions_menu_merge_id != 0) {
+ gtk_ui_manager_remove_ui (window->details->ui_manager,
+ window->details->extensions_menu_merge_id);
+ window->details->extensions_menu_merge_id = 0;
+ }
+
+ if (window->details->extensions_menu_action_group != NULL) {
+ gtk_ui_manager_remove_action_group (window->details->ui_manager,
+ window->details->extensions_menu_action_group);
+ window->details->extensions_menu_action_group = NULL;
+ }
- 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);
+ merge_id = gtk_ui_manager_new_merge_id (window->details->ui_manager);
+ window->details->extensions_menu_merge_id = merge_id;
+ action_group = gtk_action_group_new ("ExtensionsMenuGroup");
+ window->details->extensions_menu_action_group = action_group;
+ gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
+ gtk_ui_manager_insert_action_group (window->details->ui_manager, action_group, 0);
+ g_object_unref (action_group); /* owned by ui manager */
items = get_extension_menus (window);
- for (l = items; l != NULL; l = l->next) {
+ for (l = items, i = 0; l != NULL; l = l->next, i++) {
NautilusMenuItem *item;
item = NAUTILUS_MENU_ITEM (l->data);
- nautilus_bonobo_add_extension_item_command
- (window->details->shell_ui, item);
+ g_object_get (G_OBJECT (item),
+ "name", &name, "label", &label,
+ "tip", &tip, "icon", &icon,
+ "sensitive", &sensitive,
+ "priority", &priority,
+ NULL);
+
+ action = gtk_action_new (name,
+ label,
+ tip,
+ icon);
+
+ /* TODO: This should really use themed icons, but that
+ doesn't work here yet */
+ if (icon != NULL) {
+ pixbuf = nautilus_icon_factory_get_pixbuf_from_name
+ (icon,
+ NULL,
+ NAUTILUS_ICON_SIZE_FOR_MENUS,
+ NULL);
+ if (pixbuf != NULL) {
+ g_object_set_data_full (G_OBJECT (action), "menu-icon",
+ pixbuf,
+ g_object_unref);
+ }
+ }
- 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);
+ gtk_action_set_sensitive (action, sensitive);
+ g_object_set (action, "is-important", priority, NULL);
+ g_signal_connect_data (action, "activate",
+ G_CALLBACK (extension_action_callback),
+ g_object_ref (item),
+ (GClosureNotify)g_object_unref, 0);
+
+ 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,
+ name,
+ name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+
+ gtk_ui_manager_add_ui (window->details->ui_manager,
+ merge_id,
+ POPUP_PATH_EXTENSION_ACTIONS,
+ name,
+ name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+
+ g_free (name);
+ g_free (label);
+ g_free (tip);
+ g_free (icon);
+
g_object_unref (item);
}
diff --git a/src/nautilus-window-private.h b/src/nautilus-window-private.h
index d8ea0f54a..cf2fafbe2 100644
--- a/src/nautilus-window-private.h
+++ b/src/nautilus-window-private.h
@@ -49,19 +49,17 @@ typedef enum {
/* FIXME bugzilla.gnome.org 42575: Migrate more fields into here. */
struct NautilusWindowDetails
{
- /* Bonobo. */
- BonoboUIContainer *ui_container;
- BonoboUIComponent *shell_ui;
- BonoboUIComponent *status_ui;
- gboolean updating_bonobo_state;
-
- int ui_change_depth;
- guint ui_idle_id;
- gboolean ui_is_frozen;
- gboolean ui_pending_initialize_menus_part_2;
-
+ GtkWidget *table;
+ GtkWidget *statusbar;
+ GtkWidget *menubar;
+
+ GtkUIManager *ui_manager;
+ GtkActionGroup *main_action_group; /* owned by ui_manager */
+ guint help_message_cid;
+
/* Menus. */
- guint refresh_go_menu_idle_id;
+ guint extensions_menu_merge_id;
+ GtkActionGroup *extensions_menu_action_group;
/* Current location. */
char *location;
@@ -78,6 +76,11 @@ struct NautilusWindowDetails
NautilusFile *determine_view_file;
/* View As choices */
+ GtkActionGroup *view_as_action_group; /* owned by ui_manager */
+ GtkRadioAction *view_as_radio_action;
+ GtkRadioAction *extra_viewer_radio_action;
+ guint short_list_merge_id;
+ guint extra_viewer_merge_id;
GList *short_list_viewers;
char *extra_viewer;
@@ -90,7 +93,8 @@ struct NautilusWindowDetails
struct _NautilusNavigationWindowDetails {
GtkWidget *content_paned;
-
+ GtkActionGroup *navigation_action_group; /* owned by ui_manager */
+
/* Location bar */
gboolean temporary_navigation_bar;
@@ -99,18 +103,28 @@ struct _NautilusNavigationWindowDetails {
NautilusSidebar *current_side_panel;
/* Menus */
+ GtkActionGroup *bookmarks_action_group;
guint refresh_bookmarks_menu_idle_id;
-
+ guint bookmarks_merge_id;
+
+ GtkActionGroup *go_menu_action_group;
+ guint refresh_go_menu_idle_id;
+ guint go_menu_merge_id;
+
/* Toolbar */
+ GtkWidget *toolbar;
GtkTooltips *tooltips;
+ GtkWidget *location_bar_box;
- GtkWidget *back_button_item;
- GtkWidget *forward_button_item;
-
+ guint extensions_toolbar_merge_id;
+ GtkActionGroup *extensions_toolbar_action_group;
+
+#ifdef BONOBO_DONE
/* Throbber */
gboolean throbber_active;
gboolean throbber_activating;
Bonobo_PropertyBag throbber_property_bag;
+#endif
};
#define NAUTILUS_MENU_PATH_BACK_ITEM "/menu/Go/Back"
@@ -156,28 +170,19 @@ void nautilus_window_set_status (Nautil
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_window_initialize_menus (NautilusWindow *window);
void nautilus_menus_append_bookmark_to_menu (NautilusWindow *window,
- BonoboUIComponent *uic,
NautilusBookmark *bookmark,
const char *parent_path,
guint index_in_parent,
+ GtkActionGroup *action_group,
+ guint merge_id,
GCallback refresh_callback,
NautilusBookmarkFailedCallback failed_callback);
-
-void nautilus_window_handle_ui_event_callback (BonoboUIComponent *ui,
- const char *id,
- Bonobo_UIComponent_EventType type,
- const char *state,
- NautilusWindow *window);
#if NEW_UI_COMPLETE
void nautilus_window_go_up (NautilusWindow *window);
#endif
void nautilus_window_update_find_menu_item (NautilusWindow *window);
-void nautilus_window_remove_go_menu_callback (NautilusWindow *window);
-void nautilus_window_remove_go_menu_items (NautilusWindow *window);
-void nautilus_window_update_show_hide_menu_items (NautilusWindow *window);
void nautilus_window_zoom_in (NautilusWindow *window);
void nautilus_window_zoom_out (NautilusWindow *window);
void nautilus_window_zoom_to_level (NautilusWindow *window,
@@ -186,7 +191,6 @@ void nautilus_window_zoom_to_default (Nautil
void nautilus_window_show_view_as_dialog (NautilusWindow *window);
void nautilus_window_set_content_view_widget (NautilusWindow *window,
NautilusView *content_view);
-Bonobo_UIContainer nautilus_window_get_ui_container (NautilusWindow *window);
void nautilus_window_set_viewed_file (NautilusWindow *window,
NautilusFile *file);
void nautilus_send_history_list_changed (void);
@@ -198,12 +202,14 @@ void nautilus_window_update_icon (NautilusWindow *window);
/* Navigation window menus */
-void nautilus_navigation_window_initialize_menus_part_1 (NautilusNavigationWindow *window);
-void nautilus_navigation_window_initialize_menus_part_2 (NautilusNavigationWindow *window);
+void nautilus_navigation_window_initialize_actions (NautilusNavigationWindow *window);
+void nautilus_navigation_window_initialize_menus (NautilusNavigationWindow *window);
void nautilus_navigation_window_remove_bookmarks_menu_callback (NautilusNavigationWindow *window);
void nautilus_navigation_window_remove_bookmarks_menu_items (NautilusNavigationWindow *window);
void nautilus_navigation_window_update_show_hide_menu_items (NautilusNavigationWindow *window);
+void nautilus_navigation_window_remove_go_menu_callback (NautilusNavigationWindow *window);
+void nautilus_navigation_window_remove_go_menu_items (NautilusNavigationWindow *window);
/* Navigation window toolbar */
void nautilus_navigation_window_activate_throbber (NautilusNavigationWindow *window);
diff --git a/src/nautilus-window-toolbars.c b/src/nautilus-window-toolbars.c
index a86142b81..9f65e0095 100644
--- a/src/nautilus-window-toolbars.c
+++ b/src/nautilus-window-toolbars.c
@@ -33,12 +33,6 @@
#include "nautilus-window-manage-views.h"
#include "nautilus-window-private.h"
#include "nautilus-window.h"
-#include <bonobo/bonobo-control.h>
-#include <bonobo/bonobo-property-bag.h>
-#include <bonobo/bonobo-property-bag-client.h>
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-moniker-util.h>
-#include <bonobo/bonobo-ui-util.h>
#include <eel/eel-gnome-extensions.h>
#include <eel/eel-gtk-extensions.h>
#include <eel/eel-string.h>
@@ -48,7 +42,6 @@
#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>
@@ -68,177 +61,7 @@ enum {
TOOLBAR_ITEM_ORIENTATION_PROP
};
-static void
-activate_back_or_forward_menu_item (GtkMenuItem *menu_item,
- NautilusNavigationWindow *window,
- gboolean back)
-{
- int index;
-
- g_assert (GTK_IS_MENU_ITEM (menu_item));
- g_assert (NAUTILUS_IS_NAVIGATION_WINDOW (window));
-
- index = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu_item), "user_data"));
-
- nautilus_navigation_window_back_or_forward (window, back, index);
-}
-
-static void
-activate_back_menu_item_callback (GtkMenuItem *menu_item, NautilusNavigationWindow *window)
-{
- activate_back_or_forward_menu_item (menu_item, window, TRUE);
-}
-
-static void
-activate_forward_menu_item_callback (GtkMenuItem *menu_item, NautilusNavigationWindow *window)
-{
- activate_back_or_forward_menu_item (menu_item, window, FALSE);
-}
-
-static GtkMenu *
-create_back_or_forward_menu (NautilusNavigationWindow *window, gboolean back)
-{
- GtkMenu *menu;
- GtkWidget *menu_item;
- GList *list_link;
- int index;
-
- g_assert (NAUTILUS_IS_NAVIGATION_WINDOW (window));
-
- menu = GTK_MENU (gtk_menu_new ());
-
- list_link = back ? window->back_list : window->forward_list;
- index = 0;
- while (list_link != NULL)
- {
- menu_item = nautilus_bookmark_menu_item_new (NAUTILUS_BOOKMARK (list_link->data));
- g_object_set_data (G_OBJECT (menu_item), "user_data", GINT_TO_POINTER (index));
- gtk_widget_show (GTK_WIDGET (menu_item));
- g_signal_connect_object (menu_item, "activate",
- back
- ? G_CALLBACK (activate_back_menu_item_callback)
- : G_CALLBACK (activate_forward_menu_item_callback),
- window, 0);
-
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
- list_link = g_list_next (list_link);
- ++index;
- }
-
- return menu;
-}
-
-static GtkWidget *
-get_back_button (NautilusNavigationWindow *window)
-{
- return window->details->back_button_item;
-}
-
-static GtkWidget *
-get_forward_button (NautilusNavigationWindow *window)
-{
- return window->details->forward_button_item;
-}
-
-static void
-menu_position_under_widget (GtkMenu *menu, int *x, int *y,
- gboolean *push_in, gpointer user_data)
-{
- GtkWidget *w;
- int screen_width, screen_height;
- GtkRequisition requisition;
-
- w = GTK_WIDGET (user_data);
-
- gdk_window_get_origin (w->window, x, y);
- *x += w->allocation.x;
- *y += w->allocation.y + w->allocation.height;
-
- gtk_widget_size_request (GTK_WIDGET (menu), &requisition);
-
- screen_width = gdk_screen_width ();
- screen_height = gdk_screen_height ();
-
- *x = CLAMP (*x, 0, MAX (0, screen_width - requisition.width));
- *y = CLAMP (*y, 0, MAX (0, screen_height - requisition.height));
-}
-
-static gboolean
-back_or_forward_button_pressed_callback (GtkWidget *widget,
- GdkEventButton *event,
- gpointer *user_data)
-{
- NautilusNavigationWindow *window;
- gboolean back;
-
- g_return_val_if_fail (GTK_IS_BUTTON (widget), FALSE);
- g_return_val_if_fail (NAUTILUS_IS_NAVIGATION_WINDOW (user_data), FALSE);
-
- window = NAUTILUS_NAVIGATION_WINDOW (user_data);
-
- back = widget == get_back_button (window);
- g_assert (back || widget == get_forward_button (window));
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
-
- gnome_popup_menu_do_popup_modal (GTK_WIDGET (create_back_or_forward_menu (NAUTILUS_NAVIGATION_WINDOW (user_data), back)),
- menu_position_under_widget, widget, event, widget, widget);
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
-
- return TRUE;
-}
-
-static gboolean
-back_or_forward_key_pressed_callback (GtkWidget *widget,
- GdkEventKey *event,
- gpointer *user_data)
-{
- if (event->keyval == GDK_space ||
- event->keyval == GDK_KP_Space ||
- event->keyval == GDK_Return ||
- event->keyval == GDK_KP_Enter) {
- back_or_forward_button_pressed_callback (widget, NULL, user_data);
- }
-
- return FALSE;
-}
-
-static GtkWidget *
-create_back_or_forward_toolbar_item (NautilusNavigationWindow *window,
- const char *tooltip,
- const char *control_path)
-{
- GtkWidget *button;
-
- button = gtk_toggle_button_new ();
-
- gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
-
- gtk_container_add (GTK_CONTAINER (button),
- gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_OUT));
-
- gtk_widget_show_all (GTK_WIDGET (button));
-
- gtk_tooltips_set_tip (window->details->tooltips,
- GTK_WIDGET (button),
- tooltip, NULL);
-
- g_signal_connect_object (button, "key_press_event",
- G_CALLBACK (back_or_forward_key_pressed_callback),
- window, 0);
- g_signal_connect_object (button, "button_press_event",
- G_CALLBACK (back_or_forward_button_pressed_callback),
- window, 0);
-
- bonobo_ui_component_widget_set (NAUTILUS_WINDOW (window)->details->shell_ui,
- control_path,
- button,
- NULL);
-
- return button;
-}
-
+#ifdef BONOBO_DONE
static void
throbber_set_throbbing (NautilusNavigationWindow *window,
gboolean throbbing)
@@ -296,10 +119,13 @@ throbber_created_callback (Bonobo_Unknown throbber,
g_object_unref (window);
}
+#endif
+
void
nautilus_navigation_window_set_throbber_active (NautilusNavigationWindow *window,
gboolean allow)
{
+#ifdef BONOBO_DONE
if (( window->details->throbber_active && allow) ||
(!window->details->throbber_active && !allow)) {
return;
@@ -317,11 +143,13 @@ nautilus_navigation_window_set_throbber_active (NautilusNavigationWindow *window
if (window->details->throbber_property_bag != CORBA_OBJECT_NIL) {
throbber_set_throbbing (window, allow);
}
+#endif
}
void
nautilus_navigation_window_activate_throbber (NautilusNavigationWindow *window)
{
+#ifdef BONOBO_DONE
CORBA_Environment ev;
char *exception_as_text;
@@ -352,34 +180,16 @@ nautilus_navigation_window_activate_throbber (NautilusNavigationWindow *window)
CORBA_exception_free (&ev);
window->details->throbber_activating = TRUE;
}
+#endif
}
void
nautilus_navigation_window_initialize_toolbars (NautilusNavigationWindow *window)
{
- GtkWidget *space;
-
- nautilus_window_ui_freeze (NAUTILUS_WINDOW (window));
-
nautilus_navigation_window_activate_throbber (window);
-
- window->details->back_button_item = create_back_or_forward_toolbar_item
- (window, _("Go back a few pages"),
- "/Toolbar/BackMenu");
- window->details->forward_button_item = create_back_or_forward_toolbar_item
- (window, _("Go forward a number of pages"),
- "/Toolbar/ForwardMenu");
-
- space = gtk_event_box_new ();
- gtk_event_box_set_visible_window (GTK_EVENT_BOX (space), FALSE);
- bonobo_ui_component_widget_set (NAUTILUS_WINDOW (window)->details->shell_ui,
- "/Toolbar/SpaceWrapper",
- space,
- NULL);
-
- nautilus_window_ui_thaw (NAUTILUS_WINDOW (window));
}
+
static GList *
get_extension_toolbar_items (NautilusNavigationWindow *window)
{
@@ -407,15 +217,47 @@ get_extension_toolbar_items (NautilusNavigationWindow *window)
return items;
}
+static void
+extension_action_callback (GtkAction *action,
+ gpointer callback_data)
+{
+ nautilus_menu_item_activate (NAUTILUS_MENU_ITEM (callback_data));
+}
+
void
nautilus_navigation_window_load_extension_toolbar_items (NautilusNavigationWindow *window)
{
+ char *name, *label, *tip, *icon;
+ gboolean sensitive, priority;
+ GtkActionGroup *action_group;
+ GtkAction *action;
+ GdkPixbuf *pixbuf;
+ GtkUIManager *ui_manager;
GList *items;
GList *l;
- nautilus_bonobo_remove_menu_items_and_commands
- (NAUTILUS_WINDOW (window)->details->shell_ui,
- TOOLBAR_PATH_EXTENSION_ACTIONS);
+ guint merge_id;
+
+ ui_manager = nautilus_window_get_ui_manager (NAUTILUS_WINDOW (window));
+ if (window->details->extensions_toolbar_merge_id != 0) {
+ gtk_ui_manager_remove_ui (ui_manager,
+ window->details->extensions_toolbar_merge_id);
+ window->details->extensions_toolbar_merge_id = 0;
+ }
+
+ if (window->details->extensions_toolbar_action_group != NULL) {
+ gtk_ui_manager_remove_action_group (ui_manager,
+ window->details->extensions_toolbar_action_group);
+ window->details->extensions_toolbar_action_group = NULL;
+ }
+
+ merge_id = gtk_ui_manager_new_merge_id (ui_manager);
+ window->details->extensions_toolbar_merge_id = merge_id;
+ action_group = gtk_action_group_new ("ExtensionsMenuGroup");
+ window->details->extensions_toolbar_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 */
items = get_extension_toolbar_items (window);
@@ -424,14 +266,58 @@ nautilus_navigation_window_load_extension_toolbar_items (NautilusNavigationWindo
item = NAUTILUS_MENU_ITEM (l->data);
- nautilus_bonobo_add_extension_item_command
- (NAUTILUS_WINDOW (window)->details->shell_ui, item);
+ g_object_get (G_OBJECT (item),
+ "name", &name, "label", &label,
+ "tip", &tip, "icon", &icon,
+ "sensitive", &sensitive,
+ "priority", &priority,
+ NULL);
+
+ action = gtk_action_new (name,
+ label,
+ tip,
+ icon);
+
+ /* TODO: This should really use themed icons, but that
+ doesn't work here yet */
+ if (icon != NULL) {
+ pixbuf = nautilus_icon_factory_get_pixbuf_from_name
+ (icon,
+ NULL,
+ /*BONOBOTODO: size */48,
+ NULL);
+ if (pixbuf != NULL) {
+ g_object_set_data_full (G_OBJECT (action), "toolbar-icon",
+ pixbuf,
+ g_object_unref);
+ }
+ }
- nautilus_bonobo_add_extension_toolbar_item
- (NAUTILUS_WINDOW (window)->details->shell_ui,
- TOOLBAR_PATH_EXTENSION_ACTIONS,
- item);
+ gtk_action_set_sensitive (action, sensitive);
+ g_object_set (action, "is-important", priority, NULL);
+ g_signal_connect_data (action, "activate",
+ G_CALLBACK (extension_action_callback),
+ g_object_ref (item),
+ (GClosureNotify)g_object_unref, 0);
+
+ gtk_action_group_add_action (action_group,
+ GTK_ACTION (action));
+ g_object_unref (action);
+
+ gtk_ui_manager_add_ui (ui_manager,
+ merge_id,
+ TOOLBAR_PATH_EXTENSION_ACTIONS,
+ name,
+ name,
+ GTK_UI_MANAGER_TOOLITEM,
+ FALSE);
+
+ g_free (name);
+ g_free (label);
+ g_free (tip);
+ g_free (icon);
+
g_object_unref (item);
}
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 3480c0518..ddeb03c86 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -3,7 +3,7 @@
/*
* Nautilus
*
- * Copyright (C) 1999, 2000 Red Hat, Inc.
+ * Copyright (C) 1999, 2000, 2004 Red Hat, Inc.
* Copyright (C) 1999, 2000, 2001 Eazel, Inc.
*
* Nautilus is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
*
* Authors: Elliot Lee <sopwith@redhat.com>
* John Sullivan <sullivan@eazel.com>
- *
+ * Alexander Larsson <alexl@redhat.com>
*/
/* nautilus-window.c: Implementation of the main window object */
@@ -30,6 +30,7 @@
#include <config.h>
#include "nautilus-window-private.h"
+#include "nautilus-actions.h"
#include "nautilus-application.h"
#include "nautilus-bookmarks-window.h"
#include "nautilus-information-panel.h"
@@ -37,9 +38,6 @@
#include "nautilus-signaller.h"
#include "nautilus-window-manage-views.h"
#include "nautilus-zoom-control.h"
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-property-bag-client.h>
-#include <bonobo/bonobo-ui-util.h>
#include <eel/eel-debug.h>
#include <eel/eel-gdk-extensions.h>
#include <eel/eel-gdk-pixbuf-extensions.h>
@@ -64,7 +62,6 @@
#include <libgnomeui/gnome-window-icon.h>
#include <libgnomevfs/gnome-vfs-uri.h>
#include <libgnomevfs/gnome-vfs-utils.h>
-#include <libnautilus-private/nautilus-bonobo-extensions.h>
#include <libnautilus-private/nautilus-file-utilities.h>
#include <libnautilus-private/nautilus-file-attributes.h>
#include <libnautilus-private/nautilus-global-preferences.h>
@@ -74,7 +71,6 @@
#include <libnautilus-private/nautilus-mime-actions.h>
#include <libnautilus-private/nautilus-program-choosing.h>
#include <libnautilus-private/nautilus-view-factory.h>
-#include <libnautilus-private/nautilus-bonobo-ui.h>
#include <libnautilus-private/nautilus-clipboard.h>
#include <libnautilus-private/nautilus-undo.h>
#include <math.h>
@@ -93,19 +89,10 @@
#define SIDE_PANE_MINIMUM_HEIGHT 400
/* dock items */
-#define LOCATION_BAR_PATH "/Location Bar"
-#define TOOLBAR_PATH "/Toolbar"
-#define STATUS_BAR_PATH "/status"
-#define MENU_BAR_PATH "/menu"
-
-#define COMMAND_PREFIX "/commands/"
-#define NAUTILUS_COMMAND_TOGGLE_FIND_MODE "/commands/Toggle Find Mode"
-#define NAUTILUS_COMMAND_VIEW_AS "/commands/View as"
-#define NAUTILUS_MENU_PATH_EXTRA_VIEWER_PLACEHOLDER "/menu/View/View Choices/Extra Viewer"
-#define NAUTILUS_MENU_PATH_BEFORE_SHORT_LIST_SEPARATOR "/menu/View/View Choices/Before Short List"
-#define NAUTILUS_MENU_PATH_SHORT_LIST_PLACEHOLDER "/menu/View/View Choices/Short List"
-#define NAUTILUS_MENU_PATH_AFTER_SHORT_LIST_SEPARATOR "/menu/View/View Choices/After Short List"
+#define NAUTILUS_MENU_PATH_EXTRA_VIEWER_PLACEHOLDER "/MenuBar/View/View Choices/Extra Viewer"
+#define NAUTILUS_MENU_PATH_SHORT_LIST_PLACEHOLDER "/MenuBar/View/View Choices/Short List"
+#define NAUTILUS_MENU_PATH_AFTER_SHORT_LIST_SEPARATOR "/MenuBar/View/View Choices/After Short List"
enum {
ARG_0,
@@ -115,13 +102,15 @@ enum {
static void cancel_view_as_callback (NautilusWindow *window);
static void nautilus_window_info_iface_init (NautilusWindowInfoIface *iface);
+static void set_initial_window_geometry (NautilusWindow *window);
static GList *history_list;
-G_DEFINE_TYPE_WITH_CODE (NautilusWindow, nautilus_window, BONOBO_TYPE_WINDOW,
+G_DEFINE_TYPE_WITH_CODE (NautilusWindow, nautilus_window, GTK_TYPE_WINDOW,
G_IMPLEMENT_INTERFACE (NAUTILUS_TYPE_WINDOW_INFO,
nautilus_window_info_iface_init));
+
static void
set_up_default_icon_list (void)
{
@@ -163,23 +152,48 @@ icons_changed_callback (GObject *factory, NautilusWindow *window)
static void
nautilus_window_init (NautilusWindow *window)
{
+ GtkWidget *table;
+ GtkWidget *menu;
+ GtkWidget *statusbar;
+
window->details = g_new0 (NautilusWindowDetails, 1);
window->details->show_hidden_files_mode = NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_DEFAULT;
- /* CORBA and Bonobo setup, which must be done before the location bar setup */
- window->details->ui_container = bonobo_window_get_ui_container (BONOBO_WINDOW (window));
- bonobo_object_ref (window->details->ui_container);
-
/* Set initial window title */
gtk_window_set_title (GTK_WINDOW (window), _("Nautilus"));
- window->details->shell_ui = bonobo_ui_component_new ("Nautilus Shell");
- bonobo_ui_component_set_container
- (window->details->shell_ui,
- nautilus_window_get_ui_container (window),
- NULL);
+ table = gtk_table_new (1, 5, FALSE);
+ window->details->table = table;
+ gtk_widget_show (table);
+ gtk_container_add (GTK_CONTAINER (window), table);
+
+
+ statusbar = gtk_statusbar_new ();
+ window->details->statusbar = statusbar;
+ gtk_table_attach (GTK_TABLE (table),
+ statusbar,
+ /* X direction */ /* Y direction */
+ 0, 1, 4, 5,
+ GTK_EXPAND | GTK_FILL, 0,
+ 0, 0);
+ window->details->help_message_cid = gtk_statusbar_get_context_id
+ (GTK_STATUSBAR (statusbar), "help_message");
+ gtk_widget_show (statusbar);
+
+ nautilus_window_initialize_menus (window);
+
+ menu = gtk_ui_manager_get_widget (window->details->ui_manager, "/MenuBar");
+ window->details->menubar = menu;
+ gtk_widget_show (menu);
+ gtk_table_attach (GTK_TABLE (table),
+ menu,
+ /* X direction */ /* Y direction */
+ 0, 1, 0, 1,
+ GTK_EXPAND | GTK_FILL, 0,
+ 0, 0);
+
/* Register IconFactory callback to update the window border icon
* when the icon-theme is changed.
*/
@@ -187,144 +201,27 @@ nautilus_window_init (NautilusWindow *window)
G_CALLBACK (icons_changed_callback), window,
0);
- /* Create a separate component so when we remove the status
- * we don't loose the status bar
- */
- window->details->status_ui = bonobo_ui_component_new ("Status Component");
- bonobo_ui_component_set_container
- (window->details->status_ui,
- nautilus_window_get_ui_container (window),
- NULL);
-
gtk_quit_add_destroy (1, GTK_OBJECT (window));
/* Keep the main event loop alive as long as the window exists */
nautilus_main_event_loop_register (GTK_OBJECT (window));
-}
-
-static gint
-ui_idle_handler (gpointer data)
-{
- NautilusWindow *window;
- gboolean old_updating_bonobo_state;
-
- window = data;
-
- g_assert (NAUTILUS_IS_WINDOW (window));
- g_object_ref (data);
-
- g_assert (window->details->ui_change_depth == 0);
-
- /* Simulate an extra freeze/thaw so that calling window_ui_freeze
- * and thaw from within the idle handler doesn't try to remove it
- * (the already running idle handler)
- */
- window->details->ui_change_depth++;
- old_updating_bonobo_state = window->details->updating_bonobo_state;
-
- if (window->details->ui_pending_initialize_menus_part_2) {
- EEL_CALL_METHOD (NAUTILUS_WINDOW_CLASS, window,
- merge_menus_2, (window));
- }
-
- if (window->details->ui_is_frozen) {
- window->details->updating_bonobo_state = TRUE;
- bonobo_ui_engine_thaw (bonobo_ui_container_get_engine (window->details->ui_container));
- window->details->ui_is_frozen = FALSE;
- window->details->updating_bonobo_state = old_updating_bonobo_state;
- }
-
- window->details->ui_change_depth--;
-
- window->details->ui_idle_id = 0;
- g_object_unref (data);
-
- return FALSE;
-}
-
-static inline void
-ui_install_idle_handler (NautilusWindow *window)
-{
- if (window->details->ui_idle_id == 0) {
- window->details->ui_idle_id = g_idle_add_full (G_PRIORITY_LOW, ui_idle_handler, window, NULL);
- }
-}
-
-static inline void
-ui_remove_idle_handler (NautilusWindow *window)
-{
- if (window->details->ui_idle_id != 0) {
- g_source_remove (window->details->ui_idle_id);
- window->details->ui_idle_id = 0;
- }
-}
-
-/* Register that BonoboUI changes are going to be made to WINDOW. The UI
- * won't actually be synchronised until some arbitrary date in the future.
- */
-void
-nautilus_window_ui_freeze (NautilusWindow *window)
-{
- g_object_ref (window);
-
- if (window->details->ui_change_depth == 0) {
- ui_remove_idle_handler (window);
- }
-
- if (!window->details->ui_is_frozen) {
- bonobo_ui_engine_freeze (bonobo_ui_container_get_engine (window->details->ui_container));
- window->details->ui_is_frozen = TRUE;
- }
-
- window->details->ui_change_depth++;
-}
-
-/* Register that the BonoboUI changes for WINDOW have finished. There _must_
- * be one and only one call to this function for every call to
- * starting_ui_change ()
- */
-void
-nautilus_window_ui_thaw (NautilusWindow *window)
-{
- window->details->ui_change_depth--;
-
- g_assert (window->details->ui_change_depth >= 0);
-
- if (window->details->ui_change_depth == 0
- && (window->details->ui_is_frozen
- || window->details->ui_pending_initialize_menus_part_2)) {
- ui_install_idle_handler (window);
- }
+ set_initial_window_geometry (window);
+
+ nautilus_window_allow_stop (window, FALSE);
- g_object_unref (window);
+#ifdef BONOBO_DONE
+ /* BONOBOTODO: this crashes, because ->application is not set in initializer */
+ /* Set up undo manager */
+ nautilus_undo_manager_attach (window->application->undo_manager, G_OBJECT (window));
+#endif
}
-/* Unconditionally synchronize the BonoboUI of WINDOW. */
+/* Unconditionally synchronize the GtkUIManager of WINDOW. */
static void
nautilus_window_ui_update (NautilusWindow *window)
{
- BonoboUIEngine *engine;
- gboolean old_updating_bonobo_state;
-
- engine = bonobo_ui_container_get_engine (window->details->ui_container);
- old_updating_bonobo_state = window->details->updating_bonobo_state;
-
- window->details->updating_bonobo_state = TRUE;
- if (window->details->ui_is_frozen) {
- bonobo_ui_engine_thaw (engine);
- if (window->details->ui_change_depth == 0) {
- window->details->ui_is_frozen = FALSE;
- if (!window->details->ui_pending_initialize_menus_part_2) {
- ui_remove_idle_handler (window);
- }
- } else {
- bonobo_ui_engine_freeze (engine);
- }
- } else {
- bonobo_ui_engine_update (engine);
- }
- window->details->updating_bonobo_state = old_updating_bonobo_state;
+ gtk_ui_manager_ensure_update (window->details->ui_manager);
}
static gboolean
@@ -334,7 +231,7 @@ nautilus_window_clear_status (gpointer callback_data)
window = NAUTILUS_WINDOW (callback_data);
- bonobo_ui_component_set_status (window->details->status_ui, NULL, NULL);
+ gtk_statusbar_pop (GTK_STATUSBAR (window->details->statusbar), 0); /* clear any previous message, underflow is allowed */
return FALSE;
}
@@ -343,7 +240,7 @@ void
nautilus_window_set_status (NautilusWindow *window, const char *text)
{
if (text != NULL && text[0] != '\0') {
- bonobo_ui_component_set_status (window->details->status_ui, text, NULL);
+ gtk_statusbar_push (GTK_STATUSBAR (window->details->statusbar), 0, text);
} else {
nautilus_window_clear_status (window);
}
@@ -396,43 +293,42 @@ nautilus_window_go_up (NautilusWindow *window, gboolean close_behind)
void
nautilus_window_allow_up (NautilusWindow *window, gboolean allow)
{
+ GtkAction *action;
+
g_return_if_fail (NAUTILUS_IS_WINDOW (window));
- nautilus_window_ui_freeze (window);
-
- nautilus_bonobo_set_sensitive (window->details->shell_ui,
- NAUTILUS_COMMAND_UP, allow);
+ action = gtk_action_group_get_action (window->details->main_action_group,
+ NAUTILUS_ACTION_UP);
+ gtk_action_set_sensitive (action, allow);
- nautilus_window_ui_thaw (window);
}
void
nautilus_window_allow_stop (NautilusWindow *window, gboolean allow)
{
+ GtkAction *action;
+
g_return_if_fail (NAUTILUS_IS_WINDOW (window));
- nautilus_window_ui_freeze (window);
-
- nautilus_bonobo_set_sensitive (window->details->shell_ui,
- NAUTILUS_COMMAND_STOP, allow);
-
+ action = gtk_action_group_get_action (window->details->main_action_group,
+ NAUTILUS_ACTION_STOP);
+ gtk_action_set_sensitive (action, allow);
+
EEL_CALL_METHOD (NAUTILUS_WINDOW_CLASS, window,
set_throbber_active, (window, allow));
-
- nautilus_window_ui_thaw (window);
}
void
nautilus_window_allow_reload (NautilusWindow *window, gboolean allow)
{
+ GtkAction *action;
+
g_return_if_fail (NAUTILUS_IS_WINDOW (window));
- nautilus_window_ui_freeze (window);
-
- nautilus_bonobo_set_sensitive (window->details->shell_ui,
- NAUTILUS_COMMAND_RELOAD, allow);
+ action = gtk_action_group_get_action (window->details->main_action_group,
+ NAUTILUS_ACTION_RELOAD);
+ gtk_action_set_sensitive (action, allow);
- nautilus_window_ui_thaw (window);
}
void
@@ -568,57 +464,11 @@ set_initial_window_geometry (NautilusWindow *window)
}
static void
-real_merge_menus (NautilusWindow *window)
-{
- /* Load the user interface from the XML file. */
- bonobo_ui_util_set_ui (window->details->shell_ui,
- DATADIR,
- "nautilus-shell-ui.xml",
- "nautilus", NULL);
-
-
- bonobo_ui_component_freeze (window->details->shell_ui, NULL);
-
- bonobo_ui_component_thaw (window->details->shell_ui, NULL);
-
- /* initalize the menus and toolbars */
- nautilus_window_initialize_menus_part_1 (window);
-
- /* We'll do the second part later (bookmarks and go menus) */
- window->details->ui_pending_initialize_menus_part_2 = TRUE;
-}
-
-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);
-
- set_initial_window_geometry (window);
-
- EEL_CALL_METHOD (NAUTILUS_WINDOW_CLASS, window,
- merge_menus, (window));
-
- nautilus_window_allow_stop (window, FALSE);
-
- /* Set up undo manager */
- nautilus_undo_manager_attach (window->application->undo_manager, G_OBJECT (window));
-
- nautilus_window_ui_thaw (window);
-}
-
-static void
nautilus_window_set_property (GObject *object,
guint arg_id,
- const GValue *value,
+ const GValue *value,
GParamSpec *pspec)
{
- char *old_name;
NautilusWindow *window;
window = NAUTILUS_WINDOW (object);
@@ -628,17 +478,7 @@ nautilus_window_set_property (GObject *object,
if (g_value_get_string (value) == NULL) {
return;
}
- old_name = bonobo_window_get_name (BONOBO_WINDOW (window));
- bonobo_window_set_name (BONOBO_WINDOW (window), g_value_get_string (value));
- /* This hack of using the time when the name first
- * goes non-NULL to be window-constructed time is
- * completely lame. But it works, so for now we leave
- * it alone.
- */
- if (old_name == NULL) {
- nautilus_window_constructed (window);
- }
- g_free (old_name);
+ /* BONOBOTODO: WTF? */
break;
case ARG_APP:
window->application = NAUTILUS_APPLICATION (g_value_get_object (value));
@@ -654,9 +494,9 @@ nautilus_window_get_property (GObject *object,
{
switch (arg_id) {
case ARG_APP_ID:
- g_value_set_string_take_ownership (
- value,
- bonobo_window_get_name (BONOBO_WINDOW (object)));
+ /* BONOBOTODO: WTF? */
+ g_value_set_static_string (value,
+ "none");
break;
case ARG_APP:
g_value_set_object (value, NAUTILUS_WINDOW (object)->application);
@@ -702,23 +542,6 @@ nautilus_window_finalize (GObject *object)
nautilus_window_manage_views_finalize (window);
nautilus_window_set_viewed_file (window, NULL);
- nautilus_window_remove_go_menu_callback (window);
-
- if (window->details->ui_idle_id != 0) {
- g_source_remove (window->details->ui_idle_id);
- }
-
- if (window->details->shell_ui != NULL) {
- bonobo_ui_component_unset_container (window->details->shell_ui, NULL);
- bonobo_object_unref (window->details->shell_ui);
- window->details->shell_ui = NULL;
- }
-
- if (window->details->status_ui != NULL) {
- bonobo_ui_component_unset_container (window->details->status_ui, NULL);
- bonobo_object_unref (window->details->status_ui);
- window->details->status_ui = NULL;
- }
nautilus_file_unref (window->details->viewed_file);
@@ -734,7 +557,7 @@ nautilus_window_finalize (GObject *object)
g_object_unref (window->last_location_bookmark);
}
- bonobo_object_unref (window->details->ui_container);
+ g_object_unref (window->details->ui_manager);
if (window->details->location_change_at_idle_id != 0) {
g_source_remove (window->details->location_change_at_idle_id);
@@ -803,93 +626,92 @@ nautilus_window_size_request (GtkWidget *widget,
* Main API
*/
+typedef struct {
+ NautilusWindow *window;
+ char *id;
+} ActivateViewData;
+
static void
-activate_nth_short_list_item (NautilusWindow *window, guint index)
+free_activate_view_data (gpointer data)
{
- g_assert (NAUTILUS_IS_WINDOW (window));
- g_assert (index < g_list_length (window->details->short_list_viewers));
+ ActivateViewData *activate_data;
- nautilus_window_set_content_view (window,
- g_list_nth_data (window->details->short_list_viewers, index));
-}
+ activate_data = data;
-static void
-activate_extra_viewer (NautilusWindow *window)
-{
- g_assert (NAUTILUS_IS_WINDOW (window));
- g_assert (window->details->extra_viewer != NULL);
-
- nautilus_window_set_content_view (window, window->details->extra_viewer);
+ g_free (activate_data->id);
+ g_free (activate_data);
}
static void
-handle_view_as_item_from_bonobo_menu (NautilusWindow *window, const char *id)
+action_view_as_callback (GtkAction *action,
+ ActivateViewData *data)
{
- char *container_path;
-
- container_path = nautilus_bonobo_get_numbered_menu_item_container_path_from_command (id);
-
- if (eel_strcmp (container_path, NAUTILUS_MENU_PATH_SHORT_LIST_PLACEHOLDER) == 0) {
- activate_nth_short_list_item
- (window,
- nautilus_bonobo_get_numbered_menu_item_index_from_command (id));
- } else if (eel_strcmp (container_path, NAUTILUS_MENU_PATH_EXTRA_VIEWER_PLACEHOLDER) == 0) {
- g_return_if_fail
- (nautilus_bonobo_get_numbered_menu_item_index_from_command (id) == 0);
- activate_extra_viewer (window);
- }
-
- g_free (container_path);
+ nautilus_window_set_content_view (data->window,
+ data->id);
}
-void
-nautilus_window_handle_ui_event_callback (BonoboUIComponent *ui,
- const char *id,
- Bonobo_UIComponent_EventType type,
- const char *state,
- NautilusWindow *window)
-{
- if (!window->details->updating_bonobo_state
- && type == Bonobo_UIComponent_STATE_CHANGED
- && strcmp (state, "1") == 0) {
- handle_view_as_item_from_bonobo_menu (window, id);
- }
-}
-
-static void
-add_view_as_bonobo_menu_item (NautilusWindow *window,
- const char *placeholder_path,
- const char *identifier,
- int index)
+static GtkRadioAction *
+add_view_as_menu_item (NautilusWindow *window,
+ const char *placeholder_path,
+ const char *identifier,
+ int index, /* extra_viewer is always index 0 */
+ guint merge_id)
{
char *tip;
- char *item_path;
const NautilusViewInfo *info;
char *label;
+ GtkRadioAction *action;
+ char *action_name;
+ ActivateViewData *data;
info = nautilus_view_factory_lookup (identifier);
/* BONOBOTODO: nicer way for labels */
label = g_strdup_printf (_("View as %s"), _(info->label_with_mnemonic));
-
- nautilus_bonobo_add_numbered_radio_menu_item
- (window->details->shell_ui,
- placeholder_path,
- index,
- label,
- "viewers group");
- g_free (label);
-
/* BONOBOTODO: nicer way for labels */
tip = g_strdup_printf (_("Display this location with \"%s\""),
_(info->label));
- item_path = nautilus_bonobo_get_numbered_menu_item_path
- (window->details->shell_ui,
- placeholder_path,
- index);
- nautilus_bonobo_set_tip (window->details->shell_ui, item_path, tip);
- g_free (item_path);
+
+ action_name = g_strdup_printf ("view_as_%d", index);
+ action = gtk_radio_action_new (action_name,
+ label,
+ tip,
+ NULL,
+ 0);
+
+ if (window->details->view_as_radio_action != NULL) {
+ gtk_radio_action_set_group (action,
+ gtk_radio_action_get_group (window->details->view_as_radio_action));
+ } else if (index != 0) {
+ /* Index 0 is the extra view, and we don't want to use that here,
+ as it can get deleted/changed later */
+ window->details->view_as_radio_action = action;
+ }
+
+ g_free (label);
g_free (tip);
+
+ data = g_new (ActivateViewData, 1);
+ data->window = window;
+ data->id = g_strdup (identifier);
+ g_signal_connect_data (action, "activate",
+ G_CALLBACK (action_view_as_callback),
+ data, (GClosureNotify) free_activate_view_data, 0);
+
+ gtk_action_group_add_action (window->details->view_as_action_group,
+ GTK_ACTION (action));
+ g_object_unref (action);
+
+ gtk_ui_manager_add_ui (window->details->ui_manager,
+ merge_id,
+ placeholder_path,
+ action_name,
+ action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+ g_free (action_name);
+
+ return action; /* return value owned by group */
}
/* Make a special first item in the "View as" option menu that represents
@@ -917,15 +739,26 @@ update_extra_viewer_in_view_as_menus (NautilusWindow *window,
g_free (window->details->extra_viewer);
window->details->extra_viewer = g_strdup (id);
- /* Also update the Bonobo View menu item */
- if (id == NULL) {
- nautilus_bonobo_remove_menu_items_and_commands
- (window->details->shell_ui, NAUTILUS_MENU_PATH_EXTRA_VIEWER_PLACEHOLDER);
- } else {
- add_view_as_bonobo_menu_item (window,
- NAUTILUS_MENU_PATH_EXTRA_VIEWER_PLACEHOLDER,
- window->details->extra_viewer,
- 0);
+ if (window->details->extra_viewer_merge_id != 0) {
+ gtk_ui_manager_remove_ui (window->details->ui_manager,
+ window->details->extra_viewer_merge_id);
+ window->details->extra_viewer_merge_id = 0;
+ }
+
+ if (window->details->extra_viewer_radio_action != NULL) {
+ gtk_action_group_remove_action (window->details->view_as_action_group,
+ GTK_ACTION (window->details->extra_viewer_radio_action));
+ window->details->extra_viewer_radio_action = NULL;
+ }
+
+ if (id != NULL) {
+ window->details->extra_viewer_merge_id = gtk_ui_manager_new_merge_id (window->details->ui_manager);
+ window->details->extra_viewer_radio_action =
+ add_view_as_menu_item (window,
+ NAUTILUS_MENU_PATH_EXTRA_VIEWER_PLACEHOLDER,
+ window->details->extra_viewer,
+ 0,
+ window->details->extra_viewer_merge_id);
}
}
@@ -957,17 +790,16 @@ static void
nautilus_window_synch_view_as_menus (NautilusWindow *window)
{
int index;
- char *verb_name, *command_path;
+ char *action_name;
GList *node;
- const char *numbered_menu_item_container_path;
+ GtkAction *action;
g_return_if_fail (NAUTILUS_IS_WINDOW (window));
if (window->content_view == NULL) {
return;
}
-
- for (node = window->details->short_list_viewers, index = 0;
+ for (node = window->details->short_list_viewers, index = 1;
node != NULL;
node = node->next, ++index) {
if (nautilus_window_content_view_matches_iid (window, (char *)node->data)) {
@@ -977,22 +809,16 @@ nautilus_window_synch_view_as_menus (NautilusWindow *window)
if (node == NULL) {
replace_extra_viewer_in_view_as_menus (window);
index = 0;
- numbered_menu_item_container_path = NAUTILUS_MENU_PATH_EXTRA_VIEWER_PLACEHOLDER;
} else {
remove_extra_viewer_in_view_as_menus (window);
- numbered_menu_item_container_path = NAUTILUS_MENU_PATH_SHORT_LIST_PLACEHOLDER;
}
- g_assert (numbered_menu_item_container_path != NULL);
+ action_name = g_strdup_printf ("view_as_%d", index);
+ action = gtk_action_group_get_action (window->details->view_as_action_group,
+ action_name);
+ g_free (action_name);
- /* Make View menu in menu bar mark the right item */
- verb_name = nautilus_bonobo_get_numbered_menu_item_command
- (window->details->shell_ui,
- numbered_menu_item_container_path, index);
- command_path = g_strconcat (COMMAND_PREFIX, verb_name, NULL);
- nautilus_bonobo_set_toggle_state (window->details->shell_ui, command_path, TRUE);
- g_free (command_path);
- g_free (verb_name);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
}
static void
@@ -1018,33 +844,56 @@ real_load_view_as_menu (NautilusWindow *window)
{
GList *node;
int index;
+ guint merge_id;
+
+ if (window->details->short_list_merge_id != 0) {
+ gtk_ui_manager_remove_ui (window->details->ui_manager,
+ window->details->short_list_merge_id);
+ window->details->short_list_merge_id = 0;
+ }
+ if (window->details->view_as_action_group != NULL) {
+ gtk_ui_manager_remove_action_group (window->details->ui_manager,
+ window->details->view_as_action_group);
+ window->details->view_as_action_group = NULL;
+ }
- /* Clear out the menu items created last time. For the option menu, we need do
- * nothing since we replace the entire menu. For the View menu, we have
- * to do this explicitly.
- */
- nautilus_bonobo_remove_menu_items_and_commands
- (window->details->shell_ui, NAUTILUS_MENU_PATH_SHORT_LIST_PLACEHOLDER);
- nautilus_bonobo_remove_menu_items_and_commands
- (window->details->shell_ui, NAUTILUS_MENU_PATH_EXTRA_VIEWER_PLACEHOLDER);
-
+ if (window->details->extra_viewer_merge_id != 0) {
+ gtk_ui_manager_remove_ui (window->details->ui_manager,
+ window->details->extra_viewer_merge_id);
+ window->details->extra_viewer_merge_id = 0;
+ }
+ if (window->details->extra_viewer_radio_action != NULL) {
+ gtk_action_group_remove_action (window->details->view_as_action_group,
+ GTK_ACTION (window->details->extra_viewer_radio_action));
+ window->details->extra_viewer_radio_action = NULL;
+ }
+ g_free (window->details->extra_viewer);
+ window->details->extra_viewer = NULL;
+
refresh_stored_viewers (window);
-
+ merge_id = gtk_ui_manager_new_merge_id (window->details->ui_manager);
+ window->details->short_list_merge_id = merge_id;
+ window->details->view_as_action_group = gtk_action_group_new ("ViewAsGroup");
+ gtk_action_group_set_translation_domain (window->details->view_as_action_group, GETTEXT_PACKAGE);
+ window->details->view_as_radio_action = NULL;
+
/* Add a menu item for each view in the preferred list for this location. */
- for (node = window->details->short_list_viewers, index = 0;
+ /* Start on 1, because extra_viewer gets index 0 */
+ for (node = window->details->short_list_viewers, index = 1;
node != NULL;
node = node->next, ++index) {
/* Menu item in View menu. */
- add_view_as_bonobo_menu_item (window,
- NAUTILUS_MENU_PATH_SHORT_LIST_PLACEHOLDER,
- node->data,
- index);
+ add_view_as_menu_item (window,
+ NAUTILUS_MENU_PATH_SHORT_LIST_PLACEHOLDER,
+ node->data,
+ index,
+ merge_id);
}
-
- nautilus_bonobo_set_hidden (window->details->shell_ui,
- NAUTILUS_MENU_PATH_AFTER_SHORT_LIST_SEPARATOR,
- window->details->short_list_viewers == NULL);
+ gtk_ui_manager_insert_action_group (window->details->ui_manager,
+ window->details->view_as_action_group,
+ -1);
+ g_object_unref (window->details->view_as_action_group); /* owned by ui_manager */
nautilus_window_synch_view_as_menus (window);
}
@@ -1308,73 +1157,6 @@ nautilus_window_set_content_view_widget (NautilusWindow *window,
set_content_view_widget, (window, frame));
}
-static void
-show_dock_item (NautilusWindow *window, const char *dock_item_path)
-{
- if (NAUTILUS_IS_DESKTOP_WINDOW (window)) {
- return;
- }
-
- nautilus_window_ui_freeze (window);
-
- nautilus_bonobo_set_hidden (window->details->shell_ui,
- dock_item_path,
- FALSE);
- nautilus_window_update_show_hide_menu_items (window);
-
- nautilus_window_ui_thaw (window);
-}
-
-static void
-hide_dock_item (NautilusWindow *window, const char *dock_item_path)
-{
- nautilus_window_ui_freeze (window);
-
- nautilus_bonobo_set_hidden (window->details->shell_ui,
- dock_item_path,
- TRUE);
- nautilus_window_update_show_hide_menu_items (window);
-
- nautilus_window_ui_thaw (window);
-}
-
-static gboolean
-dock_item_showing (NautilusWindow *window, const char *dock_item_path)
-{
- return !nautilus_bonobo_get_hidden (window->details->shell_ui,
- dock_item_path);
-}
-
-void
-nautilus_window_hide_status_bar (NautilusWindow *window)
-{
- hide_dock_item (window, STATUS_BAR_PATH);
-
- nautilus_window_update_show_hide_menu_items (window);
- if (eel_preferences_key_is_writable (NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR) &&
- eel_preferences_get_boolean (NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR)) {
- eel_preferences_set_boolean (NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR, FALSE);
- }
-}
-
-void
-nautilus_window_show_status_bar (NautilusWindow *window)
-{
- show_dock_item (window, STATUS_BAR_PATH);
-
- nautilus_window_update_show_hide_menu_items (window);
- if (eel_preferences_key_is_writable (NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR) &&
- !eel_preferences_get_boolean (NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR)) {
- eel_preferences_set_boolean (NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR, TRUE);
- }
-}
-
-gboolean
-nautilus_window_status_bar_showing (NautilusWindow *window)
-{
- return dock_item_showing (window, STATUS_BAR_PATH);
-}
-
/**
* nautilus_window_show:
* @widget: GtkWidget
@@ -1395,12 +1177,10 @@ nautilus_window_show (GtkWidget *widget)
nautilus_window_ui_update (window);
}
-Bonobo_UIContainer
-nautilus_window_get_ui_container (NautilusWindow *window)
+GtkUIManager *
+nautilus_window_get_ui_manager (NautilusWindow *window)
{
- g_return_val_if_fail (NAUTILUS_IS_WINDOW (window), CORBA_OBJECT_NIL);
-
- return BONOBO_OBJREF (window->details->ui_container);
+ return window->details->ui_manager;
}
void
@@ -1654,7 +1434,7 @@ nautilus_window_info_iface_init (NautilusWindowInfoIface *iface)
iface->get_title = nautilus_window_get_cached_title;
iface->get_history = nautilus_window_get_history;
iface->get_current_location = nautilus_window_get_location;
- iface->get_ui_container = nautilus_window_get_ui_container;
+ iface->get_ui_manager = nautilus_window_get_ui_manager;
iface->get_selection_count = nautilus_window_get_selection_count;
iface->get_selection = nautilus_window_get_selection;
iface->get_hidden_files_mode = nautilus_window_get_hidden_files_mode;
@@ -1673,11 +1453,9 @@ nautilus_window_class_init (NautilusWindowClass *class)
class->add_current_location_to_history_list = real_add_current_location_to_history_list;
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;
-
+
g_object_class_install_property (G_OBJECT_CLASS (class),
ARG_APP_ID,
g_param_spec_string ("app_id",
diff --git a/src/nautilus-window.h b/src/nautilus-window.h
index af6c5b19d..761fbe503 100644
--- a/src/nautilus-window.h
+++ b/src/nautilus-window.h
@@ -30,6 +30,7 @@
#define NAUTILUS_WINDOW_H
#include <bonobo/bonobo-window.h>
+#include <gtk/gtkuimanager.h>
#include <eel/eel-glib-extensions.h>
#include <libnautilus-private/nautilus-bookmark.h>
#include <libnautilus-private/nautilus-window-info.h>
@@ -50,7 +51,7 @@ typedef struct NautilusWindow NautilusWindow;
#endif
typedef struct {
- BonoboWindowClass parent_spot;
+ GtkWindowClass parent_spot;
NautilusWindowType window_type;
@@ -66,8 +67,6 @@ typedef struct {
char * (* get_title) (NautilusWindow *window);
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,
NautilusView *new_view);
@@ -87,7 +86,7 @@ typedef enum {
typedef struct NautilusWindowDetails NautilusWindowDetails;
struct NautilusWindow {
- BonoboWindow parent_object;
+ GtkWindow parent_object;
NautilusWindowDetails *details;
@@ -108,8 +107,6 @@ struct NautilusWindow {
};
GType nautilus_window_get_type (void);
-void nautilus_window_ui_freeze (NautilusWindow *window);
-void nautilus_window_ui_thaw (NautilusWindow *window);
void nautilus_window_close (NautilusWindow *window);
char * nautilus_window_get_location (NautilusWindow *window);
void nautilus_window_go_to (NautilusWindow *window,
@@ -127,9 +124,6 @@ void nautilus_window_display_error (NautilusWindow *window
const char *error_msg);
void nautilus_window_reload (NautilusWindow *window);
-void nautilus_window_hide_status_bar (NautilusWindow *window);
-void nautilus_window_show_status_bar (NautilusWindow *window);
-gboolean nautilus_window_status_bar_showing (NautilusWindow *window);
void nautilus_window_allow_reload (NautilusWindow *window,
gboolean allow);
void nautilus_window_allow_up (NautilusWindow *window,
@@ -138,5 +132,6 @@ void nautilus_window_allow_stop (NautilusWindow *window
gboolean allow);
void nautilus_window_allow_burn_cd (NautilusWindow *window,
gboolean allow);
+GtkUIManager * nautilus_window_get_ui_manager (NautilusWindow *window);
#endif