[xdg-desktop-portal-gnome/gbsneto/window-restore: 4/6] screencast: Wait for windows before restoring session
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [xdg-desktop-portal-gnome/gbsneto/window-restore: 4/6] screencast: Wait for windows before restoring session
- Date: Fri, 5 Aug 2022 01:41:28 +0000 (UTC)
commit 3cbc3ccfd7a477f00667ff995c8b2f89472f4269
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Thu Aug 4 22:26:09 2022 -0300
screencast: Wait for windows before restoring session
We need to wait for the full list of windows before attempting
to restore a previous window stream, otherwise we'll always fail.
Spin the mainloop until the list of windows is ready.
Fixes
https://gitlab.gnome.org/GNOME/xdg-desktop-portal-gnome/-/issues/49
src/screencast.c | 1 +
src/shellintrospect.c | 15 +++++++++++++--
src/shellintrospect.h | 2 ++
3 files changed, 16 insertions(+), 2 deletions(-)
---
diff --git a/src/screencast.c b/src/screencast.c
index e66f3d5..e0329c6 100644
--- a/src/screencast.c
+++ b/src/screencast.c
@@ -444,6 +444,7 @@ find_best_window_by_app_id_and_title (const char *app_id,
best_match_distance = G_MAXLONG;
shell_introspect_ref_listeners (shell_introspect);
+ shell_introspect_wait_for_windows (shell_introspect);
windows = shell_introspect_get_windows (shell_introspect);
for (size_t i = 0; windows && i < windows->len; i++)
diff --git a/src/shellintrospect.c b/src/shellintrospect.c
index 5bbc076..8922d4e 100644
--- a/src/shellintrospect.c
+++ b/src/shellintrospect.c
@@ -83,8 +83,6 @@ get_windows_cb (GObject *source_object,
uint64_t id;
GVariant *params = NULL;
- g_clear_pointer (&shell_introspect->windows, g_ptr_array_unref);
-
if (!org_gnome_shell_introspect_call_get_windows_finish (shell_introspect->proxy,
&windows_variant,
res,
@@ -128,6 +126,8 @@ get_windows_cb (GObject *source_object,
static void
sync_state (ShellIntrospect *shell_introspect)
{
+ g_clear_pointer (&shell_introspect->windows, g_ptr_array_unref);
+
org_gnome_shell_introspect_call_get_windows (shell_introspect->proxy,
shell_introspect->cancellable,
get_windows_cb,
@@ -320,3 +320,14 @@ shell_introspect_are_animations_enabled (ShellIntrospect *shell_introspect,
*out_animations_enabled = shell_introspect->animations_enabled;
return TRUE;
}
+
+void
+shell_introspect_wait_for_windows (ShellIntrospect *shell_introspect)
+{
+ g_assert (shell_introspect->num_listeners > 0);
+
+ sync_state (shell_introspect);
+
+ while (!shell_introspect->windows)
+ g_main_context_iteration (NULL, TRUE);
+}
diff --git a/src/shellintrospect.h b/src/shellintrospect.h
index a783d55..a8378dc 100644
--- a/src/shellintrospect.h
+++ b/src/shellintrospect.h
@@ -44,3 +44,5 @@ GPtrArray * shell_introspect_get_windows (ShellIntrospect *shell_introspect);
gboolean shell_introspect_are_animations_enabled (ShellIntrospect *introspect,
gboolean *enable_animations);
+
+void shell_introspect_wait_for_windows (ShellIntrospect *shell_introspect);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]