mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 21:21:06 +01:00 
			
		
		
		
	Backends: GLFW: Handle spurious leave/enter sequences apparently submitted by X11/GLFW combo. (#4984)
This commit is contained in:
		| @@ -91,6 +91,7 @@ struct ImGui_ImplGlfw_Data | ||||
|     double                  Time; | ||||
|     GLFWwindow*             MouseWindow; | ||||
|     GLFWcursor*             MouseCursors[ImGuiMouseCursor_COUNT]; | ||||
|     ImVec2                  LastMousePos; | ||||
|     bool                    InstalledCallbacks; | ||||
|  | ||||
|     // Chain GLFW callbacks: our callbacks will call the user's previously installed callbacks, if any. | ||||
| @@ -338,8 +339,11 @@ void ImGui_ImplGlfw_CursorPosCallback(GLFWwindow* window, double x, double y) | ||||
|  | ||||
|     ImGuiIO& io = ImGui::GetIO(); | ||||
|     io.AddMousePosEvent((float)x, (float)y); | ||||
|     bd->LastMousePos = ImVec2((float)x, (float)y); | ||||
| } | ||||
|  | ||||
| // Workaround: X11 seems to send spurious Leave/Enter events which would make us lose our position, | ||||
| // so we back it up and restore on Leave/Enter (see https://github.com/ocornut/imgui/issues/4984) | ||||
| void ImGui_ImplGlfw_CursorEnterCallback(GLFWwindow* window, int entered) | ||||
| { | ||||
|     ImGui_ImplGlfw_Data* bd = ImGui_ImplGlfw_GetBackendData(); | ||||
| @@ -348,9 +352,13 @@ void ImGui_ImplGlfw_CursorEnterCallback(GLFWwindow* window, int entered) | ||||
|  | ||||
|     ImGuiIO& io = ImGui::GetIO(); | ||||
|     if (entered) | ||||
|         bd->MouseWindow = window; | ||||
|     if (!entered && bd->MouseWindow == window) | ||||
|     { | ||||
|         bd->MouseWindow = window; | ||||
|         io.AddMousePosEvent(bd->LastMousePos.x, bd->LastMousePos.y); | ||||
|     } | ||||
|     else if (!entered && bd->MouseWindow == window) | ||||
|     { | ||||
|         bd->LastMousePos = io.MousePos; | ||||
|         bd->MouseWindow = NULL; | ||||
|         io.AddMousePosEvent(-FLT_MAX, -FLT_MAX); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user