|
@@ -4253,13 +4253,17 @@ void DisplayServerWindows::_dispatch_input_event(const Ref<InputEvent> &p_event)
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- // Send to all windows.
|
|
|
- for (const KeyValue<WindowID, WindowData> &E : windows) {
|
|
|
- const Callable callable = E.value.input_event_callback;
|
|
|
+ // Send to all windows. Copy all pending callbacks, since callback can erase window.
|
|
|
+ Vector<Callable> cbs;
|
|
|
+ for (KeyValue<WindowID, WindowData> &E : windows) {
|
|
|
+ Callable callable = E.value.input_event_callback;
|
|
|
if (callable.is_valid()) {
|
|
|
- callable.call(p_event);
|
|
|
+ cbs.push_back(callable);
|
|
|
}
|
|
|
}
|
|
|
+ for (const Callable &cb : cbs) {
|
|
|
+ cb.call(p_event);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
in_dispatch_input_event = false;
|