1 #include <gtk/gtk.h>
2 #include <locale.h>
3 #include "gdk/gdkeventsprivate.h"
4 
5 static gboolean
pop_up(gpointer data)6 pop_up (gpointer data)
7 {
8   gtk_popover_popup (GTK_POPOVER (data));
9 
10   return G_SOURCE_REMOVE;
11 }
12 
13 static gboolean
tickle(gpointer data)14 tickle (gpointer data)
15 {
16   GtkWidget *label;
17 
18   label = gtk_widget_get_first_child (GTK_WIDGET (data));
19   gtk_widget_set_valign (label, GTK_ALIGN_START);
20 
21   return G_SOURCE_REMOVE;
22 }
23 
24 static gboolean
stop(gpointer data)25 stop (gpointer data)
26 {
27   gboolean *done = data;
28 
29   *done = TRUE;
30 
31   g_main_context_wakeup (NULL);
32 
33   return G_SOURCE_REMOVE;
34 }
35 
36 static void
test_show_popover(void)37 test_show_popover (void)
38 {
39   GtkWidget *window;
40   GtkWidget *button;
41   GtkWidget *popover;
42   gboolean done;
43 
44   window = gtk_window_new ();
45   button = gtk_menu_button_new ();
46   popover = gtk_popover_new ();
47   gtk_popover_set_child (GTK_POPOVER (popover), gtk_label_new ("Nu?"));
48   gtk_menu_button_set_popover (GTK_MENU_BUTTON (button), popover);
49   gtk_window_set_child (GTK_WINDOW (window), button);
50 
51   gtk_window_present (GTK_WINDOW (window));
52 
53   g_timeout_add (1000, pop_up, popover);
54   g_timeout_add (2000, tickle, popover);
55   done = FALSE;
56   g_timeout_add (3000, stop, &done);
57 
58   while (!done)
59     g_main_context_iteration (NULL, TRUE);
60 }
61 
62 int
main(int argc,char * argv[])63 main (int argc, char *argv[])
64 {
65   gtk_test_init (&argc, &argv);
66 
67   g_test_add_func ("/popover/show", test_show_popover);
68 
69   return g_test_run ();
70 }
71