1 | #include <gtk/gtk.h> |
2 | |
3 | static void |
4 | set_insensitive (GtkButton *b, GtkWidget *w) |
5 | { |
6 | gtk_widget_set_sensitive (widget: w, FALSE); |
7 | } |
8 | |
9 | static void |
10 | state_flags_changed (GtkWidget *widget) |
11 | { |
12 | GtkStateFlags flags; |
13 | const char *sep; |
14 | |
15 | g_print (format: "state changed: \n" ); |
16 | |
17 | flags = gtk_widget_get_state_flags (widget); |
18 | sep = "" ; |
19 | if (flags & GTK_STATE_FLAG_ACTIVE) |
20 | { |
21 | g_print (format: "%sactive" , sep); |
22 | sep = "|" ; |
23 | } |
24 | if (flags & GTK_STATE_FLAG_PRELIGHT) |
25 | { |
26 | g_print (format: "%sprelight" , sep); |
27 | sep = "|" ; |
28 | } |
29 | if (flags & GTK_STATE_FLAG_SELECTED) |
30 | { |
31 | g_print (format: "%sselected" , sep); |
32 | sep = "|" ; |
33 | } |
34 | if (flags & GTK_STATE_FLAG_INSENSITIVE) |
35 | { |
36 | g_print (format: "%sinsensitive" , sep); |
37 | sep = "|" ; |
38 | } |
39 | if (flags & GTK_STATE_FLAG_INCONSISTENT) |
40 | { |
41 | g_print (format: "%sinconsistent" , sep); |
42 | sep = "|" ; |
43 | } |
44 | if (flags & GTK_STATE_FLAG_FOCUSED) |
45 | { |
46 | g_print (format: "%sfocused" , sep); |
47 | sep = "|" ; |
48 | } |
49 | if (sep[0] == 0) |
50 | g_print (format: "normal" ); |
51 | g_print (format: "\n" ); |
52 | } |
53 | |
54 | int main (int argc, char *argv[]) |
55 | { |
56 | GtkWidget *window; |
57 | GtkWidget *box; |
58 | GtkWidget *bu; |
59 | GtkWidget *w, *c; |
60 | |
61 | gtk_init (); |
62 | |
63 | window = gtk_window_new (); |
64 | box = gtk_box_new (orientation: GTK_ORIENTATION_VERTICAL, spacing: 5); |
65 | gtk_window_set_child (GTK_WINDOW (window), child: box); |
66 | |
67 | w = gtk_box_new (orientation: GTK_ORIENTATION_HORIZONTAL, spacing: 15); |
68 | gtk_box_append (GTK_BOX (box), child: w); |
69 | gtk_box_append (GTK_BOX (w), child: gtk_entry_new ()); |
70 | bu = gtk_button_new_with_label (label: "Bu" ); |
71 | gtk_box_append (GTK_BOX (w), child: bu); |
72 | c = gtk_switch_new (); |
73 | gtk_switch_set_active (GTK_SWITCH (c), TRUE); |
74 | gtk_widget_set_halign (widget: c, align: GTK_ALIGN_CENTER); |
75 | gtk_widget_set_valign (widget: c, align: GTK_ALIGN_CENTER); |
76 | gtk_box_append (GTK_BOX (box), child: c); |
77 | g_signal_connect (bu, "clicked" , G_CALLBACK (set_insensitive), w); |
78 | g_signal_connect (bu, "state-flags-changed" , G_CALLBACK (state_flags_changed), NULL); |
79 | |
80 | g_object_bind_property (source: c, source_property: "active" , target: w, target_property: "sensitive" , flags: G_BINDING_BIDIRECTIONAL); |
81 | |
82 | gtk_widget_show (widget: window); |
83 | |
84 | while (TRUE) |
85 | g_main_context_iteration (NULL, TRUE); |
86 | |
87 | return 0; |
88 | } |
89 | |