summaryrefslogtreecommitdiff
path: root/libnautilus-extensions/nautilus-entry.c
diff options
context:
space:
mode:
authorGene Ragan <gzr@src.gnome.org>2000-06-12 20:29:32 +0000
committerGene Ragan <gzr@src.gnome.org>2000-06-12 20:29:32 +0000
commit822c600faefc1d8f1e38c846178683a266ff1556 (patch)
tree6cbd881a196964002e32e6151151c121cb72ff61 /libnautilus-extensions/nautilus-entry.c
parent820f06eb6d24d77955b866d4dfef97950eff3c19 (diff)
downloadnautilus-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.c146
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);
}