1#include <gtk/gtk.h>
2
3static void
4set_insensitive (GtkButton *b, GtkWidget *w)
5{
6 gtk_widget_set_sensitive (widget: w, FALSE);
7}
8
9static void
10state_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
54int 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

source code of gtk/tests/testsensitive.c