diff options
Diffstat (limited to 'tests/testpopup.c')
-rw-r--r-- | tests/testpopup.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/testpopup.c b/tests/testpopup.c new file mode 100644 index 0000000000..cd82468c49 --- /dev/null +++ b/tests/testpopup.c @@ -0,0 +1,68 @@ +#include <gtk/gtk.h> + +static gboolean +draw_popup (GtkWidget *widget, + cairo_t *cr, + gpointer data) +{ + cairo_set_source_rgb (cr, 1, 0, 0); + cairo_paint (cr); + + return FALSE; +} + +static gboolean +place_popup (GtkWidget *parent, + GdkEvent *event, + GtkWidget *popup) +{ + GdkEventMotion *ev_motion = (GdkEventMotion *) event; + gint width, height; + + gtk_window_get_size (GTK_WINDOW (popup), &width, &height); + gtk_window_move (GTK_WINDOW (popup), + (int) ev_motion->x_root - width / 2, + (int) ev_motion->y_root - height / 2); + + return FALSE; +} + +static gboolean +on_map_event (GtkWidget *parent, + GdkEvent *event, + gpointer data) +{ + GtkWidget *popup; + + popup = gtk_window_new (GTK_WINDOW_POPUP); + + gtk_widget_set_size_request (GTK_WIDGET (popup), 20, 20); + gtk_widget_set_app_paintable (GTK_WIDGET (popup), TRUE); + gtk_window_set_transient_for (GTK_WINDOW (popup), GTK_WINDOW (parent)); + g_signal_connect (popup, "draw", G_CALLBACK (draw_popup), NULL); + g_signal_connect (parent, "motion-notify-event", G_CALLBACK (place_popup), popup); + + gtk_widget_show (popup); + + return FALSE; +} + +int +main (int argc, char *argv[]) +{ + GtkWidget *window; + + gtk_init (&argc, &argv); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + + gtk_widget_set_events (window, GDK_POINTER_MOTION_MASK); + g_signal_connect (window, "destroy", gtk_main_quit, NULL); + g_signal_connect (window, "map-event", G_CALLBACK (on_map_event), NULL); + + gtk_widget_show (window); + + gtk_main (); + + return 0; +} |