Переглянути джерело

Use EnterNotify, it looks like more reliable way to get initial cursor position

Daniele Bartolini 10 роки тому
батько
коміт
e26cc93771
1 змінених файлів з 7 додано та 17 видалено
  1. 7 17
      src/main/main_linux.cpp

+ 7 - 17
src/main/main_linux.cpp

@@ -233,7 +233,8 @@ struct LinuxDevice
 			| KeyReleaseMask
 			| ButtonPressMask
 			| ButtonReleaseMask
-			| PointerMotionMask;
+			| PointerMotionMask
+			| EnterWindowMask;
 
 		_x11_window = XCreateWindow(_x11_display
 			, parent_window
@@ -284,22 +285,6 @@ struct LinuxDevice
 		Thread main_thread;
 		main_thread.start(func, &mta);
 
-		// Push initial mouse position
-		Window dummy1;
-		int dummy2;
-		unsigned int dummy3;
-		int mx, my;
-		XQueryPointer(_x11_display
-			, _x11_window
-			, &dummy1
-			, &dummy1
-			, &dummy2
-			, &dummy2
-			, &mx, &my
-			, &dummy3
-			);
-		_queue.push_mouse_event(mx, my);
-
 		while (!s_exit)
 		{
 			pump_events();
@@ -337,6 +322,11 @@ struct LinuxDevice
 
 			switch (event.type)
 			{
+				case EnterNotify:
+				{
+					_queue.push_mouse_event(event.xcrossing.x, event.xcrossing.y);
+					break;
+				}
 				case ClientMessage:
 				{
 					if ((Atom)event.xclient.data.l[0] == _wm_delete_message)