tests/clutter/event-delivery: Flush input thread inside wait_stage_updated()

Flushing the input thread might implicitly iterate the mainloop, and thus
update the stage while still inside the clutter_test_flush_input() call.
This means the stage update has already happened when we call
wait_stage_updated(), and that's why we call clutter_stage_schedule_update()
there currently.

This clutter_stage_schedule_update() call is not necessary though, instead
we can flush the input thread from inside wait_stage_updated() after
setting was_updated to FALSE.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2792>
This commit is contained in:
Jonas Dreßler 2023-01-18 16:18:00 +01:00 committed by Marge Bot
parent 909eaa117d
commit 57ce4e04e5

View File

@ -21,11 +21,12 @@ on_event_return_stop (ClutterActor *actor,
}
static void
wait_stage_updated (ClutterStage *stage,
gboolean *was_updated)
wait_stage_updated (gboolean *was_updated)
{
*was_updated = FALSE;
clutter_stage_schedule_update (stage);
clutter_test_flush_input ();
while (!*was_updated)
g_main_context_iteration (NULL, TRUE);
}
@ -55,13 +56,11 @@ event_delivery_consecutive_touch_begin_end (void)
clutter_virtual_input_device_notify_touch_up (virtual_pointer, now_us, 0);
clutter_virtual_input_device_notify_touch_down (virtual_pointer, now_us, 0, 5, 5);
g_assert_true (!was_updated);
clutter_test_flush_input ();
wait_stage_updated (CLUTTER_STAGE (stage), &was_updated);
wait_stage_updated (&was_updated);
g_assert_cmpint (n_captured_touch_events, ==, 3);
clutter_virtual_input_device_notify_touch_up (virtual_pointer, now_us, 0);
clutter_test_flush_input ();
wait_stage_updated (CLUTTER_STAGE (stage), &was_updated);
wait_stage_updated (&was_updated);
g_assert_cmpint (n_captured_touch_events, ==, 4);
g_signal_handlers_disconnect_by_func (stage, on_event_return_stop, &n_captured_touch_events);