From: Christian Hergert Date: Fri, 1 Nov 2019 18:20:22 +0000 (-0700) Subject: gtk-demo: add a demo for TextView undo/redo X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~20^2~651^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=67c0f88c00fa85bc3cc76b1d55833d028c4ad304;p=gtk4.git gtk-demo: add a demo for TextView undo/redo --- diff --git a/demos/gtk-demo/demo.gresource.xml b/demos/gtk-demo/demo.gresource.xml index a299fe9101..2a30e84349 100644 --- a/demos/gtk-demo/demo.gresource.xml +++ b/demos/gtk-demo/demo.gresource.xml @@ -221,6 +221,7 @@ spinner.c tabs.c tagged_entry.c + textundo.c textview.c textscroll.c theming_style_classes.c diff --git a/demos/gtk-demo/meson.build b/demos/gtk-demo/meson.build index a107d52b58..3d20727e6c 100644 --- a/demos/gtk-demo/meson.build +++ b/demos/gtk-demo/meson.build @@ -74,6 +74,7 @@ demos = files([ 'tabs.c', 'tagged_entry.c', 'textmask.c', + 'textundo.c', 'textview.c', 'textscroll.c', 'themes.c', 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 +#include /* 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; +}