diff options
author | Gene Ragan <gzr@src.gnome.org> | 2000-06-12 20:29:32 +0000 |
---|---|---|
committer | Gene Ragan <gzr@src.gnome.org> | 2000-06-12 20:29:32 +0000 |
commit | 822c600faefc1d8f1e38c846178683a266ff1556 (patch) | |
tree | 6cbd881a196964002e32e6151151c121cb72ff61 /libnautilus-extensions/nautilus-entry.c | |
parent | 820f06eb6d24d77955b866d4dfef97950eff3c19 (diff) | |
download | nautilus-822c600faefc1d8f1e38c846178683a266ff1556.tar.gz |
New file and functions to handle undo in NautilusEntry and GtkEditables.
* libnautilus-extensions/nautilus-undo-signal-handlers.c:
* libnautilus-extensions/nautilus-undo-signal-handlers.h:
(nautilus_entry_user_changed_callback),
(nautilus_undo_setup_nautilus_entry_for_undo),
(nautilus_undo_teardown_nautilus_entry_for_undo),
(free_editable_undo_data), (free_editable_object_data),
(editable_insert_text_callback), (editable_delete_text_callback),
(editable_register_edit_undo),
(nautilus_undo_setup_editable_for_undo),
(nautilus_undo_teardown_editable_for_undo),
(restore_editable_from_undo_snapshot_callback),
(editable_key_press_event), (nautilus_undo_editable_set_undo_key):
New file and functions to handle undo in NautilusEntry and
GtkEditables. This file is intended to contain signal handlers
that enable undo for a variety of GTK widgets. Calling a
setup_for_undo function will prepare the widget to handle
undo functionality.
* libnautilus-extensions/Makefile.am:
Added entries for new files nautilus-undo-signal-handlers.c
and nautilus-undo-signal-handlers.h
* components/notes/nautilus-notes.c: (make_notes_view):
Fixed bug #973. Add undo to notes component.
* components/websearch/ntl-web-search.c: (make_obj):
Changed to use new undo signal handlers.
* libnautilus-extensions/nautilus-entry.c:
(nautilus_entry_initialize), (nautilus_entry_key_press),
(nautilus_entry_set_text), (nautilus_entry_delete_text):
Removed old undo code that had been rendered obsolete by the
new signal handlers mentioned above.
* src/nautilus-bookmarks-window.c: (create_bookmarks_window):
Changed to use new undo signal handlers.
----------------------------------
Diffstat (limited to 'libnautilus-extensions/nautilus-entry.c')
-rw-r--r-- | libnautilus-extensions/nautilus-entry.c | 146 |
1 files changed, 5 insertions, 141 deletions
diff --git a/libnautilus-extensions/nautilus-entry.c b/libnautilus-extensions/nautilus-entry.c index 99616216c..7177ef141 100644 --- a/libnautilus-extensions/nautilus-entry.c +++ b/libnautilus-extensions/nautilus-entry.c @@ -30,29 +30,24 @@ #include "nautilus-gtk-macros.h" #include <gdk/gdkkeysyms.h> +#include <gtk/gtksignal.h> #include <gtk/gtkmain.h> #include <gtk/gtkwidget.h> #include <libgnome/gnome-defs.h> #include <libgnome/gnome-i18n.h> -#include <libnautilus/nautilus-undo.h> +#include <libnautilus-extensions/nautilus-undo-signal-handlers.h> #include <orb/orbit.h> + enum { USER_CHANGED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL]; -typedef struct -{ - char *undo_text; - gint position; -} NautilusEntryUndoData; - - static void nautilus_entry_initialize (NautilusEntry *entry); static void nautilus_entry_initialize_class (NautilusEntryClass *class); static void nautilus_entry_destroy (GtkObject *object); @@ -66,13 +61,6 @@ static void nautilus_entry_delete_text (GtkEditable *editable, gint start_pos, gint end_pos); -static void user_changed_callback (NautilusEntry *entry); - -/* Undo callbacks */ -static void register_edit_undo (NautilusEntry *entry); -static void restore_from_undo_snapshot_callback (GtkObject *target, gpointer callback_data); - - NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusEntry, nautilus_entry, GTK_TYPE_ENTRY) static void @@ -110,11 +98,7 @@ nautilus_entry_initialize (NautilusEntry *entry) { entry->user_edit = TRUE; - gtk_signal_connect (GTK_OBJECT (entry), - "user_changed", - GTK_SIGNAL_FUNC (user_changed_callback), - NULL); - + nautilus_undo_setup_nautilus_entry_for_undo (entry); } GtkWidget* @@ -153,15 +137,6 @@ nautilus_entry_key_press (GtkWidget *widget, GdkEventKey *event) case GDK_KP_Enter: gtk_widget_activate (widget); return TRUE; - - /* Undo */ - case 'z': - if ((event->state & GDK_CONTROL_MASK) != 0 - && entry->handle_undo_key) { - nautilus_undo (GTK_OBJECT (widget)); - return FALSE; - } - break; default: break; @@ -230,17 +205,10 @@ nautilus_entry_select_all_at_idle (NautilusEntry *entry) void nautilus_entry_set_text (NautilusEntry *entry, const gchar *text) { - gboolean val; - entry->user_edit = FALSE; - val = entry->undo_registered; - entry->undo_registered = TRUE; - gtk_entry_set_text ( GTK_ENTRY (entry), text); - - entry->undo_registered = val; - + entry->user_edit = TRUE; } @@ -276,108 +244,4 @@ nautilus_entry_delete_text (GtkEditable *editable, gint start_pos, gint end_pos) NAUTILUS_CALL_PARENT_CLASS (GTK_EDITABLE_CLASS, delete_text, (editable, start_pos, end_pos)); -} - -/* free_undo_data - * - * Clean up routine to free entry undo data - */ - -static void -free_undo_data (gpointer data) -{ - NautilusEntryUndoData *undo_data; - - undo_data = (NautilusEntryUndoData *) data; - - g_free (undo_data->undo_text); - g_free (undo_data); -} - -/* save_undo_snapshot_callback - * - * Get text at start of edit operation and store in undo data as - * string with a key of "undo_text". - */ -static void -register_edit_undo (NautilusEntry *entry) -{ - NautilusEntryUndoData *undo_data; - - if (entry->undo_registered) { - return; - } - - undo_data = g_new (NautilusEntryUndoData, 1); - undo_data->undo_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); - undo_data->position = gtk_editable_get_position (GTK_EDITABLE (entry)); - entry->undo_registered = TRUE; - - nautilus_undo_register - (GTK_OBJECT (entry), - restore_from_undo_snapshot_callback, - undo_data, - (GDestroyNotify) free_undo_data, - _("Edit"), - _("Undo Edit"), - _("Undo the edit"), - _("Redo Edit"), - _("Redo the edit")); -} - - -/* restore_from_undo_snapshot_callback - * - * Restore edited text. - */ -static void -restore_from_undo_snapshot_callback (GtkObject *target, gpointer callback_data) -{ - NautilusEntry *entry; - GtkWindow *window; - NautilusEntryUndoData *undo_data; - - entry = NAUTILUS_ENTRY (target); - undo_data = (NautilusEntryUndoData *) callback_data; - - /* Reset the registered flag so we get a new item for future editing. */ - entry->undo_registered = FALSE; - - /* Register a new undo transaction for redo. */ - register_edit_undo (entry); - - /* Restore the text. */ - gtk_entry_set_text (GTK_ENTRY (entry), undo_data->undo_text); - - /* Set focus to widget */ - window = GTK_WINDOW (gtk_widget_get_toplevel ( GTK_WIDGET (target))); - gtk_window_set_focus (window, GTK_WIDGET (entry)); - - /* We have to do this call, because th eprevious call selects all text */ - gtk_editable_select_region (GTK_EDITABLE (entry), 0, 0); - - /* Set the i-beam to the end of the text */ - gtk_editable_set_position ( GTK_EDITABLE (target), undo_data->position); - - /* Reset the registered flag so we get a new item for future editing. */ - entry->undo_registered = FALSE; -} - -/* nautilus_entry_enable_undo_key - * - * Allow the use of ctrl-z from within widget. This should only be - * set if there is no menu bar to use to undo the widget. - */ -void -nautilus_entry_set_undo_key (NautilusEntry *entry, gboolean value) -{ - entry->handle_undo_key = value; -} - - -static void -user_changed_callback (NautilusEntry *entry) -{ - /* Register undo transaction */ - register_edit_undo (entry); } |