[mutter] window/x11: Don't stop early when trying to find default focus window
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window/x11: Don't stop early when trying to find default focus window
- Date: Mon, 22 Jun 2020 15:22:44 +0000 (UTC)
commit f5c8e0d96dc952f0e6fb37d91c82d344473c77d4
Author: Sebastian Keller <skeller gnome org>
Date: Sun Jun 21 00:46:38 2020 +0200
window/x11: Don't stop early when trying to find default focus window
When trying to find a default focus window, the code iterates through a
queue of candidates with a timeout between each candidate. If the window
the current timeout is waiting for gets destroyed, this process just
stops instead of trying the next window in the queue.
This issue was made more likely to be triggered with the previous change
to the closed-transient-no-input-parents-queued-default-focus-destroyed
test due to the introduction of a wait, which can introduce a
delay between the two destroy commands.
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1325
src/x11/window-x11.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
---
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
index db3fae2f09..ff83615402 100644
--- a/src/x11/window-x11.c
+++ b/src/x11/window-x11.c
@@ -833,6 +833,18 @@ focus_candidates_maybe_take_and_focus_next (GQueue **focus_candidates_ptr,
meta_window_x11_maybe_focus_delayed (focus_window, focus_candidates, timestamp);
}
+static void
+focus_window_delayed_unmanaged (gpointer user_data)
+{
+ MetaWindowX11DelayedFocusData *data = user_data;
+ uint32_t timestamp = data->timestamp;
+
+ focus_candidates_maybe_take_and_focus_next (&data->pending_focus_candidates,
+ timestamp);
+
+ meta_window_x11_delayed_focus_data_free (data);
+}
+
static gboolean
focus_window_delayed_timeout (gpointer user_data)
{
@@ -868,7 +880,7 @@ meta_window_x11_maybe_focus_delayed (MetaWindow *window,
data->unmanaged_id =
g_signal_connect_swapped (window, "unmanaged",
- G_CALLBACK (meta_window_x11_delayed_focus_data_free),
+ G_CALLBACK (focus_window_delayed_unmanaged),
data);
data->focused_changed_id =
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]