summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGene Z. Ragan <gzr@eazel.com>2000-05-17 23:54:25 +0000
committerGene Ragan <gzr@src.gnome.org>2000-05-17 23:54:25 +0000
commit19159e79b31181b09826f5068e5f71efd37e04a2 (patch)
treed874f7c6a8b7d581926d97f4a07225e8e2e2cf5f
parent0cc8fb0b162292b9225e4de6b580bc0aadeb1809 (diff)
downloadnautilus-19159e79b31181b09826f5068e5f71efd37e04a2.tar.gz
CVS:
2000-05-17 Gene Z. Ragan <gzr@eazel.com> CVS: ---------------------------------------------------------------------- First phase of modifying undo code. These changes CVS: Enter Log. Lines beginning with `CVS:' are removed automatically affect the way undo is handled internally to Nautilus and CVS: also defines a new IDL. This is work in progress. CVS: Committing in . CVS: * libnautilus-extensions/nautilus-entry.c: CVS: Modified Files: Modified to use gtk_object_get_data() mechanism to locate undo manager CVS: ChangeLog libnautilus/.cvsignore libnautilus/Makefile.am CVS: libnautilus/nautilus-undo-manager-private.h * libnautilus-extensions/nautilus-icon-container.c: CVS: libnautilus/nautilus-undo-manager.c (nautilus_icon_container_start_renaming_selected_item): CVS: libnautilus/nautilus-undo-manager.h Modified to use gtk_object_get_data() mechanism to locate undo manager CVS: libnautilus/nautilus-undo-transaction.h CVS: libnautilus/nautilus-undoable.c * libnautilus-extensions/nautilus-icon-text-item.c: (iti_event), CVS: libnautilus/nautilus-undoable.h (restore_from_undo_snapshot_callback): CVS: libnautilus/nautilus-view-component.idl Modified to use gtk_object_get_data() mechanism to locate undo manager CVS: libnautilus-extensions/nautilus-entry.c CVS: libnautilus-extensions/nautilus-entry.h * libnautilus/.cvsignore: CVS: libnautilus-extensions/nautilus-icon-container.c Added generated IDL source and header files to ignore CVS: libnautilus-extensions/nautilus-icon-text-item.c CVS: src/nautilus-bookmarks-window.c * libnautilus/Makefile.am: CVS: src/nautilus-bookmarks-window.h src/nautilus-location-bar.c Modified makefile to include new IDL file for undo manager CVS: src/nautilus-location-bar.h src/nautilus-window-menus.c CVS: src/ntl-app.c src/ntl-window-private.h src/ntl-window.c * libnautilus/nautilus-undo-manager.c: CVS: src/ntl-window.h src/file-manager/fm-properties-window.c (impl_Nautilus_Undo_Manager__destroy), CVS: Added Files: (impl_Nautilus_Undo_Manager__create), CVS: libnautilus/nautilus-undo.idl (impl_Nautilus_Undo_Manager__append), CVS: Removed Files: (impl_Nautilus_Undo_Manager__forget), CVS: libnautilus/nautilus-undo-manager-component.idl (nautilus_undo_manager_initialize), CVS: ---------------------------------------------------------------------- (nautilus_undo_manager_initialize_class), (nautilus_undo_manager_begin_transaction), (nautilus_undo_manager_end_transaction), (nautilus_undo_manager_undo), (nautilus_undo_manager_redo), (nautilus_undo_manager_add_transaction), (nautilus_undo_manager_unregister_object), (nautilus_undo_manager_can_undo), (nautilus_undo_manager_can_redo), (get_current_transaction_name), (nautilus_undo_manager_get_current_undo_transaction_name), (nautilus_undo_manager_get_current_redo_transaction_name), (destroy), (nautilus_undo_manager_enable_redo), (nautilus_undo_manager_set_queue_depth), (free_undo_manager_list_data), (prune_undo_manager_list): Changes to support new IDL and new undo manager mechanism. * libnautilus/nautilus-undo.idl: New undo manager IDL file * libnautilus/nautilus-undo-manager-component.idl: Removed old undo manager IDL file * src/file-manager/fm-properties-window.c: (create_basic_page): Modified to use gtk_object_get_data() mechanism to locate undo manager * src/nautilus-bookmarks-window.c: (create_bookmarks_window), (on_text_field_focus_in_event), (on_window_delete_event): Modified to use gtk_object_get_data() mechanism to locate undo manager * src/nautilus-location-bar.c: (nautilus_location_bar_set_location), (nautilus_location_bar_enable_undo): Modified to use gtk_object_get_data() mechanism to locate undo manager * src/nautilus-window-menus.c: (edit_menu_undo_callback), (edit_menu_cut_callback), (bookmarks_menu_edit_bookmarks_callback), (get_bookmarks_window), (nautilus_bookmarks_exiting), (nautilus_window_edit_bookmarks), (nautilus_window_initialize_menus), (update_undo_menu_item): Modified to use gtk_object_get_data() mechanism to locate undo manager * src/ntl-app.c: (impl_Nautilus_Application__get_view_windows), (impl_Nautilus_Application_new_view_window), (impl_Nautilus_Application_supports), (impl_Nautilus_Application_create_object), (impl_Nautilus_Application__create), (nautilus_app_get_type), (nautilus_app_class_init), (nautilus_app_init), (nautilus_app_new), (nautilus_app_destroy), (nautilus_app_startup), (nautilus_app_create_window): Modified to use gtk_object_get_data() mechanism to locate undo manager. Added and modified IDL C stubs to match new IDL interface. * src/ntl-window.c: (nautilus_window_constructed), (nautilus_window_set_arg): Changed order that arguments are set at time of main window create so the app instance variable is valid when the main window is contructed.
-rw-r--r--ChangeLog94
-rw-r--r--libnautilus-extensions/nautilus-entry.c23
-rw-r--r--libnautilus-extensions/nautilus-entry.h17
-rw-r--r--libnautilus-extensions/nautilus-icon-container.c7
-rw-r--r--libnautilus-extensions/nautilus-icon-text-item.c20
-rw-r--r--libnautilus-extensions/nautilus-undo-manager.c431
-rw-r--r--libnautilus-extensions/nautilus-undo-manager.h59
-rw-r--r--libnautilus-private/nautilus-entry.c23
-rw-r--r--libnautilus-private/nautilus-entry.h17
-rw-r--r--libnautilus-private/nautilus-icon-container.c7
-rw-r--r--libnautilus-private/nautilus-icon-text-item.c20
-rw-r--r--libnautilus-private/nautilus-undo-manager.c431
-rw-r--r--libnautilus-private/nautilus-undo-manager.h59
-rw-r--r--libnautilus/.cvsignore10
-rw-r--r--libnautilus/Makefile.am40
-rw-r--r--libnautilus/nautilus-distributed-undo.idl40
-rw-r--r--libnautilus/nautilus-undo-manager-component.idl18
-rw-r--r--libnautilus/nautilus-undo-manager-private.h2
-rw-r--r--libnautilus/nautilus-undo-manager.c431
-rw-r--r--libnautilus/nautilus-undo-manager.h59
-rw-r--r--libnautilus/nautilus-undo-transaction.h4
-rw-r--r--libnautilus/nautilus-undo.idl40
-rw-r--r--libnautilus/nautilus-undoable.c5
-rw-r--r--libnautilus/nautilus-undoable.h7
-rw-r--r--libnautilus/nautilus-view-component.idl6
-rw-r--r--src/file-manager/fm-properties-window.c4
-rw-r--r--src/nautilus-application.c250
-rw-r--r--src/nautilus-bookmarks-window.c21
-rw-r--r--src/nautilus-bookmarks-window.h4
-rw-r--r--src/nautilus-location-bar.c23
-rw-r--r--src/nautilus-location-bar.h13
-rw-r--r--src/nautilus-navigation-window-menus.c61
-rw-r--r--src/nautilus-navigation-window.c155
-rw-r--r--src/nautilus-navigation-window.h2
-rw-r--r--src/nautilus-object-window.c155
-rw-r--r--src/nautilus-object-window.h2
-rw-r--r--src/nautilus-spatial-window.c155
-rw-r--r--src/nautilus-spatial-window.h2
-rw-r--r--src/nautilus-window-menus.c61
-rw-r--r--src/nautilus-window-private.h2
-rw-r--r--src/nautilus-window.c155
-rw-r--r--src/nautilus-window.h2
-rw-r--r--src/ntl-app.c250
-rw-r--r--src/ntl-window-private.h2
-rw-r--r--src/ntl-window.c155
-rw-r--r--src/ntl-window.h2
46 files changed, 1648 insertions, 1698 deletions
diff --git a/ChangeLog b/ChangeLog
index d32034c46..3f16ab980 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,97 @@
+2000-05-17 Gene Z. Ragan <gzr@eazel.com>
+
+ First phase of modifying undo code. These changes
+ affect the way undo is handled internally to Nautilus and
+ also defines a new IDL. This is work in progress.
+
+ * libnautilus-extensions/nautilus-entry.c:
+ Modified to use gtk_object_get_data() mechanism to locate undo manager
+
+ * libnautilus-extensions/nautilus-icon-container.c:
+ (nautilus_icon_container_start_renaming_selected_item):
+ Modified to use gtk_object_get_data() mechanism to locate undo manager
+
+ * libnautilus-extensions/nautilus-icon-text-item.c: (iti_event),
+ (restore_from_undo_snapshot_callback):
+ Modified to use gtk_object_get_data() mechanism to locate undo manager
+
+ * libnautilus/.cvsignore:
+ Added generated IDL source and header files to ignore
+
+ * libnautilus/Makefile.am:
+ Modified makefile to include new IDL file for undo manager
+
+ * libnautilus/nautilus-undo-manager.c:
+ (impl_Nautilus_Undo_Manager__destroy),
+ (impl_Nautilus_Undo_Manager__create),
+ (impl_Nautilus_Undo_Manager__append),
+ (impl_Nautilus_Undo_Manager__forget),
+ (nautilus_undo_manager_initialize),
+ (nautilus_undo_manager_initialize_class),
+ (nautilus_undo_manager_begin_transaction),
+ (nautilus_undo_manager_end_transaction),
+ (nautilus_undo_manager_undo), (nautilus_undo_manager_redo),
+ (nautilus_undo_manager_add_transaction),
+ (nautilus_undo_manager_unregister_object),
+ (nautilus_undo_manager_can_undo), (nautilus_undo_manager_can_redo),
+ (get_current_transaction_name),
+ (nautilus_undo_manager_get_current_undo_transaction_name),
+ (nautilus_undo_manager_get_current_redo_transaction_name),
+ (destroy), (nautilus_undo_manager_enable_redo),
+ (nautilus_undo_manager_set_queue_depth),
+ (free_undo_manager_list_data), (prune_undo_manager_list):
+ Changes to support new IDL and new undo manager mechanism.
+
+ * libnautilus/nautilus-undo.idl:
+ New undo manager IDL file
+
+ * libnautilus/nautilus-undo-manager-component.idl:
+ Removed old undo manager IDL file
+
+ * src/file-manager/fm-properties-window.c:
+ (create_basic_page):
+ Modified to use gtk_object_get_data() mechanism to locate undo manager
+
+ * src/nautilus-bookmarks-window.c:
+ (create_bookmarks_window),
+ (on_text_field_focus_in_event),
+ (on_window_delete_event):
+ Modified to use gtk_object_get_data() mechanism to locate undo manager
+
+ * src/nautilus-location-bar.c:
+ (nautilus_location_bar_set_location),
+ (nautilus_location_bar_enable_undo):
+ Modified to use gtk_object_get_data() mechanism to locate undo manager
+
+ * src/nautilus-window-menus.c:
+ (edit_menu_undo_callback),
+ (edit_menu_cut_callback),
+ (bookmarks_menu_edit_bookmarks_callback),
+ (get_bookmarks_window),
+ (nautilus_bookmarks_exiting),
+ (nautilus_window_edit_bookmarks),
+ (nautilus_window_initialize_menus),
+ (update_undo_menu_item):
+ Modified to use gtk_object_get_data() mechanism to locate undo manager
+
+ * src/ntl-app.c:
+ (impl_Nautilus_Application__get_view_windows),
+ (impl_Nautilus_Application_new_view_window),
+ (impl_Nautilus_Application_supports),
+ (impl_Nautilus_Application_create_object),
+ (impl_Nautilus_Application__create), (nautilus_app_get_type),
+ (nautilus_app_class_init), (nautilus_app_init), (nautilus_app_new),
+ (nautilus_app_destroy), (nautilus_app_startup),
+ (nautilus_app_create_window):
+ Modified to use gtk_object_get_data() mechanism to locate undo manager.
+ Added and modified IDL C stubs to match new IDL interface.
+
+ * src/ntl-window.c:
+ (nautilus_window_constructed),
+ (nautilus_window_set_arg):
+ Changed order that arguments are set at time of main window create so the app instance
+ variable is valid when the main window is contructed.
+
2000-05-17 J Shane Culpepper <pepper@eazel.com>
* components/services/install/command-line/eazel-install.c:
diff --git a/libnautilus-extensions/nautilus-entry.c b/libnautilus-extensions/nautilus-entry.c
index a20fd9cf1..ace881933 100644
--- a/libnautilus-extensions/nautilus-entry.c
+++ b/libnautilus-extensions/nautilus-entry.c
@@ -28,7 +28,6 @@
#include "nautilus-entry.h"
#include "nautilus-gtk-macros.h"
-#include <libnautilus/nautilus-undo-manager.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtkmain.h>
@@ -121,7 +120,10 @@ nautilus_entry_key_press (GtkWidget *widget, GdkEventKey *event)
case 'z':
if (event->state & GDK_CONTROL_MASK && entry->use_undo == TRUE
&& entry->handle_undo_key == TRUE) {
- nautilus_undo_manager_undo_last_transaction();
+ NautilusUndoManager *undo_manager;
+ undo_manager = gtk_object_get_data ( GTK_OBJECT (entry), NAUTILUS_UNDO_MANAGER_NAME);
+ g_assert (undo_manager);
+ nautilus_undo_manager_undo (undo_manager);
return FALSE;
}
break;
@@ -189,6 +191,7 @@ static void
nautilus_entry_changed (GtkEditable *editable)
{
NautilusEntry *entry;
+ NautilusUndoTransactionInProgress *tip;
g_assert (GTK_IS_EDITABLE (editable));
g_assert (NAUTILUS_IS_ENTRY (editable));
@@ -197,10 +200,10 @@ nautilus_entry_changed (GtkEditable *editable)
/* Register undo transaction */
if (!entry->undo_registered && entry->use_undo) {
- nautilus_undo_manager_begin_transaction (_("Edit"));
- nautilus_undoable_save_undo_snapshot (GTK_OBJECT(entry), save_undo_snapshot_callback,
- restore_from_undo_snapshot_callback);
- nautilus_undo_manager_end_transaction ();
+ tip = nautilus_undo_manager_begin_transaction (GTK_OBJECT (entry), _("Edit"));
+ nautilus_undoable_save_undo_snapshot (tip->transaction, GTK_OBJECT(entry), save_undo_snapshot_callback,
+ restore_from_undo_snapshot_callback);
+ nautilus_undo_manager_end_transaction (tip);
entry->undo_registered = TRUE;
}
@@ -270,15 +273,17 @@ restore_from_undo_snapshot_callback (NautilusUndoable *undoable)
* Enable undo mechanism in entry item.
*/
void
-nautilus_entry_enable_undo (NautilusEntry *entry, gboolean value)
+nautilus_entry_enable_undo (NautilusEntry *entry, NautilusUndoManager *manager, gboolean value)
{
g_assert (entry);
g_assert (NAUTILUS_IS_ENTRY (entry));
-
+
entry->undo_registered = !value;
entry->use_undo = value;
- if (!entry->undo_registered) {
+ if (!entry->undo_registered) {
+ gtk_object_set_data ( GTK_OBJECT(entry), NAUTILUS_UNDO_MANAGER_NAME, manager);
+
/* Get copy of entry text */
if (entry->undo_text != NULL) {
g_free (entry->undo_text);
diff --git a/libnautilus-extensions/nautilus-entry.h b/libnautilus-extensions/nautilus-entry.h
index 3df09f064..a902493a1 100644
--- a/libnautilus-extensions/nautilus-entry.h
+++ b/libnautilus-extensions/nautilus-entry.h
@@ -29,6 +29,7 @@
#include <libgnome/gnome-defs.h>
#include <gtk/gtkentry.h>
+#include <libnautilus/nautilus-undo-manager.h>
BEGIN_GNOME_DECLS
@@ -48,7 +49,7 @@ typedef struct NautilusEntryClass NautilusEntryClass;
struct NautilusEntry {
GtkEntry parent;
-
+
gchar *undo_text;
gboolean undo_registered;
gboolean use_undo;
@@ -59,13 +60,15 @@ struct NautilusEntryClass {
GtkEntryClass parent_class;
};
-GtkType nautilus_entry_get_type (void);
-GtkWidget* nautilus_entry_new (void);
+GtkType nautilus_entry_get_type (void);
+GtkWidget* nautilus_entry_new (void);
-void nautilus_entry_select_all (NautilusEntry *entry);
-void nautilus_entry_select_all_at_idle (NautilusEntry *entry);
-void nautilus_entry_enable_undo (NautilusEntry *entry, gboolean value);
-void nautilus_entry_enable_undo_key (NautilusEntry *entry, gboolean value);
+void nautilus_entry_select_all (NautilusEntry *entry);
+void nautilus_entry_select_all_at_idle (NautilusEntry *entry);
+void nautilus_entry_enable_undo (NautilusEntry *entry,
+ NautilusUndoManager *manager,
+ gboolean value);
+void nautilus_entry_enable_undo_key (NautilusEntry *entry, gboolean value);
END_GNOME_DECLS
diff --git a/libnautilus-extensions/nautilus-icon-container.c b/libnautilus-extensions/nautilus-icon-container.c
index 43f1aaad4..994f1e636 100644
--- a/libnautilus-extensions/nautilus-icon-container.c
+++ b/libnautilus-extensions/nautilus-icon-container.c
@@ -3453,6 +3453,8 @@ nautilus_icon_container_start_renaming_selected_item (NautilusIconContainer *con
{
NautilusIconContainerDetails *details;
NautilusIcon *icon;
+ GtkWidget *toplevel;
+ NautilusUndoManager *manager;
ArtIRect text_rect;
ArtDRect icon_rect;
GdkFont *font;
@@ -3487,6 +3489,11 @@ nautilus_icon_container_start_renaming_selected_item (NautilusIconContainer *con
nautilus_icon_text_item_get_type (),
NULL));
+ /* Add undo manager */
+ toplevel = gtk_widget_get_toplevel ( GTK_WIDGET (container));
+ manager = gtk_object_get_data ( GTK_OBJECT (toplevel), NAUTILUS_UNDO_MANAGER_NAME);
+ gtk_object_set_data ( GTK_OBJECT (details->rename_widget), NAUTILUS_UNDO_MANAGER_NAME, manager);
+
/* Determine widget position widget in container */
font = details->label_font[details->zoom_level];
ppu = GNOME_CANVAS_ITEM (icon->item)->canvas->pixels_per_unit;
diff --git a/libnautilus-extensions/nautilus-icon-text-item.c b/libnautilus-extensions/nautilus-icon-text-item.c
index 8acd5039a..54f91f023 100644
--- a/libnautilus-extensions/nautilus-icon-text-item.c
+++ b/libnautilus-extensions/nautilus-icon-text-item.c
@@ -20,6 +20,7 @@
#include <gtk/gtkmain.h>
#include <gtk/gtksignal.h>
#include <gtk/gtkwindow.h>
+#include <libgnome/gnome-i18n.h>
/* Margins used to display the information */
#define MARGIN_X 2
@@ -801,6 +802,8 @@ iti_event (GnomeCanvasItem *item, GdkEvent *event)
int idx;
double x, y;
int cx, cy;
+ NautilusUndoTransactionInProgress *tip;
+
iti = ITI (item);
priv = iti->priv;
@@ -835,10 +838,10 @@ iti_event (GnomeCanvasItem *item, GdkEvent *event)
if (!priv->undo_registered) {
priv->undo_registered = TRUE;
- nautilus_undo_manager_begin_transaction ("Rename");
- nautilus_undoable_save_undo_snapshot (GTK_OBJECT(iti), save_undo_snapshot_callback,
- restore_from_undo_snapshot_callback);
- nautilus_undo_manager_end_transaction ();
+ tip = nautilus_undo_manager_begin_transaction ( GTK_OBJECT(iti), "Rename");
+ nautilus_undoable_save_undo_snapshot (tip->transaction, GTK_OBJECT(iti),
+ save_undo_snapshot_callback, restore_from_undo_snapshot_callback);
+ nautilus_undo_manager_end_transaction (tip);
}
/* Handle any events that reach us */
@@ -1367,15 +1370,16 @@ restore_from_undo_snapshot_callback(NautilusUndoable *undoable)
char *undo_text;
NautilusIconTextItem *iti;
ItiPrivate *priv;
+ NautilusUndoTransactionInProgress *tip;
iti = NAUTILUS_ICON_TEXT_ITEM(undoable->undo_target_class);
priv = iti->priv;
/* Register undo transaction */
- nautilus_undo_manager_begin_transaction ("Rename");
- nautilus_undoable_save_undo_snapshot (GTK_OBJECT(iti), save_undo_snapshot_callback,
- restore_from_undo_snapshot_callback);
- nautilus_undo_manager_end_transaction ();
+ tip = nautilus_undo_manager_begin_transaction (GTK_OBJECT(iti), _("Rename"));
+ nautilus_undoable_save_undo_snapshot (tip->transaction, GTK_OBJECT(iti),
+ save_undo_snapshot_callback, restore_from_undo_snapshot_callback);
+ nautilus_undo_manager_end_transaction (tip);
undo_text = g_datalist_get_data(&undoable->undo_data, "undo_text");
if (undo_text != NULL) {
diff --git a/libnautilus-extensions/nautilus-undo-manager.c b/libnautilus-extensions/nautilus-undo-manager.c
index 1faf53994..97b1c0948 100644
--- a/libnautilus-extensions/nautilus-undo-manager.c
+++ b/libnautilus-extensions/nautilus-undo-manager.c
@@ -25,6 +25,7 @@
#include <config.h>
#include <gtk/gtksignal.h>
#include <gtk/gtkmain.h>
+#include <glib.h>
#include <string.h>
#include <bonobo/bonobo-main.h>
#include <bonobo/bonobo-control.h>
@@ -45,11 +46,11 @@ static guint signals[LAST_SIGNAL];
typedef struct {
- POA_Nautilus_UndoManager servant;
+ POA_Nautilus_Undo_Manager servant;
gpointer bonobo_object;
NautilusUndoManager *gtk_object;
-} impl_POA_Nautilus_UndoManager;
+} impl_POA_Nautilus_Undo_Manager;
/* GtkObject */
@@ -62,33 +63,33 @@ static GList *prune_undo_manager_list (GList *list, gint items);
/* CORBA/Bonobo */
-static CORBA_boolean impl_Nautilus_UndoManager__begin_transaction (impl_POA_Nautilus_UndoManager *servant,
- const CORBA_char *name,
- CORBA_Environment *ev);
-static void impl_Nautilus_UndoManager__end_transaction (impl_POA_Nautilus_UndoManager *servant,
- CORBA_Environment *ev);
+static void impl_Nautilus_Undo_Manager__append (impl_POA_Nautilus_Undo_Manager *servant,
+ const CORBA_char *name,
+ CORBA_Environment *ev);
+static void impl_Nautilus_Undo_Manager__forget (impl_POA_Nautilus_Undo_Manager *servant,
+ CORBA_Environment *ev);
NAUTILUS_DEFINE_CLASS_BOILERPLATE(NautilusUndoManager, nautilus_undo_manager, BONOBO_OBJECT_TYPE)
-POA_Nautilus_UndoManager__epv libnautilus_extensions_Nautilus_UndoManager_epv =
+POA_Nautilus_Undo_Manager__epv libnautilus_Nautilus_Undo_Manager_epv =
{
NULL, /* _private */
- (gpointer) &impl_Nautilus_UndoManager__begin_transaction,
- (gpointer) &impl_Nautilus_UndoManager__end_transaction,
+ (gpointer) &impl_Nautilus_Undo_Manager__append,
+ (gpointer) &impl_Nautilus_Undo_Manager__forget,
};
static PortableServer_ServantBase__epv base_epv = { NULL, NULL, NULL };
-static POA_Nautilus_UndoManager__vepv impl_Nautilus_UndoManager_vepv =
+static POA_Nautilus_Undo_Manager__vepv impl_Nautilus_Undo_Manager_vepv =
{
&base_epv,
NULL,
- &libnautilus_extensions_Nautilus_UndoManager_epv
+ &libnautilus_Nautilus_Undo_Manager_epv
};
static void
-impl_Nautilus_UndoManager__destroy(BonoboObject *obj, impl_POA_Nautilus_UndoManager *servant)
+impl_Nautilus_Undo_Manager__destroy(BonoboObject *obj, impl_POA_Nautilus_Undo_Manager *servant)
{
PortableServer_ObjectId *objid;
CORBA_Environment ev;
@@ -107,17 +108,17 @@ impl_Nautilus_UndoManager__destroy(BonoboObject *obj, impl_POA_Nautilus_UndoMana
CORBA_exception_free(&ev);
}
-static Nautilus_UndoManager
-impl_Nautilus_UndoManager__create(NautilusUndoManager *manager, CORBA_Environment * ev)
+static Nautilus_Undo_Manager
+impl_Nautilus_Undo_Manager__create(NautilusUndoManager *manager, CORBA_Environment * ev)
{
- Nautilus_UndoManager retval;
- impl_POA_Nautilus_UndoManager *servant;
+ Nautilus_Undo_Manager retval;
+ impl_POA_Nautilus_Undo_Manager *servant;
void (*servant_init_func) (PortableServer_Servant servant, CORBA_Environment *ev);
NautilusUndoManagerClass *undo_class = NAUTILUS_UNDO_MANAGER_CLASS (GTK_OBJECT(manager)->klass);
servant_init_func = undo_class->servant_init_func;
- servant = g_new0 (impl_POA_Nautilus_UndoManager, 1);
+ servant = g_new0 (impl_POA_Nautilus_Undo_Manager, 1);
servant->servant.vepv = undo_class->vepv;
if (!servant->servant.vepv->Bonobo_Unknown_epv)
servant->servant.vepv->Bonobo_Unknown_epv = bonobo_object_get_epv ();
@@ -127,24 +128,22 @@ impl_Nautilus_UndoManager__create(NautilusUndoManager *manager, CORBA_Environmen
retval = bonobo_object_activate_servant (BONOBO_OBJECT (manager), servant);
- gtk_signal_connect (GTK_OBJECT (manager), "destroy", GTK_SIGNAL_FUNC (impl_Nautilus_UndoManager__destroy), servant);
+ gtk_signal_connect (GTK_OBJECT (manager), "destroy", GTK_SIGNAL_FUNC (impl_Nautilus_Undo_Manager__destroy), servant);
return retval;
}
-static CORBA_boolean
-impl_Nautilus_UndoManager__begin_transaction (impl_POA_Nautilus_UndoManager *servant,
+static void
+impl_Nautilus_Undo_Manager__append (impl_POA_Nautilus_Undo_Manager *servant,
const CORBA_char *name,
CORBA_Environment *ev)
{
- return nautilus_undo_manager_begin_transaction (name);
}
static void
-impl_Nautilus_UndoManager__end_transaction (impl_POA_Nautilus_UndoManager *servant,
+impl_Nautilus_Undo_Manager__forget (impl_POA_Nautilus_Undo_Manager *servant,
CORBA_Environment *ev)
{
- nautilus_undo_manager_end_transaction ();
}
@@ -169,9 +168,6 @@ nautilus_undo_manager_initialize (NautilusUndoManager *manager)
manager->details = g_new0 (NautilusUndoManagerDetails, 1);
- /* Init transaction to none */
- manager->details->transaction = NULL;
-
/* Create empty lists */
manager->details->undo_list = NULL;
manager->details->redo_list = NULL;
@@ -185,7 +181,7 @@ nautilus_undo_manager_initialize (NautilusUndoManager *manager)
/* No transaction is in progress */
manager->details->transaction_in_progress = FALSE;
- bonobo_object_construct (BONOBO_OBJECT (manager), impl_Nautilus_UndoManager__create (manager, &ev));
+ bonobo_object_construct (BONOBO_OBJECT (manager), impl_Nautilus_Undo_Manager__create (manager, &ev));
CORBA_exception_free(&ev);
}
@@ -201,9 +197,9 @@ nautilus_undo_manager_initialize_class (NautilusUndoManagerClass *klass)
object_class->destroy = destroy;
- klass->servant_init_func = POA_Nautilus_UndoManager__init;
- klass->servant_destroy_func = POA_Nautilus_UndoManager__fini;
- klass->vepv = &impl_Nautilus_UndoManager_vepv;
+ klass->servant_init_func = POA_Nautilus_Undo_Manager__init;
+ klass->servant_destroy_func = POA_Nautilus_Undo_Manager__fini;
+ klass->vepv = &impl_Nautilus_Undo_Manager_vepv;
/* Setup signals */
signals[UNDO_TRANSACTION_OCCURED]
@@ -218,236 +214,149 @@ nautilus_undo_manager_initialize_class (NautilusUndoManagerClass *klass)
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
}
-/* nautilus_undo_manager_transaction_in_progress */
-gboolean
-nautilus_undo_manager_transaction_in_progress (void)
-{
- return global_undo_manager->details->transaction_in_progress;
-}
-
-
-/* nautilus_undo_manager_get_current_transaction
- * Return current undo transaction
- */
-NautilusUndoTransaction *
-nautilus_undo_manager_get_current_transaction (void)
-{
- return global_undo_manager->details->transaction;
-}
-
/* nautilus_undo_manager_begin_transaction */
-gboolean
-nautilus_undo_manager_begin_transaction (const gchar *name)
+NautilusUndoTransactionInProgress *
+nautilus_undo_manager_begin_transaction (GtkObject *object, const gchar *name)
{
+ NautilusUndoManager *manager;
+ NautilusUndoTransactionInProgress *tip;
+
+ /* Locate undo manager */
+ manager = gtk_object_get_data (object, NAUTILUS_UNDO_MANAGER_NAME);
+ g_return_val_if_fail (manager != NULL, NULL);
+
/* We aren't handling nested transactions currently */
- if (global_undo_manager->details->transaction_in_progress) {
+ if (manager->details->transaction_in_progress) {
g_warning("NautilusUndoManager does not handle nested transactions. End previous transaction first.");
- return FALSE;
+ return NULL;
}
+ /* Create NautilusUndoTransactionInProgress */
+ tip = g_new (NautilusUndoTransactionInProgress, 1);
+ g_assert(tip);
+
+ tip->manager = manager;
+
/* Create new transaction */
- global_undo_manager->details->transaction = nautilus_undo_transaction_new(name);
+ tip->transaction = nautilus_undo_transaction_new(name);
- global_undo_manager->details->transaction_in_progress = TRUE;
+ tip->manager->details->transaction_in_progress = TRUE;
- return TRUE;
+ return tip;
}
/* nautilus_undo_manager_end_transaction */
-gboolean
-nautilus_undo_manager_end_transaction (void)
+void
+nautilus_undo_manager_end_transaction (NautilusUndoTransactionInProgress *tip)
{
/* Verify a transaction is in progress */
- if (!global_undo_manager->details->transaction_in_progress) {
+ if (!tip->manager->details->transaction_in_progress) {
g_warning("NautilusUndoManager has no current transaction. Begin a transaction first.");
- return FALSE;
+ return;
}
- global_undo_manager->details->transaction_in_progress = FALSE;
+ tip->manager->details->transaction_in_progress = FALSE;
/* Commit current transaction to undo list */
- nautilus_undo_manager_add_undo_transaction (global_undo_manager->details->transaction);
+ nautilus_undo_manager_add_transaction (tip->manager, tip->transaction);
/* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
+ gtk_signal_emit (GTK_OBJECT (tip->manager), signals[UNDO_TRANSACTION_OCCURED]);
}
/* nautilus_undo_manager_undo_last_transaction */
-gboolean
-nautilus_undo_manager_undo_last_transaction (void)
+void
+nautilus_undo_manager_undo (NautilusUndoManager *manager)
{
GList *list;
NautilusUndoTransaction *undo_transaction;
/* Verify we have a transaction to be undone */
- if (global_undo_manager->details->undo_list == NULL) {
+ if (manager->details->undo_list == NULL) {
g_warning("NautilusUndoManager has no transaction to be undone.");
- return FALSE;
+ return;
}
/* Pop last transaction off undo list */
- list = g_list_last(global_undo_manager->details->undo_list);
+ list = g_list_last(manager->details->undo_list);
g_assert(list);
undo_transaction = list->data;
- global_undo_manager->details->undo_list = g_list_remove(global_undo_manager->details->undo_list, list->data);
+ manager->details->undo_list = g_list_remove(manager->details->undo_list, list->data);
/* Undo transaction */
nautilus_undo_transaction_undo(undo_transaction);
/* Place transaction into redo list */
- if (global_undo_manager->details->enable_redo) {
- nautilus_undo_manager_add_redo_transaction (undo_transaction);
+ if (manager->details->enable_redo) {
+ /* nautilus_undo_manager_add_redo_transaction (undo_transaction); */
} else {
/* Purge transaction */
nautilus_undo_transaction_destroy(undo_transaction);
}
/* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
+ gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]);
}
/* nautilus_undo_manager_redo_last_undone_transaction */
-gboolean
-nautilus_undo_manager_redo_last_undone_transaction (void)
+void
+nautilus_undo_manager_redo (NautilusUndoManager *manager)
{
GList *list;
NautilusUndoTransaction *redo_transaction;
/* Are we allowing redo operations? */
- if (global_undo_manager->details->enable_redo) {
+ if (manager->details->enable_redo) {
g_warning("NautilusUndoManager is not configure to allow redo operations.");
- return FALSE;
+ return;
}
/* Verify we have a transaction to be redone */
- if (global_undo_manager->details->redo_list == NULL) {
+ if (manager->details->redo_list == NULL) {
g_warning("NautilusUndoManager has no transaction to be redone.");
- return FALSE;
+ return;
}
/* Pop last transaction off redo list */
- list = g_list_last(global_undo_manager->details->redo_list);
+ list = g_list_last(manager->details->redo_list);
g_assert(list);
redo_transaction = list->data;
nautilus_undo_transaction_undo(redo_transaction);
/* Place transaction into undo list */
- nautilus_undo_manager_add_undo_transaction (redo_transaction);
-
- return TRUE;
+ nautilus_undo_manager_add_transaction (manager, redo_transaction);
}
-/* nautilus_undo_manager_add_undoable_to_transaction */
-gboolean
-nautilus_undo_manager_add_undoable_to_transaction (NautilusUndoable *undoable)
-{
- gboolean result;
-
- /* Verify a transaction is in progress */
- if (!global_undo_manager->details->transaction_in_progress) {
- g_warning("NautilusUndoManager has no current transaction. Begin a transaction first.");
- return FALSE;
- }
-
- g_assert(global_undo_manager->details->transaction != NULL);
-
- result = nautilus_undo_transaction_add_undoable(global_undo_manager->details->transaction, undoable);
-
- return result;
-}
-
-
-/* nautilus_undo_manager_remove_transaction */
-gboolean
-nautilus_undo_manager_remove_transaction (NautilusUndoTransaction *transaction)
-{
- /* Verify a transaction is not in progress */
- if (global_undo_manager->details->transaction_in_progress) {
- g_warning("NautilusUndoManager cannot remove a transaction while one is in progress.");
- return FALSE;
- }
-
- g_return_val_if_fail(transaction != NULL, FALSE);
-
- /* Remove transaction from undo list */
- global_undo_manager->details->undo_list = g_list_remove(global_undo_manager->details->undo_list,
- transaction);
-
- /* Remove transaction from redo list */
- global_undo_manager->details->redo_list = g_list_remove(global_undo_manager->details->redo_list,
- transaction);
-
- /* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
-}
-
-
/* nautilus_undo_manager_add_undo_transaction */
-gboolean
-nautilus_undo_manager_add_undo_transaction (NautilusUndoTransaction *transaction)
+void
+nautilus_undo_manager_add_transaction (NautilusUndoManager *manager, NautilusUndoTransaction *transaction)
{
int length;
/* Verify a transaction is not in progress */
- if (global_undo_manager->details->transaction_in_progress) {
+ if (manager->details->transaction_in_progress) {
g_warning("NautilusUndoManager cannot add a transaction while one is in progress.");
- return FALSE;
+ return;
}
- g_return_val_if_fail(transaction != NULL, FALSE);
+ g_return_if_fail (transaction != NULL);
/* Check and see if we are over our queue limit */
- length = g_list_length(global_undo_manager->details->undo_list);
+ length = g_list_length (manager->details->undo_list);
- if (length >= global_undo_manager->details->queue_depth) {
- global_undo_manager->details->undo_list = prune_undo_manager_list (
- global_undo_manager->details->undo_list,
- (length - global_undo_manager->details->queue_depth) + 1);
+ if (length >= manager->details->queue_depth) {
+ manager->details->undo_list = prune_undo_manager_list (
+ manager->details->undo_list,
+ (length - manager->details->queue_depth) + 1);
}
/* Add transaction to undo list */
- global_undo_manager->details->undo_list = g_list_append(global_undo_manager->details->undo_list,
- transaction);
+ manager->details->undo_list = g_list_append(manager->details->undo_list, transaction);
/* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
-}
-
-/* nautilus_undo_manager_add_redo_transaction */
-gboolean
-nautilus_undo_manager_add_redo_transaction (NautilusUndoTransaction *transaction)
-{
- g_return_val_if_fail(transaction != NULL, FALSE);
-
- /* Verify a transaction is not in progress */
- if (global_undo_manager->details->transaction_in_progress) {
- g_warning("NautilusUndoManager cannot add a transaction while one is in progress.");
- return FALSE;
- }
-
- /* Make sure we allow redo */
- if (!global_undo_manager->details->enable_redo) {
- return FALSE;
- }
-
- /* Add transaction to undo list */
- global_undo_manager->details->undo_list = g_list_append(global_undo_manager->details->undo_list,
- transaction);
-
- /* Fire off signal informing that an redo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
+ gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]);
}
@@ -456,27 +365,32 @@ nautilus_undo_manager_add_redo_transaction (NautilusUndoTransaction *transaction
* Remove any transaction with object as target from
* the undo and redo queues
*/
-
+
gboolean
nautilus_undo_manager_unregister_object (GtkObject *object)
{
+ NautilusUndoManager *manager;
NautilusUndoTransaction *transaction;
gboolean success;
GList *list;
int index, length;
success = FALSE;
-
+
+ /* Locate undo manager */
+ manager = gtk_object_get_data (object, NAUTILUS_UNDO_MANAGER_NAME);
+ g_return_val_if_fail (manager != NULL, success);
+
/* Check undo list */
- length = g_list_length(global_undo_manager->details->undo_list);
+ length = g_list_length (manager->details->undo_list);
for (index = 0; index < length; index++) {
- list = g_list_nth(global_undo_manager->details->undo_list, index);
+ list = g_list_nth (manager->details->undo_list, index);
if (list) {
transaction = list->data;
- if (nautilus_undo_transaction_contains_object(transaction, object)) {
- global_undo_manager->details->undo_list =
- g_list_remove(global_undo_manager->details->undo_list, transaction);
- nautilus_undo_transaction_destroy(transaction);
+ if (nautilus_undo_transaction_contains_object (transaction, object)) {
+ manager->details->undo_list =
+ g_list_remove (manager->details->undo_list, transaction);
+ nautilus_undo_transaction_destroy (transaction);
index--;
success = TRUE;
}
@@ -484,14 +398,14 @@ nautilus_undo_manager_unregister_object (GtkObject *object)
}
/* Check redo list */
- length = g_list_length(global_undo_manager->details->redo_list);
+ length = g_list_length (manager->details->redo_list);
for (index = 0; index < length; index++) {
- list = g_list_nth(global_undo_manager->details->redo_list, index);
+ list = g_list_nth (manager->details->redo_list, index);
if (list) {
transaction = list->data;
if (nautilus_undo_transaction_contains_object(transaction, object)) {
- global_undo_manager->details->redo_list =
- g_list_remove(global_undo_manager->details->redo_list, transaction);
+ manager->details->redo_list =
+ g_list_remove (manager->details->redo_list, transaction);
nautilus_undo_transaction_destroy(transaction);
index--;
success = TRUE;
@@ -501,7 +415,7 @@ nautilus_undo_manager_unregister_object (GtkObject *object)
if (success) {
/* Fire off signal informing that a transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
+ gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]);
}
return success;
@@ -509,10 +423,10 @@ nautilus_undo_manager_unregister_object (GtkObject *object)
/* nautilus_undo_manager_can_undo */
gboolean
-nautilus_undo_manager_can_undo (void)
+nautilus_undo_manager_can_undo (NautilusUndoManager *manager)
{
- if (global_undo_manager != NULL) {
- return (g_list_length(global_undo_manager->details->undo_list) > 0);
+ if (manager != NULL) {
+ return (g_list_length (manager->details->undo_list) > 0);
} else {
return FALSE;
}
@@ -520,11 +434,11 @@ nautilus_undo_manager_can_undo (void)
/* nautilus_undo_manager_can_redo */
gboolean
-nautilus_undo_manager_can_redo (void)
+nautilus_undo_manager_can_redo (NautilusUndoManager *manager)
{
- if (global_undo_manager->details->enable_redo) {
- if (global_undo_manager != NULL) {
- return (g_list_length(global_undo_manager->details->redo_list) > 0);
+ if (manager->details->enable_redo) {
+ if (manager != NULL) {
+ return (g_list_length (manager->details->redo_list) > 0);
} else {
return FALSE;
}
@@ -540,23 +454,22 @@ nautilus_undo_manager_can_redo (void)
* current undo transaction.
*/
-static gint
-get_current_transaction_name(GList *list, gchar *name, gint max_length)
+static const gchar *
+get_current_transaction_name (GList *list)
{
NautilusUndoTransaction *transaction;
const gchar *transaction_name;
- gint name_length;
-
+
/* Check for NULL list */
if (list == NULL) {
g_warning("Unable to get current transaction name due to NULL undo list.");
- return -1;
+ return NULL;
}
/* Check for empty list */
if (g_list_length(list) <= 0) {
g_warning("No transaction to get current undo transaction name from.");
- return -1;
+ return NULL;
}
/* Get last transaction from list */
@@ -564,30 +477,17 @@ get_current_transaction_name(GList *list, gchar *name, gint max_length)
transaction = list->data;
if (transaction == NULL) {
g_warning("Unable to get current transaction name due to NULL transaction in list.");
- return -1;
+ return NULL;
}
/* Check for valid transaction name */
transaction_name = nautilus_undo_transaction_get_name(transaction);
if ( transaction_name == NULL) {
g_warning("Current transaction name is NULL.");
- return -1;
+ return NULL;
}
- /* Return length of transaction name if name argument is NULL */
- if (name == NULL) {
- return strlen(transaction_name);
- }
-
- /* Copy over requested amount into return name argument */
- name_length = strlen(transaction_name);
- if (name_length > max_length) {
- strncpy(name, transaction_name, max_length);
- return max_length;
- } else {
- strncpy(name, transaction_name, name_length);
- return name_length;
- }
+ return transaction_name;
}
@@ -598,10 +498,10 @@ get_current_transaction_name(GList *list, gchar *name, gint max_length)
* current undo transaction.
*/
-gint
-nautilus_undo_manager_get_current_undo_transaction_name (gchar *name, gint max_length)
+const gchar *
+nautilus_undo_manager_get_current_undo_transaction_name (NautilusUndoManager *manager)
{
- return get_current_transaction_name(global_undo_manager->details->undo_list, name, max_length);
+ return get_current_transaction_name (manager->details->undo_list);
}
/* nautilus_undo_manager_get_current_undo_transaction_name
@@ -611,120 +511,97 @@ nautilus_undo_manager_get_current_undo_transaction_name (gchar *name, gint max_l
* current undo transaction.
*/
-gint
-nautilus_undo_manager_get_current_redo_transaction_name (gchar *name, gint max_length)
+const gchar *
+nautilus_undo_manager_get_current_redo_transaction_name (NautilusUndoManager *manager)
{
- return get_current_transaction_name(global_undo_manager->details->redo_list, name, max_length);
+ return get_current_transaction_name (manager->details->redo_list);
}
/* destroy */
static void
destroy (GtkObject *object)
{
+ NautilusUndoManager *manager;
+
g_return_if_fail (NAUTILUS_IS_UNDO_MANAGER (object));
+ manager = NAUTILUS_UNDO_MANAGER (object);
+
/* Clear lists */
- global_undo_manager->details->undo_list = free_undo_manager_list_data(global_undo_manager->details->undo_list);
- global_undo_manager->details->redo_list = free_undo_manager_list_data(global_undo_manager->details->redo_list);
+ manager->details->undo_list = free_undo_manager_list_data (manager->details->undo_list);
+ manager->details->redo_list = free_undo_manager_list_data (manager->details->redo_list);
NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, (object));
}
-/* Initialize Nautilus global undo manager */
-gboolean
-nautilus_undo_manager_initialize_global_manager (void)
-{
- if (global_undo_manager != NULL) {
- g_warning("A global undo manager has already been created.");
- return FALSE;
- }
-
- global_undo_manager = nautilus_undo_manager_new();
-
- return TRUE;
-}
-
-
-/* Return global undo manager */
-NautilusUndoManager *
-nautilus_undo_manager_get_undo_manager (void)
-{
- g_return_val_if_fail(global_undo_manager != NULL, NULL);
- return global_undo_manager;
-}
-
-
/* nautilus_undo_manager_enable_redo
*
* Enable or disable redo functionality
*/
-gboolean
-nautilus_undo_manager_enable_redo (gboolean value)
+
+void
+nautilus_undo_manager_enable_redo (NautilusUndoManager *manager, gboolean value)
{
- g_return_val_if_fail(global_undo_manager != NULL, FALSE);
+ g_return_if_fail (manager != NULL);
- global_undo_manager->details->enable_redo = value;
+ manager->details->enable_redo = value;
/* Flush and free redo queue */
- g_list_free(global_undo_manager->details->redo_list);
-
- return TRUE;
+ g_list_free (manager->details->redo_list);
}
/* nautilus_undo_manager_enable_redo
*
* Enable or disable redo functionality
*/
-gboolean
-nautilus_undo_manager_set_queue_depth (gint depth)
+void
+nautilus_undo_manager_set_queue_depth (NautilusUndoManager *manager, gint depth)
{
int length;
/* Don't allow negative or zero queue depth */
if (depth <= 0) {
g_warning ("NautilusUndoManager doesn not allow negative or zero length queue.");
- return FALSE;
+ return;
}
- global_undo_manager->details->queue_depth = depth;
+ manager->details->queue_depth = depth;
/* Prune lists */
- length = g_list_length (global_undo_manager->details->undo_list);
+ length = g_list_length (manager->details->undo_list);
if (length > depth) {
- global_undo_manager->details->undo_list = prune_undo_manager_list (global_undo_manager->details->undo_list,
+ manager->details->undo_list = prune_undo_manager_list (manager->details->undo_list,
length - depth);
}
- length = g_list_length (global_undo_manager->details->redo_list);
+ length = g_list_length (manager->details->redo_list);
if (length > depth) {
- global_undo_manager->details->undo_list = prune_undo_manager_list (global_undo_manager->details->redo_list,
- length - depth);
+ manager->details->undo_list = prune_undo_manager_list (manager->details->redo_list,
+ length - depth);
}
/* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
+ gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]);
}
/* free_undo_manager_list_data
*
* Clear undo data from list
*/
-
+
static GList *
free_undo_manager_list_data (GList *list)
{
int length, index;
NautilusUndoTransaction *transaction;
-
- length = g_list_length(list);
+
+ length = g_list_length (list);
for (index = 0; index < length; index++) {
- list = g_list_last(list);
+ list = g_list_last (list);
if (list) {
transaction = list->data;
- list = g_list_remove(list, transaction);
- nautilus_undo_transaction_destroy(transaction);
+ list = g_list_remove (list, transaction);
+ nautilus_undo_transaction_destroy (transaction);
}
}
@@ -736,7 +613,7 @@ free_undo_manager_list_data (GList *list)
*
* Prune n items from start of list
*/
-
+
static GList *
prune_undo_manager_list (GList *list, gint items)
{
@@ -744,11 +621,11 @@ prune_undo_manager_list (GList *list, gint items)
NautilusUndoTransaction *transaction;
for (index = 0; index < items; index++) {
- list = g_list_first(list);
+ list = g_list_first (list);
if (list) {
transaction = list->data;
- list = g_list_remove(list, transaction);
- nautilus_undo_transaction_destroy(transaction);
+ list = g_list_remove (list, transaction);
+ nautilus_undo_transaction_destroy (transaction);
}
}
diff --git a/libnautilus-extensions/nautilus-undo-manager.h b/libnautilus-extensions/nautilus-undo-manager.h
index aef846797..272f0bd00 100644
--- a/libnautilus-extensions/nautilus-undo-manager.h
+++ b/libnautilus-extensions/nautilus-undo-manager.h
@@ -26,9 +26,10 @@
#define NAUTILUS_UNDO_MANAGER_H
#include <bonobo/bonobo-object.h>
-#include <libnautilus/nautilus-undo-manager-component.h>
#include <bonobo/bonobo-persist.h>
+
#include "nautilus-undo-transaction.h"
+#include "nautilus-undo.h"
#define NAUTILUS_TYPE_UNDO_MANAGER \
(nautilus_undo_manager_get_type ())
@@ -43,6 +44,7 @@
typedef struct NautilusUndoManagerClass NautilusUndoManagerClass;
typedef struct NautilusUndoManagerDetails NautilusUndoManagerDetails;
+typedef struct NautilusUndoTransactionInProgress NautilusUndoTransactionInProgress;
struct NautilusUndoManager {
BonoboPersist parent;
@@ -50,41 +52,44 @@ struct NautilusUndoManager {
};
struct NautilusUndoManagerClass {
- BonoboPersistClass parent_class;
-
+ BonoboPersistClass parent_class;
void (* undo_transaction_occurred) (GtkObject *object, gpointer data);
-
gpointer servant_init_func, servant_destroy_func, vepv;
};
+struct NautilusUndoTransactionInProgress {
+ NautilusUndoManager *manager;
+ NautilusUndoTransaction *transaction;
+
+};
+
+#define NAUTILUS_UNDO_MANAGER_NAME "NautilusUndoManager"
/* GtkObject */
-GtkType nautilus_undo_manager_get_type (void);
-NautilusUndoManager *nautilus_undo_manager_new (void);
+GtkType nautilus_undo_manager_get_type (void);
+NautilusUndoManager *nautilus_undo_manager_new (void);
/* Prototypes */
-gboolean nautilus_undo_manager_initialize_global_manager (void);
-gboolean nautilus_undo_manager_add_undoable_to_transaction (NautilusUndoable *undoable);
-gboolean nautilus_undo_manager_begin_transaction (const gchar *name);
-gboolean nautilus_undo_manager_end_transaction (void);
-gboolean nautilus_undo_manager_undo_last_transaction (void);
-gboolean nautilus_undo_manager_redo_last_undone_transaction (void);
-NautilusUndoTransaction *nautilus_undo_manager_get_current_transaction (void);
-gboolean nautilus_undo_manager_transaction_in_progress (void);
-gboolean nautilus_undo_manager_add_undo_transaction (NautilusUndoTransaction
- *transaction);
-gboolean nautilus_undo_manager_add_redo_transaction (NautilusUndoTransaction
- *transaction);
-gboolean nautilus_undo_manager_remove_transaction (NautilusUndoTransaction
- *transaction);
+NautilusUndoTransactionInProgress *nautilus_undo_manager_begin_transaction (GtkObject *object, const gchar *name);
+void nautilus_undo_manager_end_transaction (NautilusUndoTransactionInProgress *transaction);
+
+void nautilus_undo_manager_undo (NautilusUndoManager *manager);
+void nautilus_undo_manager_redo (NautilusUndoManager *manager);
+
+void nautilus_undo_manager_add_transaction (NautilusUndoManager *manager,
+ NautilusUndoTransaction *transaction);
+
+gboolean nautilus_undo_manager_can_undo (NautilusUndoManager *manager);
+gboolean nautilus_undo_manager_can_redo (NautilusUndoManager *manager);
+
+const gchar *nautilus_undo_manager_get_current_undo_transaction_name (NautilusUndoManager *manager);
+const gchar *nautilus_undo_manager_get_current_redo_transaction_name (NautilusUndoManager *manager);
+
+void nautilus_undo_manager_enable_redo (NautilusUndoManager *manager, gboolean value);
+void nautilus_undo_manager_set_queue_depth (NautilusUndoManager *manager, gint depth);
+
+
gboolean nautilus_undo_manager_unregister_object (GtkObject *object);
-gboolean nautilus_undo_manager_can_undo (void);
-gboolean nautilus_undo_manager_can_redo (void);
-gint nautilus_undo_manager_get_current_undo_transaction_name (gchar *name, gint max_length);
-gint nautilus_undo_manager_get_current_redo_transaction_name (gchar *name, gint max_length);
-NautilusUndoManager *nautilus_undo_manager_get_undo_manager (void);
-gboolean nautilus_undo_manager_enable_redo (gboolean value);
-gboolean nautilus_undo_manager_set_queue_depth (gint depth);
#endif
diff --git a/libnautilus-private/nautilus-entry.c b/libnautilus-private/nautilus-entry.c
index a20fd9cf1..ace881933 100644
--- a/libnautilus-private/nautilus-entry.c
+++ b/libnautilus-private/nautilus-entry.c
@@ -28,7 +28,6 @@
#include "nautilus-entry.h"
#include "nautilus-gtk-macros.h"
-#include <libnautilus/nautilus-undo-manager.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtkmain.h>
@@ -121,7 +120,10 @@ nautilus_entry_key_press (GtkWidget *widget, GdkEventKey *event)
case 'z':
if (event->state & GDK_CONTROL_MASK && entry->use_undo == TRUE
&& entry->handle_undo_key == TRUE) {
- nautilus_undo_manager_undo_last_transaction();
+ NautilusUndoManager *undo_manager;
+ undo_manager = gtk_object_get_data ( GTK_OBJECT (entry), NAUTILUS_UNDO_MANAGER_NAME);
+ g_assert (undo_manager);
+ nautilus_undo_manager_undo (undo_manager);
return FALSE;
}
break;
@@ -189,6 +191,7 @@ static void
nautilus_entry_changed (GtkEditable *editable)
{
NautilusEntry *entry;
+ NautilusUndoTransactionInProgress *tip;
g_assert (GTK_IS_EDITABLE (editable));
g_assert (NAUTILUS_IS_ENTRY (editable));
@@ -197,10 +200,10 @@ nautilus_entry_changed (GtkEditable *editable)
/* Register undo transaction */
if (!entry->undo_registered && entry->use_undo) {
- nautilus_undo_manager_begin_transaction (_("Edit"));
- nautilus_undoable_save_undo_snapshot (GTK_OBJECT(entry), save_undo_snapshot_callback,
- restore_from_undo_snapshot_callback);
- nautilus_undo_manager_end_transaction ();
+ tip = nautilus_undo_manager_begin_transaction (GTK_OBJECT (entry), _("Edit"));
+ nautilus_undoable_save_undo_snapshot (tip->transaction, GTK_OBJECT(entry), save_undo_snapshot_callback,
+ restore_from_undo_snapshot_callback);
+ nautilus_undo_manager_end_transaction (tip);
entry->undo_registered = TRUE;
}
@@ -270,15 +273,17 @@ restore_from_undo_snapshot_callback (NautilusUndoable *undoable)
* Enable undo mechanism in entry item.
*/
void
-nautilus_entry_enable_undo (NautilusEntry *entry, gboolean value)
+nautilus_entry_enable_undo (NautilusEntry *entry, NautilusUndoManager *manager, gboolean value)
{
g_assert (entry);
g_assert (NAUTILUS_IS_ENTRY (entry));
-
+
entry->undo_registered = !value;
entry->use_undo = value;
- if (!entry->undo_registered) {
+ if (!entry->undo_registered) {
+ gtk_object_set_data ( GTK_OBJECT(entry), NAUTILUS_UNDO_MANAGER_NAME, manager);
+
/* Get copy of entry text */
if (entry->undo_text != NULL) {
g_free (entry->undo_text);
diff --git a/libnautilus-private/nautilus-entry.h b/libnautilus-private/nautilus-entry.h
index 3df09f064..a902493a1 100644
--- a/libnautilus-private/nautilus-entry.h
+++ b/libnautilus-private/nautilus-entry.h
@@ -29,6 +29,7 @@
#include <libgnome/gnome-defs.h>
#include <gtk/gtkentry.h>
+#include <libnautilus/nautilus-undo-manager.h>
BEGIN_GNOME_DECLS
@@ -48,7 +49,7 @@ typedef struct NautilusEntryClass NautilusEntryClass;
struct NautilusEntry {
GtkEntry parent;
-
+
gchar *undo_text;
gboolean undo_registered;
gboolean use_undo;
@@ -59,13 +60,15 @@ struct NautilusEntryClass {
GtkEntryClass parent_class;
};
-GtkType nautilus_entry_get_type (void);
-GtkWidget* nautilus_entry_new (void);
+GtkType nautilus_entry_get_type (void);
+GtkWidget* nautilus_entry_new (void);
-void nautilus_entry_select_all (NautilusEntry *entry);
-void nautilus_entry_select_all_at_idle (NautilusEntry *entry);
-void nautilus_entry_enable_undo (NautilusEntry *entry, gboolean value);
-void nautilus_entry_enable_undo_key (NautilusEntry *entry, gboolean value);
+void nautilus_entry_select_all (NautilusEntry *entry);
+void nautilus_entry_select_all_at_idle (NautilusEntry *entry);
+void nautilus_entry_enable_undo (NautilusEntry *entry,
+ NautilusUndoManager *manager,
+ gboolean value);
+void nautilus_entry_enable_undo_key (NautilusEntry *entry, gboolean value);
END_GNOME_DECLS
diff --git a/libnautilus-private/nautilus-icon-container.c b/libnautilus-private/nautilus-icon-container.c
index 43f1aaad4..994f1e636 100644
--- a/libnautilus-private/nautilus-icon-container.c
+++ b/libnautilus-private/nautilus-icon-container.c
@@ -3453,6 +3453,8 @@ nautilus_icon_container_start_renaming_selected_item (NautilusIconContainer *con
{
NautilusIconContainerDetails *details;
NautilusIcon *icon;
+ GtkWidget *toplevel;
+ NautilusUndoManager *manager;
ArtIRect text_rect;
ArtDRect icon_rect;
GdkFont *font;
@@ -3487,6 +3489,11 @@ nautilus_icon_container_start_renaming_selected_item (NautilusIconContainer *con
nautilus_icon_text_item_get_type (),
NULL));
+ /* Add undo manager */
+ toplevel = gtk_widget_get_toplevel ( GTK_WIDGET (container));
+ manager = gtk_object_get_data ( GTK_OBJECT (toplevel), NAUTILUS_UNDO_MANAGER_NAME);
+ gtk_object_set_data ( GTK_OBJECT (details->rename_widget), NAUTILUS_UNDO_MANAGER_NAME, manager);
+
/* Determine widget position widget in container */
font = details->label_font[details->zoom_level];
ppu = GNOME_CANVAS_ITEM (icon->item)->canvas->pixels_per_unit;
diff --git a/libnautilus-private/nautilus-icon-text-item.c b/libnautilus-private/nautilus-icon-text-item.c
index 8acd5039a..54f91f023 100644
--- a/libnautilus-private/nautilus-icon-text-item.c
+++ b/libnautilus-private/nautilus-icon-text-item.c
@@ -20,6 +20,7 @@
#include <gtk/gtkmain.h>
#include <gtk/gtksignal.h>
#include <gtk/gtkwindow.h>
+#include <libgnome/gnome-i18n.h>
/* Margins used to display the information */
#define MARGIN_X 2
@@ -801,6 +802,8 @@ iti_event (GnomeCanvasItem *item, GdkEvent *event)
int idx;
double x, y;
int cx, cy;
+ NautilusUndoTransactionInProgress *tip;
+
iti = ITI (item);
priv = iti->priv;
@@ -835,10 +838,10 @@ iti_event (GnomeCanvasItem *item, GdkEvent *event)
if (!priv->undo_registered) {
priv->undo_registered = TRUE;
- nautilus_undo_manager_begin_transaction ("Rename");
- nautilus_undoable_save_undo_snapshot (GTK_OBJECT(iti), save_undo_snapshot_callback,
- restore_from_undo_snapshot_callback);
- nautilus_undo_manager_end_transaction ();
+ tip = nautilus_undo_manager_begin_transaction ( GTK_OBJECT(iti), "Rename");
+ nautilus_undoable_save_undo_snapshot (tip->transaction, GTK_OBJECT(iti),
+ save_undo_snapshot_callback, restore_from_undo_snapshot_callback);
+ nautilus_undo_manager_end_transaction (tip);
}
/* Handle any events that reach us */
@@ -1367,15 +1370,16 @@ restore_from_undo_snapshot_callback(NautilusUndoable *undoable)
char *undo_text;
NautilusIconTextItem *iti;
ItiPrivate *priv;
+ NautilusUndoTransactionInProgress *tip;
iti = NAUTILUS_ICON_TEXT_ITEM(undoable->undo_target_class);
priv = iti->priv;
/* Register undo transaction */
- nautilus_undo_manager_begin_transaction ("Rename");
- nautilus_undoable_save_undo_snapshot (GTK_OBJECT(iti), save_undo_snapshot_callback,
- restore_from_undo_snapshot_callback);
- nautilus_undo_manager_end_transaction ();
+ tip = nautilus_undo_manager_begin_transaction (GTK_OBJECT(iti), _("Rename"));
+ nautilus_undoable_save_undo_snapshot (tip->transaction, GTK_OBJECT(iti),
+ save_undo_snapshot_callback, restore_from_undo_snapshot_callback);
+ nautilus_undo_manager_end_transaction (tip);
undo_text = g_datalist_get_data(&undoable->undo_data, "undo_text");
if (undo_text != NULL) {
diff --git a/libnautilus-private/nautilus-undo-manager.c b/libnautilus-private/nautilus-undo-manager.c
index 1faf53994..97b1c0948 100644
--- a/libnautilus-private/nautilus-undo-manager.c
+++ b/libnautilus-private/nautilus-undo-manager.c
@@ -25,6 +25,7 @@
#include <config.h>
#include <gtk/gtksignal.h>
#include <gtk/gtkmain.h>
+#include <glib.h>
#include <string.h>
#include <bonobo/bonobo-main.h>
#include <bonobo/bonobo-control.h>
@@ -45,11 +46,11 @@ static guint signals[LAST_SIGNAL];
typedef struct {
- POA_Nautilus_UndoManager servant;
+ POA_Nautilus_Undo_Manager servant;
gpointer bonobo_object;
NautilusUndoManager *gtk_object;
-} impl_POA_Nautilus_UndoManager;
+} impl_POA_Nautilus_Undo_Manager;
/* GtkObject */
@@ -62,33 +63,33 @@ static GList *prune_undo_manager_list (GList *list, gint items);
/* CORBA/Bonobo */
-static CORBA_boolean impl_Nautilus_UndoManager__begin_transaction (impl_POA_Nautilus_UndoManager *servant,
- const CORBA_char *name,
- CORBA_Environment *ev);
-static void impl_Nautilus_UndoManager__end_transaction (impl_POA_Nautilus_UndoManager *servant,
- CORBA_Environment *ev);
+static void impl_Nautilus_Undo_Manager__append (impl_POA_Nautilus_Undo_Manager *servant,
+ const CORBA_char *name,
+ CORBA_Environment *ev);
+static void impl_Nautilus_Undo_Manager__forget (impl_POA_Nautilus_Undo_Manager *servant,
+ CORBA_Environment *ev);
NAUTILUS_DEFINE_CLASS_BOILERPLATE(NautilusUndoManager, nautilus_undo_manager, BONOBO_OBJECT_TYPE)
-POA_Nautilus_UndoManager__epv libnautilus_extensions_Nautilus_UndoManager_epv =
+POA_Nautilus_Undo_Manager__epv libnautilus_Nautilus_Undo_Manager_epv =
{
NULL, /* _private */
- (gpointer) &impl_Nautilus_UndoManager__begin_transaction,
- (gpointer) &impl_Nautilus_UndoManager__end_transaction,
+ (gpointer) &impl_Nautilus_Undo_Manager__append,
+ (gpointer) &impl_Nautilus_Undo_Manager__forget,
};
static PortableServer_ServantBase__epv base_epv = { NULL, NULL, NULL };
-static POA_Nautilus_UndoManager__vepv impl_Nautilus_UndoManager_vepv =
+static POA_Nautilus_Undo_Manager__vepv impl_Nautilus_Undo_Manager_vepv =
{
&base_epv,
NULL,
- &libnautilus_extensions_Nautilus_UndoManager_epv
+ &libnautilus_Nautilus_Undo_Manager_epv
};
static void
-impl_Nautilus_UndoManager__destroy(BonoboObject *obj, impl_POA_Nautilus_UndoManager *servant)
+impl_Nautilus_Undo_Manager__destroy(BonoboObject *obj, impl_POA_Nautilus_Undo_Manager *servant)
{
PortableServer_ObjectId *objid;
CORBA_Environment ev;
@@ -107,17 +108,17 @@ impl_Nautilus_UndoManager__destroy(BonoboObject *obj, impl_POA_Nautilus_UndoMana
CORBA_exception_free(&ev);
}
-static Nautilus_UndoManager
-impl_Nautilus_UndoManager__create(NautilusUndoManager *manager, CORBA_Environment * ev)
+static Nautilus_Undo_Manager
+impl_Nautilus_Undo_Manager__create(NautilusUndoManager *manager, CORBA_Environment * ev)
{
- Nautilus_UndoManager retval;
- impl_POA_Nautilus_UndoManager *servant;
+ Nautilus_Undo_Manager retval;
+ impl_POA_Nautilus_Undo_Manager *servant;
void (*servant_init_func) (PortableServer_Servant servant, CORBA_Environment *ev);
NautilusUndoManagerClass *undo_class = NAUTILUS_UNDO_MANAGER_CLASS (GTK_OBJECT(manager)->klass);
servant_init_func = undo_class->servant_init_func;
- servant = g_new0 (impl_POA_Nautilus_UndoManager, 1);
+ servant = g_new0 (impl_POA_Nautilus_Undo_Manager, 1);
servant->servant.vepv = undo_class->vepv;
if (!servant->servant.vepv->Bonobo_Unknown_epv)
servant->servant.vepv->Bonobo_Unknown_epv = bonobo_object_get_epv ();
@@ -127,24 +128,22 @@ impl_Nautilus_UndoManager__create(NautilusUndoManager *manager, CORBA_Environmen
retval = bonobo_object_activate_servant (BONOBO_OBJECT (manager), servant);
- gtk_signal_connect (GTK_OBJECT (manager), "destroy", GTK_SIGNAL_FUNC (impl_Nautilus_UndoManager__destroy), servant);
+ gtk_signal_connect (GTK_OBJECT (manager), "destroy", GTK_SIGNAL_FUNC (impl_Nautilus_Undo_Manager__destroy), servant);
return retval;
}
-static CORBA_boolean
-impl_Nautilus_UndoManager__begin_transaction (impl_POA_Nautilus_UndoManager *servant,
+static void
+impl_Nautilus_Undo_Manager__append (impl_POA_Nautilus_Undo_Manager *servant,
const CORBA_char *name,
CORBA_Environment *ev)
{
- return nautilus_undo_manager_begin_transaction (name);
}
static void
-impl_Nautilus_UndoManager__end_transaction (impl_POA_Nautilus_UndoManager *servant,
+impl_Nautilus_Undo_Manager__forget (impl_POA_Nautilus_Undo_Manager *servant,
CORBA_Environment *ev)
{
- nautilus_undo_manager_end_transaction ();
}
@@ -169,9 +168,6 @@ nautilus_undo_manager_initialize (NautilusUndoManager *manager)
manager->details = g_new0 (NautilusUndoManagerDetails, 1);
- /* Init transaction to none */
- manager->details->transaction = NULL;
-
/* Create empty lists */
manager->details->undo_list = NULL;
manager->details->redo_list = NULL;
@@ -185,7 +181,7 @@ nautilus_undo_manager_initialize (NautilusUndoManager *manager)
/* No transaction is in progress */
manager->details->transaction_in_progress = FALSE;
- bonobo_object_construct (BONOBO_OBJECT (manager), impl_Nautilus_UndoManager__create (manager, &ev));
+ bonobo_object_construct (BONOBO_OBJECT (manager), impl_Nautilus_Undo_Manager__create (manager, &ev));
CORBA_exception_free(&ev);
}
@@ -201,9 +197,9 @@ nautilus_undo_manager_initialize_class (NautilusUndoManagerClass *klass)
object_class->destroy = destroy;
- klass->servant_init_func = POA_Nautilus_UndoManager__init;
- klass->servant_destroy_func = POA_Nautilus_UndoManager__fini;
- klass->vepv = &impl_Nautilus_UndoManager_vepv;
+ klass->servant_init_func = POA_Nautilus_Undo_Manager__init;
+ klass->servant_destroy_func = POA_Nautilus_Undo_Manager__fini;
+ klass->vepv = &impl_Nautilus_Undo_Manager_vepv;
/* Setup signals */
signals[UNDO_TRANSACTION_OCCURED]
@@ -218,236 +214,149 @@ nautilus_undo_manager_initialize_class (NautilusUndoManagerClass *klass)
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
}
-/* nautilus_undo_manager_transaction_in_progress */
-gboolean
-nautilus_undo_manager_transaction_in_progress (void)
-{
- return global_undo_manager->details->transaction_in_progress;
-}
-
-
-/* nautilus_undo_manager_get_current_transaction
- * Return current undo transaction
- */
-NautilusUndoTransaction *
-nautilus_undo_manager_get_current_transaction (void)
-{
- return global_undo_manager->details->transaction;
-}
-
/* nautilus_undo_manager_begin_transaction */
-gboolean
-nautilus_undo_manager_begin_transaction (const gchar *name)
+NautilusUndoTransactionInProgress *
+nautilus_undo_manager_begin_transaction (GtkObject *object, const gchar *name)
{
+ NautilusUndoManager *manager;
+ NautilusUndoTransactionInProgress *tip;
+
+ /* Locate undo manager */
+ manager = gtk_object_get_data (object, NAUTILUS_UNDO_MANAGER_NAME);
+ g_return_val_if_fail (manager != NULL, NULL);
+
/* We aren't handling nested transactions currently */
- if (global_undo_manager->details->transaction_in_progress) {
+ if (manager->details->transaction_in_progress) {
g_warning("NautilusUndoManager does not handle nested transactions. End previous transaction first.");
- return FALSE;
+ return NULL;
}
+ /* Create NautilusUndoTransactionInProgress */
+ tip = g_new (NautilusUndoTransactionInProgress, 1);
+ g_assert(tip);
+
+ tip->manager = manager;
+
/* Create new transaction */
- global_undo_manager->details->transaction = nautilus_undo_transaction_new(name);
+ tip->transaction = nautilus_undo_transaction_new(name);
- global_undo_manager->details->transaction_in_progress = TRUE;
+ tip->manager->details->transaction_in_progress = TRUE;
- return TRUE;
+ return tip;
}
/* nautilus_undo_manager_end_transaction */
-gboolean
-nautilus_undo_manager_end_transaction (void)
+void
+nautilus_undo_manager_end_transaction (NautilusUndoTransactionInProgress *tip)
{
/* Verify a transaction is in progress */
- if (!global_undo_manager->details->transaction_in_progress) {
+ if (!tip->manager->details->transaction_in_progress) {
g_warning("NautilusUndoManager has no current transaction. Begin a transaction first.");
- return FALSE;
+ return;
}
- global_undo_manager->details->transaction_in_progress = FALSE;
+ tip->manager->details->transaction_in_progress = FALSE;
/* Commit current transaction to undo list */
- nautilus_undo_manager_add_undo_transaction (global_undo_manager->details->transaction);
+ nautilus_undo_manager_add_transaction (tip->manager, tip->transaction);
/* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
+ gtk_signal_emit (GTK_OBJECT (tip->manager), signals[UNDO_TRANSACTION_OCCURED]);
}
/* nautilus_undo_manager_undo_last_transaction */
-gboolean
-nautilus_undo_manager_undo_last_transaction (void)
+void
+nautilus_undo_manager_undo (NautilusUndoManager *manager)
{
GList *list;
NautilusUndoTransaction *undo_transaction;
/* Verify we have a transaction to be undone */
- if (global_undo_manager->details->undo_list == NULL) {
+ if (manager->details->undo_list == NULL) {
g_warning("NautilusUndoManager has no transaction to be undone.");
- return FALSE;
+ return;
}
/* Pop last transaction off undo list */
- list = g_list_last(global_undo_manager->details->undo_list);
+ list = g_list_last(manager->details->undo_list);
g_assert(list);
undo_transaction = list->data;
- global_undo_manager->details->undo_list = g_list_remove(global_undo_manager->details->undo_list, list->data);
+ manager->details->undo_list = g_list_remove(manager->details->undo_list, list->data);
/* Undo transaction */
nautilus_undo_transaction_undo(undo_transaction);
/* Place transaction into redo list */
- if (global_undo_manager->details->enable_redo) {
- nautilus_undo_manager_add_redo_transaction (undo_transaction);
+ if (manager->details->enable_redo) {
+ /* nautilus_undo_manager_add_redo_transaction (undo_transaction); */
} else {
/* Purge transaction */
nautilus_undo_transaction_destroy(undo_transaction);
}
/* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
+ gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]);
}
/* nautilus_undo_manager_redo_last_undone_transaction */
-gboolean
-nautilus_undo_manager_redo_last_undone_transaction (void)
+void
+nautilus_undo_manager_redo (NautilusUndoManager *manager)
{
GList *list;
NautilusUndoTransaction *redo_transaction;
/* Are we allowing redo operations? */
- if (global_undo_manager->details->enable_redo) {
+ if (manager->details->enable_redo) {
g_warning("NautilusUndoManager is not configure to allow redo operations.");
- return FALSE;
+ return;
}
/* Verify we have a transaction to be redone */
- if (global_undo_manager->details->redo_list == NULL) {
+ if (manager->details->redo_list == NULL) {
g_warning("NautilusUndoManager has no transaction to be redone.");
- return FALSE;
+ return;
}
/* Pop last transaction off redo list */
- list = g_list_last(global_undo_manager->details->redo_list);
+ list = g_list_last(manager->details->redo_list);
g_assert(list);
redo_transaction = list->data;
nautilus_undo_transaction_undo(redo_transaction);
/* Place transaction into undo list */
- nautilus_undo_manager_add_undo_transaction (redo_transaction);
-
- return TRUE;
+ nautilus_undo_manager_add_transaction (manager, redo_transaction);
}
-/* nautilus_undo_manager_add_undoable_to_transaction */
-gboolean
-nautilus_undo_manager_add_undoable_to_transaction (NautilusUndoable *undoable)
-{
- gboolean result;
-
- /* Verify a transaction is in progress */
- if (!global_undo_manager->details->transaction_in_progress) {
- g_warning("NautilusUndoManager has no current transaction. Begin a transaction first.");
- return FALSE;
- }
-
- g_assert(global_undo_manager->details->transaction != NULL);
-
- result = nautilus_undo_transaction_add_undoable(global_undo_manager->details->transaction, undoable);
-
- return result;
-}
-
-
-/* nautilus_undo_manager_remove_transaction */
-gboolean
-nautilus_undo_manager_remove_transaction (NautilusUndoTransaction *transaction)
-{
- /* Verify a transaction is not in progress */
- if (global_undo_manager->details->transaction_in_progress) {
- g_warning("NautilusUndoManager cannot remove a transaction while one is in progress.");
- return FALSE;
- }
-
- g_return_val_if_fail(transaction != NULL, FALSE);
-
- /* Remove transaction from undo list */
- global_undo_manager->details->undo_list = g_list_remove(global_undo_manager->details->undo_list,
- transaction);
-
- /* Remove transaction from redo list */
- global_undo_manager->details->redo_list = g_list_remove(global_undo_manager->details->redo_list,
- transaction);
-
- /* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
-}
-
-
/* nautilus_undo_manager_add_undo_transaction */
-gboolean
-nautilus_undo_manager_add_undo_transaction (NautilusUndoTransaction *transaction)
+void
+nautilus_undo_manager_add_transaction (NautilusUndoManager *manager, NautilusUndoTransaction *transaction)
{
int length;
/* Verify a transaction is not in progress */
- if (global_undo_manager->details->transaction_in_progress) {
+ if (manager->details->transaction_in_progress) {
g_warning("NautilusUndoManager cannot add a transaction while one is in progress.");
- return FALSE;
+ return;
}
- g_return_val_if_fail(transaction != NULL, FALSE);
+ g_return_if_fail (transaction != NULL);
/* Check and see if we are over our queue limit */
- length = g_list_length(global_undo_manager->details->undo_list);
+ length = g_list_length (manager->details->undo_list);
- if (length >= global_undo_manager->details->queue_depth) {
- global_undo_manager->details->undo_list = prune_undo_manager_list (
- global_undo_manager->details->undo_list,
- (length - global_undo_manager->details->queue_depth) + 1);
+ if (length >= manager->details->queue_depth) {
+ manager->details->undo_list = prune_undo_manager_list (
+ manager->details->undo_list,
+ (length - manager->details->queue_depth) + 1);
}
/* Add transaction to undo list */
- global_undo_manager->details->undo_list = g_list_append(global_undo_manager->details->undo_list,
- transaction);
+ manager->details->undo_list = g_list_append(manager->details->undo_list, transaction);
/* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
-}
-
-/* nautilus_undo_manager_add_redo_transaction */
-gboolean
-nautilus_undo_manager_add_redo_transaction (NautilusUndoTransaction *transaction)
-{
- g_return_val_if_fail(transaction != NULL, FALSE);
-
- /* Verify a transaction is not in progress */
- if (global_undo_manager->details->transaction_in_progress) {
- g_warning("NautilusUndoManager cannot add a transaction while one is in progress.");
- return FALSE;
- }
-
- /* Make sure we allow redo */
- if (!global_undo_manager->details->enable_redo) {
- return FALSE;
- }
-
- /* Add transaction to undo list */
- global_undo_manager->details->undo_list = g_list_append(global_undo_manager->details->undo_list,
- transaction);
-
- /* Fire off signal informing that an redo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
+ gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]);
}
@@ -456,27 +365,32 @@ nautilus_undo_manager_add_redo_transaction (NautilusUndoTransaction *transaction
* Remove any transaction with object as target from
* the undo and redo queues
*/
-
+
gboolean
nautilus_undo_manager_unregister_object (GtkObject *object)
{
+ NautilusUndoManager *manager;
NautilusUndoTransaction *transaction;
gboolean success;
GList *list;
int index, length;
success = FALSE;
-
+
+ /* Locate undo manager */
+ manager = gtk_object_get_data (object, NAUTILUS_UNDO_MANAGER_NAME);
+ g_return_val_if_fail (manager != NULL, success);
+
/* Check undo list */
- length = g_list_length(global_undo_manager->details->undo_list);
+ length = g_list_length (manager->details->undo_list);
for (index = 0; index < length; index++) {
- list = g_list_nth(global_undo_manager->details->undo_list, index);
+ list = g_list_nth (manager->details->undo_list, index);
if (list) {
transaction = list->data;
- if (nautilus_undo_transaction_contains_object(transaction, object)) {
- global_undo_manager->details->undo_list =
- g_list_remove(global_undo_manager->details->undo_list, transaction);
- nautilus_undo_transaction_destroy(transaction);
+ if (nautilus_undo_transaction_contains_object (transaction, object)) {
+ manager->details->undo_list =
+ g_list_remove (manager->details->undo_list, transaction);
+ nautilus_undo_transaction_destroy (transaction);
index--;
success = TRUE;
}
@@ -484,14 +398,14 @@ nautilus_undo_manager_unregister_object (GtkObject *object)
}
/* Check redo list */
- length = g_list_length(global_undo_manager->details->redo_list);
+ length = g_list_length (manager->details->redo_list);
for (index = 0; index < length; index++) {
- list = g_list_nth(global_undo_manager->details->redo_list, index);
+ list = g_list_nth (manager->details->redo_list, index);
if (list) {
transaction = list->data;
if (nautilus_undo_transaction_contains_object(transaction, object)) {
- global_undo_manager->details->redo_list =
- g_list_remove(global_undo_manager->details->redo_list, transaction);
+ manager->details->redo_list =
+ g_list_remove (manager->details->redo_list, transaction);
nautilus_undo_transaction_destroy(transaction);
index--;
success = TRUE;
@@ -501,7 +415,7 @@ nautilus_undo_manager_unregister_object (GtkObject *object)
if (success) {
/* Fire off signal informing that a transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
+ gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]);
}
return success;
@@ -509,10 +423,10 @@ nautilus_undo_manager_unregister_object (GtkObject *object)
/* nautilus_undo_manager_can_undo */
gboolean
-nautilus_undo_manager_can_undo (void)
+nautilus_undo_manager_can_undo (NautilusUndoManager *manager)
{
- if (global_undo_manager != NULL) {
- return (g_list_length(global_undo_manager->details->undo_list) > 0);
+ if (manager != NULL) {
+ return (g_list_length (manager->details->undo_list) > 0);
} else {
return FALSE;
}
@@ -520,11 +434,11 @@ nautilus_undo_manager_can_undo (void)
/* nautilus_undo_manager_can_redo */
gboolean
-nautilus_undo_manager_can_redo (void)
+nautilus_undo_manager_can_redo (NautilusUndoManager *manager)
{
- if (global_undo_manager->details->enable_redo) {
- if (global_undo_manager != NULL) {
- return (g_list_length(global_undo_manager->details->redo_list) > 0);
+ if (manager->details->enable_redo) {
+ if (manager != NULL) {
+ return (g_list_length (manager->details->redo_list) > 0);
} else {
return FALSE;
}
@@ -540,23 +454,22 @@ nautilus_undo_manager_can_redo (void)
* current undo transaction.
*/
-static gint
-get_current_transaction_name(GList *list, gchar *name, gint max_length)
+static const gchar *
+get_current_transaction_name (GList *list)
{
NautilusUndoTransaction *transaction;
const gchar *transaction_name;
- gint name_length;
-
+
/* Check for NULL list */
if (list == NULL) {
g_warning("Unable to get current transaction name due to NULL undo list.");
- return -1;
+ return NULL;
}
/* Check for empty list */
if (g_list_length(list) <= 0) {
g_warning("No transaction to get current undo transaction name from.");
- return -1;
+ return NULL;
}
/* Get last transaction from list */
@@ -564,30 +477,17 @@ get_current_transaction_name(GList *list, gchar *name, gint max_length)
transaction = list->data;
if (transaction == NULL) {
g_warning("Unable to get current transaction name due to NULL transaction in list.");
- return -1;
+ return NULL;
}
/* Check for valid transaction name */
transaction_name = nautilus_undo_transaction_get_name(transaction);
if ( transaction_name == NULL) {
g_warning("Current transaction name is NULL.");
- return -1;
+ return NULL;
}
- /* Return length of transaction name if name argument is NULL */
- if (name == NULL) {
- return strlen(transaction_name);
- }
-
- /* Copy over requested amount into return name argument */
- name_length = strlen(transaction_name);
- if (name_length > max_length) {
- strncpy(name, transaction_name, max_length);
- return max_length;
- } else {
- strncpy(name, transaction_name, name_length);
- return name_length;
- }
+ return transaction_name;
}
@@ -598,10 +498,10 @@ get_current_transaction_name(GList *list, gchar *name, gint max_length)
* current undo transaction.
*/
-gint
-nautilus_undo_manager_get_current_undo_transaction_name (gchar *name, gint max_length)
+const gchar *
+nautilus_undo_manager_get_current_undo_transaction_name (NautilusUndoManager *manager)
{
- return get_current_transaction_name(global_undo_manager->details->undo_list, name, max_length);
+ return get_current_transaction_name (manager->details->undo_list);
}
/* nautilus_undo_manager_get_current_undo_transaction_name
@@ -611,120 +511,97 @@ nautilus_undo_manager_get_current_undo_transaction_name (gchar *name, gint max_l
* current undo transaction.
*/
-gint
-nautilus_undo_manager_get_current_redo_transaction_name (gchar *name, gint max_length)
+const gchar *
+nautilus_undo_manager_get_current_redo_transaction_name (NautilusUndoManager *manager)
{
- return get_current_transaction_name(global_undo_manager->details->redo_list, name, max_length);
+ return get_current_transaction_name (manager->details->redo_list);
}
/* destroy */
static void
destroy (GtkObject *object)
{
+ NautilusUndoManager *manager;
+
g_return_if_fail (NAUTILUS_IS_UNDO_MANAGER (object));
+ manager = NAUTILUS_UNDO_MANAGER (object);
+
/* Clear lists */
- global_undo_manager->details->undo_list = free_undo_manager_list_data(global_undo_manager->details->undo_list);
- global_undo_manager->details->redo_list = free_undo_manager_list_data(global_undo_manager->details->redo_list);
+ manager->details->undo_list = free_undo_manager_list_data (manager->details->undo_list);
+ manager->details->redo_list = free_undo_manager_list_data (manager->details->redo_list);
NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, (object));
}
-/* Initialize Nautilus global undo manager */
-gboolean
-nautilus_undo_manager_initialize_global_manager (void)
-{
- if (global_undo_manager != NULL) {
- g_warning("A global undo manager has already been created.");
- return FALSE;
- }
-
- global_undo_manager = nautilus_undo_manager_new();
-
- return TRUE;
-}
-
-
-/* Return global undo manager */
-NautilusUndoManager *
-nautilus_undo_manager_get_undo_manager (void)
-{
- g_return_val_if_fail(global_undo_manager != NULL, NULL);
- return global_undo_manager;
-}
-
-
/* nautilus_undo_manager_enable_redo
*
* Enable or disable redo functionality
*/
-gboolean
-nautilus_undo_manager_enable_redo (gboolean value)
+
+void
+nautilus_undo_manager_enable_redo (NautilusUndoManager *manager, gboolean value)
{
- g_return_val_if_fail(global_undo_manager != NULL, FALSE);
+ g_return_if_fail (manager != NULL);
- global_undo_manager->details->enable_redo = value;
+ manager->details->enable_redo = value;
/* Flush and free redo queue */
- g_list_free(global_undo_manager->details->redo_list);
-
- return TRUE;
+ g_list_free (manager->details->redo_list);
}
/* nautilus_undo_manager_enable_redo
*
* Enable or disable redo functionality
*/
-gboolean
-nautilus_undo_manager_set_queue_depth (gint depth)
+void
+nautilus_undo_manager_set_queue_depth (NautilusUndoManager *manager, gint depth)
{
int length;
/* Don't allow negative or zero queue depth */
if (depth <= 0) {
g_warning ("NautilusUndoManager doesn not allow negative or zero length queue.");
- return FALSE;
+ return;
}
- global_undo_manager->details->queue_depth = depth;
+ manager->details->queue_depth = depth;
/* Prune lists */
- length = g_list_length (global_undo_manager->details->undo_list);
+ length = g_list_length (manager->details->undo_list);
if (length > depth) {
- global_undo_manager->details->undo_list = prune_undo_manager_list (global_undo_manager->details->undo_list,
+ manager->details->undo_list = prune_undo_manager_list (manager->details->undo_list,
length - depth);
}
- length = g_list_length (global_undo_manager->details->redo_list);
+ length = g_list_length (manager->details->redo_list);
if (length > depth) {
- global_undo_manager->details->undo_list = prune_undo_manager_list (global_undo_manager->details->redo_list,
- length - depth);
+ manager->details->undo_list = prune_undo_manager_list (manager->details->redo_list,
+ length - depth);
}
/* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
+ gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]);
}
/* free_undo_manager_list_data
*
* Clear undo data from list
*/
-
+
static GList *
free_undo_manager_list_data (GList *list)
{
int length, index;
NautilusUndoTransaction *transaction;
-
- length = g_list_length(list);
+
+ length = g_list_length (list);
for (index = 0; index < length; index++) {
- list = g_list_last(list);
+ list = g_list_last (list);
if (list) {
transaction = list->data;
- list = g_list_remove(list, transaction);
- nautilus_undo_transaction_destroy(transaction);
+ list = g_list_remove (list, transaction);
+ nautilus_undo_transaction_destroy (transaction);
}
}
@@ -736,7 +613,7 @@ free_undo_manager_list_data (GList *list)
*
* Prune n items from start of list
*/
-
+
static GList *
prune_undo_manager_list (GList *list, gint items)
{
@@ -744,11 +621,11 @@ prune_undo_manager_list (GList *list, gint items)
NautilusUndoTransaction *transaction;
for (index = 0; index < items; index++) {
- list = g_list_first(list);
+ list = g_list_first (list);
if (list) {
transaction = list->data;
- list = g_list_remove(list, transaction);
- nautilus_undo_transaction_destroy(transaction);
+ list = g_list_remove (list, transaction);
+ nautilus_undo_transaction_destroy (transaction);
}
}
diff --git a/libnautilus-private/nautilus-undo-manager.h b/libnautilus-private/nautilus-undo-manager.h
index aef846797..272f0bd00 100644
--- a/libnautilus-private/nautilus-undo-manager.h
+++ b/libnautilus-private/nautilus-undo-manager.h
@@ -26,9 +26,10 @@
#define NAUTILUS_UNDO_MANAGER_H
#include <bonobo/bonobo-object.h>
-#include <libnautilus/nautilus-undo-manager-component.h>
#include <bonobo/bonobo-persist.h>
+
#include "nautilus-undo-transaction.h"
+#include "nautilus-undo.h"
#define NAUTILUS_TYPE_UNDO_MANAGER \
(nautilus_undo_manager_get_type ())
@@ -43,6 +44,7 @@
typedef struct NautilusUndoManagerClass NautilusUndoManagerClass;
typedef struct NautilusUndoManagerDetails NautilusUndoManagerDetails;
+typedef struct NautilusUndoTransactionInProgress NautilusUndoTransactionInProgress;
struct NautilusUndoManager {
BonoboPersist parent;
@@ -50,41 +52,44 @@ struct NautilusUndoManager {
};
struct NautilusUndoManagerClass {
- BonoboPersistClass parent_class;
-
+ BonoboPersistClass parent_class;
void (* undo_transaction_occurred) (GtkObject *object, gpointer data);
-
gpointer servant_init_func, servant_destroy_func, vepv;
};
+struct NautilusUndoTransactionInProgress {
+ NautilusUndoManager *manager;
+ NautilusUndoTransaction *transaction;
+
+};
+
+#define NAUTILUS_UNDO_MANAGER_NAME "NautilusUndoManager"
/* GtkObject */
-GtkType nautilus_undo_manager_get_type (void);
-NautilusUndoManager *nautilus_undo_manager_new (void);
+GtkType nautilus_undo_manager_get_type (void);
+NautilusUndoManager *nautilus_undo_manager_new (void);
/* Prototypes */
-gboolean nautilus_undo_manager_initialize_global_manager (void);
-gboolean nautilus_undo_manager_add_undoable_to_transaction (NautilusUndoable *undoable);
-gboolean nautilus_undo_manager_begin_transaction (const gchar *name);
-gboolean nautilus_undo_manager_end_transaction (void);
-gboolean nautilus_undo_manager_undo_last_transaction (void);
-gboolean nautilus_undo_manager_redo_last_undone_transaction (void);
-NautilusUndoTransaction *nautilus_undo_manager_get_current_transaction (void);
-gboolean nautilus_undo_manager_transaction_in_progress (void);
-gboolean nautilus_undo_manager_add_undo_transaction (NautilusUndoTransaction
- *transaction);
-gboolean nautilus_undo_manager_add_redo_transaction (NautilusUndoTransaction
- *transaction);
-gboolean nautilus_undo_manager_remove_transaction (NautilusUndoTransaction
- *transaction);
+NautilusUndoTransactionInProgress *nautilus_undo_manager_begin_transaction (GtkObject *object, const gchar *name);
+void nautilus_undo_manager_end_transaction (NautilusUndoTransactionInProgress *transaction);
+
+void nautilus_undo_manager_undo (NautilusUndoManager *manager);
+void nautilus_undo_manager_redo (NautilusUndoManager *manager);
+
+void nautilus_undo_manager_add_transaction (NautilusUndoManager *manager,
+ NautilusUndoTransaction *transaction);
+
+gboolean nautilus_undo_manager_can_undo (NautilusUndoManager *manager);
+gboolean nautilus_undo_manager_can_redo (NautilusUndoManager *manager);
+
+const gchar *nautilus_undo_manager_get_current_undo_transaction_name (NautilusUndoManager *manager);
+const gchar *nautilus_undo_manager_get_current_redo_transaction_name (NautilusUndoManager *manager);
+
+void nautilus_undo_manager_enable_redo (NautilusUndoManager *manager, gboolean value);
+void nautilus_undo_manager_set_queue_depth (NautilusUndoManager *manager, gint depth);
+
+
gboolean nautilus_undo_manager_unregister_object (GtkObject *object);
-gboolean nautilus_undo_manager_can_undo (void);
-gboolean nautilus_undo_manager_can_redo (void);
-gint nautilus_undo_manager_get_current_undo_transaction_name (gchar *name, gint max_length);
-gint nautilus_undo_manager_get_current_redo_transaction_name (gchar *name, gint max_length);
-NautilusUndoManager *nautilus_undo_manager_get_undo_manager (void);
-gboolean nautilus_undo_manager_enable_redo (gboolean value);
-gboolean nautilus_undo_manager_set_queue_depth (gint depth);
#endif
diff --git a/libnautilus/.cvsignore b/libnautilus/.cvsignore
index ac14f1dac..989bd8abd 100644
--- a/libnautilus/.cvsignore
+++ b/libnautilus/.cvsignore
@@ -7,13 +7,13 @@ libnautilus.la
nautilus-common.c
nautilus-skels.c
nautilus-stubs.c
-nautilus-undo-manager-component-common.c
-nautilus-undo-manager-component-skels.c
-nautilus-undo-manager-component-stubs.c
-nautilus-undo-manager-component.h
+nautilus-undo-common.c
+nautilus-undo-skels.c
+nautilus-undo-stubs.c
+nautilus-undo.h
nautilus-view-component-common.c
nautilus-view-component-skels.c
nautilus-view-component-stubs.c
nautilus-view-component.h
-nautilus_undo_manager_component_idl_stamp
+nautilus_undo_idl_stamp
nautilus_view_component_idl_stamp
diff --git a/libnautilus/Makefile.am b/libnautilus/Makefile.am
index 10554b423..dbbac331e 100644
--- a/libnautilus/Makefile.am
+++ b/libnautilus/Makefile.am
@@ -21,23 +21,22 @@ libnautilus_la_LDFLAGS=\
$(XML_LIBS) \
$(LIBPNG)
-nautilus_undo_manager_component_idl_sources = \
- nautilus-undo-manager-component-stubs.c \
- nautilus-undo-manager-component-skels.c \
- nautilus-undo-manager-component-common.c \
- nautilus-undo-manager-component.h
-
nautilus_view_component_idl_sources = \
nautilus-view-component-stubs.c \
nautilus-view-component-skels.c \
nautilus-view-component.h \
nautilus-view-component-common.c
-BUILT_SOURCES = \
- $(nautilus_undo_manager_component_idl_sources) \
- $(nautilus_view_component_idl_sources) \
- $(NULL)
+nautilus_undo_idl_sources = \
+ nautilus-undo-stubs.c \
+ nautilus-undo-skels.c \
+ nautilus-undo.h \
+ nautilus-undo-common.c
+BUILT_SOURCES = \
+ $(nautilus_view_component_idl_sources) \
+ $(nautilus_undo_idl_sources)
+
libnautilusincludedir=$(includedir)/libnautilus
libnautilusinclude_HEADERS= \
@@ -57,8 +56,8 @@ libnautilusinclude_HEADERS= \
libnautilus_la_SOURCES= \
nautilus-undo-manager-private.h \
nautilus-view-frame-private.h \
- $(nautilus_undo_manager_component_idl_sources) \
$(nautilus_view_component_idl_sources) \
+ $(nautilus_undo_idl_sources) \
nautilus-clipboard.c \
nautilus-content-view-frame.c \
nautilus-meta-view-frame.c \
@@ -69,16 +68,21 @@ libnautilus_la_SOURCES= \
nautilus-undoable.c \
$(NULL)
-$(nautilus_undo_manager_component_idl_sources): nautilus_undo_manager_component_idl_stamp
-nautilus_undo_manager_component_idl_stamp: nautilus-undo-manager-component.idl
- orbit-idl -I${datadir}/idl `gnome-config --cflags idl` $(srcdir)/nautilus-undo-manager-component.idl
- touch nautilus_undo_manager_component_idl_stamp
-
$(nautilus_view_component_idl_sources): nautilus_view_component_idl_stamp
nautilus_view_component_idl_stamp: nautilus-view-component.idl
orbit-idl -I${datadir}/idl `gnome-config --cflags idl` $(srcdir)/nautilus-view-component.idl
touch nautilus_view_component_idl_stamp
-CLEANFILES=nautilus_view_component_idl_stamp nautilus_undo_manager_component_idl_stamp
+$(nautilus_undo_idl_sources): nautilus_undo_idl_stamp
+nautilus_undo_idl_stamp: nautilus-undo.idl
+ orbit-idl -I${datadir}/idl `gnome-config --cflags idl` $(srcdir)/nautilus-undo.idl
+ touch nautilus_undo_idl_stamp
+
+CLEANFILES = \
+ nautilus_view_component_idl_stamp \
+ nautilus_undo_idl_stamp
+
+EXTRA_DIST = \
+ nautilus-view-component.idl \
+ nautilus-undo.idl
-EXTRA_DIST = nautilus-undo-manager-component.idl nautilus-view-component.idl
diff --git a/libnautilus/nautilus-distributed-undo.idl b/libnautilus/nautilus-distributed-undo.idl
new file mode 100644
index 000000000..cd63e190b
--- /dev/null
+++ b/libnautilus/nautilus-distributed-undo.idl
@@ -0,0 +1,40 @@
+/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
+
+#ifndef NAUTUILUS_UNDO_IDL_INCLUDED
+#define NAUTUILUS_UNDO_MANAGER_IDL_INCLUDED
+
+#include <gnome-factory.idl>
+#include <Bonobo.idl>
+
+module Nautilus {
+
+ module Undo {
+
+ // Forward declarations
+ interface Manager;
+ interface Transaction;
+
+ // Contains elements that describe a transaction
+ struct TransactionMenuInfo {
+ string name;
+ string description;
+ };
+
+ // An undo transaction
+ interface Transaction : ::Bonobo::Unknown {
+ readonly attribute TransactionMenuInfo undo_description;
+ readonly attribute TransactionMenuInfo redo_description;
+ readonly attribute string base_description;
+
+ void undo (in Transaction transaction);
+ };
+
+ // The main interface that handles undo transactions
+ interface Manager : ::Bonobo::Unknown {
+ void append (in Transaction transaction);
+ void forget (in Transaction transaction);
+ };
+ };
+};
+
+#endif /* NAUTUILUS_UNDO_IDL_INCLUDED */
diff --git a/libnautilus/nautilus-undo-manager-component.idl b/libnautilus/nautilus-undo-manager-component.idl
deleted file mode 100644
index 9913a452d..000000000
--- a/libnautilus/nautilus-undo-manager-component.idl
+++ /dev/null
@@ -1,18 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
-
-
-#ifndef _NAUTUILUS_UNDO_MANAGER_IDL_INCLUDED_
-#define _NAUTUILUS_UNDO_MANAGER_IDL_INCLUDED_
-
-#include <gnome-factory.idl>
-#include <Bonobo.idl>
-
-module Nautilus {
-
- interface UndoManager : ::Bonobo::Unknown {
- boolean begin_transaction (in string name);
- boolean end_transaction ();
- };
-};
-
-#endif /* _NAUTUILUS_UNDO_MANAGER_IDL_INCLUDED_ */ \ No newline at end of file
diff --git a/libnautilus/nautilus-undo-manager-private.h b/libnautilus/nautilus-undo-manager-private.h
index b825fe9c1..09dea2cfc 100644
--- a/libnautilus/nautilus-undo-manager-private.h
+++ b/libnautilus/nautilus-undo-manager-private.h
@@ -31,10 +31,8 @@
#include "nautilus-undo-transaction.h"
/* Private data */
-NautilusUndoManager *global_undo_manager;
struct NautilusUndoManagerDetails {
- NautilusUndoTransaction *transaction; /* Current active and unique transaction */
GList *undo_list;
GList *redo_list;
gboolean transaction_in_progress;
diff --git a/libnautilus/nautilus-undo-manager.c b/libnautilus/nautilus-undo-manager.c
index 1faf53994..97b1c0948 100644
--- a/libnautilus/nautilus-undo-manager.c
+++ b/libnautilus/nautilus-undo-manager.c
@@ -25,6 +25,7 @@
#include <config.h>
#include <gtk/gtksignal.h>
#include <gtk/gtkmain.h>
+#include <glib.h>
#include <string.h>
#include <bonobo/bonobo-main.h>
#include <bonobo/bonobo-control.h>
@@ -45,11 +46,11 @@ static guint signals[LAST_SIGNAL];
typedef struct {
- POA_Nautilus_UndoManager servant;
+ POA_Nautilus_Undo_Manager servant;
gpointer bonobo_object;
NautilusUndoManager *gtk_object;
-} impl_POA_Nautilus_UndoManager;
+} impl_POA_Nautilus_Undo_Manager;
/* GtkObject */
@@ -62,33 +63,33 @@ static GList *prune_undo_manager_list (GList *list, gint items);
/* CORBA/Bonobo */
-static CORBA_boolean impl_Nautilus_UndoManager__begin_transaction (impl_POA_Nautilus_UndoManager *servant,
- const CORBA_char *name,
- CORBA_Environment *ev);
-static void impl_Nautilus_UndoManager__end_transaction (impl_POA_Nautilus_UndoManager *servant,
- CORBA_Environment *ev);
+static void impl_Nautilus_Undo_Manager__append (impl_POA_Nautilus_Undo_Manager *servant,
+ const CORBA_char *name,
+ CORBA_Environment *ev);
+static void impl_Nautilus_Undo_Manager__forget (impl_POA_Nautilus_Undo_Manager *servant,
+ CORBA_Environment *ev);
NAUTILUS_DEFINE_CLASS_BOILERPLATE(NautilusUndoManager, nautilus_undo_manager, BONOBO_OBJECT_TYPE)
-POA_Nautilus_UndoManager__epv libnautilus_extensions_Nautilus_UndoManager_epv =
+POA_Nautilus_Undo_Manager__epv libnautilus_Nautilus_Undo_Manager_epv =
{
NULL, /* _private */
- (gpointer) &impl_Nautilus_UndoManager__begin_transaction,
- (gpointer) &impl_Nautilus_UndoManager__end_transaction,
+ (gpointer) &impl_Nautilus_Undo_Manager__append,
+ (gpointer) &impl_Nautilus_Undo_Manager__forget,
};
static PortableServer_ServantBase__epv base_epv = { NULL, NULL, NULL };
-static POA_Nautilus_UndoManager__vepv impl_Nautilus_UndoManager_vepv =
+static POA_Nautilus_Undo_Manager__vepv impl_Nautilus_Undo_Manager_vepv =
{
&base_epv,
NULL,
- &libnautilus_extensions_Nautilus_UndoManager_epv
+ &libnautilus_Nautilus_Undo_Manager_epv
};
static void
-impl_Nautilus_UndoManager__destroy(BonoboObject *obj, impl_POA_Nautilus_UndoManager *servant)
+impl_Nautilus_Undo_Manager__destroy(BonoboObject *obj, impl_POA_Nautilus_Undo_Manager *servant)
{
PortableServer_ObjectId *objid;
CORBA_Environment ev;
@@ -107,17 +108,17 @@ impl_Nautilus_UndoManager__destroy(BonoboObject *obj, impl_POA_Nautilus_UndoMana
CORBA_exception_free(&ev);
}
-static Nautilus_UndoManager
-impl_Nautilus_UndoManager__create(NautilusUndoManager *manager, CORBA_Environment * ev)
+static Nautilus_Undo_Manager
+impl_Nautilus_Undo_Manager__create(NautilusUndoManager *manager, CORBA_Environment * ev)
{
- Nautilus_UndoManager retval;
- impl_POA_Nautilus_UndoManager *servant;
+ Nautilus_Undo_Manager retval;
+ impl_POA_Nautilus_Undo_Manager *servant;
void (*servant_init_func) (PortableServer_Servant servant, CORBA_Environment *ev);
NautilusUndoManagerClass *undo_class = NAUTILUS_UNDO_MANAGER_CLASS (GTK_OBJECT(manager)->klass);
servant_init_func = undo_class->servant_init_func;
- servant = g_new0 (impl_POA_Nautilus_UndoManager, 1);
+ servant = g_new0 (impl_POA_Nautilus_Undo_Manager, 1);
servant->servant.vepv = undo_class->vepv;
if (!servant->servant.vepv->Bonobo_Unknown_epv)
servant->servant.vepv->Bonobo_Unknown_epv = bonobo_object_get_epv ();
@@ -127,24 +128,22 @@ impl_Nautilus_UndoManager__create(NautilusUndoManager *manager, CORBA_Environmen
retval = bonobo_object_activate_servant (BONOBO_OBJECT (manager), servant);
- gtk_signal_connect (GTK_OBJECT (manager), "destroy", GTK_SIGNAL_FUNC (impl_Nautilus_UndoManager__destroy), servant);
+ gtk_signal_connect (GTK_OBJECT (manager), "destroy", GTK_SIGNAL_FUNC (impl_Nautilus_Undo_Manager__destroy), servant);
return retval;
}
-static CORBA_boolean
-impl_Nautilus_UndoManager__begin_transaction (impl_POA_Nautilus_UndoManager *servant,
+static void
+impl_Nautilus_Undo_Manager__append (impl_POA_Nautilus_Undo_Manager *servant,
const CORBA_char *name,
CORBA_Environment *ev)
{
- return nautilus_undo_manager_begin_transaction (name);
}
static void
-impl_Nautilus_UndoManager__end_transaction (impl_POA_Nautilus_UndoManager *servant,
+impl_Nautilus_Undo_Manager__forget (impl_POA_Nautilus_Undo_Manager *servant,
CORBA_Environment *ev)
{
- nautilus_undo_manager_end_transaction ();
}
@@ -169,9 +168,6 @@ nautilus_undo_manager_initialize (NautilusUndoManager *manager)
manager->details = g_new0 (NautilusUndoManagerDetails, 1);
- /* Init transaction to none */
- manager->details->transaction = NULL;
-
/* Create empty lists */
manager->details->undo_list = NULL;
manager->details->redo_list = NULL;
@@ -185,7 +181,7 @@ nautilus_undo_manager_initialize (NautilusUndoManager *manager)
/* No transaction is in progress */
manager->details->transaction_in_progress = FALSE;
- bonobo_object_construct (BONOBO_OBJECT (manager), impl_Nautilus_UndoManager__create (manager, &ev));
+ bonobo_object_construct (BONOBO_OBJECT (manager), impl_Nautilus_Undo_Manager__create (manager, &ev));
CORBA_exception_free(&ev);
}
@@ -201,9 +197,9 @@ nautilus_undo_manager_initialize_class (NautilusUndoManagerClass *klass)
object_class->destroy = destroy;
- klass->servant_init_func = POA_Nautilus_UndoManager__init;
- klass->servant_destroy_func = POA_Nautilus_UndoManager__fini;
- klass->vepv = &impl_Nautilus_UndoManager_vepv;
+ klass->servant_init_func = POA_Nautilus_Undo_Manager__init;
+ klass->servant_destroy_func = POA_Nautilus_Undo_Manager__fini;
+ klass->vepv = &impl_Nautilus_Undo_Manager_vepv;
/* Setup signals */
signals[UNDO_TRANSACTION_OCCURED]
@@ -218,236 +214,149 @@ nautilus_undo_manager_initialize_class (NautilusUndoManagerClass *klass)
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
}
-/* nautilus_undo_manager_transaction_in_progress */
-gboolean
-nautilus_undo_manager_transaction_in_progress (void)
-{
- return global_undo_manager->details->transaction_in_progress;
-}
-
-
-/* nautilus_undo_manager_get_current_transaction
- * Return current undo transaction
- */
-NautilusUndoTransaction *
-nautilus_undo_manager_get_current_transaction (void)
-{
- return global_undo_manager->details->transaction;
-}
-
/* nautilus_undo_manager_begin_transaction */
-gboolean
-nautilus_undo_manager_begin_transaction (const gchar *name)
+NautilusUndoTransactionInProgress *
+nautilus_undo_manager_begin_transaction (GtkObject *object, const gchar *name)
{
+ NautilusUndoManager *manager;
+ NautilusUndoTransactionInProgress *tip;
+
+ /* Locate undo manager */
+ manager = gtk_object_get_data (object, NAUTILUS_UNDO_MANAGER_NAME);
+ g_return_val_if_fail (manager != NULL, NULL);
+
/* We aren't handling nested transactions currently */
- if (global_undo_manager->details->transaction_in_progress) {
+ if (manager->details->transaction_in_progress) {
g_warning("NautilusUndoManager does not handle nested transactions. End previous transaction first.");
- return FALSE;
+ return NULL;
}
+ /* Create NautilusUndoTransactionInProgress */
+ tip = g_new (NautilusUndoTransactionInProgress, 1);
+ g_assert(tip);
+
+ tip->manager = manager;
+
/* Create new transaction */
- global_undo_manager->details->transaction = nautilus_undo_transaction_new(name);
+ tip->transaction = nautilus_undo_transaction_new(name);
- global_undo_manager->details->transaction_in_progress = TRUE;
+ tip->manager->details->transaction_in_progress = TRUE;
- return TRUE;
+ return tip;
}
/* nautilus_undo_manager_end_transaction */
-gboolean
-nautilus_undo_manager_end_transaction (void)
+void
+nautilus_undo_manager_end_transaction (NautilusUndoTransactionInProgress *tip)
{
/* Verify a transaction is in progress */
- if (!global_undo_manager->details->transaction_in_progress) {
+ if (!tip->manager->details->transaction_in_progress) {
g_warning("NautilusUndoManager has no current transaction. Begin a transaction first.");
- return FALSE;
+ return;
}
- global_undo_manager->details->transaction_in_progress = FALSE;
+ tip->manager->details->transaction_in_progress = FALSE;
/* Commit current transaction to undo list */
- nautilus_undo_manager_add_undo_transaction (global_undo_manager->details->transaction);
+ nautilus_undo_manager_add_transaction (tip->manager, tip->transaction);
/* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
+ gtk_signal_emit (GTK_OBJECT (tip->manager), signals[UNDO_TRANSACTION_OCCURED]);
}
/* nautilus_undo_manager_undo_last_transaction */
-gboolean
-nautilus_undo_manager_undo_last_transaction (void)
+void
+nautilus_undo_manager_undo (NautilusUndoManager *manager)
{
GList *list;
NautilusUndoTransaction *undo_transaction;
/* Verify we have a transaction to be undone */
- if (global_undo_manager->details->undo_list == NULL) {
+ if (manager->details->undo_list == NULL) {
g_warning("NautilusUndoManager has no transaction to be undone.");
- return FALSE;
+ return;
}
/* Pop last transaction off undo list */
- list = g_list_last(global_undo_manager->details->undo_list);
+ list = g_list_last(manager->details->undo_list);
g_assert(list);
undo_transaction = list->data;
- global_undo_manager->details->undo_list = g_list_remove(global_undo_manager->details->undo_list, list->data);
+ manager->details->undo_list = g_list_remove(manager->details->undo_list, list->data);
/* Undo transaction */
nautilus_undo_transaction_undo(undo_transaction);
/* Place transaction into redo list */
- if (global_undo_manager->details->enable_redo) {
- nautilus_undo_manager_add_redo_transaction (undo_transaction);
+ if (manager->details->enable_redo) {
+ /* nautilus_undo_manager_add_redo_transaction (undo_transaction); */
} else {
/* Purge transaction */
nautilus_undo_transaction_destroy(undo_transaction);
}
/* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
+ gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]);
}
/* nautilus_undo_manager_redo_last_undone_transaction */
-gboolean
-nautilus_undo_manager_redo_last_undone_transaction (void)
+void
+nautilus_undo_manager_redo (NautilusUndoManager *manager)
{
GList *list;
NautilusUndoTransaction *redo_transaction;
/* Are we allowing redo operations? */
- if (global_undo_manager->details->enable_redo) {
+ if (manager->details->enable_redo) {
g_warning("NautilusUndoManager is not configure to allow redo operations.");
- return FALSE;
+ return;
}
/* Verify we have a transaction to be redone */
- if (global_undo_manager->details->redo_list == NULL) {
+ if (manager->details->redo_list == NULL) {
g_warning("NautilusUndoManager has no transaction to be redone.");
- return FALSE;
+ return;
}
/* Pop last transaction off redo list */
- list = g_list_last(global_undo_manager->details->redo_list);
+ list = g_list_last(manager->details->redo_list);
g_assert(list);
redo_transaction = list->data;
nautilus_undo_transaction_undo(redo_transaction);
/* Place transaction into undo list */
- nautilus_undo_manager_add_undo_transaction (redo_transaction);
-
- return TRUE;
+ nautilus_undo_manager_add_transaction (manager, redo_transaction);
}
-/* nautilus_undo_manager_add_undoable_to_transaction */
-gboolean
-nautilus_undo_manager_add_undoable_to_transaction (NautilusUndoable *undoable)
-{
- gboolean result;
-
- /* Verify a transaction is in progress */
- if (!global_undo_manager->details->transaction_in_progress) {
- g_warning("NautilusUndoManager has no current transaction. Begin a transaction first.");
- return FALSE;
- }
-
- g_assert(global_undo_manager->details->transaction != NULL);
-
- result = nautilus_undo_transaction_add_undoable(global_undo_manager->details->transaction, undoable);
-
- return result;
-}
-
-
-/* nautilus_undo_manager_remove_transaction */
-gboolean
-nautilus_undo_manager_remove_transaction (NautilusUndoTransaction *transaction)
-{
- /* Verify a transaction is not in progress */
- if (global_undo_manager->details->transaction_in_progress) {
- g_warning("NautilusUndoManager cannot remove a transaction while one is in progress.");
- return FALSE;
- }
-
- g_return_val_if_fail(transaction != NULL, FALSE);
-
- /* Remove transaction from undo list */
- global_undo_manager->details->undo_list = g_list_remove(global_undo_manager->details->undo_list,
- transaction);
-
- /* Remove transaction from redo list */
- global_undo_manager->details->redo_list = g_list_remove(global_undo_manager->details->redo_list,
- transaction);
-
- /* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
-}
-
-
/* nautilus_undo_manager_add_undo_transaction */
-gboolean
-nautilus_undo_manager_add_undo_transaction (NautilusUndoTransaction *transaction)
+void
+nautilus_undo_manager_add_transaction (NautilusUndoManager *manager, NautilusUndoTransaction *transaction)
{
int length;
/* Verify a transaction is not in progress */
- if (global_undo_manager->details->transaction_in_progress) {
+ if (manager->details->transaction_in_progress) {
g_warning("NautilusUndoManager cannot add a transaction while one is in progress.");
- return FALSE;
+ return;
}
- g_return_val_if_fail(transaction != NULL, FALSE);
+ g_return_if_fail (transaction != NULL);
/* Check and see if we are over our queue limit */
- length = g_list_length(global_undo_manager->details->undo_list);
+ length = g_list_length (manager->details->undo_list);
- if (length >= global_undo_manager->details->queue_depth) {
- global_undo_manager->details->undo_list = prune_undo_manager_list (
- global_undo_manager->details->undo_list,
- (length - global_undo_manager->details->queue_depth) + 1);
+ if (length >= manager->details->queue_depth) {
+ manager->details->undo_list = prune_undo_manager_list (
+ manager->details->undo_list,
+ (length - manager->details->queue_depth) + 1);
}
/* Add transaction to undo list */
- global_undo_manager->details->undo_list = g_list_append(global_undo_manager->details->undo_list,
- transaction);
+ manager->details->undo_list = g_list_append(manager->details->undo_list, transaction);
/* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
-}
-
-/* nautilus_undo_manager_add_redo_transaction */
-gboolean
-nautilus_undo_manager_add_redo_transaction (NautilusUndoTransaction *transaction)
-{
- g_return_val_if_fail(transaction != NULL, FALSE);
-
- /* Verify a transaction is not in progress */
- if (global_undo_manager->details->transaction_in_progress) {
- g_warning("NautilusUndoManager cannot add a transaction while one is in progress.");
- return FALSE;
- }
-
- /* Make sure we allow redo */
- if (!global_undo_manager->details->enable_redo) {
- return FALSE;
- }
-
- /* Add transaction to undo list */
- global_undo_manager->details->undo_list = g_list_append(global_undo_manager->details->undo_list,
- transaction);
-
- /* Fire off signal informing that an redo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
+ gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]);
}
@@ -456,27 +365,32 @@ nautilus_undo_manager_add_redo_transaction (NautilusUndoTransaction *transaction
* Remove any transaction with object as target from
* the undo and redo queues
*/
-
+
gboolean
nautilus_undo_manager_unregister_object (GtkObject *object)
{
+ NautilusUndoManager *manager;
NautilusUndoTransaction *transaction;
gboolean success;
GList *list;
int index, length;
success = FALSE;
-
+
+ /* Locate undo manager */
+ manager = gtk_object_get_data (object, NAUTILUS_UNDO_MANAGER_NAME);
+ g_return_val_if_fail (manager != NULL, success);
+
/* Check undo list */
- length = g_list_length(global_undo_manager->details->undo_list);
+ length = g_list_length (manager->details->undo_list);
for (index = 0; index < length; index++) {
- list = g_list_nth(global_undo_manager->details->undo_list, index);
+ list = g_list_nth (manager->details->undo_list, index);
if (list) {
transaction = list->data;
- if (nautilus_undo_transaction_contains_object(transaction, object)) {
- global_undo_manager->details->undo_list =
- g_list_remove(global_undo_manager->details->undo_list, transaction);
- nautilus_undo_transaction_destroy(transaction);
+ if (nautilus_undo_transaction_contains_object (transaction, object)) {
+ manager->details->undo_list =
+ g_list_remove (manager->details->undo_list, transaction);
+ nautilus_undo_transaction_destroy (transaction);
index--;
success = TRUE;
}
@@ -484,14 +398,14 @@ nautilus_undo_manager_unregister_object (GtkObject *object)
}
/* Check redo list */
- length = g_list_length(global_undo_manager->details->redo_list);
+ length = g_list_length (manager->details->redo_list);
for (index = 0; index < length; index++) {
- list = g_list_nth(global_undo_manager->details->redo_list, index);
+ list = g_list_nth (manager->details->redo_list, index);
if (list) {
transaction = list->data;
if (nautilus_undo_transaction_contains_object(transaction, object)) {
- global_undo_manager->details->redo_list =
- g_list_remove(global_undo_manager->details->redo_list, transaction);
+ manager->details->redo_list =
+ g_list_remove (manager->details->redo_list, transaction);
nautilus_undo_transaction_destroy(transaction);
index--;
success = TRUE;
@@ -501,7 +415,7 @@ nautilus_undo_manager_unregister_object (GtkObject *object)
if (success) {
/* Fire off signal informing that a transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
+ gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]);
}
return success;
@@ -509,10 +423,10 @@ nautilus_undo_manager_unregister_object (GtkObject *object)
/* nautilus_undo_manager_can_undo */
gboolean
-nautilus_undo_manager_can_undo (void)
+nautilus_undo_manager_can_undo (NautilusUndoManager *manager)
{
- if (global_undo_manager != NULL) {
- return (g_list_length(global_undo_manager->details->undo_list) > 0);
+ if (manager != NULL) {
+ return (g_list_length (manager->details->undo_list) > 0);
} else {
return FALSE;
}
@@ -520,11 +434,11 @@ nautilus_undo_manager_can_undo (void)
/* nautilus_undo_manager_can_redo */
gboolean
-nautilus_undo_manager_can_redo (void)
+nautilus_undo_manager_can_redo (NautilusUndoManager *manager)
{
- if (global_undo_manager->details->enable_redo) {
- if (global_undo_manager != NULL) {
- return (g_list_length(global_undo_manager->details->redo_list) > 0);
+ if (manager->details->enable_redo) {
+ if (manager != NULL) {
+ return (g_list_length (manager->details->redo_list) > 0);
} else {
return FALSE;
}
@@ -540,23 +454,22 @@ nautilus_undo_manager_can_redo (void)
* current undo transaction.
*/
-static gint
-get_current_transaction_name(GList *list, gchar *name, gint max_length)
+static const gchar *
+get_current_transaction_name (GList *list)
{
NautilusUndoTransaction *transaction;
const gchar *transaction_name;
- gint name_length;
-
+
/* Check for NULL list */
if (list == NULL) {
g_warning("Unable to get current transaction name due to NULL undo list.");
- return -1;
+ return NULL;
}
/* Check for empty list */
if (g_list_length(list) <= 0) {
g_warning("No transaction to get current undo transaction name from.");
- return -1;
+ return NULL;
}
/* Get last transaction from list */
@@ -564,30 +477,17 @@ get_current_transaction_name(GList *list, gchar *name, gint max_length)
transaction = list->data;
if (transaction == NULL) {
g_warning("Unable to get current transaction name due to NULL transaction in list.");
- return -1;
+ return NULL;
}
/* Check for valid transaction name */
transaction_name = nautilus_undo_transaction_get_name(transaction);
if ( transaction_name == NULL) {
g_warning("Current transaction name is NULL.");
- return -1;
+ return NULL;
}
- /* Return length of transaction name if name argument is NULL */
- if (name == NULL) {
- return strlen(transaction_name);
- }
-
- /* Copy over requested amount into return name argument */
- name_length = strlen(transaction_name);
- if (name_length > max_length) {
- strncpy(name, transaction_name, max_length);
- return max_length;
- } else {
- strncpy(name, transaction_name, name_length);
- return name_length;
- }
+ return transaction_name;
}
@@ -598,10 +498,10 @@ get_current_transaction_name(GList *list, gchar *name, gint max_length)
* current undo transaction.
*/
-gint
-nautilus_undo_manager_get_current_undo_transaction_name (gchar *name, gint max_length)
+const gchar *
+nautilus_undo_manager_get_current_undo_transaction_name (NautilusUndoManager *manager)
{
- return get_current_transaction_name(global_undo_manager->details->undo_list, name, max_length);
+ return get_current_transaction_name (manager->details->undo_list);
}
/* nautilus_undo_manager_get_current_undo_transaction_name
@@ -611,120 +511,97 @@ nautilus_undo_manager_get_current_undo_transaction_name (gchar *name, gint max_l
* current undo transaction.
*/
-gint
-nautilus_undo_manager_get_current_redo_transaction_name (gchar *name, gint max_length)
+const gchar *
+nautilus_undo_manager_get_current_redo_transaction_name (NautilusUndoManager *manager)
{
- return get_current_transaction_name(global_undo_manager->details->redo_list, name, max_length);
+ return get_current_transaction_name (manager->details->redo_list);
}
/* destroy */
static void
destroy (GtkObject *object)
{
+ NautilusUndoManager *manager;
+
g_return_if_fail (NAUTILUS_IS_UNDO_MANAGER (object));
+ manager = NAUTILUS_UNDO_MANAGER (object);
+
/* Clear lists */
- global_undo_manager->details->undo_list = free_undo_manager_list_data(global_undo_manager->details->undo_list);
- global_undo_manager->details->redo_list = free_undo_manager_list_data(global_undo_manager->details->redo_list);
+ manager->details->undo_list = free_undo_manager_list_data (manager->details->undo_list);
+ manager->details->redo_list = free_undo_manager_list_data (manager->details->redo_list);
NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, (object));
}
-/* Initialize Nautilus global undo manager */
-gboolean
-nautilus_undo_manager_initialize_global_manager (void)
-{
- if (global_undo_manager != NULL) {
- g_warning("A global undo manager has already been created.");
- return FALSE;
- }
-
- global_undo_manager = nautilus_undo_manager_new();
-
- return TRUE;
-}
-
-
-/* Return global undo manager */
-NautilusUndoManager *
-nautilus_undo_manager_get_undo_manager (void)
-{
- g_return_val_if_fail(global_undo_manager != NULL, NULL);
- return global_undo_manager;
-}
-
-
/* nautilus_undo_manager_enable_redo
*
* Enable or disable redo functionality
*/
-gboolean
-nautilus_undo_manager_enable_redo (gboolean value)
+
+void
+nautilus_undo_manager_enable_redo (NautilusUndoManager *manager, gboolean value)
{
- g_return_val_if_fail(global_undo_manager != NULL, FALSE);
+ g_return_if_fail (manager != NULL);
- global_undo_manager->details->enable_redo = value;
+ manager->details->enable_redo = value;
/* Flush and free redo queue */
- g_list_free(global_undo_manager->details->redo_list);
-
- return TRUE;
+ g_list_free (manager->details->redo_list);
}
/* nautilus_undo_manager_enable_redo
*
* Enable or disable redo functionality
*/
-gboolean
-nautilus_undo_manager_set_queue_depth (gint depth)
+void
+nautilus_undo_manager_set_queue_depth (NautilusUndoManager *manager, gint depth)
{
int length;
/* Don't allow negative or zero queue depth */
if (depth <= 0) {
g_warning ("NautilusUndoManager doesn not allow negative or zero length queue.");
- return FALSE;
+ return;
}
- global_undo_manager->details->queue_depth = depth;
+ manager->details->queue_depth = depth;
/* Prune lists */
- length = g_list_length (global_undo_manager->details->undo_list);
+ length = g_list_length (manager->details->undo_list);
if (length > depth) {
- global_undo_manager->details->undo_list = prune_undo_manager_list (global_undo_manager->details->undo_list,
+ manager->details->undo_list = prune_undo_manager_list (manager->details->undo_list,
length - depth);
}
- length = g_list_length (global_undo_manager->details->redo_list);
+ length = g_list_length (manager->details->redo_list);
if (length > depth) {
- global_undo_manager->details->undo_list = prune_undo_manager_list (global_undo_manager->details->redo_list,
- length - depth);
+ manager->details->undo_list = prune_undo_manager_list (manager->details->redo_list,
+ length - depth);
}
/* Fire off signal informing that an undo transaction has occurred */
- gtk_signal_emit (GTK_OBJECT (global_undo_manager), signals[UNDO_TRANSACTION_OCCURED]);
-
- return TRUE;
+ gtk_signal_emit (GTK_OBJECT (manager), signals[UNDO_TRANSACTION_OCCURED]);
}
/* free_undo_manager_list_data
*
* Clear undo data from list
*/
-
+
static GList *
free_undo_manager_list_data (GList *list)
{
int length, index;
NautilusUndoTransaction *transaction;
-
- length = g_list_length(list);
+
+ length = g_list_length (list);
for (index = 0; index < length; index++) {
- list = g_list_last(list);
+ list = g_list_last (list);
if (list) {
transaction = list->data;
- list = g_list_remove(list, transaction);
- nautilus_undo_transaction_destroy(transaction);
+ list = g_list_remove (list, transaction);
+ nautilus_undo_transaction_destroy (transaction);
}
}
@@ -736,7 +613,7 @@ free_undo_manager_list_data (GList *list)
*
* Prune n items from start of list
*/
-
+
static GList *
prune_undo_manager_list (GList *list, gint items)
{
@@ -744,11 +621,11 @@ prune_undo_manager_list (GList *list, gint items)
NautilusUndoTransaction *transaction;
for (index = 0; index < items; index++) {
- list = g_list_first(list);
+ list = g_list_first (list);
if (list) {
transaction = list->data;
- list = g_list_remove(list, transaction);
- nautilus_undo_transaction_destroy(transaction);
+ list = g_list_remove (list, transaction);
+ nautilus_undo_transaction_destroy (transaction);
}
}
diff --git a/libnautilus/nautilus-undo-manager.h b/libnautilus/nautilus-undo-manager.h
index aef846797..272f0bd00 100644
--- a/libnautilus/nautilus-undo-manager.h
+++ b/libnautilus/nautilus-undo-manager.h
@@ -26,9 +26,10 @@
#define NAUTILUS_UNDO_MANAGER_H
#include <bonobo/bonobo-object.h>
-#include <libnautilus/nautilus-undo-manager-component.h>
#include <bonobo/bonobo-persist.h>
+
#include "nautilus-undo-transaction.h"
+#include "nautilus-undo.h"
#define NAUTILUS_TYPE_UNDO_MANAGER \
(nautilus_undo_manager_get_type ())
@@ -43,6 +44,7 @@
typedef struct NautilusUndoManagerClass NautilusUndoManagerClass;
typedef struct NautilusUndoManagerDetails NautilusUndoManagerDetails;
+typedef struct NautilusUndoTransactionInProgress NautilusUndoTransactionInProgress;
struct NautilusUndoManager {
BonoboPersist parent;
@@ -50,41 +52,44 @@ struct NautilusUndoManager {
};
struct NautilusUndoManagerClass {
- BonoboPersistClass parent_class;
-
+ BonoboPersistClass parent_class;
void (* undo_transaction_occurred) (GtkObject *object, gpointer data);
-
gpointer servant_init_func, servant_destroy_func, vepv;
};
+struct NautilusUndoTransactionInProgress {
+ NautilusUndoManager *manager;
+ NautilusUndoTransaction *transaction;
+
+};
+
+#define NAUTILUS_UNDO_MANAGER_NAME "NautilusUndoManager"
/* GtkObject */
-GtkType nautilus_undo_manager_get_type (void);
-NautilusUndoManager *nautilus_undo_manager_new (void);
+GtkType nautilus_undo_manager_get_type (void);
+NautilusUndoManager *nautilus_undo_manager_new (void);
/* Prototypes */
-gboolean nautilus_undo_manager_initialize_global_manager (void);
-gboolean nautilus_undo_manager_add_undoable_to_transaction (NautilusUndoable *undoable);
-gboolean nautilus_undo_manager_begin_transaction (const gchar *name);
-gboolean nautilus_undo_manager_end_transaction (void);
-gboolean nautilus_undo_manager_undo_last_transaction (void);
-gboolean nautilus_undo_manager_redo_last_undone_transaction (void);
-NautilusUndoTransaction *nautilus_undo_manager_get_current_transaction (void);
-gboolean nautilus_undo_manager_transaction_in_progress (void);
-gboolean nautilus_undo_manager_add_undo_transaction (NautilusUndoTransaction
- *transaction);
-gboolean nautilus_undo_manager_add_redo_transaction (NautilusUndoTransaction
- *transaction);
-gboolean nautilus_undo_manager_remove_transaction (NautilusUndoTransaction
- *transaction);
+NautilusUndoTransactionInProgress *nautilus_undo_manager_begin_transaction (GtkObject *object, const gchar *name);
+void nautilus_undo_manager_end_transaction (NautilusUndoTransactionInProgress *transaction);
+
+void nautilus_undo_manager_undo (NautilusUndoManager *manager);
+void nautilus_undo_manager_redo (NautilusUndoManager *manager);
+
+void nautilus_undo_manager_add_transaction (NautilusUndoManager *manager,
+ NautilusUndoTransaction *transaction);
+
+gboolean nautilus_undo_manager_can_undo (NautilusUndoManager *manager);
+gboolean nautilus_undo_manager_can_redo (NautilusUndoManager *manager);
+
+const gchar *nautilus_undo_manager_get_current_undo_transaction_name (NautilusUndoManager *manager);
+const gchar *nautilus_undo_manager_get_current_redo_transaction_name (NautilusUndoManager *manager);
+
+void nautilus_undo_manager_enable_redo (NautilusUndoManager *manager, gboolean value);
+void nautilus_undo_manager_set_queue_depth (NautilusUndoManager *manager, gint depth);
+
+
gboolean nautilus_undo_manager_unregister_object (GtkObject *object);
-gboolean nautilus_undo_manager_can_undo (void);
-gboolean nautilus_undo_manager_can_redo (void);
-gint nautilus_undo_manager_get_current_undo_transaction_name (gchar *name, gint max_length);
-gint nautilus_undo_manager_get_current_redo_transaction_name (gchar *name, gint max_length);
-NautilusUndoManager *nautilus_undo_manager_get_undo_manager (void);
-gboolean nautilus_undo_manager_enable_redo (gboolean value);
-gboolean nautilus_undo_manager_set_queue_depth (gint depth);
#endif
diff --git a/libnautilus/nautilus-undo-transaction.h b/libnautilus/nautilus-undo-transaction.h
index 6da767e4c..82026c0fb 100644
--- a/libnautilus/nautilus-undo-transaction.h
+++ b/libnautilus/nautilus-undo-transaction.h
@@ -26,17 +26,13 @@
#define NAUTILUS_UNDO_TRANSACTION_H
#include <glib.h>
-
#include "nautilus-undoable.h"
-typedef struct NautilusUndoTransaction NautilusUndoTransaction;
-
struct NautilusUndoTransaction {
gchar *name;
GList *transaction_list;
};
-
NautilusUndoTransaction *nautilus_undo_transaction_new (const gchar *name);
void nautilus_undo_transaction_destroy (NautilusUndoTransaction *transaction);
gboolean nautilus_undo_transaction_add_undoable (NautilusUndoTransaction *transaction,
diff --git a/libnautilus/nautilus-undo.idl b/libnautilus/nautilus-undo.idl
new file mode 100644
index 000000000..cd63e190b
--- /dev/null
+++ b/libnautilus/nautilus-undo.idl
@@ -0,0 +1,40 @@
+/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
+
+#ifndef NAUTUILUS_UNDO_IDL_INCLUDED
+#define NAUTUILUS_UNDO_MANAGER_IDL_INCLUDED
+
+#include <gnome-factory.idl>
+#include <Bonobo.idl>
+
+module Nautilus {
+
+ module Undo {
+
+ // Forward declarations
+ interface Manager;
+ interface Transaction;
+
+ // Contains elements that describe a transaction
+ struct TransactionMenuInfo {
+ string name;
+ string description;
+ };
+
+ // An undo transaction
+ interface Transaction : ::Bonobo::Unknown {
+ readonly attribute TransactionMenuInfo undo_description;
+ readonly attribute TransactionMenuInfo redo_description;
+ readonly attribute string base_description;
+
+ void undo (in Transaction transaction);
+ };
+
+ // The main interface that handles undo transactions
+ interface Manager : ::Bonobo::Unknown {
+ void append (in Transaction transaction);
+ void forget (in Transaction transaction);
+ };
+ };
+};
+
+#endif /* NAUTUILUS_UNDO_IDL_INCLUDED */
diff --git a/libnautilus/nautilus-undoable.c b/libnautilus/nautilus-undoable.c
index 56d3a680c..807940e83 100644
--- a/libnautilus/nautilus-undoable.c
+++ b/libnautilus/nautilus-undoable.c
@@ -122,7 +122,8 @@ destroy (GtkObject *object)
/* nautilus_undoable_save_undo_snapshot */
void
-nautilus_undoable_save_undo_snapshot (GtkObject *target, GtkSignalFunc save_func, GtkSignalFunc restore_func)
+nautilus_undoable_save_undo_snapshot (NautilusUndoTransaction *transaction, GtkObject *target,
+ GtkSignalFunc save_func, GtkSignalFunc restore_func)
{
gboolean result;
NautilusUndoable *undoable;
@@ -138,7 +139,7 @@ nautilus_undoable_save_undo_snapshot (GtkObject *target, GtkSignalFunc save_func
gtk_signal_connect_while_alive (GTK_OBJECT (undoable), "restore_from_undo_snapshot", restore_func, target, target);
/* Add undoable to current transaction */
- result = nautilus_undo_manager_add_undoable_to_transaction (undoable);
+ result = nautilus_undo_transaction_add_undoable (transaction, undoable);
/* Fire SAVE_UNDO_SNAPSHOT signal */
gtk_signal_emit (GTK_OBJECT (undoable),
diff --git a/libnautilus/nautilus-undoable.h b/libnautilus/nautilus-undoable.h
index a6c1805c9..9d56b5190 100644
--- a/libnautilus/nautilus-undoable.h
+++ b/libnautilus/nautilus-undoable.h
@@ -40,9 +40,10 @@
#define NAUTILUS_IS_UNDOABLE_CLASS(klass) \
(GTK_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_UNDOABLE))
-typedef struct NautilusUndoable NautilusUndoable;
typedef struct NautilusUndoableClass NautilusUndoableClass;
typedef struct NautilusUndoManager NautilusUndoManager;
+typedef struct NautilusUndoable NautilusUndoable;
+typedef struct NautilusUndoTransaction NautilusUndoTransaction;
struct NautilusUndoable {
GtkObject parent;
@@ -62,8 +63,8 @@ struct NautilusUndoableClass {
GtkType nautilus_undoable_get_type (void);
GtkObject *nautilus_undoable_new (void);
-void nautilus_undoable_save_undo_snapshot (GtkObject *target, GtkSignalFunc save_func,
- GtkSignalFunc restore_func);
+void nautilus_undoable_save_undo_snapshot (NautilusUndoTransaction *transaction, GtkObject *target,
+ GtkSignalFunc save_func, GtkSignalFunc restore_func);
void nautilus_undoable_restore_from_undo_snapshot (NautilusUndoable *undoable);
#endif
diff --git a/libnautilus/nautilus-view-component.idl b/libnautilus/nautilus-view-component.idl
index 24f2ce8a8..ddabf376c 100644
--- a/libnautilus/nautilus-view-component.idl
+++ b/libnautilus/nautilus-view-component.idl
@@ -10,14 +10,14 @@
#pragma inhibit push
#endif
-#include "nautilus-undo-manager-component.idl"
+#include "nautilus-undo.idl"
#if !defined(__BONOBO_COMPILATION) && defined(__ORBIT_IDL__)
#pragma inhibit pop
#endif
%{
-#pragma include_defs "libnautilus/nautilus-undo-manager-component.h"
+#pragma include_defs "libnautilus/nautilus-undo.h"
%}
module Nautilus {
@@ -120,7 +120,7 @@ module Nautilus {
interface Application : ::Bonobo::GenericFactory, ::Bonobo::Unknown {
readonly attribute ViewWindowList view_windows;
- readonly attribute UndoManager undo_manager;
+ readonly attribute Undo::Manager undo_manager;
ViewWindow new_view_window ();
};
};
diff --git a/src/file-manager/fm-properties-window.c b/src/file-manager/fm-properties-window.c
index d8ac16595..5d59cc939 100644
--- a/src/file-manager/fm-properties-window.c
+++ b/src/file-manager/fm-properties-window.c
@@ -577,8 +577,8 @@ create_basic_page (GtkNotebook *notebook, NautilusFile *file)
gtk_widget_grab_focus (GTK_WIDGET (name_field));
/* Enable undo in name field */
- nautilus_entry_enable_undo (NAUTILUS_ENTRY(name_field), TRUE);
- nautilus_entry_enable_undo_key (NAUTILUS_ENTRY(name_field), TRUE);
+ nautilus_entry_enable_undo (NAUTILUS_ENTRY(name_field), NULL, FALSE);
+ nautilus_entry_enable_undo_key (NAUTILUS_ENTRY(name_field), FALSE);
/* React to name changes from elsewhere. */
gtk_signal_connect_object_while_alive (GTK_OBJECT (file),
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index 6eb977ba8..82b421f4c 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -1,4 +1,4 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/*
* Nautilus
@@ -35,16 +35,16 @@
#include <libnautilus/nautilus-undo-manager.h>
typedef struct {
- POA_Nautilus_Application servant;
- NautilusApp *app;
+ POA_Nautilus_Application servant;
+ NautilusApp *app;
- Nautilus_ViewWindowList attr_view_windows;
+ Nautilus_ViewWindowList attr_view_windows;
} impl_POA_Nautilus_Application;
static Nautilus_ViewWindowList *
impl_Nautilus_Application__get_view_windows(impl_POA_Nautilus_Application* servant,
CORBA_Environment * ev);
-static Nautilus_UndoManager
+static Nautilus_Undo_Manager
impl_Nautilus_Application__get_undo_manager(impl_POA_Nautilus_Application* servant,
CORBA_Environment * ev);
static Nautilus_ViewWindow
@@ -59,63 +59,63 @@ impl_Nautilus_Application_create_object(impl_POA_Nautilus_Application *servant,
CORBA_char *obj_iid,
GNOME_stringlist * params,
CORBA_Environment * ev);
-
static POA_Nautilus_Application__epv impl_Nautilus_Application_epv = {
- NULL, /* _private */
- (gpointer) &impl_Nautilus_Application__get_view_windows,
- (gpointer) &impl_Nautilus_Application__get_undo_manager,
- (gpointer) &impl_Nautilus_Application_new_view_window
+ NULL, /* _private */
+ (gpointer) &impl_Nautilus_Application__get_view_windows,
+ (gpointer) &impl_Nautilus_Application__get_undo_manager,
+ (gpointer) &impl_Nautilus_Application_new_view_window
};
static POA_Bonobo_GenericFactory__epv impl_Nautilus_Application_Bonobo_GenericFactory_epv = {
- NULL, /* _private */
- (gpointer) &impl_Nautilus_Application_supports,
- (gpointer) &impl_Nautilus_Application_create_object
+ NULL, /* _private */
+ (gpointer) &impl_Nautilus_Application_supports,
+ (gpointer) &impl_Nautilus_Application_create_object
};
static PortableServer_ServantBase__epv impl_Nautilus_Application_base_epv = {
- NULL, /* _private data */
- NULL, /* finalize routine */
- NULL, /* default_POA routine */
+ NULL, /* _private data */
+ NULL, /* finalize routine */
+ NULL, /* default_POA routine */
};
static POA_Nautilus_Application__vepv impl_Nautilus_Application_vepv = {
- &impl_Nautilus_Application_base_epv,
- &impl_Nautilus_Application_Bonobo_GenericFactory_epv,
- NULL,
- &impl_Nautilus_Application_epv,
+ &impl_Nautilus_Application_base_epv,
+ &impl_Nautilus_Application_Bonobo_GenericFactory_epv,
+ NULL,
+ &impl_Nautilus_Application_epv,
};
static Nautilus_ViewWindowList *
impl_Nautilus_Application__get_view_windows(impl_POA_Nautilus_Application *servant,
CORBA_Environment * ev)
{
- Nautilus_ViewWindowList *retval;
-
- retval = Nautilus_ViewWindowList__alloc();
- retval->_length = g_slist_length(servant->app->windows);
-
- if(retval->_length)
- {
- int i;
- GSList *ltmp;
-
- retval->_buffer = CORBA_sequence_Nautilus_ViewWindow_allocbuf(retval->_length);
- for(i = 0, ltmp = servant->app->windows; ltmp; ltmp = ltmp->next, i++)
- {
- CORBA_Object obj;
- obj = bonobo_object_corba_objref(NAUTILUS_WINDOW(ltmp->data)->ntl_viewwindow);
- retval->_buffer[i] = CORBA_Object_duplicate(obj, ev);
- }
- }
- else
- retval->_buffer = NULL;
-
- CORBA_sequence_set_release(retval, CORBA_TRUE);
-
- return retval;
+ Nautilus_ViewWindowList *retval;
+
+ retval = Nautilus_ViewWindowList__alloc();
+ retval->_length = g_slist_length(servant->app->windows);
+
+ if(retval->_length)
+ {
+ int i;
+ GSList *ltmp;
+
+ retval->_buffer = CORBA_sequence_Nautilus_ViewWindow_allocbuf(retval->_length);
+ for(i = 0, ltmp = servant->app->windows; ltmp; ltmp = ltmp->next, i++)
+ {
+ CORBA_Object obj;
+ obj = bonobo_object_corba_objref(NAUTILUS_WINDOW(ltmp->data)->ntl_viewwindow);
+ retval->_buffer[i] = CORBA_Object_duplicate(obj, ev);
+ }
+ }
+ else {
+ retval->_buffer = NULL;
+ }
+
+ CORBA_sequence_set_release(retval, CORBA_TRUE);
+
+ return retval;
}
-static Nautilus_UndoManager
+static Nautilus_Undo_Manager
impl_Nautilus_Application__get_undo_manager(impl_POA_Nautilus_Application *servant,
CORBA_Environment * ev)
{
@@ -126,11 +126,11 @@ impl_Nautilus_Application__get_undo_manager(impl_POA_Nautilus_Application *serva
static Nautilus_ViewWindow
impl_Nautilus_Application_new_view_window(impl_POA_Nautilus_Application *servant, CORBA_Environment * ev)
{
- NautilusWindow *win;
+ NautilusWindow *win;
- win = nautilus_app_create_window(servant->app);
+ win = nautilus_app_create_window (servant->app);
- return CORBA_Object_duplicate(bonobo_object_corba_objref(BONOBO_OBJECT(win)), ev);
+ return CORBA_Object_duplicate (bonobo_object_corba_objref (BONOBO_OBJECT (win)), ev);
}
static CORBA_boolean
@@ -138,9 +138,9 @@ impl_Nautilus_Application_supports(impl_POA_Nautilus_Application * servant,
CORBA_char * obj_iid,
CORBA_Environment * ev)
{
- return (!strcmp(obj_iid, "OAFIID:ntl_file_manager_icon_view:42681b21-d5ca-4837-87d2-394d88ecc058")
- || !strcmp(obj_iid, "OAFIID:ntl_file_manager_list_view:521e489d-0662-4ad7-ac3a-832deabe111c")
- || !strcmp(obj_iid, "OAFIID:ntl_window:88e8b2e4-b627-4221-b566-5ba32185c88d"));
+ return (!strcmp(obj_iid, "OAFIID:ntl_file_manager_icon_view:42681b21-d5ca-4837-87d2-394d88ecc058")
+ || !strcmp(obj_iid, "OAFIID:ntl_file_manager_list_view:521e489d-0662-4ad7-ac3a-832deabe111c")
+ || !strcmp(obj_iid, "OAFIID:ntl_window:88e8b2e4-b627-4221-b566-5ba32185c88d"));
}
static CORBA_Object
@@ -149,32 +149,33 @@ impl_Nautilus_Application_create_object(impl_POA_Nautilus_Application *servant,
GNOME_stringlist * params,
CORBA_Environment * ev)
{
- CORBA_Object retval = CORBA_OBJECT_NIL;
- FMDirectoryView *dir_view;
- NautilusContentViewFrame *view_frame;
+ CORBA_Object retval = CORBA_OBJECT_NIL;
+ FMDirectoryView *dir_view;
+ NautilusContentViewFrame *view_frame;
- if(!impl_Nautilus_Application_supports(servant, obj_iid, ev))
- return CORBA_OBJECT_NIL;
+ if(!impl_Nautilus_Application_supports(servant, obj_iid, ev))
+ return CORBA_OBJECT_NIL;
- if (strcmp (obj_iid, "OAFIID:ntl_file_manager_icon_view:42681b21-d5ca-4837-87d2-394d88ecc058") == 0)
- dir_view = FM_DIRECTORY_VIEW (gtk_object_new (fm_icon_view_get_type (), NULL));
- else if (strcmp (obj_iid, "OAFIID:ntl_file_manager_list_view:521e489d-0662-4ad7-ac3a-832deabe111c") == 0)
- dir_view = FM_DIRECTORY_VIEW (gtk_object_new (fm_list_view_get_type (), NULL));
- else if (strcmp (obj_iid,"OAFIID:ntl_window:88e8b2e4-b627-4221-b566-5ba32185c88d") == 0)
- retval = impl_Nautilus_Application_new_view_window (servant, ev);
- else
- dir_view = NULL;
+ if (strcmp (obj_iid, "OAFIID:ntl_file_manager_icon_view:42681b21-d5ca-4837-87d2-394d88ecc058") == 0) {
+ dir_view = FM_DIRECTORY_VIEW (gtk_object_new (fm_icon_view_get_type (), NULL));
+ } else if (strcmp (obj_iid, "OAFIID:ntl_file_manager_list_view:521e489d-0662-4ad7-ac3a-832deabe111c") == 0) {
+ dir_view = FM_DIRECTORY_VIEW (gtk_object_new (fm_list_view_get_type (), NULL));
+ } else if (strcmp (obj_iid,"OAFIID:ntl_window:88e8b2e4-b627-4221-b566-5ba32185c88d") == 0) {
+ retval = impl_Nautilus_Application_new_view_window (servant, ev);
+ } else {
+ dir_view = NULL;
+ }
- g_return_val_if_fail(dir_view, CORBA_OBJECT_NIL);
+ g_return_val_if_fail(dir_view, CORBA_OBJECT_NIL);
- if(dir_view)
- {
- view_frame = fm_directory_view_get_view_frame (dir_view);
+ if(dir_view)
+ {
+ view_frame = fm_directory_view_get_view_frame (dir_view);
- retval = CORBA_Object_duplicate(bonobo_object_corba_objref(BONOBO_OBJECT(view_frame)), ev);
- }
+ retval = CORBA_Object_duplicate(bonobo_object_corba_objref(BONOBO_OBJECT(view_frame)), ev);
+ }
- return retval;
+ return retval;
}
@@ -183,13 +184,13 @@ impl_Nautilus_Application__create(PortableServer_POA poa,
NautilusApp *app,
CORBA_Environment * ev)
{
- impl_POA_Nautilus_Application *newservant;
+ impl_POA_Nautilus_Application *newservant;
- newservant = g_new0(impl_POA_Nautilus_Application, 1);
- newservant->servant.vepv = &impl_Nautilus_Application_vepv;
- newservant->servant.vepv->Bonobo_Unknown_epv = NAUTILUS_APP_CLASS(GTK_OBJECT(app)->klass)->unknown_epv;
- POA_Nautilus_Application__init((PortableServer_Servant) newservant, ev);
- return bonobo_object_activate_servant(BONOBO_OBJECT(app), newservant);
+ newservant = g_new0(impl_POA_Nautilus_Application, 1);
+ newservant->servant.vepv = &impl_Nautilus_Application_vepv;
+ newservant->servant.vepv->Bonobo_Unknown_epv = NAUTILUS_APP_CLASS(GTK_OBJECT(app)->klass)->unknown_epv;
+ POA_Nautilus_Application__init((PortableServer_Servant) newservant, ev);
+ return bonobo_object_activate_servant(BONOBO_OBJECT(app), newservant);
}
static void nautilus_app_init (NautilusApp *app);
@@ -201,39 +202,39 @@ static GtkObjectClass *app_parent_class = NULL;
GtkType
nautilus_app_get_type (void)
{
- static GtkType App_type = 0;
-
- if (!App_type)
- {
- static const GtkTypeInfo App_info =
- {
- "NautilusApp",
- sizeof (NautilusApp),
- sizeof (NautilusAppClass),
- (GtkClassInitFunc) nautilus_app_class_init,
- (GtkObjectInitFunc) nautilus_app_init,
- /* reserved_1 */ NULL,
- /* reserved_2 */ NULL,
- (GtkClassInitFunc) NULL,
- };
-
- App_type = gtk_type_unique (bonobo_object_get_type (), &App_info);
- }
-
- return App_type;
+ static GtkType App_type = 0;
+
+ if (!App_type)
+ {
+ static const GtkTypeInfo App_info =
+ {
+ "NautilusApp",
+ sizeof (NautilusApp),
+ sizeof (NautilusAppClass),
+ (GtkClassInitFunc) nautilus_app_class_init,
+ (GtkObjectInitFunc) nautilus_app_init,
+ /* reserved_1 */ NULL,
+ /* reserved_2 */ NULL,
+ (GtkClassInitFunc) NULL,
+ };
+
+ App_type = gtk_type_unique (bonobo_object_get_type (), &App_info);
+ }
+
+ return App_type;
}
static void
nautilus_app_class_init (NautilusAppClass *klass)
{
- GtkObjectClass *object_class;
+ GtkObjectClass *object_class;
- klass->unknown_epv = bonobo_object_get_epv();
+ klass->unknown_epv = bonobo_object_get_epv();
- object_class = (GtkObjectClass*) klass;
- object_class->destroy = nautilus_app_destroy;
+ object_class = (GtkObjectClass*) klass;
+ object_class->destroy = nautilus_app_destroy;
- app_parent_class = gtk_type_class (gtk_object_get_type ());
+ app_parent_class = gtk_type_class (gtk_object_get_type ());
/*
* Startup preferences. This call is needed so that preferences have
@@ -258,16 +259,19 @@ nautilus_app_init (NautilusApp *app)
bonobo_object_construct(BONOBO_OBJECT(app), objref);
/* Init undo manager */
- nautilus_undo_manager_initialize_global_manager ();
- app->undo_manager = BONOBO_OBJECT (nautilus_undo_manager_get_undo_manager());
-
+ app->undo_manager = BONOBO_OBJECT (nautilus_undo_manager_new ());
+
+ /* Add undo manager to the app */
+ g_assert (app->undo_manager);
+ gtk_object_set_data (GTK_OBJECT (app), "NautilusUndoManager", app->undo_manager);
+
CORBA_exception_free(&ev);
}
GtkObject *
-nautilus_app_new (void)
+nautilus_app_new (void)
{
- return gtk_object_new(nautilus_app_get_type(), NULL);
+ return gtk_object_new(nautilus_app_get_type(), NULL);
}
static void
@@ -275,15 +279,15 @@ nautilus_app_destroy(GtkObject *object)
{
/*
* Shutdown preferences. This is needed so that the global preferences
- * obejct and all its allocations are freed. Not calling this function
+ * object and all its allocations are freed. Not calling this function
* would have NOT cause the user to lose preferences. The only effect
* would be to leak those objects - which would be collected at exit()
* time anyway, but it adds noice to memory profile tool runs.
*/
nautilus_global_preferences_shutdown ();
- nautilus_bookmarks_exiting();
- GTK_OBJECT_CLASS(app_parent_class)->destroy(object);
+ nautilus_bookmarks_exiting (object);
+ GTK_OBJECT_CLASS(app_parent_class)->destroy(object);
}
void
@@ -292,9 +296,9 @@ nautilus_app_startup(NautilusApp *app, const char *initial_url)
NautilusWindow *mainwin;
/* Set default configuration */
- mainwin = nautilus_app_create_window(app);
- bonobo_activate();
- nautilus_window_set_initial_state(mainwin, initial_url);
+ mainwin = nautilus_app_create_window (app);
+ bonobo_activate ();
+ nautilus_window_set_initial_state (mainwin, initial_url);
}
static void
@@ -342,18 +346,20 @@ nautilus_app_quit (void)
NautilusWindow *
nautilus_app_create_window(NautilusApp *app)
{
- GtkWidget *win = GTK_WIDGET (gtk_object_new (nautilus_window_get_type(), "app_id", "nautilus",
- "app", BONOBO_OBJECT(app), NULL));
+ GtkWidget *win;
+
+ win = GTK_WIDGET (gtk_object_new (nautilus_window_get_type(), "app", BONOBO_OBJECT(app),
+ "app_id", "nautilus", NULL));
- gtk_signal_connect(GTK_OBJECT(win), "destroy", nautilus_app_destroy_window, app);
+ gtk_signal_connect (GTK_OBJECT (win), "destroy", nautilus_app_destroy_window, app);
- /* Do not yet show the window. It will be shown later on if it can
- * successfully display its initial uri. Otherwise it will be destroyed
- * without ever having seen the light of day.
- */
+ /* Do not yet show the window. It will be shown later on if it can
+ * successfully display its initial uri. Otherwise it will be destroyed
+ * without ever having seen the light of day.
+ */
- app->windows = g_slist_prepend(app->windows, win);
+ app->windows = g_slist_prepend(app->windows, win);
- return NAUTILUS_WINDOW(win);
+ return NAUTILUS_WINDOW(win);
}
diff --git a/src/nautilus-bookmarks-window.c b/src/nautilus-bookmarks-window.c
index 148167411..bbdf92c2b 100644
--- a/src/nautilus-bookmarks-window.c
+++ b/src/nautilus-bookmarks-window.c
@@ -108,7 +108,7 @@ static void repopulate (void);
* Return value: A pointer to the new window.
**/
GtkWidget *
-create_bookmarks_window(NautilusBookmarkList *list)
+create_bookmarks_window (NautilusBookmarkList *list, NautilusUndoManager *manager)
{
GtkWidget *window;
GtkWidget *content_area;
@@ -130,7 +130,7 @@ create_bookmarks_window(NautilusBookmarkList *list)
BOOKMARKS_WINDOW_MIN_HEIGHT);
nautilus_bookmarks_window_restore_geometry (window);
gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, FALSE);
-
+
content_area = gtk_hbox_new (TRUE, GNOME_PAD);
gtk_widget_show (content_area);
gtk_container_add (GTK_CONTAINER (window), content_area);
@@ -191,8 +191,13 @@ create_bookmarks_window(NautilusBookmarkList *list)
gtk_widget_show (remove_button);
gtk_box_pack_start (GTK_BOX (hbox2), remove_button, TRUE, FALSE, 0);
- /* Wire up all the signals. */
+ /* Add undo manager to widgets */
+ g_assert (manager);
+ gtk_object_set_data ( GTK_OBJECT (name_field), NAUTILUS_UNDO_MANAGER_NAME, manager);
+ gtk_object_set_data ( GTK_OBJECT (uri_field), NAUTILUS_UNDO_MANAGER_NAME, manager);
+
+ /* Wire up all the signals. */
bookmark_list_changed_signalID =
gtk_signal_connect (GTK_OBJECT(bookmarks), "contents_changed",
GTK_SIGNAL_FUNC(on_bookmark_list_changed),
@@ -518,11 +523,15 @@ on_text_field_focus_in_event (GtkWidget *widget,
GdkEventFocus *event,
gpointer user_data)
{
+ NautilusUndoManager *manager;
+
g_assert (NAUTILUS_IS_ENTRY (widget));
+ manager = gtk_object_get_data ( GTK_OBJECT (widget), NAUTILUS_UNDO_MANAGER_NAME);
+
nautilus_entry_select_all (NAUTILUS_ENTRY (widget));
nautilus_entry_enable_undo_key (NAUTILUS_ENTRY(widget), TRUE);
- nautilus_entry_enable_undo(NAUTILUS_ENTRY(widget), TRUE);
+ nautilus_entry_enable_undo(NAUTILUS_ENTRY(widget), manager, TRUE);
return FALSE;
}
@@ -570,8 +579,8 @@ on_window_delete_event (GtkWidget *widget,
gtk_widget_hide (widget);
/* Disable undo for entry widgets*/
- nautilus_entry_enable_undo(NAUTILUS_ENTRY(name_field), FALSE);
- nautilus_entry_enable_undo(NAUTILUS_ENTRY(uri_field), FALSE);
+ nautilus_entry_enable_undo(NAUTILUS_ENTRY(name_field), NULL, FALSE);
+ nautilus_entry_enable_undo(NAUTILUS_ENTRY(uri_field), NULL, FALSE);
/* Remove object transactions from undo manager */
nautilus_undo_manager_unregister_object(GTK_OBJECT(name_field));
diff --git a/src/nautilus-bookmarks-window.h b/src/nautilus-bookmarks-window.h
index d8d64098c..59e096bf6 100644
--- a/src/nautilus-bookmarks-window.h
+++ b/src/nautilus-bookmarks-window.h
@@ -26,9 +26,11 @@
#define NAUTILUS_BOOKMARKS_WINDOW_H
#include <gnome.h>
+#include <libnautilus/nautilus-undo-manager.h>
#include "nautilus-bookmark-list.h"
-GtkWidget *create_bookmarks_window (NautilusBookmarkList *bookmarks);
+GtkWidget *create_bookmarks_window (NautilusBookmarkList *bookmarks,
+ NautilusUndoManager *manager);
void nautilus_bookmarks_window_save_geometry (GtkWidget *window);
#endif /* NAUTILUS_BOOKMARKS_WINDOW_H */
diff --git a/src/nautilus-location-bar.c b/src/nautilus-location-bar.c
index 527745d67..632d6ea4b 100644
--- a/src/nautilus-location-bar.c
+++ b/src/nautilus-location-bar.c
@@ -268,7 +268,26 @@ nautilus_location_bar_set_location (NautilusLocationBar *bar,
/* Note: This is called in reaction to external changes, and
* thus should not emit the LOCATION_CHANGED signal.*/
gtk_entry_set_text (bar->entry,
- location == NULL ? "" : location);
+ location == NULL ? "" : location);
+}
+
+/**
+ * nautilus_location_bar_enable_undo
+ *
+ * Set staus of location bar undo functionality.
+ *
+ * @bar: A NautilusLocationBar.
+ * @manager: A NautilusUndoManager. Can be NULL.
+ * @enable: State to set undo functionality in.
+ */
+void
+nautilus_location_bar_enable_undo (NautilusLocationBar *bar,
+ NautilusUndoManager *manager,
+ gboolean value)
+{
+ g_return_if_fail (NAUTILUS_IS_LOCATION_BAR (bar));
- nautilus_entry_enable_undo (NAUTILUS_ENTRY (bar->entry), TRUE);
+ nautilus_entry_enable_undo ( NAUTILUS_ENTRY (bar->entry), manager, value);
}
+
+
diff --git a/src/nautilus-location-bar.h b/src/nautilus-location-bar.h
index 4e6ef131f..7f001dd1f 100644
--- a/src/nautilus-location-bar.h
+++ b/src/nautilus-location-bar.h
@@ -29,6 +29,7 @@
#include <gtk/gtkhbox.h>
#include <gtk/gtklabel.h>
#include <gtk/gtkentry.h>
+#include <libnautilus/nautilus-undo-manager.h>
#define NAUTILUS_LOCATION_BAR(obj) \
GTK_CHECK_CAST (obj, nautilus_location_bar_get_type (), NautilusLocationBar)
@@ -54,9 +55,13 @@ typedef struct {
const char *location);
} NautilusLocationBarClass;
-GtkType nautilus_location_bar_get_type (void);
-GtkWidget* nautilus_location_bar_new (void);
-void nautilus_location_bar_set_location (NautilusLocationBar *bar,
- const char *location);
+GtkType nautilus_location_bar_get_type (void);
+GtkWidget* nautilus_location_bar_new (void);
+void nautilus_location_bar_set_location (NautilusLocationBar *bar,
+ const char *location);
+void nautilus_location_bar_enable_undo (NautilusLocationBar *bar,
+ NautilusUndoManager *manager,
+ gboolean value);
+
#endif /* NAUTILUS_LOCATION_BAR_H */
diff --git a/src/nautilus-navigation-window-menus.c b/src/nautilus-navigation-window-menus.c
index b5499470b..59cd861a2 100644
--- a/src/nautilus-navigation-window-menus.c
+++ b/src/nautilus-navigation-window-menus.c
@@ -33,9 +33,7 @@
#include "nautilus-property-browser.h"
#include <libnautilus/nautilus-undo-manager.h>
-
#include <libnautilus/nautilus-bonobo-ui.h>
-
#include <libnautilus-extensions/nautilus-bonobo-extensions.h>
#include <libnautilus-extensions/nautilus-glib-extensions.h>
#include <libnautilus-extensions/nautilus-gtk-extensions.h>
@@ -53,7 +51,7 @@ static void clear_appended_bookmark_items (NautilusWindow
const char *menu_path,
const char *last_static_item_path);
static NautilusBookmarkList *get_bookmark_list (void);
-static GtkWidget *get_bookmarks_window (void);
+static GtkWidget *get_bookmarks_window (GtkObject *object);
static void refresh_bookmarks_in_go_menu (NautilusWindow *window);
static void refresh_bookmarks_in_bookmarks_menu (NautilusWindow *window);
@@ -118,8 +116,16 @@ edit_menu_undo_callback (BonoboUIHandler *ui_handler,
gpointer user_data,
const char *path)
{
- if (nautilus_undo_manager_can_undo ())
- nautilus_undo_manager_undo_last_transaction ();
+ NautilusUndoManager *manager;
+
+ g_assert (NAUTILUS_IS_WINDOW (user_data));
+
+ /* Locate undo manager */
+ manager = gtk_object_get_data (GTK_OBJECT(user_data), "NautilusUndoManager");
+ g_return_if_fail (manager != NULL);
+
+ if (nautilus_undo_manager_can_undo (manager))
+ nautilus_undo_manager_undo (manager);
}
static void
@@ -131,7 +137,7 @@ edit_menu_cut_callback (BonoboUIHandler *ui_handler,
g_assert (GTK_IS_WINDOW (user_data));
main_window=GTK_WINDOW (user_data);
-
+
if (GTK_IS_EDITABLE (main_window->focus_widget)) {
gtk_editable_cut_clipboard (GTK_EDITABLE (main_window->focus_widget));
}
@@ -237,7 +243,7 @@ bookmarks_menu_edit_bookmarks_callback (BonoboUIHandler *ui_handler,
{
g_return_if_fail (NAUTILUS_IS_WINDOW (user_data));
- nautilus_window_edit_bookmarks (NAUTILUS_WINDOW (user_data));
+ nautilus_window_edit_bookmarks (GTK_OBJECT (user_data));
}
static void
@@ -420,12 +426,15 @@ get_bookmark_list (void)
}
static GtkWidget *
-get_bookmarks_window (void)
+get_bookmarks_window (GtkObject *object)
{
static GtkWidget *bookmarks_window = NULL;
+
if (bookmarks_window == NULL)
{
- bookmarks_window = create_bookmarks_window (get_bookmark_list ());
+ NautilusUndoManager *manager;
+ manager = gtk_object_get_data (object, NAUTILUS_UNDO_MANAGER_NAME);
+ bookmarks_window = create_bookmarks_window (get_bookmark_list (), manager);
}
g_assert (GTK_IS_WINDOW (bookmarks_window));
return bookmarks_window;
@@ -438,9 +447,9 @@ get_bookmarks_window (void)
* Called when application exits; don't call from anywhere else.
**/
void
-nautilus_bookmarks_exiting (void)
+nautilus_bookmarks_exiting (GtkObject *object)
{
- nautilus_bookmarks_window_save_geometry (get_bookmarks_window ());
+ nautilus_bookmarks_window_save_geometry (get_bookmarks_window (object));
}
/**
@@ -472,9 +481,9 @@ nautilus_window_add_bookmark_for_current_location (NautilusWindow *window)
}
void
-nautilus_window_edit_bookmarks (NautilusWindow *window)
+nautilus_window_edit_bookmarks (GtkObject *object)
{
- nautilus_gtk_window_present (GTK_WINDOW (get_bookmarks_window ()));
+ nautilus_gtk_window_present (GTK_WINDOW (get_bookmarks_window (object)));
}
/**
@@ -564,6 +573,7 @@ void
nautilus_window_initialize_menus (NautilusWindow *window)
{
BonoboUIHandler *ui_handler;
+ NautilusUndoManager *undo_manager;
ui_handler = window->uih;
g_assert (ui_handler != NULL);
@@ -625,7 +635,7 @@ nautilus_window_initialize_menus (NautilusWindow *window)
GNOME_KEY_NAME_UNDO,
GNOME_KEY_MOD_UNDO,
edit_menu_undo_callback,
- NULL);
+ window);
append_separator (window, NAUTILUS_MENU_PATH_SEPARATOR_AFTER_UNDO);
@@ -851,11 +861,12 @@ nautilus_window_initialize_menus (NautilusWindow *window)
GTK_OBJECT (window));
/* Connect to UndoManager so that we are notified when an undo transcation has occurred */
- gtk_signal_connect_object_while_alive (GTK_OBJECT(nautilus_undo_manager_get_undo_manager ()),
- "undo_transaction_occurred",
- update_undo_menu_item,
- GTK_OBJECT (window));
-
+ undo_manager = gtk_object_get_data ( GTK_OBJECT(window), "NautilusUndoManager");
+ if (undo_manager != NULL) {
+ gtk_signal_connect_object_while_alive ( GTK_OBJECT (undo_manager), "undo_transaction_occurred",
+ update_undo_menu_item, GTK_OBJECT (window));
+ }
+
nautilus_window_initialize_bookmarks_menu (window);
nautilus_window_initialize_go_menu (window);
}
@@ -955,9 +966,17 @@ update_eazel_theme_menu_item (NautilusWindow *window)
static void
update_undo_menu_item (NautilusWindow *window)
{
+ NautilusUndoManager *undo_manager;
+
g_assert (NAUTILUS_IS_WINDOW (window));
- bonobo_ui_handler_menu_set_sensitivity(window->uih, NAUTILUS_MENU_PATH_UNDO_ITEM,
- nautilus_undo_manager_can_undo ());
+ undo_manager = gtk_object_get_data (GTK_OBJECT (window), "NautilusUndoManager");
+ if (undo_manager != NULL) {
+ bonobo_ui_handler_menu_set_sensitivity(window->uih, NAUTILUS_MENU_PATH_UNDO_ITEM,
+ nautilus_undo_manager_can_undo (undo_manager));
+ } else {
+ bonobo_ui_handler_menu_set_sensitivity(window->uih, NAUTILUS_MENU_PATH_UNDO_ITEM,
+ FALSE);
+ }
}
diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c
index 773634e3a..5ed1c059f 100644
--- a/src/nautilus-navigation-window.c
+++ b/src/nautilus-navigation-window.c
@@ -47,6 +47,7 @@
#include <libnautilus-extensions/nautilus-icon-factory.h>
#include <libnautilus-extensions/nautilus-metadata.h>
#include <libnautilus-extensions/nautilus-string.h>
+#include <libnautilus/nautilus-undo-manager.h>
#include "nautilus-zoom-control.h"
#include <ctype.h>
#include <libgnomevfs/gnome-vfs-uri.h>
@@ -356,97 +357,100 @@ zoom_out_cb (NautilusZoomControl *zoom_control,
static void
-nautilus_window_constructed(NautilusWindow *window)
+nautilus_window_constructed (NautilusWindow *window)
{
- GnomeApp *app;
- GtkWidget *location_bar_box, *statusbar;
- GtkWidget *temp_frame;
- GnomeDockItemBehavior behavior;
- int sidebar_width;
+ GnomeApp *app;
+ GtkWidget *location_bar_box, *statusbar;
+ GtkWidget *temp_frame;
+ GnomeDockItemBehavior behavior;
+ int sidebar_width;
+ NautilusUndoManager *undo_manager;
- app = GNOME_APP(window);
+ app = GNOME_APP(window);
- /* set up location bar */
+ /* Set up undo manager */
+ undo_manager = gtk_object_get_data ( GTK_OBJECT(window->app), "NautilusUndoManager");
+ g_assert (undo_manager);
+ gtk_object_set_data ( GTK_OBJECT(window), "NautilusUndoManager", undo_manager);
- location_bar_box = gtk_hbox_new(FALSE, GNOME_PAD);
- gtk_container_set_border_width(GTK_CONTAINER(location_bar_box), GNOME_PAD_SMALL);
+ /* 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->ent_uri = nautilus_location_bar_new();
- gtk_signal_connect(GTK_OBJECT(window->ent_uri), "location_changed",
+ window->ent_uri = nautilus_location_bar_new();
+ nautilus_location_bar_enable_undo ( NAUTILUS_LOCATION_BAR (window->ent_uri), undo_manager, TRUE);
+
+ gtk_signal_connect(GTK_OBJECT(window->ent_uri), "location_changed",
nautilus_window_goto_uri_cb, window);
- gtk_box_pack_start(GTK_BOX(location_bar_box), window->ent_uri, TRUE, TRUE, GNOME_PAD_SMALL);
- behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE | GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL;
- if(!gnome_preferences_get_toolbar_detachable())
- behavior |= GNOME_DOCK_ITEM_BEH_LOCKED;
- gnome_app_add_docked(app, location_bar_box, "uri-entry",
- behavior, GNOME_DOCK_TOP, 2, 0, 0);
-
- /* Option menu for content view types; it's empty here, filled in when a uri is set. */
- window->option_cvtype = gtk_option_menu_new();
- gtk_box_pack_end(GTK_BOX(location_bar_box), window->option_cvtype, FALSE, FALSE, GNOME_PAD_SMALL);
- gtk_widget_show(window->option_cvtype);
-
- /* allocate the zoom control and place on the right next to the menu */
-
- window->zoom_control = nautilus_zoom_control_new ();
- gtk_widget_show (window->zoom_control);
- gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_in", zoom_in_cb, window);
- gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_out", zoom_out_cb, window);
- gtk_box_pack_end (GTK_BOX (location_bar_box), window->zoom_control, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(location_bar_box), window->ent_uri, TRUE, TRUE, GNOME_PAD_SMALL);
+ behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE | GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL;
+ if(!gnome_preferences_get_toolbar_detachable())
+ behavior |= GNOME_DOCK_ITEM_BEH_LOCKED;
+ gnome_app_add_docked(app, location_bar_box, "uri-entry", behavior, GNOME_DOCK_TOP, 2, 0, 0);
+
+ /* Option menu for content view types; it's empty here, filled in when a uri is set. */
+ window->option_cvtype = gtk_option_menu_new();
+ gtk_box_pack_end(GTK_BOX(location_bar_box), window->option_cvtype, FALSE, FALSE, GNOME_PAD_SMALL);
+ gtk_widget_show(window->option_cvtype);
+
+ /* allocate the zoom control and place on the right next to the menu */
+ window->zoom_control = nautilus_zoom_control_new ();
+ gtk_widget_show (window->zoom_control);
+ gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_in", zoom_in_cb, window);
+ gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_out", zoom_out_cb, window);
+ gtk_box_pack_end (GTK_BOX (location_bar_box), window->zoom_control, FALSE, FALSE, 0);
- gtk_widget_show_all(location_bar_box);
-
- /* set up status bar */
+ gtk_widget_show_all(location_bar_box);
- gnome_app_set_statusbar(app, (statusbar = gtk_statusbar_new()));
- /* insert a little padding so text isn't jammed against frame */
- gtk_misc_set_padding(GTK_MISC ((GTK_STATUSBAR (statusbar))->label), GNOME_PAD, 0);
- window->statusbar_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "IhateGtkStatusbar");
-
- /* set up window contents and policy */
+ /* set up status bar */
+ gnome_app_set_statusbar(app, (statusbar = gtk_statusbar_new()));
+
+ /* insert a little padding so text isn't jammed against frame */
+ gtk_misc_set_padding(GTK_MISC ((GTK_STATUSBAR (statusbar))->label), GNOME_PAD, 0);
+ window->statusbar_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "IhateGtkStatusbar");
- gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
- gtk_window_set_default_size(GTK_WINDOW(window), 650, 400);
+ /* set up window contents and policy */
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 650, 400);
- window->content_hbox = gtk_hpaned_new();
- sidebar_width = nautilus_preferences_get_enum(NAUTILUS_PREFERENCES_SIDEBAR_WIDTH, 148);
- gtk_paned_set_position(GTK_PANED(window->content_hbox), sidebar_width);
+ window->content_hbox = gtk_hpaned_new();
+ sidebar_width = nautilus_preferences_get_enum(NAUTILUS_PREFERENCES_SIDEBAR_WIDTH, 148);
+ gtk_paned_set_position(GTK_PANED(window->content_hbox), sidebar_width);
- gnome_app_set_contents(app, window->content_hbox);
+ gnome_app_set_contents(app, window->content_hbox);
- /* set up the index panel in a frame */
-
- temp_frame = gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(temp_frame), GTK_SHADOW_OUT);
- gtk_widget_show(temp_frame);
+ /* set up the index panel in a frame */
+ temp_frame = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type(GTK_FRAME(temp_frame), GTK_SHADOW_OUT);
+ gtk_widget_show(temp_frame);
- window->index_panel = nautilus_index_panel_new();
- gtk_widget_show (GTK_WIDGET (window->index_panel));
- gtk_container_add(GTK_CONTAINER(temp_frame), GTK_WIDGET (window->index_panel));
-
- gtk_paned_pack1(GTK_PANED(window->content_hbox), temp_frame, FALSE, FALSE);
+ window->index_panel = nautilus_index_panel_new();
+ gtk_widget_show (GTK_WIDGET (window->index_panel));
+ gtk_container_add(GTK_CONTAINER(temp_frame), GTK_WIDGET (window->index_panel));
- gtk_widget_show_all(window->content_hbox);
+ gtk_paned_pack1(GTK_PANED(window->content_hbox), temp_frame, FALSE, FALSE);
- /* enable mouse tracking for the index panel */
- gtk_widget_add_events(GTK_WIDGET (window->index_panel), GDK_POINTER_MOTION_MASK);
+ gtk_widget_show_all(window->content_hbox);
- /* CORBA and Bonobo setup */
- window->ntl_viewwindow = impl_Nautilus_ViewWindow__create(window);
- window->uih = bonobo_ui_handler_new();
- bonobo_ui_handler_set_app(window->uih, app);
- bonobo_ui_handler_set_statusbar(window->uih, statusbar);
+ /* enable mouse tracking for the index panel */
+ gtk_widget_add_events(GTK_WIDGET (window->index_panel), GDK_POINTER_MOTION_MASK);
- /* Create menus and toolbars */
- nautilus_window_initialize_menus (window);
- nautilus_window_initialize_toolbars (window);
+ /* CORBA and Bonobo setup */
+ window->ntl_viewwindow = impl_Nautilus_ViewWindow__create(window);
+ window->uih = bonobo_ui_handler_new();
+ bonobo_ui_handler_set_app(window->uih, app);
+ bonobo_ui_handler_set_statusbar(window->uih, statusbar);
- /* Set initial sensitivity of some buttons & menu items
- * now that they're all created.
- */
- nautilus_window_allow_back(window, FALSE);
- nautilus_window_allow_forward(window, FALSE);
- nautilus_window_allow_stop(window, FALSE);
+ /* Create menus and toolbars */
+ nautilus_window_initialize_menus (window);
+ nautilus_window_initialize_toolbars (window);
+
+ /* Set initial sensitivity of some buttons & menu items
+ * now that they're all created.
+ */
+ nautilus_window_allow_back(window, FALSE);
+ nautilus_window_allow_forward(window, FALSE);
+ nautilus_window_allow_stop(window, FALSE);
}
static void
@@ -469,11 +473,12 @@ nautilus_window_set_arg (GtkObject *object,
g_assert(app->name);
g_free(app->prefix);
app->prefix = g_strconcat("/", app->name, "/", NULL);
- if(!old_app_name)
+ if(!old_app_name) {
nautilus_window_constructed(NAUTILUS_WINDOW(object));
+ }
break;
case ARG_APP:
- window->app = BONOBO_OBJECT(GTK_VALUE_OBJECT(*arg));
+ window->app = BONOBO_OBJECT(GTK_VALUE_OBJECT(*arg));
break;
case ARG_CONTENT_VIEW:
nautilus_window_real_set_content_view (window, (NautilusView *)GTK_VALUE_OBJECT(*arg));
diff --git a/src/nautilus-navigation-window.h b/src/nautilus-navigation-window.h
index dbebf91df..6a8e65839 100644
--- a/src/nautilus-navigation-window.h
+++ b/src/nautilus-navigation-window.h
@@ -149,6 +149,6 @@ void nautilus_window_allow_reload (NautilusWindow *window,
gboolean allow);
void nautilus_window_allow_stop (NautilusWindow *window,
gboolean allow);
-void nautilus_bookmarks_exiting (void);
+void nautilus_bookmarks_exiting (GtkObject *object);
#endif
diff --git a/src/nautilus-object-window.c b/src/nautilus-object-window.c
index 773634e3a..5ed1c059f 100644
--- a/src/nautilus-object-window.c
+++ b/src/nautilus-object-window.c
@@ -47,6 +47,7 @@
#include <libnautilus-extensions/nautilus-icon-factory.h>
#include <libnautilus-extensions/nautilus-metadata.h>
#include <libnautilus-extensions/nautilus-string.h>
+#include <libnautilus/nautilus-undo-manager.h>
#include "nautilus-zoom-control.h"
#include <ctype.h>
#include <libgnomevfs/gnome-vfs-uri.h>
@@ -356,97 +357,100 @@ zoom_out_cb (NautilusZoomControl *zoom_control,
static void
-nautilus_window_constructed(NautilusWindow *window)
+nautilus_window_constructed (NautilusWindow *window)
{
- GnomeApp *app;
- GtkWidget *location_bar_box, *statusbar;
- GtkWidget *temp_frame;
- GnomeDockItemBehavior behavior;
- int sidebar_width;
+ GnomeApp *app;
+ GtkWidget *location_bar_box, *statusbar;
+ GtkWidget *temp_frame;
+ GnomeDockItemBehavior behavior;
+ int sidebar_width;
+ NautilusUndoManager *undo_manager;
- app = GNOME_APP(window);
+ app = GNOME_APP(window);
- /* set up location bar */
+ /* Set up undo manager */
+ undo_manager = gtk_object_get_data ( GTK_OBJECT(window->app), "NautilusUndoManager");
+ g_assert (undo_manager);
+ gtk_object_set_data ( GTK_OBJECT(window), "NautilusUndoManager", undo_manager);
- location_bar_box = gtk_hbox_new(FALSE, GNOME_PAD);
- gtk_container_set_border_width(GTK_CONTAINER(location_bar_box), GNOME_PAD_SMALL);
+ /* 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->ent_uri = nautilus_location_bar_new();
- gtk_signal_connect(GTK_OBJECT(window->ent_uri), "location_changed",
+ window->ent_uri = nautilus_location_bar_new();
+ nautilus_location_bar_enable_undo ( NAUTILUS_LOCATION_BAR (window->ent_uri), undo_manager, TRUE);
+
+ gtk_signal_connect(GTK_OBJECT(window->ent_uri), "location_changed",
nautilus_window_goto_uri_cb, window);
- gtk_box_pack_start(GTK_BOX(location_bar_box), window->ent_uri, TRUE, TRUE, GNOME_PAD_SMALL);
- behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE | GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL;
- if(!gnome_preferences_get_toolbar_detachable())
- behavior |= GNOME_DOCK_ITEM_BEH_LOCKED;
- gnome_app_add_docked(app, location_bar_box, "uri-entry",
- behavior, GNOME_DOCK_TOP, 2, 0, 0);
-
- /* Option menu for content view types; it's empty here, filled in when a uri is set. */
- window->option_cvtype = gtk_option_menu_new();
- gtk_box_pack_end(GTK_BOX(location_bar_box), window->option_cvtype, FALSE, FALSE, GNOME_PAD_SMALL);
- gtk_widget_show(window->option_cvtype);
-
- /* allocate the zoom control and place on the right next to the menu */
-
- window->zoom_control = nautilus_zoom_control_new ();
- gtk_widget_show (window->zoom_control);
- gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_in", zoom_in_cb, window);
- gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_out", zoom_out_cb, window);
- gtk_box_pack_end (GTK_BOX (location_bar_box), window->zoom_control, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(location_bar_box), window->ent_uri, TRUE, TRUE, GNOME_PAD_SMALL);
+ behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE | GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL;
+ if(!gnome_preferences_get_toolbar_detachable())
+ behavior |= GNOME_DOCK_ITEM_BEH_LOCKED;
+ gnome_app_add_docked(app, location_bar_box, "uri-entry", behavior, GNOME_DOCK_TOP, 2, 0, 0);
+
+ /* Option menu for content view types; it's empty here, filled in when a uri is set. */
+ window->option_cvtype = gtk_option_menu_new();
+ gtk_box_pack_end(GTK_BOX(location_bar_box), window->option_cvtype, FALSE, FALSE, GNOME_PAD_SMALL);
+ gtk_widget_show(window->option_cvtype);
+
+ /* allocate the zoom control and place on the right next to the menu */
+ window->zoom_control = nautilus_zoom_control_new ();
+ gtk_widget_show (window->zoom_control);
+ gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_in", zoom_in_cb, window);
+ gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_out", zoom_out_cb, window);
+ gtk_box_pack_end (GTK_BOX (location_bar_box), window->zoom_control, FALSE, FALSE, 0);
- gtk_widget_show_all(location_bar_box);
-
- /* set up status bar */
+ gtk_widget_show_all(location_bar_box);
- gnome_app_set_statusbar(app, (statusbar = gtk_statusbar_new()));
- /* insert a little padding so text isn't jammed against frame */
- gtk_misc_set_padding(GTK_MISC ((GTK_STATUSBAR (statusbar))->label), GNOME_PAD, 0);
- window->statusbar_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "IhateGtkStatusbar");
-
- /* set up window contents and policy */
+ /* set up status bar */
+ gnome_app_set_statusbar(app, (statusbar = gtk_statusbar_new()));
+
+ /* insert a little padding so text isn't jammed against frame */
+ gtk_misc_set_padding(GTK_MISC ((GTK_STATUSBAR (statusbar))->label), GNOME_PAD, 0);
+ window->statusbar_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "IhateGtkStatusbar");
- gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
- gtk_window_set_default_size(GTK_WINDOW(window), 650, 400);
+ /* set up window contents and policy */
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 650, 400);
- window->content_hbox = gtk_hpaned_new();
- sidebar_width = nautilus_preferences_get_enum(NAUTILUS_PREFERENCES_SIDEBAR_WIDTH, 148);
- gtk_paned_set_position(GTK_PANED(window->content_hbox), sidebar_width);
+ window->content_hbox = gtk_hpaned_new();
+ sidebar_width = nautilus_preferences_get_enum(NAUTILUS_PREFERENCES_SIDEBAR_WIDTH, 148);
+ gtk_paned_set_position(GTK_PANED(window->content_hbox), sidebar_width);
- gnome_app_set_contents(app, window->content_hbox);
+ gnome_app_set_contents(app, window->content_hbox);
- /* set up the index panel in a frame */
-
- temp_frame = gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(temp_frame), GTK_SHADOW_OUT);
- gtk_widget_show(temp_frame);
+ /* set up the index panel in a frame */
+ temp_frame = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type(GTK_FRAME(temp_frame), GTK_SHADOW_OUT);
+ gtk_widget_show(temp_frame);
- window->index_panel = nautilus_index_panel_new();
- gtk_widget_show (GTK_WIDGET (window->index_panel));
- gtk_container_add(GTK_CONTAINER(temp_frame), GTK_WIDGET (window->index_panel));
-
- gtk_paned_pack1(GTK_PANED(window->content_hbox), temp_frame, FALSE, FALSE);
+ window->index_panel = nautilus_index_panel_new();
+ gtk_widget_show (GTK_WIDGET (window->index_panel));
+ gtk_container_add(GTK_CONTAINER(temp_frame), GTK_WIDGET (window->index_panel));
- gtk_widget_show_all(window->content_hbox);
+ gtk_paned_pack1(GTK_PANED(window->content_hbox), temp_frame, FALSE, FALSE);
- /* enable mouse tracking for the index panel */
- gtk_widget_add_events(GTK_WIDGET (window->index_panel), GDK_POINTER_MOTION_MASK);
+ gtk_widget_show_all(window->content_hbox);
- /* CORBA and Bonobo setup */
- window->ntl_viewwindow = impl_Nautilus_ViewWindow__create(window);
- window->uih = bonobo_ui_handler_new();
- bonobo_ui_handler_set_app(window->uih, app);
- bonobo_ui_handler_set_statusbar(window->uih, statusbar);
+ /* enable mouse tracking for the index panel */
+ gtk_widget_add_events(GTK_WIDGET (window->index_panel), GDK_POINTER_MOTION_MASK);
- /* Create menus and toolbars */
- nautilus_window_initialize_menus (window);
- nautilus_window_initialize_toolbars (window);
+ /* CORBA and Bonobo setup */
+ window->ntl_viewwindow = impl_Nautilus_ViewWindow__create(window);
+ window->uih = bonobo_ui_handler_new();
+ bonobo_ui_handler_set_app(window->uih, app);
+ bonobo_ui_handler_set_statusbar(window->uih, statusbar);
- /* Set initial sensitivity of some buttons & menu items
- * now that they're all created.
- */
- nautilus_window_allow_back(window, FALSE);
- nautilus_window_allow_forward(window, FALSE);
- nautilus_window_allow_stop(window, FALSE);
+ /* Create menus and toolbars */
+ nautilus_window_initialize_menus (window);
+ nautilus_window_initialize_toolbars (window);
+
+ /* Set initial sensitivity of some buttons & menu items
+ * now that they're all created.
+ */
+ nautilus_window_allow_back(window, FALSE);
+ nautilus_window_allow_forward(window, FALSE);
+ nautilus_window_allow_stop(window, FALSE);
}
static void
@@ -469,11 +473,12 @@ nautilus_window_set_arg (GtkObject *object,
g_assert(app->name);
g_free(app->prefix);
app->prefix = g_strconcat("/", app->name, "/", NULL);
- if(!old_app_name)
+ if(!old_app_name) {
nautilus_window_constructed(NAUTILUS_WINDOW(object));
+ }
break;
case ARG_APP:
- window->app = BONOBO_OBJECT(GTK_VALUE_OBJECT(*arg));
+ window->app = BONOBO_OBJECT(GTK_VALUE_OBJECT(*arg));
break;
case ARG_CONTENT_VIEW:
nautilus_window_real_set_content_view (window, (NautilusView *)GTK_VALUE_OBJECT(*arg));
diff --git a/src/nautilus-object-window.h b/src/nautilus-object-window.h
index dbebf91df..6a8e65839 100644
--- a/src/nautilus-object-window.h
+++ b/src/nautilus-object-window.h
@@ -149,6 +149,6 @@ void nautilus_window_allow_reload (NautilusWindow *window,
gboolean allow);
void nautilus_window_allow_stop (NautilusWindow *window,
gboolean allow);
-void nautilus_bookmarks_exiting (void);
+void nautilus_bookmarks_exiting (GtkObject *object);
#endif
diff --git a/src/nautilus-spatial-window.c b/src/nautilus-spatial-window.c
index 773634e3a..5ed1c059f 100644
--- a/src/nautilus-spatial-window.c
+++ b/src/nautilus-spatial-window.c
@@ -47,6 +47,7 @@
#include <libnautilus-extensions/nautilus-icon-factory.h>
#include <libnautilus-extensions/nautilus-metadata.h>
#include <libnautilus-extensions/nautilus-string.h>
+#include <libnautilus/nautilus-undo-manager.h>
#include "nautilus-zoom-control.h"
#include <ctype.h>
#include <libgnomevfs/gnome-vfs-uri.h>
@@ -356,97 +357,100 @@ zoom_out_cb (NautilusZoomControl *zoom_control,
static void
-nautilus_window_constructed(NautilusWindow *window)
+nautilus_window_constructed (NautilusWindow *window)
{
- GnomeApp *app;
- GtkWidget *location_bar_box, *statusbar;
- GtkWidget *temp_frame;
- GnomeDockItemBehavior behavior;
- int sidebar_width;
+ GnomeApp *app;
+ GtkWidget *location_bar_box, *statusbar;
+ GtkWidget *temp_frame;
+ GnomeDockItemBehavior behavior;
+ int sidebar_width;
+ NautilusUndoManager *undo_manager;
- app = GNOME_APP(window);
+ app = GNOME_APP(window);
- /* set up location bar */
+ /* Set up undo manager */
+ undo_manager = gtk_object_get_data ( GTK_OBJECT(window->app), "NautilusUndoManager");
+ g_assert (undo_manager);
+ gtk_object_set_data ( GTK_OBJECT(window), "NautilusUndoManager", undo_manager);
- location_bar_box = gtk_hbox_new(FALSE, GNOME_PAD);
- gtk_container_set_border_width(GTK_CONTAINER(location_bar_box), GNOME_PAD_SMALL);
+ /* 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->ent_uri = nautilus_location_bar_new();
- gtk_signal_connect(GTK_OBJECT(window->ent_uri), "location_changed",
+ window->ent_uri = nautilus_location_bar_new();
+ nautilus_location_bar_enable_undo ( NAUTILUS_LOCATION_BAR (window->ent_uri), undo_manager, TRUE);
+
+ gtk_signal_connect(GTK_OBJECT(window->ent_uri), "location_changed",
nautilus_window_goto_uri_cb, window);
- gtk_box_pack_start(GTK_BOX(location_bar_box), window->ent_uri, TRUE, TRUE, GNOME_PAD_SMALL);
- behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE | GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL;
- if(!gnome_preferences_get_toolbar_detachable())
- behavior |= GNOME_DOCK_ITEM_BEH_LOCKED;
- gnome_app_add_docked(app, location_bar_box, "uri-entry",
- behavior, GNOME_DOCK_TOP, 2, 0, 0);
-
- /* Option menu for content view types; it's empty here, filled in when a uri is set. */
- window->option_cvtype = gtk_option_menu_new();
- gtk_box_pack_end(GTK_BOX(location_bar_box), window->option_cvtype, FALSE, FALSE, GNOME_PAD_SMALL);
- gtk_widget_show(window->option_cvtype);
-
- /* allocate the zoom control and place on the right next to the menu */
-
- window->zoom_control = nautilus_zoom_control_new ();
- gtk_widget_show (window->zoom_control);
- gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_in", zoom_in_cb, window);
- gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_out", zoom_out_cb, window);
- gtk_box_pack_end (GTK_BOX (location_bar_box), window->zoom_control, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(location_bar_box), window->ent_uri, TRUE, TRUE, GNOME_PAD_SMALL);
+ behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE | GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL;
+ if(!gnome_preferences_get_toolbar_detachable())
+ behavior |= GNOME_DOCK_ITEM_BEH_LOCKED;
+ gnome_app_add_docked(app, location_bar_box, "uri-entry", behavior, GNOME_DOCK_TOP, 2, 0, 0);
+
+ /* Option menu for content view types; it's empty here, filled in when a uri is set. */
+ window->option_cvtype = gtk_option_menu_new();
+ gtk_box_pack_end(GTK_BOX(location_bar_box), window->option_cvtype, FALSE, FALSE, GNOME_PAD_SMALL);
+ gtk_widget_show(window->option_cvtype);
+
+ /* allocate the zoom control and place on the right next to the menu */
+ window->zoom_control = nautilus_zoom_control_new ();
+ gtk_widget_show (window->zoom_control);
+ gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_in", zoom_in_cb, window);
+ gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_out", zoom_out_cb, window);
+ gtk_box_pack_end (GTK_BOX (location_bar_box), window->zoom_control, FALSE, FALSE, 0);
- gtk_widget_show_all(location_bar_box);
-
- /* set up status bar */
+ gtk_widget_show_all(location_bar_box);
- gnome_app_set_statusbar(app, (statusbar = gtk_statusbar_new()));
- /* insert a little padding so text isn't jammed against frame */
- gtk_misc_set_padding(GTK_MISC ((GTK_STATUSBAR (statusbar))->label), GNOME_PAD, 0);
- window->statusbar_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "IhateGtkStatusbar");
-
- /* set up window contents and policy */
+ /* set up status bar */
+ gnome_app_set_statusbar(app, (statusbar = gtk_statusbar_new()));
+
+ /* insert a little padding so text isn't jammed against frame */
+ gtk_misc_set_padding(GTK_MISC ((GTK_STATUSBAR (statusbar))->label), GNOME_PAD, 0);
+ window->statusbar_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "IhateGtkStatusbar");
- gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
- gtk_window_set_default_size(GTK_WINDOW(window), 650, 400);
+ /* set up window contents and policy */
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 650, 400);
- window->content_hbox = gtk_hpaned_new();
- sidebar_width = nautilus_preferences_get_enum(NAUTILUS_PREFERENCES_SIDEBAR_WIDTH, 148);
- gtk_paned_set_position(GTK_PANED(window->content_hbox), sidebar_width);
+ window->content_hbox = gtk_hpaned_new();
+ sidebar_width = nautilus_preferences_get_enum(NAUTILUS_PREFERENCES_SIDEBAR_WIDTH, 148);
+ gtk_paned_set_position(GTK_PANED(window->content_hbox), sidebar_width);
- gnome_app_set_contents(app, window->content_hbox);
+ gnome_app_set_contents(app, window->content_hbox);
- /* set up the index panel in a frame */
-
- temp_frame = gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(temp_frame), GTK_SHADOW_OUT);
- gtk_widget_show(temp_frame);
+ /* set up the index panel in a frame */
+ temp_frame = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type(GTK_FRAME(temp_frame), GTK_SHADOW_OUT);
+ gtk_widget_show(temp_frame);
- window->index_panel = nautilus_index_panel_new();
- gtk_widget_show (GTK_WIDGET (window->index_panel));
- gtk_container_add(GTK_CONTAINER(temp_frame), GTK_WIDGET (window->index_panel));
-
- gtk_paned_pack1(GTK_PANED(window->content_hbox), temp_frame, FALSE, FALSE);
+ window->index_panel = nautilus_index_panel_new();
+ gtk_widget_show (GTK_WIDGET (window->index_panel));
+ gtk_container_add(GTK_CONTAINER(temp_frame), GTK_WIDGET (window->index_panel));
- gtk_widget_show_all(window->content_hbox);
+ gtk_paned_pack1(GTK_PANED(window->content_hbox), temp_frame, FALSE, FALSE);
- /* enable mouse tracking for the index panel */
- gtk_widget_add_events(GTK_WIDGET (window->index_panel), GDK_POINTER_MOTION_MASK);
+ gtk_widget_show_all(window->content_hbox);
- /* CORBA and Bonobo setup */
- window->ntl_viewwindow = impl_Nautilus_ViewWindow__create(window);
- window->uih = bonobo_ui_handler_new();
- bonobo_ui_handler_set_app(window->uih, app);
- bonobo_ui_handler_set_statusbar(window->uih, statusbar);
+ /* enable mouse tracking for the index panel */
+ gtk_widget_add_events(GTK_WIDGET (window->index_panel), GDK_POINTER_MOTION_MASK);
- /* Create menus and toolbars */
- nautilus_window_initialize_menus (window);
- nautilus_window_initialize_toolbars (window);
+ /* CORBA and Bonobo setup */
+ window->ntl_viewwindow = impl_Nautilus_ViewWindow__create(window);
+ window->uih = bonobo_ui_handler_new();
+ bonobo_ui_handler_set_app(window->uih, app);
+ bonobo_ui_handler_set_statusbar(window->uih, statusbar);
- /* Set initial sensitivity of some buttons & menu items
- * now that they're all created.
- */
- nautilus_window_allow_back(window, FALSE);
- nautilus_window_allow_forward(window, FALSE);
- nautilus_window_allow_stop(window, FALSE);
+ /* Create menus and toolbars */
+ nautilus_window_initialize_menus (window);
+ nautilus_window_initialize_toolbars (window);
+
+ /* Set initial sensitivity of some buttons & menu items
+ * now that they're all created.
+ */
+ nautilus_window_allow_back(window, FALSE);
+ nautilus_window_allow_forward(window, FALSE);
+ nautilus_window_allow_stop(window, FALSE);
}
static void
@@ -469,11 +473,12 @@ nautilus_window_set_arg (GtkObject *object,
g_assert(app->name);
g_free(app->prefix);
app->prefix = g_strconcat("/", app->name, "/", NULL);
- if(!old_app_name)
+ if(!old_app_name) {
nautilus_window_constructed(NAUTILUS_WINDOW(object));
+ }
break;
case ARG_APP:
- window->app = BONOBO_OBJECT(GTK_VALUE_OBJECT(*arg));
+ window->app = BONOBO_OBJECT(GTK_VALUE_OBJECT(*arg));
break;
case ARG_CONTENT_VIEW:
nautilus_window_real_set_content_view (window, (NautilusView *)GTK_VALUE_OBJECT(*arg));
diff --git a/src/nautilus-spatial-window.h b/src/nautilus-spatial-window.h
index dbebf91df..6a8e65839 100644
--- a/src/nautilus-spatial-window.h
+++ b/src/nautilus-spatial-window.h
@@ -149,6 +149,6 @@ void nautilus_window_allow_reload (NautilusWindow *window,
gboolean allow);
void nautilus_window_allow_stop (NautilusWindow *window,
gboolean allow);
-void nautilus_bookmarks_exiting (void);
+void nautilus_bookmarks_exiting (GtkObject *object);
#endif
diff --git a/src/nautilus-window-menus.c b/src/nautilus-window-menus.c
index b5499470b..59cd861a2 100644
--- a/src/nautilus-window-menus.c
+++ b/src/nautilus-window-menus.c
@@ -33,9 +33,7 @@
#include "nautilus-property-browser.h"
#include <libnautilus/nautilus-undo-manager.h>
-
#include <libnautilus/nautilus-bonobo-ui.h>
-
#include <libnautilus-extensions/nautilus-bonobo-extensions.h>
#include <libnautilus-extensions/nautilus-glib-extensions.h>
#include <libnautilus-extensions/nautilus-gtk-extensions.h>
@@ -53,7 +51,7 @@ static void clear_appended_bookmark_items (NautilusWindow
const char *menu_path,
const char *last_static_item_path);
static NautilusBookmarkList *get_bookmark_list (void);
-static GtkWidget *get_bookmarks_window (void);
+static GtkWidget *get_bookmarks_window (GtkObject *object);
static void refresh_bookmarks_in_go_menu (NautilusWindow *window);
static void refresh_bookmarks_in_bookmarks_menu (NautilusWindow *window);
@@ -118,8 +116,16 @@ edit_menu_undo_callback (BonoboUIHandler *ui_handler,
gpointer user_data,
const char *path)
{
- if (nautilus_undo_manager_can_undo ())
- nautilus_undo_manager_undo_last_transaction ();
+ NautilusUndoManager *manager;
+
+ g_assert (NAUTILUS_IS_WINDOW (user_data));
+
+ /* Locate undo manager */
+ manager = gtk_object_get_data (GTK_OBJECT(user_data), "NautilusUndoManager");
+ g_return_if_fail (manager != NULL);
+
+ if (nautilus_undo_manager_can_undo (manager))
+ nautilus_undo_manager_undo (manager);
}
static void
@@ -131,7 +137,7 @@ edit_menu_cut_callback (BonoboUIHandler *ui_handler,
g_assert (GTK_IS_WINDOW (user_data));
main_window=GTK_WINDOW (user_data);
-
+
if (GTK_IS_EDITABLE (main_window->focus_widget)) {
gtk_editable_cut_clipboard (GTK_EDITABLE (main_window->focus_widget));
}
@@ -237,7 +243,7 @@ bookmarks_menu_edit_bookmarks_callback (BonoboUIHandler *ui_handler,
{
g_return_if_fail (NAUTILUS_IS_WINDOW (user_data));
- nautilus_window_edit_bookmarks (NAUTILUS_WINDOW (user_data));
+ nautilus_window_edit_bookmarks (GTK_OBJECT (user_data));
}
static void
@@ -420,12 +426,15 @@ get_bookmark_list (void)
}
static GtkWidget *
-get_bookmarks_window (void)
+get_bookmarks_window (GtkObject *object)
{
static GtkWidget *bookmarks_window = NULL;
+
if (bookmarks_window == NULL)
{
- bookmarks_window = create_bookmarks_window (get_bookmark_list ());
+ NautilusUndoManager *manager;
+ manager = gtk_object_get_data (object, NAUTILUS_UNDO_MANAGER_NAME);
+ bookmarks_window = create_bookmarks_window (get_bookmark_list (), manager);
}
g_assert (GTK_IS_WINDOW (bookmarks_window));
return bookmarks_window;
@@ -438,9 +447,9 @@ get_bookmarks_window (void)
* Called when application exits; don't call from anywhere else.
**/
void
-nautilus_bookmarks_exiting (void)
+nautilus_bookmarks_exiting (GtkObject *object)
{
- nautilus_bookmarks_window_save_geometry (get_bookmarks_window ());
+ nautilus_bookmarks_window_save_geometry (get_bookmarks_window (object));
}
/**
@@ -472,9 +481,9 @@ nautilus_window_add_bookmark_for_current_location (NautilusWindow *window)
}
void
-nautilus_window_edit_bookmarks (NautilusWindow *window)
+nautilus_window_edit_bookmarks (GtkObject *object)
{
- nautilus_gtk_window_present (GTK_WINDOW (get_bookmarks_window ()));
+ nautilus_gtk_window_present (GTK_WINDOW (get_bookmarks_window (object)));
}
/**
@@ -564,6 +573,7 @@ void
nautilus_window_initialize_menus (NautilusWindow *window)
{
BonoboUIHandler *ui_handler;
+ NautilusUndoManager *undo_manager;
ui_handler = window->uih;
g_assert (ui_handler != NULL);
@@ -625,7 +635,7 @@ nautilus_window_initialize_menus (NautilusWindow *window)
GNOME_KEY_NAME_UNDO,
GNOME_KEY_MOD_UNDO,
edit_menu_undo_callback,
- NULL);
+ window);
append_separator (window, NAUTILUS_MENU_PATH_SEPARATOR_AFTER_UNDO);
@@ -851,11 +861,12 @@ nautilus_window_initialize_menus (NautilusWindow *window)
GTK_OBJECT (window));
/* Connect to UndoManager so that we are notified when an undo transcation has occurred */
- gtk_signal_connect_object_while_alive (GTK_OBJECT(nautilus_undo_manager_get_undo_manager ()),
- "undo_transaction_occurred",
- update_undo_menu_item,
- GTK_OBJECT (window));
-
+ undo_manager = gtk_object_get_data ( GTK_OBJECT(window), "NautilusUndoManager");
+ if (undo_manager != NULL) {
+ gtk_signal_connect_object_while_alive ( GTK_OBJECT (undo_manager), "undo_transaction_occurred",
+ update_undo_menu_item, GTK_OBJECT (window));
+ }
+
nautilus_window_initialize_bookmarks_menu (window);
nautilus_window_initialize_go_menu (window);
}
@@ -955,9 +966,17 @@ update_eazel_theme_menu_item (NautilusWindow *window)
static void
update_undo_menu_item (NautilusWindow *window)
{
+ NautilusUndoManager *undo_manager;
+
g_assert (NAUTILUS_IS_WINDOW (window));
- bonobo_ui_handler_menu_set_sensitivity(window->uih, NAUTILUS_MENU_PATH_UNDO_ITEM,
- nautilus_undo_manager_can_undo ());
+ undo_manager = gtk_object_get_data (GTK_OBJECT (window), "NautilusUndoManager");
+ if (undo_manager != NULL) {
+ bonobo_ui_handler_menu_set_sensitivity(window->uih, NAUTILUS_MENU_PATH_UNDO_ITEM,
+ nautilus_undo_manager_can_undo (undo_manager));
+ } else {
+ bonobo_ui_handler_menu_set_sensitivity(window->uih, NAUTILUS_MENU_PATH_UNDO_ITEM,
+ FALSE);
+ }
}
diff --git a/src/nautilus-window-private.h b/src/nautilus-window-private.h
index 6e0a7a997..d993d0a22 100644
--- a/src/nautilus-window-private.h
+++ b/src/nautilus-window-private.h
@@ -59,7 +59,7 @@ void nautilus_add_to_history_list (NautilusBookmark *bookmark);
GSList *nautilus_get_history_list (void);
void nautilus_window_add_bookmark_for_current_location (NautilusWindow *window);
-void nautilus_window_edit_bookmarks (NautilusWindow *window);
+void nautilus_window_edit_bookmarks (GtkObject *object);
void nautilus_window_initialize_menus (NautilusWindow *window);
void nautilus_window_initialize_toolbars (NautilusWindow *window);
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 773634e3a..5ed1c059f 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -47,6 +47,7 @@
#include <libnautilus-extensions/nautilus-icon-factory.h>
#include <libnautilus-extensions/nautilus-metadata.h>
#include <libnautilus-extensions/nautilus-string.h>
+#include <libnautilus/nautilus-undo-manager.h>
#include "nautilus-zoom-control.h"
#include <ctype.h>
#include <libgnomevfs/gnome-vfs-uri.h>
@@ -356,97 +357,100 @@ zoom_out_cb (NautilusZoomControl *zoom_control,
static void
-nautilus_window_constructed(NautilusWindow *window)
+nautilus_window_constructed (NautilusWindow *window)
{
- GnomeApp *app;
- GtkWidget *location_bar_box, *statusbar;
- GtkWidget *temp_frame;
- GnomeDockItemBehavior behavior;
- int sidebar_width;
+ GnomeApp *app;
+ GtkWidget *location_bar_box, *statusbar;
+ GtkWidget *temp_frame;
+ GnomeDockItemBehavior behavior;
+ int sidebar_width;
+ NautilusUndoManager *undo_manager;
- app = GNOME_APP(window);
+ app = GNOME_APP(window);
- /* set up location bar */
+ /* Set up undo manager */
+ undo_manager = gtk_object_get_data ( GTK_OBJECT(window->app), "NautilusUndoManager");
+ g_assert (undo_manager);
+ gtk_object_set_data ( GTK_OBJECT(window), "NautilusUndoManager", undo_manager);
- location_bar_box = gtk_hbox_new(FALSE, GNOME_PAD);
- gtk_container_set_border_width(GTK_CONTAINER(location_bar_box), GNOME_PAD_SMALL);
+ /* 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->ent_uri = nautilus_location_bar_new();
- gtk_signal_connect(GTK_OBJECT(window->ent_uri), "location_changed",
+ window->ent_uri = nautilus_location_bar_new();
+ nautilus_location_bar_enable_undo ( NAUTILUS_LOCATION_BAR (window->ent_uri), undo_manager, TRUE);
+
+ gtk_signal_connect(GTK_OBJECT(window->ent_uri), "location_changed",
nautilus_window_goto_uri_cb, window);
- gtk_box_pack_start(GTK_BOX(location_bar_box), window->ent_uri, TRUE, TRUE, GNOME_PAD_SMALL);
- behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE | GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL;
- if(!gnome_preferences_get_toolbar_detachable())
- behavior |= GNOME_DOCK_ITEM_BEH_LOCKED;
- gnome_app_add_docked(app, location_bar_box, "uri-entry",
- behavior, GNOME_DOCK_TOP, 2, 0, 0);
-
- /* Option menu for content view types; it's empty here, filled in when a uri is set. */
- window->option_cvtype = gtk_option_menu_new();
- gtk_box_pack_end(GTK_BOX(location_bar_box), window->option_cvtype, FALSE, FALSE, GNOME_PAD_SMALL);
- gtk_widget_show(window->option_cvtype);
-
- /* allocate the zoom control and place on the right next to the menu */
-
- window->zoom_control = nautilus_zoom_control_new ();
- gtk_widget_show (window->zoom_control);
- gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_in", zoom_in_cb, window);
- gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_out", zoom_out_cb, window);
- gtk_box_pack_end (GTK_BOX (location_bar_box), window->zoom_control, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(location_bar_box), window->ent_uri, TRUE, TRUE, GNOME_PAD_SMALL);
+ behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE | GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL;
+ if(!gnome_preferences_get_toolbar_detachable())
+ behavior |= GNOME_DOCK_ITEM_BEH_LOCKED;
+ gnome_app_add_docked(app, location_bar_box, "uri-entry", behavior, GNOME_DOCK_TOP, 2, 0, 0);
+
+ /* Option menu for content view types; it's empty here, filled in when a uri is set. */
+ window->option_cvtype = gtk_option_menu_new();
+ gtk_box_pack_end(GTK_BOX(location_bar_box), window->option_cvtype, FALSE, FALSE, GNOME_PAD_SMALL);
+ gtk_widget_show(window->option_cvtype);
+
+ /* allocate the zoom control and place on the right next to the menu */
+ window->zoom_control = nautilus_zoom_control_new ();
+ gtk_widget_show (window->zoom_control);
+ gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_in", zoom_in_cb, window);
+ gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_out", zoom_out_cb, window);
+ gtk_box_pack_end (GTK_BOX (location_bar_box), window->zoom_control, FALSE, FALSE, 0);
- gtk_widget_show_all(location_bar_box);
-
- /* set up status bar */
+ gtk_widget_show_all(location_bar_box);
- gnome_app_set_statusbar(app, (statusbar = gtk_statusbar_new()));
- /* insert a little padding so text isn't jammed against frame */
- gtk_misc_set_padding(GTK_MISC ((GTK_STATUSBAR (statusbar))->label), GNOME_PAD, 0);
- window->statusbar_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "IhateGtkStatusbar");
-
- /* set up window contents and policy */
+ /* set up status bar */
+ gnome_app_set_statusbar(app, (statusbar = gtk_statusbar_new()));
+
+ /* insert a little padding so text isn't jammed against frame */
+ gtk_misc_set_padding(GTK_MISC ((GTK_STATUSBAR (statusbar))->label), GNOME_PAD, 0);
+ window->statusbar_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "IhateGtkStatusbar");
- gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
- gtk_window_set_default_size(GTK_WINDOW(window), 650, 400);
+ /* set up window contents and policy */
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 650, 400);
- window->content_hbox = gtk_hpaned_new();
- sidebar_width = nautilus_preferences_get_enum(NAUTILUS_PREFERENCES_SIDEBAR_WIDTH, 148);
- gtk_paned_set_position(GTK_PANED(window->content_hbox), sidebar_width);
+ window->content_hbox = gtk_hpaned_new();
+ sidebar_width = nautilus_preferences_get_enum(NAUTILUS_PREFERENCES_SIDEBAR_WIDTH, 148);
+ gtk_paned_set_position(GTK_PANED(window->content_hbox), sidebar_width);
- gnome_app_set_contents(app, window->content_hbox);
+ gnome_app_set_contents(app, window->content_hbox);
- /* set up the index panel in a frame */
-
- temp_frame = gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(temp_frame), GTK_SHADOW_OUT);
- gtk_widget_show(temp_frame);
+ /* set up the index panel in a frame */
+ temp_frame = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type(GTK_FRAME(temp_frame), GTK_SHADOW_OUT);
+ gtk_widget_show(temp_frame);
- window->index_panel = nautilus_index_panel_new();
- gtk_widget_show (GTK_WIDGET (window->index_panel));
- gtk_container_add(GTK_CONTAINER(temp_frame), GTK_WIDGET (window->index_panel));
-
- gtk_paned_pack1(GTK_PANED(window->content_hbox), temp_frame, FALSE, FALSE);
+ window->index_panel = nautilus_index_panel_new();
+ gtk_widget_show (GTK_WIDGET (window->index_panel));
+ gtk_container_add(GTK_CONTAINER(temp_frame), GTK_WIDGET (window->index_panel));
- gtk_widget_show_all(window->content_hbox);
+ gtk_paned_pack1(GTK_PANED(window->content_hbox), temp_frame, FALSE, FALSE);
- /* enable mouse tracking for the index panel */
- gtk_widget_add_events(GTK_WIDGET (window->index_panel), GDK_POINTER_MOTION_MASK);
+ gtk_widget_show_all(window->content_hbox);
- /* CORBA and Bonobo setup */
- window->ntl_viewwindow = impl_Nautilus_ViewWindow__create(window);
- window->uih = bonobo_ui_handler_new();
- bonobo_ui_handler_set_app(window->uih, app);
- bonobo_ui_handler_set_statusbar(window->uih, statusbar);
+ /* enable mouse tracking for the index panel */
+ gtk_widget_add_events(GTK_WIDGET (window->index_panel), GDK_POINTER_MOTION_MASK);
- /* Create menus and toolbars */
- nautilus_window_initialize_menus (window);
- nautilus_window_initialize_toolbars (window);
+ /* CORBA and Bonobo setup */
+ window->ntl_viewwindow = impl_Nautilus_ViewWindow__create(window);
+ window->uih = bonobo_ui_handler_new();
+ bonobo_ui_handler_set_app(window->uih, app);
+ bonobo_ui_handler_set_statusbar(window->uih, statusbar);
- /* Set initial sensitivity of some buttons & menu items
- * now that they're all created.
- */
- nautilus_window_allow_back(window, FALSE);
- nautilus_window_allow_forward(window, FALSE);
- nautilus_window_allow_stop(window, FALSE);
+ /* Create menus and toolbars */
+ nautilus_window_initialize_menus (window);
+ nautilus_window_initialize_toolbars (window);
+
+ /* Set initial sensitivity of some buttons & menu items
+ * now that they're all created.
+ */
+ nautilus_window_allow_back(window, FALSE);
+ nautilus_window_allow_forward(window, FALSE);
+ nautilus_window_allow_stop(window, FALSE);
}
static void
@@ -469,11 +473,12 @@ nautilus_window_set_arg (GtkObject *object,
g_assert(app->name);
g_free(app->prefix);
app->prefix = g_strconcat("/", app->name, "/", NULL);
- if(!old_app_name)
+ if(!old_app_name) {
nautilus_window_constructed(NAUTILUS_WINDOW(object));
+ }
break;
case ARG_APP:
- window->app = BONOBO_OBJECT(GTK_VALUE_OBJECT(*arg));
+ window->app = BONOBO_OBJECT(GTK_VALUE_OBJECT(*arg));
break;
case ARG_CONTENT_VIEW:
nautilus_window_real_set_content_view (window, (NautilusView *)GTK_VALUE_OBJECT(*arg));
diff --git a/src/nautilus-window.h b/src/nautilus-window.h
index dbebf91df..6a8e65839 100644
--- a/src/nautilus-window.h
+++ b/src/nautilus-window.h
@@ -149,6 +149,6 @@ void nautilus_window_allow_reload (NautilusWindow *window,
gboolean allow);
void nautilus_window_allow_stop (NautilusWindow *window,
gboolean allow);
-void nautilus_bookmarks_exiting (void);
+void nautilus_bookmarks_exiting (GtkObject *object);
#endif
diff --git a/src/ntl-app.c b/src/ntl-app.c
index 6eb977ba8..82b421f4c 100644
--- a/src/ntl-app.c
+++ b/src/ntl-app.c
@@ -1,4 +1,4 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/*
* Nautilus
@@ -35,16 +35,16 @@
#include <libnautilus/nautilus-undo-manager.h>
typedef struct {
- POA_Nautilus_Application servant;
- NautilusApp *app;
+ POA_Nautilus_Application servant;
+ NautilusApp *app;
- Nautilus_ViewWindowList attr_view_windows;
+ Nautilus_ViewWindowList attr_view_windows;
} impl_POA_Nautilus_Application;
static Nautilus_ViewWindowList *
impl_Nautilus_Application__get_view_windows(impl_POA_Nautilus_Application* servant,
CORBA_Environment * ev);
-static Nautilus_UndoManager
+static Nautilus_Undo_Manager
impl_Nautilus_Application__get_undo_manager(impl_POA_Nautilus_Application* servant,
CORBA_Environment * ev);
static Nautilus_ViewWindow
@@ -59,63 +59,63 @@ impl_Nautilus_Application_create_object(impl_POA_Nautilus_Application *servant,
CORBA_char *obj_iid,
GNOME_stringlist * params,
CORBA_Environment * ev);
-
static POA_Nautilus_Application__epv impl_Nautilus_Application_epv = {
- NULL, /* _private */
- (gpointer) &impl_Nautilus_Application__get_view_windows,
- (gpointer) &impl_Nautilus_Application__get_undo_manager,
- (gpointer) &impl_Nautilus_Application_new_view_window
+ NULL, /* _private */
+ (gpointer) &impl_Nautilus_Application__get_view_windows,
+ (gpointer) &impl_Nautilus_Application__get_undo_manager,
+ (gpointer) &impl_Nautilus_Application_new_view_window
};
static POA_Bonobo_GenericFactory__epv impl_Nautilus_Application_Bonobo_GenericFactory_epv = {
- NULL, /* _private */
- (gpointer) &impl_Nautilus_Application_supports,
- (gpointer) &impl_Nautilus_Application_create_object
+ NULL, /* _private */
+ (gpointer) &impl_Nautilus_Application_supports,
+ (gpointer) &impl_Nautilus_Application_create_object
};
static PortableServer_ServantBase__epv impl_Nautilus_Application_base_epv = {
- NULL, /* _private data */
- NULL, /* finalize routine */
- NULL, /* default_POA routine */
+ NULL, /* _private data */
+ NULL, /* finalize routine */
+ NULL, /* default_POA routine */
};
static POA_Nautilus_Application__vepv impl_Nautilus_Application_vepv = {
- &impl_Nautilus_Application_base_epv,
- &impl_Nautilus_Application_Bonobo_GenericFactory_epv,
- NULL,
- &impl_Nautilus_Application_epv,
+ &impl_Nautilus_Application_base_epv,
+ &impl_Nautilus_Application_Bonobo_GenericFactory_epv,
+ NULL,
+ &impl_Nautilus_Application_epv,
};
static Nautilus_ViewWindowList *
impl_Nautilus_Application__get_view_windows(impl_POA_Nautilus_Application *servant,
CORBA_Environment * ev)
{
- Nautilus_ViewWindowList *retval;
-
- retval = Nautilus_ViewWindowList__alloc();
- retval->_length = g_slist_length(servant->app->windows);
-
- if(retval->_length)
- {
- int i;
- GSList *ltmp;
-
- retval->_buffer = CORBA_sequence_Nautilus_ViewWindow_allocbuf(retval->_length);
- for(i = 0, ltmp = servant->app->windows; ltmp; ltmp = ltmp->next, i++)
- {
- CORBA_Object obj;
- obj = bonobo_object_corba_objref(NAUTILUS_WINDOW(ltmp->data)->ntl_viewwindow);
- retval->_buffer[i] = CORBA_Object_duplicate(obj, ev);
- }
- }
- else
- retval->_buffer = NULL;
-
- CORBA_sequence_set_release(retval, CORBA_TRUE);
-
- return retval;
+ Nautilus_ViewWindowList *retval;
+
+ retval = Nautilus_ViewWindowList__alloc();
+ retval->_length = g_slist_length(servant->app->windows);
+
+ if(retval->_length)
+ {
+ int i;
+ GSList *ltmp;
+
+ retval->_buffer = CORBA_sequence_Nautilus_ViewWindow_allocbuf(retval->_length);
+ for(i = 0, ltmp = servant->app->windows; ltmp; ltmp = ltmp->next, i++)
+ {
+ CORBA_Object obj;
+ obj = bonobo_object_corba_objref(NAUTILUS_WINDOW(ltmp->data)->ntl_viewwindow);
+ retval->_buffer[i] = CORBA_Object_duplicate(obj, ev);
+ }
+ }
+ else {
+ retval->_buffer = NULL;
+ }
+
+ CORBA_sequence_set_release(retval, CORBA_TRUE);
+
+ return retval;
}
-static Nautilus_UndoManager
+static Nautilus_Undo_Manager
impl_Nautilus_Application__get_undo_manager(impl_POA_Nautilus_Application *servant,
CORBA_Environment * ev)
{
@@ -126,11 +126,11 @@ impl_Nautilus_Application__get_undo_manager(impl_POA_Nautilus_Application *serva
static Nautilus_ViewWindow
impl_Nautilus_Application_new_view_window(impl_POA_Nautilus_Application *servant, CORBA_Environment * ev)
{
- NautilusWindow *win;
+ NautilusWindow *win;
- win = nautilus_app_create_window(servant->app);
+ win = nautilus_app_create_window (servant->app);
- return CORBA_Object_duplicate(bonobo_object_corba_objref(BONOBO_OBJECT(win)), ev);
+ return CORBA_Object_duplicate (bonobo_object_corba_objref (BONOBO_OBJECT (win)), ev);
}
static CORBA_boolean
@@ -138,9 +138,9 @@ impl_Nautilus_Application_supports(impl_POA_Nautilus_Application * servant,
CORBA_char * obj_iid,
CORBA_Environment * ev)
{
- return (!strcmp(obj_iid, "OAFIID:ntl_file_manager_icon_view:42681b21-d5ca-4837-87d2-394d88ecc058")
- || !strcmp(obj_iid, "OAFIID:ntl_file_manager_list_view:521e489d-0662-4ad7-ac3a-832deabe111c")
- || !strcmp(obj_iid, "OAFIID:ntl_window:88e8b2e4-b627-4221-b566-5ba32185c88d"));
+ return (!strcmp(obj_iid, "OAFIID:ntl_file_manager_icon_view:42681b21-d5ca-4837-87d2-394d88ecc058")
+ || !strcmp(obj_iid, "OAFIID:ntl_file_manager_list_view:521e489d-0662-4ad7-ac3a-832deabe111c")
+ || !strcmp(obj_iid, "OAFIID:ntl_window:88e8b2e4-b627-4221-b566-5ba32185c88d"));
}
static CORBA_Object
@@ -149,32 +149,33 @@ impl_Nautilus_Application_create_object(impl_POA_Nautilus_Application *servant,
GNOME_stringlist * params,
CORBA_Environment * ev)
{
- CORBA_Object retval = CORBA_OBJECT_NIL;
- FMDirectoryView *dir_view;
- NautilusContentViewFrame *view_frame;
+ CORBA_Object retval = CORBA_OBJECT_NIL;
+ FMDirectoryView *dir_view;
+ NautilusContentViewFrame *view_frame;
- if(!impl_Nautilus_Application_supports(servant, obj_iid, ev))
- return CORBA_OBJECT_NIL;
+ if(!impl_Nautilus_Application_supports(servant, obj_iid, ev))
+ return CORBA_OBJECT_NIL;
- if (strcmp (obj_iid, "OAFIID:ntl_file_manager_icon_view:42681b21-d5ca-4837-87d2-394d88ecc058") == 0)
- dir_view = FM_DIRECTORY_VIEW (gtk_object_new (fm_icon_view_get_type (), NULL));
- else if (strcmp (obj_iid, "OAFIID:ntl_file_manager_list_view:521e489d-0662-4ad7-ac3a-832deabe111c") == 0)
- dir_view = FM_DIRECTORY_VIEW (gtk_object_new (fm_list_view_get_type (), NULL));
- else if (strcmp (obj_iid,"OAFIID:ntl_window:88e8b2e4-b627-4221-b566-5ba32185c88d") == 0)
- retval = impl_Nautilus_Application_new_view_window (servant, ev);
- else
- dir_view = NULL;
+ if (strcmp (obj_iid, "OAFIID:ntl_file_manager_icon_view:42681b21-d5ca-4837-87d2-394d88ecc058") == 0) {
+ dir_view = FM_DIRECTORY_VIEW (gtk_object_new (fm_icon_view_get_type (), NULL));
+ } else if (strcmp (obj_iid, "OAFIID:ntl_file_manager_list_view:521e489d-0662-4ad7-ac3a-832deabe111c") == 0) {
+ dir_view = FM_DIRECTORY_VIEW (gtk_object_new (fm_list_view_get_type (), NULL));
+ } else if (strcmp (obj_iid,"OAFIID:ntl_window:88e8b2e4-b627-4221-b566-5ba32185c88d") == 0) {
+ retval = impl_Nautilus_Application_new_view_window (servant, ev);
+ } else {
+ dir_view = NULL;
+ }
- g_return_val_if_fail(dir_view, CORBA_OBJECT_NIL);
+ g_return_val_if_fail(dir_view, CORBA_OBJECT_NIL);
- if(dir_view)
- {
- view_frame = fm_directory_view_get_view_frame (dir_view);
+ if(dir_view)
+ {
+ view_frame = fm_directory_view_get_view_frame (dir_view);
- retval = CORBA_Object_duplicate(bonobo_object_corba_objref(BONOBO_OBJECT(view_frame)), ev);
- }
+ retval = CORBA_Object_duplicate(bonobo_object_corba_objref(BONOBO_OBJECT(view_frame)), ev);
+ }
- return retval;
+ return retval;
}
@@ -183,13 +184,13 @@ impl_Nautilus_Application__create(PortableServer_POA poa,
NautilusApp *app,
CORBA_Environment * ev)
{
- impl_POA_Nautilus_Application *newservant;
+ impl_POA_Nautilus_Application *newservant;
- newservant = g_new0(impl_POA_Nautilus_Application, 1);
- newservant->servant.vepv = &impl_Nautilus_Application_vepv;
- newservant->servant.vepv->Bonobo_Unknown_epv = NAUTILUS_APP_CLASS(GTK_OBJECT(app)->klass)->unknown_epv;
- POA_Nautilus_Application__init((PortableServer_Servant) newservant, ev);
- return bonobo_object_activate_servant(BONOBO_OBJECT(app), newservant);
+ newservant = g_new0(impl_POA_Nautilus_Application, 1);
+ newservant->servant.vepv = &impl_Nautilus_Application_vepv;
+ newservant->servant.vepv->Bonobo_Unknown_epv = NAUTILUS_APP_CLASS(GTK_OBJECT(app)->klass)->unknown_epv;
+ POA_Nautilus_Application__init((PortableServer_Servant) newservant, ev);
+ return bonobo_object_activate_servant(BONOBO_OBJECT(app), newservant);
}
static void nautilus_app_init (NautilusApp *app);
@@ -201,39 +202,39 @@ static GtkObjectClass *app_parent_class = NULL;
GtkType
nautilus_app_get_type (void)
{
- static GtkType App_type = 0;
-
- if (!App_type)
- {
- static const GtkTypeInfo App_info =
- {
- "NautilusApp",
- sizeof (NautilusApp),
- sizeof (NautilusAppClass),
- (GtkClassInitFunc) nautilus_app_class_init,
- (GtkObjectInitFunc) nautilus_app_init,
- /* reserved_1 */ NULL,
- /* reserved_2 */ NULL,
- (GtkClassInitFunc) NULL,
- };
-
- App_type = gtk_type_unique (bonobo_object_get_type (), &App_info);
- }
-
- return App_type;
+ static GtkType App_type = 0;
+
+ if (!App_type)
+ {
+ static const GtkTypeInfo App_info =
+ {
+ "NautilusApp",
+ sizeof (NautilusApp),
+ sizeof (NautilusAppClass),
+ (GtkClassInitFunc) nautilus_app_class_init,
+ (GtkObjectInitFunc) nautilus_app_init,
+ /* reserved_1 */ NULL,
+ /* reserved_2 */ NULL,
+ (GtkClassInitFunc) NULL,
+ };
+
+ App_type = gtk_type_unique (bonobo_object_get_type (), &App_info);
+ }
+
+ return App_type;
}
static void
nautilus_app_class_init (NautilusAppClass *klass)
{
- GtkObjectClass *object_class;
+ GtkObjectClass *object_class;
- klass->unknown_epv = bonobo_object_get_epv();
+ klass->unknown_epv = bonobo_object_get_epv();
- object_class = (GtkObjectClass*) klass;
- object_class->destroy = nautilus_app_destroy;
+ object_class = (GtkObjectClass*) klass;
+ object_class->destroy = nautilus_app_destroy;
- app_parent_class = gtk_type_class (gtk_object_get_type ());
+ app_parent_class = gtk_type_class (gtk_object_get_type ());
/*
* Startup preferences. This call is needed so that preferences have
@@ -258,16 +259,19 @@ nautilus_app_init (NautilusApp *app)
bonobo_object_construct(BONOBO_OBJECT(app), objref);
/* Init undo manager */
- nautilus_undo_manager_initialize_global_manager ();
- app->undo_manager = BONOBO_OBJECT (nautilus_undo_manager_get_undo_manager());
-
+ app->undo_manager = BONOBO_OBJECT (nautilus_undo_manager_new ());
+
+ /* Add undo manager to the app */
+ g_assert (app->undo_manager);
+ gtk_object_set_data (GTK_OBJECT (app), "NautilusUndoManager", app->undo_manager);
+
CORBA_exception_free(&ev);
}
GtkObject *
-nautilus_app_new (void)
+nautilus_app_new (void)
{
- return gtk_object_new(nautilus_app_get_type(), NULL);
+ return gtk_object_new(nautilus_app_get_type(), NULL);
}
static void
@@ -275,15 +279,15 @@ nautilus_app_destroy(GtkObject *object)
{
/*
* Shutdown preferences. This is needed so that the global preferences
- * obejct and all its allocations are freed. Not calling this function
+ * object and all its allocations are freed. Not calling this function
* would have NOT cause the user to lose preferences. The only effect
* would be to leak those objects - which would be collected at exit()
* time anyway, but it adds noice to memory profile tool runs.
*/
nautilus_global_preferences_shutdown ();
- nautilus_bookmarks_exiting();
- GTK_OBJECT_CLASS(app_parent_class)->destroy(object);
+ nautilus_bookmarks_exiting (object);
+ GTK_OBJECT_CLASS(app_parent_class)->destroy(object);
}
void
@@ -292,9 +296,9 @@ nautilus_app_startup(NautilusApp *app, const char *initial_url)
NautilusWindow *mainwin;
/* Set default configuration */
- mainwin = nautilus_app_create_window(app);
- bonobo_activate();
- nautilus_window_set_initial_state(mainwin, initial_url);
+ mainwin = nautilus_app_create_window (app);
+ bonobo_activate ();
+ nautilus_window_set_initial_state (mainwin, initial_url);
}
static void
@@ -342,18 +346,20 @@ nautilus_app_quit (void)
NautilusWindow *
nautilus_app_create_window(NautilusApp *app)
{
- GtkWidget *win = GTK_WIDGET (gtk_object_new (nautilus_window_get_type(), "app_id", "nautilus",
- "app", BONOBO_OBJECT(app), NULL));
+ GtkWidget *win;
+
+ win = GTK_WIDGET (gtk_object_new (nautilus_window_get_type(), "app", BONOBO_OBJECT(app),
+ "app_id", "nautilus", NULL));
- gtk_signal_connect(GTK_OBJECT(win), "destroy", nautilus_app_destroy_window, app);
+ gtk_signal_connect (GTK_OBJECT (win), "destroy", nautilus_app_destroy_window, app);
- /* Do not yet show the window. It will be shown later on if it can
- * successfully display its initial uri. Otherwise it will be destroyed
- * without ever having seen the light of day.
- */
+ /* Do not yet show the window. It will be shown later on if it can
+ * successfully display its initial uri. Otherwise it will be destroyed
+ * without ever having seen the light of day.
+ */
- app->windows = g_slist_prepend(app->windows, win);
+ app->windows = g_slist_prepend(app->windows, win);
- return NAUTILUS_WINDOW(win);
+ return NAUTILUS_WINDOW(win);
}
diff --git a/src/ntl-window-private.h b/src/ntl-window-private.h
index 6e0a7a997..d993d0a22 100644
--- a/src/ntl-window-private.h
+++ b/src/ntl-window-private.h
@@ -59,7 +59,7 @@ void nautilus_add_to_history_list (NautilusBookmark *bookmark);
GSList *nautilus_get_history_list (void);
void nautilus_window_add_bookmark_for_current_location (NautilusWindow *window);
-void nautilus_window_edit_bookmarks (NautilusWindow *window);
+void nautilus_window_edit_bookmarks (GtkObject *object);
void nautilus_window_initialize_menus (NautilusWindow *window);
void nautilus_window_initialize_toolbars (NautilusWindow *window);
diff --git a/src/ntl-window.c b/src/ntl-window.c
index 773634e3a..5ed1c059f 100644
--- a/src/ntl-window.c
+++ b/src/ntl-window.c
@@ -47,6 +47,7 @@
#include <libnautilus-extensions/nautilus-icon-factory.h>
#include <libnautilus-extensions/nautilus-metadata.h>
#include <libnautilus-extensions/nautilus-string.h>
+#include <libnautilus/nautilus-undo-manager.h>
#include "nautilus-zoom-control.h"
#include <ctype.h>
#include <libgnomevfs/gnome-vfs-uri.h>
@@ -356,97 +357,100 @@ zoom_out_cb (NautilusZoomControl *zoom_control,
static void
-nautilus_window_constructed(NautilusWindow *window)
+nautilus_window_constructed (NautilusWindow *window)
{
- GnomeApp *app;
- GtkWidget *location_bar_box, *statusbar;
- GtkWidget *temp_frame;
- GnomeDockItemBehavior behavior;
- int sidebar_width;
+ GnomeApp *app;
+ GtkWidget *location_bar_box, *statusbar;
+ GtkWidget *temp_frame;
+ GnomeDockItemBehavior behavior;
+ int sidebar_width;
+ NautilusUndoManager *undo_manager;
- app = GNOME_APP(window);
+ app = GNOME_APP(window);
- /* set up location bar */
+ /* Set up undo manager */
+ undo_manager = gtk_object_get_data ( GTK_OBJECT(window->app), "NautilusUndoManager");
+ g_assert (undo_manager);
+ gtk_object_set_data ( GTK_OBJECT(window), "NautilusUndoManager", undo_manager);
- location_bar_box = gtk_hbox_new(FALSE, GNOME_PAD);
- gtk_container_set_border_width(GTK_CONTAINER(location_bar_box), GNOME_PAD_SMALL);
+ /* 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->ent_uri = nautilus_location_bar_new();
- gtk_signal_connect(GTK_OBJECT(window->ent_uri), "location_changed",
+ window->ent_uri = nautilus_location_bar_new();
+ nautilus_location_bar_enable_undo ( NAUTILUS_LOCATION_BAR (window->ent_uri), undo_manager, TRUE);
+
+ gtk_signal_connect(GTK_OBJECT(window->ent_uri), "location_changed",
nautilus_window_goto_uri_cb, window);
- gtk_box_pack_start(GTK_BOX(location_bar_box), window->ent_uri, TRUE, TRUE, GNOME_PAD_SMALL);
- behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE | GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL;
- if(!gnome_preferences_get_toolbar_detachable())
- behavior |= GNOME_DOCK_ITEM_BEH_LOCKED;
- gnome_app_add_docked(app, location_bar_box, "uri-entry",
- behavior, GNOME_DOCK_TOP, 2, 0, 0);
-
- /* Option menu for content view types; it's empty here, filled in when a uri is set. */
- window->option_cvtype = gtk_option_menu_new();
- gtk_box_pack_end(GTK_BOX(location_bar_box), window->option_cvtype, FALSE, FALSE, GNOME_PAD_SMALL);
- gtk_widget_show(window->option_cvtype);
-
- /* allocate the zoom control and place on the right next to the menu */
-
- window->zoom_control = nautilus_zoom_control_new ();
- gtk_widget_show (window->zoom_control);
- gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_in", zoom_in_cb, window);
- gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_out", zoom_out_cb, window);
- gtk_box_pack_end (GTK_BOX (location_bar_box), window->zoom_control, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(location_bar_box), window->ent_uri, TRUE, TRUE, GNOME_PAD_SMALL);
+ behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE | GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL;
+ if(!gnome_preferences_get_toolbar_detachable())
+ behavior |= GNOME_DOCK_ITEM_BEH_LOCKED;
+ gnome_app_add_docked(app, location_bar_box, "uri-entry", behavior, GNOME_DOCK_TOP, 2, 0, 0);
+
+ /* Option menu for content view types; it's empty here, filled in when a uri is set. */
+ window->option_cvtype = gtk_option_menu_new();
+ gtk_box_pack_end(GTK_BOX(location_bar_box), window->option_cvtype, FALSE, FALSE, GNOME_PAD_SMALL);
+ gtk_widget_show(window->option_cvtype);
+
+ /* allocate the zoom control and place on the right next to the menu */
+ window->zoom_control = nautilus_zoom_control_new ();
+ gtk_widget_show (window->zoom_control);
+ gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_in", zoom_in_cb, window);
+ gtk_signal_connect (GTK_OBJECT (window->zoom_control), "zoom_out", zoom_out_cb, window);
+ gtk_box_pack_end (GTK_BOX (location_bar_box), window->zoom_control, FALSE, FALSE, 0);
- gtk_widget_show_all(location_bar_box);
-
- /* set up status bar */
+ gtk_widget_show_all(location_bar_box);
- gnome_app_set_statusbar(app, (statusbar = gtk_statusbar_new()));
- /* insert a little padding so text isn't jammed against frame */
- gtk_misc_set_padding(GTK_MISC ((GTK_STATUSBAR (statusbar))->label), GNOME_PAD, 0);
- window->statusbar_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "IhateGtkStatusbar");
-
- /* set up window contents and policy */
+ /* set up status bar */
+ gnome_app_set_statusbar(app, (statusbar = gtk_statusbar_new()));
+
+ /* insert a little padding so text isn't jammed against frame */
+ gtk_misc_set_padding(GTK_MISC ((GTK_STATUSBAR (statusbar))->label), GNOME_PAD, 0);
+ window->statusbar_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "IhateGtkStatusbar");
- gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
- gtk_window_set_default_size(GTK_WINDOW(window), 650, 400);
+ /* set up window contents and policy */
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 650, 400);
- window->content_hbox = gtk_hpaned_new();
- sidebar_width = nautilus_preferences_get_enum(NAUTILUS_PREFERENCES_SIDEBAR_WIDTH, 148);
- gtk_paned_set_position(GTK_PANED(window->content_hbox), sidebar_width);
+ window->content_hbox = gtk_hpaned_new();
+ sidebar_width = nautilus_preferences_get_enum(NAUTILUS_PREFERENCES_SIDEBAR_WIDTH, 148);
+ gtk_paned_set_position(GTK_PANED(window->content_hbox), sidebar_width);
- gnome_app_set_contents(app, window->content_hbox);
+ gnome_app_set_contents(app, window->content_hbox);
- /* set up the index panel in a frame */
-
- temp_frame = gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(temp_frame), GTK_SHADOW_OUT);
- gtk_widget_show(temp_frame);
+ /* set up the index panel in a frame */
+ temp_frame = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type(GTK_FRAME(temp_frame), GTK_SHADOW_OUT);
+ gtk_widget_show(temp_frame);
- window->index_panel = nautilus_index_panel_new();
- gtk_widget_show (GTK_WIDGET (window->index_panel));
- gtk_container_add(GTK_CONTAINER(temp_frame), GTK_WIDGET (window->index_panel));
-
- gtk_paned_pack1(GTK_PANED(window->content_hbox), temp_frame, FALSE, FALSE);
+ window->index_panel = nautilus_index_panel_new();
+ gtk_widget_show (GTK_WIDGET (window->index_panel));
+ gtk_container_add(GTK_CONTAINER(temp_frame), GTK_WIDGET (window->index_panel));
- gtk_widget_show_all(window->content_hbox);
+ gtk_paned_pack1(GTK_PANED(window->content_hbox), temp_frame, FALSE, FALSE);
- /* enable mouse tracking for the index panel */
- gtk_widget_add_events(GTK_WIDGET (window->index_panel), GDK_POINTER_MOTION_MASK);
+ gtk_widget_show_all(window->content_hbox);
- /* CORBA and Bonobo setup */
- window->ntl_viewwindow = impl_Nautilus_ViewWindow__create(window);
- window->uih = bonobo_ui_handler_new();
- bonobo_ui_handler_set_app(window->uih, app);
- bonobo_ui_handler_set_statusbar(window->uih, statusbar);
+ /* enable mouse tracking for the index panel */
+ gtk_widget_add_events(GTK_WIDGET (window->index_panel), GDK_POINTER_MOTION_MASK);
- /* Create menus and toolbars */
- nautilus_window_initialize_menus (window);
- nautilus_window_initialize_toolbars (window);
+ /* CORBA and Bonobo setup */
+ window->ntl_viewwindow = impl_Nautilus_ViewWindow__create(window);
+ window->uih = bonobo_ui_handler_new();
+ bonobo_ui_handler_set_app(window->uih, app);
+ bonobo_ui_handler_set_statusbar(window->uih, statusbar);
- /* Set initial sensitivity of some buttons & menu items
- * now that they're all created.
- */
- nautilus_window_allow_back(window, FALSE);
- nautilus_window_allow_forward(window, FALSE);
- nautilus_window_allow_stop(window, FALSE);
+ /* Create menus and toolbars */
+ nautilus_window_initialize_menus (window);
+ nautilus_window_initialize_toolbars (window);
+
+ /* Set initial sensitivity of some buttons & menu items
+ * now that they're all created.
+ */
+ nautilus_window_allow_back(window, FALSE);
+ nautilus_window_allow_forward(window, FALSE);
+ nautilus_window_allow_stop(window, FALSE);
}
static void
@@ -469,11 +473,12 @@ nautilus_window_set_arg (GtkObject *object,
g_assert(app->name);
g_free(app->prefix);
app->prefix = g_strconcat("/", app->name, "/", NULL);
- if(!old_app_name)
+ if(!old_app_name) {
nautilus_window_constructed(NAUTILUS_WINDOW(object));
+ }
break;
case ARG_APP:
- window->app = BONOBO_OBJECT(GTK_VALUE_OBJECT(*arg));
+ window->app = BONOBO_OBJECT(GTK_VALUE_OBJECT(*arg));
break;
case ARG_CONTENT_VIEW:
nautilus_window_real_set_content_view (window, (NautilusView *)GTK_VALUE_OBJECT(*arg));
diff --git a/src/ntl-window.h b/src/ntl-window.h
index dbebf91df..6a8e65839 100644
--- a/src/ntl-window.h
+++ b/src/ntl-window.h
@@ -149,6 +149,6 @@ void nautilus_window_allow_reload (NautilusWindow *window,
gboolean allow);
void nautilus_window_allow_stop (NautilusWindow *window,
gboolean allow);
-void nautilus_bookmarks_exiting (void);
+void nautilus_bookmarks_exiting (GtkObject *object);
#endif