1 | /* Entry/Undo and Redo |
2 | * |
3 | * GtkEntry can provide basic Undo/Redo support using standard keyboard |
4 | * accelerators such as Control+z to undo and Control+Shift+z to redo. |
5 | * Additionally, Control+y can be used to redo. |
6 | * |
7 | * Use gtk_entry_set_enable_undo() to enable undo/redo support. |
8 | */ |
9 | |
10 | #include <glib/gi18n.h> |
11 | #include <gtk/gtk.h> |
12 | |
13 | GtkWidget * |
14 | do_entry_undo (GtkWidget *do_widget) |
15 | { |
16 | static GtkWidget *window = NULL; |
17 | GtkWidget *vbox; |
18 | GtkWidget *label; |
19 | GtkWidget *entry; |
20 | |
21 | if (!window) |
22 | { |
23 | window = gtk_window_new (); |
24 | gtk_window_set_display (GTK_WINDOW (window), |
25 | display: gtk_widget_get_display (widget: do_widget)); |
26 | gtk_window_set_title (GTK_WINDOW (window), title: "Undo and Redo" ); |
27 | gtk_window_set_resizable (GTK_WINDOW (window), FALSE); |
28 | g_object_add_weak_pointer (G_OBJECT (window), weak_pointer_location: (gpointer *)&window); |
29 | |
30 | vbox = gtk_box_new (orientation: GTK_ORIENTATION_VERTICAL, spacing: 12); |
31 | gtk_widget_set_margin_start (widget: vbox, margin: 18); |
32 | gtk_widget_set_margin_end (widget: vbox, margin: 18); |
33 | gtk_widget_set_margin_top (widget: vbox, margin: 18); |
34 | gtk_widget_set_margin_bottom (widget: vbox, margin: 18); |
35 | gtk_window_set_child (GTK_WINDOW (window), child: vbox); |
36 | |
37 | label = gtk_label_new (NULL); |
38 | gtk_label_set_markup (GTK_LABEL (label), |
39 | str: "Use Control+z or Control+Shift+z to undo or redo changes" ); |
40 | gtk_box_append (GTK_BOX (vbox), child: label); |
41 | |
42 | /* Create our entry */ |
43 | entry = gtk_entry_new (); |
44 | gtk_editable_set_enable_undo (GTK_EDITABLE (entry), TRUE); |
45 | gtk_box_append (GTK_BOX (vbox), child: entry); |
46 | } |
47 | |
48 | if (!gtk_widget_get_visible (widget: window)) |
49 | gtk_widget_show (widget: window); |
50 | else |
51 | gtk_window_destroy (GTK_WINDOW (window)); |
52 | |
53 | return window; |
54 | } |
55 | |