瀏覽代碼

Mac: Don't disassociate cursor if window is moving / doesn't have focus.

Bug: https://bugzilla.libsdl.org/show_bug.cgi?id=2396
J?rgen P. Tjern? 11 年之前
父節點
當前提交
dd94c5fa54
共有 1 個文件被更改,包括 16 次插入1 次删除
  1. 16 1
      src/video/cocoa/SDL_cocoamouse.m

+ 16 - 1
src/video/cocoa/SDL_cocoamouse.m

@@ -244,8 +244,23 @@ Cocoa_WarpMouse(SDL_Window * window, int x, int y)
 static int
 Cocoa_SetRelativeMouseMode(SDL_bool enabled)
 {
-    CGError result;
+    /* We will re-apply the relative mode when the window gets focus, if it
+     * doesn't have focus right now.
+     */
+    SDL_Window *window = SDL_GetMouseFocus();
+    if (!window) {
+      return 0;
+    }
 
+    /* We will re-apply the relative mode when the window finishes being moved,
+     * if it is being moved right now.
+     */
+    SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
+    if ([data->listener isMoving]) {
+        return;
+    }
+
+    CGError result;
     if (enabled) {
         DLog("Turning on.");
         result = CGAssociateMouseAndMouseCursorPosition(NO);