From c455f7291c2b9d9a536b6109c19183899157570e Mon Sep 17 00:00:00 2001 From: "J?rgen P. Tjern?" Date: Mon, 7 Oct 2013 14:16:38 -0700 Subject: [PATCH] Fix SDL_SetWindowPosition on fullscreen windows. This reverts http://hg.libsdl.org/SDL/rev/7cdeb64faa72 and fixes it in the correct way. If you call SDL_SetWindowPosition on a fullscreen window, it would update the x & y variables for the window, but not actually move the window (since it was fullscreen). That would make the internal state of the SDL_Window incorrect, causing SDL_WarpMouseInWindow to offset incorrectly. This makes it so SDL_SetWindowPosition updates the `windowed' x & y coordinates, which take effect when you revert from fullscreen. --- src/video/SDL_video.c | 21 ++++++++++++++------- src/video/cocoa/SDL_cocoamouse.m | 8 +------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index cd40aeb48ab49..4088afe81db68 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1551,14 +1551,21 @@ SDL_SetWindowPosition(SDL_Window * window, int x, int y) } } - if (!SDL_WINDOWPOS_ISUNDEFINED(x)) { - window->x = x; - } - if (!SDL_WINDOWPOS_ISUNDEFINED(y)) { - window->y = y; - } + if ((window->flags & SDL_WINDOW_FULLSCREEN)) { + if (!SDL_WINDOWPOS_ISUNDEFINED(x)) { + window->windowed.x = x; + } + if (!SDL_WINDOWPOS_ISUNDEFINED(y)) { + window->windowed.y = y; + } + } else { + if (!SDL_WINDOWPOS_ISUNDEFINED(x)) { + window->x = x; + } + if (!SDL_WINDOWPOS_ISUNDEFINED(y)) { + window->y = y; + } - if (!(window->flags & SDL_WINDOW_FULLSCREEN)) { if (_this->SetWindowPosition) { _this->SetWindowPosition(_this, window); } diff --git a/src/video/cocoa/SDL_cocoamouse.m b/src/video/cocoa/SDL_cocoamouse.m index faba9618e0b90..e834423465130 100644 --- a/src/video/cocoa/SDL_cocoamouse.m +++ b/src/video/cocoa/SDL_cocoamouse.m @@ -204,13 +204,7 @@ + (NSCursor *)invisibleCursor Cocoa_WarpMouse(SDL_Window * window, int x, int y) { SDL_Mouse *mouse = SDL_GetMouse(); - CGPoint point = CGPointMake(x, y); - - if (!(window->flags & SDL_WINDOW_FULLSCREEN)) - { - point.x += window->x; - point.y += window->y; - } + CGPoint point = CGPointMake(x + (float)window->x, y + (float)window->y); { /* This makes Cocoa_HandleMouseEvent ignore this delta in the next