From 79727d4833b10d522d5e9e3fb520d309561a01bb Mon Sep 17 00:00:00 2001 From: Markus Sauermann <6299227+Sauermann@users.noreply.github.com> Date: Tue, 26 Mar 2024 20:28:34 +0100 Subject: [PATCH] Prohibit execution of delayed input events by different means In some cases it can happen, that the order of input events and window events is not followed, when input buffering or input accumulation is active. The display server order `InputEvent` => window-event gets changed to window-event => `InputEvent` which becomes problematic in certain situations. This PR makes sure, that the order is adhered to by flushing input events before a window event is sent. Previously this problem was mitigated by discarding these delayed events. But this solution was problematic in the setting of android input events. (cherry picked from commit 945babc619cee143f56219b9182b8392edd4eeb3) --- scene/main/window.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scene/main/window.cpp b/scene/main/window.cpp index 36d7d079b2e..2417845d876 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -708,6 +708,9 @@ void Window::_event_callback(DisplayServer::WindowEvent p_event) { if (!is_inside_tree()) { return; } + // Ensure keeping the order of input events and window events when input events are buffered or accumulated. + Input::get_singleton()->flush_buffered_events(); + Window *root = get_tree()->get_root(); if (!root->gui.windowmanager_window_over) { #ifdef DEV_ENABLED @@ -2635,9 +2638,6 @@ void Window::_update_mouse_over(Vector2 p_pos) { if (is_embedded()) { mouse_in_window = true; _propagate_window_notification(this, NOTIFICATION_WM_MOUSE_ENTER); - } else { - // Prevent update based on delayed InputEvents from DisplayServer. - return; } }