Browse Source

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.
Ryan C. Gordon 5 years ago
parent
commit
d2058b45ae
1 changed files with 13 additions and 11 deletions
  1. 13 11
      src/video/raspberry/SDL_rpimouse.c

+ 13 - 11
src/video/raspberry/SDL_rpimouse.c

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