raspberry: Fixed missing mouse cursor (thanks, Joe!)

"Starting with changeset 12433, the mouse cursor is not displayed on the
Raspberry Pi platform, due to a bug in the handling of the new
"global_cursor" in RPI_ShowCursor(). Currently, if cursor == global_cursor,
the function immediately returns 0. The function should not return here.
Instead, if cursor == global_cursor, it shouldn't try to hide the current
cursor and update global_cursor = cursor. However, it *should* still continue
through the rest of the function."

Fixes Bugzilla #4699.
This commit is contained in:
Ryan C. Gordon 2019-07-02 10:26:54 -04:00
parent d5ebbcb4e5
commit d2058b45ae
1 changed files with 13 additions and 11 deletions

View File

@ -132,19 +132,21 @@ RPI_ShowCursor(SDL_Cursor * cursor)
return 0; return 0;
} }
if (global_cursor != NULL) { if (cursor != global_cursor) {
curdata = (RPI_CursorData *) global_cursor->driverdata; if (global_cursor != NULL) {
if (curdata && curdata->element > DISPMANX_NO_HANDLE) { curdata = (RPI_CursorData *) global_cursor->driverdata;
update = vc_dispmanx_update_start(0); if (curdata && curdata->element > DISPMANX_NO_HANDLE) {
SDL_assert(update); update = vc_dispmanx_update_start(0);
ret = vc_dispmanx_element_remove(update, curdata->element); SDL_assert(update);
SDL_assert(ret == DISPMANX_SUCCESS); ret = vc_dispmanx_element_remove(update, curdata->element);
ret = vc_dispmanx_update_submit_sync(update); SDL_assert(ret == DISPMANX_SUCCESS);
SDL_assert(ret == DISPMANX_SUCCESS); ret = vc_dispmanx_update_submit_sync(update);
curdata->element = DISPMANX_NO_HANDLE; SDL_assert(ret == DISPMANX_SUCCESS);
curdata->element = DISPMANX_NO_HANDLE;
}
} }
global_cursor = cursor;
} }
global_cursor = cursor;
if (cursor == NULL) { if (cursor == NULL) {
return 0; return 0;