소스 검색

[3.x] Release pressed events when the window is blurred on HTML5 platform

(cherry picked from commit c918b4d246df3b1ca0c7e6353c09de8316feeff1)
Selgesel 3 년 전
부모
커밋
c3541628c1
2개의 변경된 파일7개의 추가작업 그리고 0개의 파일을 삭제
  1. 6 0
      platform/javascript/os_javascript.cpp
  2. 1 0
      platform/javascript/os_javascript.h

+ 6 - 0
platform/javascript/os_javascript.cpp

@@ -123,6 +123,11 @@ EM_BOOL OS_JavaScript::fullscreen_change_callback(int p_event_type, const Emscri
 	return false;
 }
 
+EM_BOOL OS_JavaScript::blur_callback(int p_event_type, const EmscriptenFocusEvent *p_event, void *p_user_data) {
+	get_singleton()->input->release_pressed_events();
+	return false;
+}
+
 void OS_JavaScript::set_video_mode(const VideoMode &p_video_mode, int p_screen) {
 
 	video_mode = p_video_mode;
@@ -875,6 +880,7 @@ Error OS_JavaScript::initialize(const VideoMode &p_desired, int p_video_driver,
 	SET_EM_CALLBACK(canvas_id, mousedown, mouse_button_callback)
 	SET_EM_WINDOW_CALLBACK(mousemove, mousemove_callback)
 	SET_EM_WINDOW_CALLBACK(mouseup, mouse_button_callback)
+	SET_EM_WINDOW_CALLBACK(blur, blur_callback)
 	SET_EM_CALLBACK(canvas_id, wheel, wheel_callback)
 	SET_EM_CALLBACK(canvas_id, touchstart, touch_press_callback)
 	SET_EM_CALLBACK(canvas_id, touchmove, touchmove_callback)

+ 1 - 0
platform/javascript/os_javascript.h

@@ -72,6 +72,7 @@ private:
 
 	static Point2 compute_position_in_canvas(int x, int y);
 	static EM_BOOL fullscreen_change_callback(int p_event_type, const EmscriptenFullscreenChangeEvent *p_event, void *p_user_data);
+	static EM_BOOL blur_callback(int p_event_type, const EmscriptenFocusEvent *p_event, void *p_user_data);
 
 	static EM_BOOL keydown_callback(int p_event_type, const EmscriptenKeyboardEvent *p_event, void *p_user_data);
 	static EM_BOOL keypress_callback(int p_event_type, const EmscriptenKeyboardEvent *p_event, void *p_user_data);