summaryrefslogtreecommitdiff
path: root/demos
diff options
context:
space:
mode:
authorStef Walter <stef@memberwebs.com>2009-07-08 20:41:53 -0500
committerStef Walter <stef@memberwebs.com>2009-07-08 20:41:53 -0500
commiteab02f697a29f2bfd388f6318adf18e2936e7e96 (patch)
treea35e51f9844f498b8cdea61661e197a5c8aa8722 /demos
parent9ef87ea11e7d2b50d5222e5429b8a65a0f665162 (diff)
downloadgtk+-eab02f697a29f2bfd388f6318adf18e2936e7e96.tar.gz
GtkEntryBuffer holds text for GtkEntry
Adds a 'model' type buffer for GtkEntry in which the actual textual data is stored. GtkEntryBuffer can be subclassed. Among other things, this allows GtkEntry to be used for secrets that need to be stored in non-pageable memory. It also allows buffers to be shared by entries. See bug #576801.
Diffstat (limited to 'demos')
-rw-r--r--demos/gtk-demo/Makefile.am1
-rw-r--r--demos/gtk-demo/entry_buffer.c65
2 files changed, 66 insertions, 0 deletions
diff --git a/demos/gtk-demo/Makefile.am b/demos/gtk-demo/Makefile.am
index 23eed00eec..22662c43b0 100644
--- a/demos/gtk-demo/Makefile.am
+++ b/demos/gtk-demo/Makefile.am
@@ -17,6 +17,7 @@ demos = \
dialog.c \
drawingarea.c \
editable_cells.c \
+ entry_buffer.c \
entry_completion.c \
expander.c \
hypertext.c \
diff --git a/demos/gtk-demo/entry_buffer.c b/demos/gtk-demo/entry_buffer.c
new file mode 100644
index 0000000000..2be770e3bf
--- /dev/null
+++ b/demos/gtk-demo/entry_buffer.c
@@ -0,0 +1,65 @@
+/* Entry/Entry Buffer
+ *
+ * GtkEntryBuffer provides the text content in a GtkEntry.
+ *
+ */
+
+#include <gtk/gtk.h>
+
+static GtkWidget *window = NULL;
+
+GtkWidget *
+do_entry_buffer (GtkWidget *do_widget)
+{
+ GtkWidget *vbox;
+ GtkWidget *label;
+ GtkWidget *entry;
+ GtkEntryBuffer *buffer;
+
+ if (!window)
+ {
+ window = gtk_dialog_new_with_buttons ("GtkEntryBuffer",
+ GTK_WINDOW (do_widget),
+ 0,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_NONE,
+ NULL);
+ gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
+
+ g_signal_connect (window, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+ g_signal_connect (window, "destroy",
+ G_CALLBACK (gtk_widget_destroyed), &window);
+
+ vbox = gtk_vbox_new (FALSE, 5);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
+
+ label = gtk_label_new (NULL);
+ gtk_label_set_markup (GTK_LABEL (label), "Entries share a buffer. Typing in one is reflected in the other.");
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+
+ /* Create a buffer */
+ buffer = gtk_entry_buffer_new (NULL, 0);
+
+ /* Create our first entry */
+ entry = gtk_entry_new_with_buffer (buffer);
+ gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
+
+ /* Create the second entry */
+ entry = gtk_entry_new_with_buffer (buffer);
+ gtk_entry_set_visibility (GTK_ENTRY (entry), FALSE);
+ gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
+
+ g_object_unref (buffer);
+ }
+
+ if (!GTK_WIDGET_VISIBLE (window))
+ gtk_widget_show_all (window);
+ else
+ gtk_widget_destroy (window);
+
+ return window;
+}
+
+