]> Pileus Git - ~andy/gtk/blob - demos/gtk-demo/infobar.c
Silence compiler warnings
[~andy/gtk] / demos / gtk-demo / infobar.c
1 /* Info bar
2  *
3  * Info bar widgets are used to report important messages to the user.
4  */
5
6 #include <gtk/gtk.h>
7
8 static GtkWidget *window = NULL;
9
10 static void
11 on_bar_response (GtkInfoBar *info_bar,
12                  gint        response_id,
13                  gpointer    user_data)
14 {
15   GtkWidget *dialog;
16
17   dialog = gtk_message_dialog_new (GTK_WINDOW (window),
18                                    GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
19                                    GTK_MESSAGE_INFO,
20                                    GTK_BUTTONS_OK,
21                                    "You clicked a button on an info bar");
22   gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
23                                             "Your response has id %d", response_id);
24
25   g_signal_connect_swapped (dialog,
26                             "response",
27                             G_CALLBACK (gtk_widget_destroy),
28                             dialog);
29
30   gtk_widget_show_all (dialog);
31 }
32
33 GtkWidget *
34 do_infobar (GtkWidget *do_widget)
35 {
36   GtkWidget *frame;
37   GtkWidget *bar;
38   GtkWidget *vbox;
39   GtkWidget *vbox2;
40   GtkWidget *label;
41
42   if (!window)
43     {
44       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
45       gtk_window_set_screen (GTK_WINDOW (window),
46                              gtk_widget_get_screen (do_widget));
47       gtk_window_set_title (GTK_WINDOW (window), "Info Bars");
48
49       g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window);
50       gtk_container_set_border_width (GTK_CONTAINER (window), 8);
51
52       vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
53       gtk_container_add (GTK_CONTAINER (window), vbox);
54
55       bar = gtk_info_bar_new ();
56       gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
57       gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_INFO);
58       label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_INFO");
59       gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
60
61       bar = gtk_info_bar_new ();
62       gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
63       gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_WARNING);
64       label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_WARNING");
65       gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
66
67       bar = gtk_info_bar_new_with_buttons (GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
68       g_signal_connect (bar, "response", G_CALLBACK (on_bar_response), window);
69       gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
70       gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_QUESTION);
71       label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_QUESTION");
72       gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
73
74       bar = gtk_info_bar_new ();
75       gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
76       gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_ERROR);
77       label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_ERROR");
78       gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
79
80       bar = gtk_info_bar_new ();
81       gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
82       gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_OTHER);
83       label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_OTHER");
84       gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
85
86       frame = gtk_frame_new ("Info bars");
87       gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 8);
88
89       vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
90       gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
91       gtk_container_add (GTK_CONTAINER (frame), vbox2);
92
93       /* Standard message dialog */
94       label = gtk_label_new ("An example of different info bars");
95       gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
96     }
97
98   if (!gtk_widget_get_visible (window))
99     {
100       gtk_widget_show_all (window);
101     }
102   else
103     {
104       gtk_widget_destroy (window);
105       window = NULL;
106     }
107
108   return window;
109 }