From 822ea67358729e11bbd7c5940849f34f3bbf20a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Sat, 25 Nov 2023 12:26:32 +0100 Subject: [PATCH] tests/utils: Add helper for waiting for monitor reconfigurations This is useful after having removed a virtual monitor, which will soon reconfigure in an idle callback. Part-of: --- src/tests/meta-test-utils.c | 25 +++++++++++++++++++++++++ src/tests/meta-test-utils.h | 3 +++ 2 files changed, 28 insertions(+) diff --git a/src/tests/meta-test-utils.c b/src/tests/meta-test-utils.c index b448eb83c..df980e4a0 100644 --- a/src/tests/meta-test-utils.c +++ b/src/tests/meta-test-utils.c @@ -780,6 +780,31 @@ meta_set_custom_monitor_config_full (MetaBackend *backend, g_warning ("Failed to set custom config: %s", error->message); } +static void +set_true_cb (gpointer user_data) +{ + gboolean *value = user_data; + + *value = TRUE; +} + +void +meta_wait_for_monitors_changed (MetaContext *context) +{ + MetaBackend *backend = meta_context_get_backend (context); + MetaMonitorManager *monitor_manager = meta_backend_get_monitor_manager (backend); + gulong monitors_changed_handler_id; + gboolean monitors_changed = FALSE; + + monitors_changed_handler_id = + g_signal_connect_swapped (monitor_manager, "monitors-changed", + G_CALLBACK (set_true_cb), &monitors_changed); + while (!monitors_changed) + g_main_context_iteration (NULL, TRUE); + + g_signal_handler_disconnect (monitor_manager, monitors_changed_handler_id); +} + static void on_view_presented (ClutterStage *stage, ClutterStageView *view, diff --git a/src/tests/meta-test-utils.h b/src/tests/meta-test-utils.h index 96b230e3d..aa56cb340 100644 --- a/src/tests/meta-test-utils.h +++ b/src/tests/meta-test-utils.h @@ -114,6 +114,9 @@ void meta_set_custom_monitor_config_full (MetaBackend *backend, const char *filename, MetaMonitorsConfigFlag configs_flags); +META_EXPORT +void meta_wait_for_monitors_changed (MetaContext *context); + META_EXPORT void meta_wait_for_paint (MetaContext *context);