Browse Source

Merge pull request #37519 from HaSa1002/fix-duplicate-inputs-win

Fix input event being dispatched multiple times on Windows
Rémi Verschelde 5 years ago
parent
commit
1702fb7ad2

+ 9 - 0
platform/windows/display_server_windows.cpp

@@ -1695,6 +1695,12 @@ void DisplayServerWindows::_dispatch_input_events(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 *evp = &ev;
 	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()));
 		Callable callable = windows[event_from_window->get_window_id()].input_event_callback;
 		if (callable.is_null()) {
+			in_dispatch_input_event = false;
 			return;
 		}
 		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);
 		}
 	}
+
+	in_dispatch_input_event = false;
 }
 
 LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {

+ 1 - 0
platform/windows/display_server_windows.h

@@ -388,6 +388,7 @@ class DisplayServerWindows : public DisplayServer {
 	uint32_t last_button_state = 0;
 	bool use_raw_input = false;
 	bool drop_events = false;
+	bool in_dispatch_input_event = false;
 	bool console_visible = false;
 
 	WNDCLASSEXW wc;