]> Pileus Git - ~andy/gtk/blob - examples/entry/entry.c
2d06f7192de640748539902c4105fcdfb781b119
[~andy/gtk] / examples / entry / entry.c
1
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <gtk/gtk.h>
5
6 static void enter_callback( GtkWidget *widget,
7                             GtkWidget *entry )
8 {
9   const gchar *entry_text;
10   entry_text = gtk_entry_get_text (GTK_ENTRY (entry));
11   printf ("Entry contents: %s\n", entry_text);
12 }
13
14 static void entry_toggle_editable( GtkWidget *checkbutton,
15                                    GtkWidget *entry )
16 {
17   gtk_editable_set_editable (GTK_EDITABLE (entry),
18                              GTK_TOGGLE_BUTTON (checkbutton)->active);
19 }
20
21 static void entry_toggle_visibility( GtkWidget *checkbutton,
22                                      GtkWidget *entry )
23 {
24   gtk_entry_set_visibility (GTK_ENTRY (entry),
25                             GTK_TOGGLE_BUTTON (checkbutton)->active);
26 }
27
28 int main( int   argc,
29           char *argv[] )
30 {
31
32     GtkWidget *window;
33     GtkWidget *vbox, *hbox;
34     GtkWidget *entry;
35     GtkWidget *button;
36     GtkWidget *check;
37     gint tmp_pos;
38
39     gtk_init (&argc, &argv);
40
41     /* create a new window */
42     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
43     gtk_widget_set_size_request (GTK_WIDGET (window), 200, 100);
44     gtk_window_set_title (GTK_WINDOW (window), "GTK Entry");
45     g_signal_connect (window, "destroy",
46                       G_CALLBACK (gtk_main_quit), NULL);
47     g_signal_connect_swapped (window, "delete-event",
48                               G_CALLBACK (gtk_widget_destroy),
49                               window);
50
51     vbox = gtk_vbox_new (FALSE, 0);
52     gtk_container_add (GTK_CONTAINER (window), vbox);
53     gtk_widget_show (vbox);
54
55     entry = gtk_entry_new ();
56     gtk_entry_set_max_length (GTK_ENTRY (entry), 50);
57     g_signal_connect (entry, "activate",
58                       G_CALLBACK (enter_callback),
59                       (gpointer) entry);
60     gtk_entry_set_text (GTK_ENTRY (entry), "hello");
61     tmp_pos = GTK_ENTRY (entry)->text_length;
62     gtk_editable_insert_text (GTK_EDITABLE (entry), " world", -1, &tmp_pos);
63     gtk_editable_select_region (GTK_EDITABLE (entry),
64                                 0, GTK_ENTRY (entry)->text_length);
65     gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0);
66     gtk_widget_show (entry);
67
68     hbox = gtk_hbox_new (FALSE, 0);
69     gtk_container_add (GTK_CONTAINER (vbox), hbox);
70     gtk_widget_show (hbox);
71
72     check = gtk_check_button_new_with_label ("Editable");
73     gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);
74     g_signal_connect (check, "toggled",
75                       G_CALLBACK (entry_toggle_editable), (gpointer) entry);
76     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
77     gtk_widget_show (check);
78
79     check = gtk_check_button_new_with_label ("Visible");
80     gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);
81     g_signal_connect (check, "toggled",
82                       G_CALLBACK (entry_toggle_visibility), (gpointer) entry);
83     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
84     gtk_widget_show (check);
85
86     button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
87     g_signal_connect_swapped (button, "clicked",
88                               G_CALLBACK (gtk_widget_destroy),
89                               window);
90     gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
91     gtk_widget_set_can_default (button, TRUE);
92     gtk_widget_grab_default (button);
93     gtk_widget_show (button);
94
95     gtk_widget_show (window);
96
97     gtk_main();
98
99     return 0;
100 }