1 /* Spinner
2 *
3 * GtkSpinner allows to show that background activity is on-going.
4 */
5
6 #include <glib/gi18n.h>
7 #include <gtk/gtk.h>
8
9 static GtkWidget *spinner_sensitive = NULL;
10 static GtkWidget *spinner_unsensitive = NULL;
11
12 static void
on_play_clicked(GtkButton * button,gpointer user_data)13 on_play_clicked (GtkButton *button, gpointer user_data)
14 {
15 gtk_spinner_start (GTK_SPINNER (spinner_sensitive));
16 gtk_spinner_start (GTK_SPINNER (spinner_unsensitive));
17 }
18
19 static void
on_stop_clicked(GtkButton * button,gpointer user_data)20 on_stop_clicked (GtkButton *button, gpointer user_data)
21 {
22 gtk_spinner_stop (GTK_SPINNER (spinner_sensitive));
23 gtk_spinner_stop (GTK_SPINNER (spinner_unsensitive));
24 }
25
26 GtkWidget *
do_spinner(GtkWidget * do_widget)27 do_spinner (GtkWidget *do_widget)
28 {
29 static GtkWidget *window = NULL;
30 GtkWidget *content_area;
31 GtkWidget *vbox;
32 GtkWidget *hbox;
33 GtkWidget *button;
34 GtkWidget *spinner;
35
36 if (!window)
37 {
38 window = gtk_dialog_new_with_buttons ("Spinner",
39 GTK_WINDOW (do_widget),
40 0,
41 _("_Close"),
42 GTK_RESPONSE_NONE,
43 NULL);
44 gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
45
46 g_signal_connect (window, "response",
47 G_CALLBACK (gtk_window_destroy), NULL);
48 g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
49
50 content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
51
52 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
53 gtk_widget_set_margin_start (vbox, 5);
54 gtk_widget_set_margin_end (vbox, 5);
55 gtk_widget_set_margin_top (vbox, 5);
56 gtk_widget_set_margin_bottom (vbox, 5);
57 gtk_box_append (GTK_BOX (content_area), vbox);
58
59 /* Sensitive */
60 hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
61 spinner = gtk_spinner_new ();
62 gtk_box_append (GTK_BOX (hbox), spinner);
63 gtk_box_append (GTK_BOX (hbox), gtk_entry_new ());
64 gtk_box_append (GTK_BOX (vbox), hbox);
65 spinner_sensitive = spinner;
66
67 /* Disabled */
68 hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
69 spinner = gtk_spinner_new ();
70 gtk_box_append (GTK_BOX (hbox), spinner);
71 gtk_box_append (GTK_BOX (hbox), gtk_entry_new ());
72 gtk_box_append (GTK_BOX (vbox), hbox);
73 spinner_unsensitive = spinner;
74 gtk_widget_set_sensitive (hbox, FALSE);
75
76 button = gtk_button_new_with_label (_("Play"));
77 g_signal_connect (G_OBJECT (button), "clicked",
78 G_CALLBACK (on_play_clicked), spinner);
79 gtk_box_append (GTK_BOX (vbox), button);
80
81 button = gtk_button_new_with_label (_("Stop"));
82 g_signal_connect (G_OBJECT (button), "clicked",
83 G_CALLBACK (on_stop_clicked), spinner);
84 gtk_box_append (GTK_BOX (vbox), button);
85
86 /* Start by default to test for:
87 * https://bugzilla.gnome.org/show_bug.cgi?id=598496 */
88 on_play_clicked (NULL, NULL);
89 }
90
91 if (!gtk_widget_get_visible (window))
92 gtk_widget_show (window);
93 else
94 gtk_window_destroy (GTK_WINDOW (window));
95
96 return window;
97 }
98