API: Add gtk_test_widget_wait_for_draw ()
See docs and following commits for what it's supposed to do. Let's hope it fixes the flakiness in tests.
This commit is contained in:
parent
51e238653d
commit
8616dbbad3
@ -116,6 +116,45 @@ test_find_widget_input_windows (GtkWidget *widget,
|
|||||||
return g_slist_reverse (matches);
|
return g_slist_reverse (matches);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
quit_main_loop_callback (GtkWidget *widget,
|
||||||
|
GdkFrameClock *frame_clock,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
gtk_main_quit ();
|
||||||
|
|
||||||
|
return G_SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_test_widget_wait_for_draw:
|
||||||
|
* @widget: the widget to wait for
|
||||||
|
*
|
||||||
|
* Enters the main loop and waits for @widget to be "drawn". In this
|
||||||
|
* context that means it waits for the frame clock of @widget to have
|
||||||
|
* run a full styling, layout and drawing cycle.
|
||||||
|
*
|
||||||
|
* This function is intended to be used for syncing with actions that
|
||||||
|
* depend on @widget relayouting or on interaction with the display
|
||||||
|
* server.
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gtk_test_widget_wait_for_draw (GtkWidget *widget)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||||
|
|
||||||
|
/* We can do this here because the whole tick procedure does not
|
||||||
|
* reenter the main loop. Otherwise we'd need to manually get the
|
||||||
|
* frame clock and connect to the after-paint signal.
|
||||||
|
*/
|
||||||
|
gtk_widget_add_tick_callback (widget,
|
||||||
|
quit_main_loop_callback,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
gtk_main ();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gtk_test_widget_send_key:
|
* gtk_test_widget_send_key:
|
||||||
* @widget: Widget to generate a key press and release on.
|
* @widget: Widget to generate a key press and release on.
|
||||||
|
@ -61,6 +61,8 @@ GDK_AVAILABLE_IN_ALL
|
|||||||
gboolean gtk_test_spin_button_click (GtkSpinButton *spinner,
|
gboolean gtk_test_spin_button_click (GtkSpinButton *spinner,
|
||||||
guint button,
|
guint button,
|
||||||
gboolean upwards);
|
gboolean upwards);
|
||||||
|
GDK_AVAILABLE_IN_3_10
|
||||||
|
void gtk_test_widget_wait_for_draw (GtkWidget *widget);
|
||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
gboolean gtk_test_widget_click (GtkWidget *widget,
|
gboolean gtk_test_widget_click (GtkWidget *widget,
|
||||||
guint button,
|
guint button,
|
||||||
|
Loading…
Reference in New Issue
Block a user