diff options
author | Stef Walter <stef@memberwebs.com> | 2009-07-08 20:41:53 -0500 |
---|---|---|
committer | Stef Walter <stef@memberwebs.com> | 2009-07-08 20:41:53 -0500 |
commit | eab02f697a29f2bfd388f6318adf18e2936e7e96 (patch) | |
tree | a35e51f9844f498b8cdea61661e197a5c8aa8722 /demos | |
parent | 9ef87ea11e7d2b50d5222e5429b8a65a0f665162 (diff) | |
download | gtk+-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.am | 1 | ||||
-rw-r--r-- | demos/gtk-demo/entry_buffer.c | 65 |
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; +} + + |