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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
index cd40aeb..4088afe 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 faba961..e834423 100644
--- a/src/video/cocoa/SDL_cocoamouse.m
+++ b/src/video/cocoa/SDL_cocoamouse.m
@@ -204,13 +204,7 @@ static void
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