SDL_WarpMouseGlobal() should return non-void.

There are platforms it isn't implemented on (and currently can't be
implemented on!), and there's currently no way for an app to know this.

This shouldn't break ABI on apps that moved to a revision between 2.0.3 and
2.0.4.

--HG--
extra : rebase_source : 289ffe9b7b92eb812f3d1421c52a561d0d37b717
This commit is contained in:
Ryan C. Gordon 2015-07-17 21:03:58 -04:00
parent b032dd985f
commit 0a790ca20c
10 changed files with 25 additions and 15 deletions

View file

@ -137,10 +137,11 @@ extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window,
*
* \param x The x coordinate
* \param y The y coordinate
* \return 0 on success, -1 on error (usually: unsupported by a platform).
*
* \note This function generates a mouse motion event
*/
extern DECLSPEC void SDLCALL SDL_WarpMouseGlobal(int x, int y);
extern DECLSPEC int SDLCALL SDL_WarpMouseGlobal(int x, int y);
/**
* \brief Set relative mouse mode.

View file

@ -612,7 +612,7 @@ SDL_DYNAPI_PROC(int,SDL_WinRTRunApp,(int a, char **b, void *c),(a,b,c),return)
SDL_DYNAPI_PROC(const wchar_t*,SDL_WinRTGetFSPathUNICODE,(SDL_WinRT_Path a),(a),return)
SDL_DYNAPI_PROC(const char*,SDL_WinRTGetFSPathUTF8,(SDL_WinRT_Path a),(a),return)
#endif
SDL_DYNAPI_PROC(void,SDL_WarpMouseGlobal,(int a, int b),(a,b),)
SDL_DYNAPI_PROC(int,SDL_WarpMouseGlobal,(int a, int b),(a,b),)
SDL_DYNAPI_PROC(float,SDL_sqrtf,(float a),(a),return)
SDL_DYNAPI_PROC(double,SDL_tan,(double a),(a),return)
SDL_DYNAPI_PROC(float,SDL_tanf,(float a),(a),return)

View file

@ -535,14 +535,16 @@ SDL_WarpMouseInWindow(SDL_Window * window, int x, int y)
}
}
void
int
SDL_WarpMouseGlobal(int x, int y)
{
SDL_Mouse *mouse = SDL_GetMouse();
if (mouse->WarpMouseGlobal) {
mouse->WarpMouseGlobal(x, y);
return mouse->WarpMouseGlobal(x, y);
}
return SDL_Unsupported();
}
static SDL_bool

View file

@ -61,7 +61,7 @@ typedef struct
void (*WarpMouse) (SDL_Window * window, int x, int y);
/* Warp the mouse to (x,y) in screen space */
void (*WarpMouseGlobal) (int x, int y);
int (*WarpMouseGlobal) (int x, int y);
/* Set relative mode */
int (*SetRelativeMouseMode) (SDL_bool enabled);

View file

@ -210,7 +210,7 @@ SDL_FindWindowAtPoint(const int x, const int y)
return NULL;
}
static void
static int
Cocoa_WarpMouseGlobal(int x, int y)
{
SDL_Mouse *mouse = SDL_GetMouse();
@ -219,7 +219,7 @@ Cocoa_WarpMouseGlobal(int x, int y)
if ([data->listener isMoving]) {
DLog("Postponing warp, window being moved.");
[data->listener setPendingMoveX:x Y:y];
return;
return 0;
}
}
const CGPoint point = CGPointMake((float)x, (float)y);
@ -245,6 +245,8 @@ Cocoa_WarpMouseGlobal(int x, int y)
SDL_SendMouseMotion(win, mouse->mouseID, 0, x - win->x, y - win->y);
}
}
return 0;
}
static void

View file

@ -110,10 +110,10 @@ MIR_WarpMouse(SDL_Window* window, int x, int y)
SDL_Unsupported();
}
static void
static int
MIR_WarpMouseGlobal(int x, int y)
{
SDL_Unsupported();
return SDL_Unsupported();
}
static int

View file

@ -216,18 +216,18 @@ RPI_WarpMouse(SDL_Window * window, int x, int y)
}
/* Warp the mouse to (x,y) */
static void
static int
RPI_WarpMouseGlobal(int x, int y)
{
RPI_CursorData *curdata;
DISPMANX_UPDATE_HANDLE_T update;
int ret;
VC_RECT_T dst_rect;
SDL_Mouse *mouse = SDL_GetMouse();
if (mouse != NULL && mouse->cur_cursor != NULL && mouse->cur_cursor->driverdata != NULL) {
curdata = (RPI_CursorData *) mouse->cur_cursor->driverdata;
if (curdata->element != DISPMANX_NO_HANDLE) {
int ret;
update = vc_dispmanx_update_start( 10 );
SDL_assert( update );
vc_dispmanx_rect_set( &dst_rect, x, y, curdata->w, curdata->h);
@ -245,8 +245,11 @@ RPI_WarpMouseGlobal(int x, int y)
/* Submit asynchronously, otherwise the peformance suffers a lot */
ret = vc_dispmanx_update_submit( update, 0, NULL );
SDL_assert( ret == DISPMANX_SUCCESS );
return (ret == DISPMANX_SUCCESS) ? 0 : -1;
}
}
return -1; /* !!! FIXME: this should SDL_SetError() somewhere. */
}
void

View file

@ -347,10 +347,10 @@ Wayland_WarpMouse(SDL_Window *window, int x, int y)
SDL_Unsupported();
}
static void
static int
Wayland_WarpMouseGlobal(int x, int y)
{
SDL_Unsupported();
return SDL_Unsupported();
}
static int

View file

@ -236,7 +236,7 @@ WIN_WarpMouse(SDL_Window * window, int x, int y)
SetCursorPos(pt.x, pt.y);
}
static void
static int
WIN_WarpMouseGlobal(int x, int y)
{
POINT pt;
@ -244,6 +244,7 @@ WIN_WarpMouseGlobal(int x, int y)
pt.x = x;
pt.y = y;
SetCursorPos(pt.x, pt.y);
return 0;
}
static int

View file

@ -318,13 +318,14 @@ X11_WarpMouse(SDL_Window * window, int x, int y)
X11_XSync(display, False);
}
static void
static int
X11_WarpMouseGlobal(int x, int y)
{
Display *display = GetDisplay();
X11_XWarpPointer(display, None, DefaultRootWindow(display), 0, 0, 0, 0, x, y);
X11_XSync(display, False);
return 0;
}
static int