mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 13:41:07 +00:00
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);
|
||||
}
|
||||
|
||||
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:
|
||||
* @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,
|
||||
guint button,
|
||||
gboolean upwards);
|
||||
GDK_AVAILABLE_IN_3_10
|
||||
void gtk_test_widget_wait_for_draw (GtkWidget *widget);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gboolean gtk_test_widget_click (GtkWidget *widget,
|
||||
guint button,
|
||||
|
Loading…
Reference in New Issue
Block a user