Fix input event being dispatched multiple times on Windows
This commit is contained in:
parent
ac58372db8
commit
434bf0572c
|
@ -1695,6 +1695,12 @@ void DisplayServerWindows::_dispatch_input_events(const Ref<InputEvent> &p_event
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayServerWindows::_dispatch_input_event(const Ref<InputEvent> &p_event) {
|
void DisplayServerWindows::_dispatch_input_event(const Ref<InputEvent> &p_event) {
|
||||||
|
_THREAD_SAFE_METHOD_
|
||||||
|
if (in_dispatch_input_event) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
in_dispatch_input_event = true;
|
||||||
Variant ev = p_event;
|
Variant ev = p_event;
|
||||||
Variant *evp = &ev;
|
Variant *evp = &ev;
|
||||||
Variant ret;
|
Variant ret;
|
||||||
|
@ -1706,6 +1712,7 @@ void DisplayServerWindows::_dispatch_input_event(const Ref<InputEvent> &p_event)
|
||||||
ERR_FAIL_COND(!windows.has(event_from_window->get_window_id()));
|
ERR_FAIL_COND(!windows.has(event_from_window->get_window_id()));
|
||||||
Callable callable = windows[event_from_window->get_window_id()].input_event_callback;
|
Callable callable = windows[event_from_window->get_window_id()].input_event_callback;
|
||||||
if (callable.is_null()) {
|
if (callable.is_null()) {
|
||||||
|
in_dispatch_input_event = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
callable.call((const Variant **)&evp, 1, ret, ce);
|
callable.call((const Variant **)&evp, 1, ret, ce);
|
||||||
|
@ -1719,6 +1726,8 @@ void DisplayServerWindows::_dispatch_input_event(const Ref<InputEvent> &p_event)
|
||||||
callable.call((const Variant **)&evp, 1, ret, ce);
|
callable.call((const Variant **)&evp, 1, ret, ce);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
in_dispatch_input_event = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
|
LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
|
||||||
|
|
|
@ -388,6 +388,7 @@ class DisplayServerWindows : public DisplayServer {
|
||||||
uint32_t last_button_state = 0;
|
uint32_t last_button_state = 0;
|
||||||
bool use_raw_input = false;
|
bool use_raw_input = false;
|
||||||
bool drop_events = false;
|
bool drop_events = false;
|
||||||
|
bool in_dispatch_input_event = false;
|
||||||
bool console_visible = false;
|
bool console_visible = false;
|
||||||
|
|
||||||
WNDCLASSEXW wc;
|
WNDCLASSEXW wc;
|
||||||
|
|
Loading…
Reference in New Issue