diff -rupN SDL/src/video/kmsdrm/SDL_kmsdrmmouse.c SDL-FIXED/src/video/kmsdrm/SDL_kmsdrmmouse.c --- SDL/src/video/kmsdrm/SDL_kmsdrmmouse.c 2017-11-20 12:37:14.655004151 +0100 +++ SDL-FIXED/src/video/kmsdrm/SDL_kmsdrmmouse.c 2017-11-20 12:39:23.364840206 +0100 @@ -362,6 +362,12 @@ KMSDRM_WarpMouseGlobal(int x, int y) SDL_Mouse *mouse = SDL_GetMouse(); if (mouse != NULL && mouse->cur_cursor != NULL && mouse->cur_cursor->driverdata != NULL) { + /* Update internal mouse position, be cursor visible or not: some apps use their own cursors. */ + mouse->x = x; + mouse->y = y; + mouse->last_x = x; + mouse->last_y = y; + /* And now update SDL2 cursor graphic itself, if available/visible. */ curdata = (KMSDRM_CursorData *) mouse->cur_cursor->driverdata; if (curdata->bo != NULL) { if (curdata->crtc_id != 0) { diff -rupN SDL/src/video/raspberry/SDL_rpimouse.c SDL-FIXED/src/video/raspberry/SDL_rpimouse.c --- SDL/src/video/raspberry/SDL_rpimouse.c 2017-11-20 12:37:14.675005072 +0100 +++ SDL-FIXED/src/video/raspberry/SDL_rpimouse.c 2017-11-20 12:39:58.202390143 +0100 @@ -247,6 +247,12 @@ RPI_WarpMouseGlobal(int x, int y) return 0; } + /* Update internal mouse position, be cursor visible or not: some apps use their own cursors. */ + mouse->x = x; + mouse->y = y; + mouse->last_x = x; + mouse->last_y = y; + curdata = (RPI_CursorData *) mouse->cur_cursor->driverdata; if (curdata->element == DISPMANX_NO_HANDLE) { return 0;