]> Pileus Git - ~andy/gtk/blob - demos/gtk-demo/spinner.c
Deprecate widget flag: GTK_WIDGET_VISIBLE
[~andy/gtk] / demos / gtk-demo / spinner.c
1 /* Spinner
2  *
3  * GtkSpinner allows to show that background activity is on-going.
4  *
5  */
6
7 #include <gtk/gtk.h>
8
9 static GtkWidget *window = NULL;
10 static GtkWidget *spinner_sensitive = NULL;
11 static GtkWidget *spinner_unsensitive = NULL;
12
13 static void
14 on_play_clicked (GtkButton *button, gpointer user_data)
15 {
16   gtk_spinner_start (GTK_SPINNER (spinner_sensitive));
17   gtk_spinner_start (GTK_SPINNER (spinner_unsensitive));
18 }
19
20 static void
21 on_stop_clicked (GtkButton *button, gpointer user_data)
22 {
23   gtk_spinner_stop (GTK_SPINNER (spinner_sensitive));
24   gtk_spinner_stop (GTK_SPINNER (spinner_unsensitive));
25 }
26
27 GtkWidget *
28 do_spinner (GtkWidget *do_widget)
29 {
30   GtkWidget *vbox;
31   GtkWidget *hbox;
32   GtkWidget *button;
33   GtkWidget *spinner;
34
35   if (!window)
36   {
37     window = gtk_dialog_new_with_buttons ("GtkSpinner",
38                                           GTK_WINDOW (do_widget),
39                                           0,
40                                           GTK_STOCK_CLOSE,
41                                           GTK_RESPONSE_NONE,
42                                           NULL);
43     gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
44
45     g_signal_connect (window, "response",
46                       G_CALLBACK (gtk_widget_destroy), NULL);
47     g_signal_connect (window, "destroy",
48                       G_CALLBACK (gtk_widget_destroyed), &window);
49
50     vbox = gtk_vbox_new (FALSE, 5);
51     gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox, TRUE, TRUE, 0);
52     gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
53
54     /* Sensitive */
55     hbox = gtk_hbox_new (FALSE, 5);
56     spinner = gtk_spinner_new ();
57     gtk_container_add (GTK_CONTAINER (hbox), spinner);
58     gtk_container_add (GTK_CONTAINER (hbox), gtk_entry_new ());
59     gtk_container_add (GTK_CONTAINER (vbox), hbox);
60     spinner_sensitive = spinner;
61
62     /* Disabled */
63     hbox = gtk_hbox_new (FALSE, 5);
64     spinner = gtk_spinner_new ();
65     gtk_container_add (GTK_CONTAINER (hbox), spinner);
66     gtk_container_add (GTK_CONTAINER (hbox), gtk_entry_new ());
67     gtk_container_add (GTK_CONTAINER (vbox), hbox);
68     spinner_unsensitive = spinner;
69     gtk_widget_set_sensitive (hbox, FALSE);
70
71     button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PLAY);
72     g_signal_connect (G_OBJECT (button), "clicked",
73                       G_CALLBACK (on_play_clicked), spinner);
74     gtk_container_add (GTK_CONTAINER (vbox), button);
75
76     button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_STOP);
77     g_signal_connect (G_OBJECT (button), "clicked",
78                       G_CALLBACK (on_stop_clicked), spinner);
79     gtk_container_add (GTK_CONTAINER (vbox), button);
80
81     /* Start by default to test for:
82      * https://bugzilla.gnome.org/show_bug.cgi?id=598496 */
83     on_play_clicked (NULL, NULL);
84   }
85
86   if (!gtk_widget_get_visible (window))
87     gtk_widget_show_all (window);
88   else
89     gtk_widget_destroy (window);
90
91   return window;
92 }
93
94