diff options
author | Christian Hergert <chergert@redhat.com> | 2019-11-01 11:20:22 -0700 |
---|---|---|
committer | Christian Hergert <chergert@redhat.com> | 2019-11-05 10:27:29 -0800 |
commit | 67c0f88c00fa85bc3cc76b1d55833d028c4ad304 (patch) | |
tree | 48b454c96a3dc253f9ca0f7e3f398d4d07bb4ec1 /demos/gtk-demo/textundo.c | |
parent | e93408e96285c0d91d0c288b2077d70eb6723b95 (diff) | |
download | gtk+-67c0f88c00fa85bc3cc76b1d55833d028c4ad304.tar.gz |
gtk-demo: add a demo for TextView undo/redo
Diffstat (limited to 'demos/gtk-demo/textundo.c')
-rw-r--r-- | demos/gtk-demo/textundo.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/demos/gtk-demo/textundo.c b/demos/gtk-demo/textundo.c new file mode 100644 index 0000000000..fe057f00f3 --- /dev/null +++ b/demos/gtk-demo/textundo.c @@ -0,0 +1,71 @@ +/* Text View/Undo and Redo + * + * The GtkTextView supports undo and redo through the use of a + * GtkTextBuffer. You can enable or disable undo support using + * gtk_text_buffer_set_enable_undo(). + * + * Use Primary+Z to undo and Primary+Shift+Z or Primary+Y to + * redo previously undone operations. + */ + +#include <gtk/gtk.h> +#include <stdlib.h> /* for exit() */ + +GtkWidget * +do_textundo (GtkWidget *do_widget) +{ + static GtkWidget *window = NULL; + + if (!window) + { + GtkWidget *view; + GtkWidget *sw; + GtkTextBuffer *buffer; + GtkTextIter iter; + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_display (GTK_WINDOW (window), + gtk_widget_get_display (do_widget)); + gtk_window_set_default_size (GTK_WINDOW (window), + 450, 450); + + g_signal_connect (window, "destroy", + G_CALLBACK (gtk_widget_destroyed), &window); + + gtk_window_set_title (GTK_WINDOW (window), "TextView Undo"); + + view = gtk_text_view_new (); + gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD); + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); + gtk_text_buffer_set_enable_undo (buffer, TRUE); + + /* this text cannot be undone */ + gtk_text_buffer_begin_irreversible_action (buffer); + gtk_text_buffer_get_start_iter (buffer, &iter); + gtk_text_buffer_insert (buffer, &iter, + "Type to add more text.\n" + "Use Primary+Z to undo and Primary+Shift+Z to redo a previously undone action.\n" + "\n", + -1); + gtk_text_buffer_end_irreversible_action (buffer); + + sw = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_container_add (GTK_CONTAINER (window), sw); + gtk_container_add (GTK_CONTAINER (sw), view); + } + + if (!gtk_widget_get_visible (window)) + { + gtk_widget_show (window); + } + else + { + gtk_widget_destroy (window); + window = NULL; + } + + return window; +} |