gtk-demo: add an undo demo for GtkEntry
authorChristian Hergert <chergert@redhat.com>
Fri, 1 Nov 2019 18:20:02 +0000 (11:20 -0700)
committerChristian Hergert <chergert@redhat.com>
Tue, 5 Nov 2019 18:27:29 +0000 (10:27 -0800)
demos/gtk-demo/demo.gresource.xml
demos/gtk-demo/entry_undo.c [new file with mode: 0644]
demos/gtk-demo/meson.build

index 625ecac18a3ad53dbb7b0f43d5352679a19c33b3..a299fe91015d94169ee1d23740ce4fb7d5c5e97c 100644 (file)
     <file>editable_cells.c</file>
     <file>entry_buffer.c</file>
     <file>entry_completion.c</file>
+    <file>entry_undo.c</file>
     <file>expander.c</file>
     <file>filtermodel.c</file>
     <file>fishbowl.c</file>
diff --git a/demos/gtk-demo/entry_undo.c b/demos/gtk-demo/entry_undo.c
new file mode 100644 (file)
index 0000000..e94aefd
--- /dev/null
@@ -0,0 +1,52 @@
+/* Entry/Entry Undo
+ *
+ * GtkEntry can provide basic Undo/Redo support using standard keyboard
+ * accelerators such as Primary+z to undo and Primary+Shift+z to redo.
+ * Additionally, Primary+y can be used to redo.
+ *
+ * Use gtk_entry_set_enable_undo() to enable undo/redo support.
+ */
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+GtkWidget *
+do_entry_undo (GtkWidget *do_widget)
+{
+  static GtkWidget *window = NULL;
+  GtkWidget *vbox;
+  GtkWidget *label;
+  GtkWidget *entry;
+
+  if (!window)
+    {
+      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_display (GTK_WINDOW (window),
+                              gtk_widget_get_display (do_widget));
+      gtk_window_set_title (GTK_WINDOW (window), "Entry Undo");
+      gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
+      g_signal_connect (window, "destroy",
+                        G_CALLBACK (gtk_widget_destroyed), &window);
+
+      vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
+      g_object_set (vbox, "margin", 5, NULL);
+      gtk_container_add (GTK_CONTAINER (window), vbox);
+
+      label = gtk_label_new (NULL);
+      gtk_label_set_markup (GTK_LABEL (label),
+                            "Use Primary+z or Primary+Shift+z to undo or redo changes");
+      gtk_container_add (GTK_CONTAINER (vbox), label);
+
+      /* Create our entry */
+      entry = gtk_entry_new ();
+      gtk_editable_set_enable_undo (GTK_EDITABLE (entry), TRUE);
+      gtk_container_add (GTK_CONTAINER (vbox), entry);
+    }
+
+  if (!gtk_widget_get_visible (window))
+    gtk_widget_show (window);
+  else
+    gtk_widget_destroy (window);
+
+  return window;
+}
index c021f9f60aeb613da40d520b204f60dbf37fcf2e..a107d52b58c864d6c688cdd000e39355149f790e 100644 (file)
@@ -24,6 +24,7 @@ demos = files([
   'editable_cells.c',
   'entry_buffer.c',
   'entry_completion.c',
+  'entry_undo.c',
   'expander.c',
   'filtermodel.c',
   'fishbowl.c',