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 945babc619
)
This commit is contained in:
parent
de06aece82
commit
79727d4833
|
@ -708,6 +708,9 @@ void Window::_event_callback(DisplayServer::WindowEvent p_event) {
|
||||||
if (!is_inside_tree()) {
|
if (!is_inside_tree()) {
|
||||||
return;
|
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();
|
Window *root = get_tree()->get_root();
|
||||||
if (!root->gui.windowmanager_window_over) {
|
if (!root->gui.windowmanager_window_over) {
|
||||||
#ifdef DEV_ENABLED
|
#ifdef DEV_ENABLED
|
||||||
|
@ -2635,9 +2638,6 @@ void Window::_update_mouse_over(Vector2 p_pos) {
|
||||||
if (is_embedded()) {
|
if (is_embedded()) {
|
||||||
mouse_in_window = true;
|
mouse_in_window = true;
|
||||||
_propagate_window_notification(this, NOTIFICATION_WM_MOUSE_ENTER);
|
_propagate_window_notification(this, NOTIFICATION_WM_MOUSE_ENTER);
|
||||||
} else {
|
|
||||||
// Prevent update based on delayed InputEvents from DisplayServer.
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue