فهرست منبع

8145 - Mouse Position is unknown until first mouse event on X11 & Win

- X11 update input->pos on EnterNotify
- X11 & Win call first-time events processing before main initialization

(cherry picked from commit c79e998d1f12b281530b15d3015e7128418c8a60)
Sergey Pusnei 8 سال پیش
والد
کامیت
e5d63aaece
2فایلهای تغییر یافته به همراه11 افزوده شده و 1 حذف شده
  1. 3 0
      platform/windows/os_windows.cpp
  2. 8 1
      platform/x11/os_x11.cpp

+ 3 - 0
platform/windows/os_windows.cpp

@@ -2176,6 +2176,9 @@ void OS_Windows::run() {
 	if (!main_loop)
 		return;
 
+	// Process all events before the main initialization so the cursor will get initialized properly
+	process_events(); // get rid of pending events
+
 	main_loop->init();
 
 	uint64_t last_ticks = get_ticks_usec();

+ 8 - 1
platform/x11/os_x11.cpp

@@ -1282,8 +1282,12 @@ void OS_X11::process_xevents() {
 
 				if (main_loop && mouse_mode != MOUSE_MODE_CAPTURED)
 					main_loop->notification(MainLoop::NOTIFICATION_WM_MOUSE_ENTER);
-				if (input)
+				if (input) {
+					// Update mouse position. It is triggered before mouse motion.
+					Point2i pos(event.xmotion.x, event.xmotion.y);
+					input->set_mouse_pos(pos);
 					input->set_mouse_in_window(true);
+				}
 			} break;
 			case FocusIn:
 				minimized = false;
@@ -1893,6 +1897,9 @@ void OS_X11::run() {
 	if (!main_loop)
 		return;
 
+	// Process all events before the main initialization so the cursor will get initialized properly
+	process_xevents(); // get rid of pending events
+
 	main_loop->init();
 
 	//	uint64_t last_ticks=get_ticks_usec();