Use a blank cursor instead of PointerIcon.TYPE_NULL since that shows the default cursor on Samsung DeX
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
diff --git a/src/video/android/SDL_androidmouse.c b/src/video/android/SDL_androidmouse.c
index c79792d..037b453 100644
--- a/src/video/android/SDL_androidmouse.c
+++ b/src/video/android/SDL_androidmouse.c
@@ -52,6 +52,8 @@ typedef struct
/* Last known Android mouse button state (includes all buttons) */
static int last_state;
+/* Blank cursor */
+static SDL_Cursor *empty_cursor;
static SDL_Cursor *
Android_WrapCursor(int custom_cursor, int system_cursor)
@@ -115,9 +117,35 @@ Android_FreeCursor(SDL_Cursor * cursor)
SDL_free(cursor);
}
+static SDL_Cursor *
+Android_CreateEmptyCursor()
+{
+ if (!empty_cursor) {
+ SDL_Surface *empty_surface = SDL_CreateRGBSurfaceWithFormat(0, 1, 1, 32, SDL_PIXELFORMAT_ARGB8888);
+ if (empty_surface) {
+ SDL_memset(empty_surface->pixels, 0, empty_surface->h * empty_surface->pitch);
+ empty_cursor = Android_CreateCursor(empty_surface, 0, 0);
+ SDL_FreeSurface(empty_surface);
+ }
+ }
+ return empty_cursor;
+}
+
+static void
+Android_DestroyEmptyCursor()
+{
+ if (empty_cursor) {
+ Android_FreeCursor(empty_cursor);
+ empty_cursor = NULL;
+ }
+}
+
static int
Android_ShowCursor(SDL_Cursor * cursor)
{
+ if (!cursor) {
+ cursor = Android_CreateEmptyCursor();
+ }
if (cursor) {
SDL_AndroidCursorData *data = (SDL_AndroidCursorData*)cursor->driverdata;
if (data->custom_cursor) {
@@ -129,12 +157,11 @@ Android_ShowCursor(SDL_Cursor * cursor)
return SDL_Unsupported();
}
}
+ return 0;
} else {
- if (!Android_JNI_SetSystemCursor(-1)) {
- return SDL_Unsupported();
- }
+ /* SDL error set inside Android_CreateEmptyCursor() */
+ return -1;
}
- return 0;
}
static int
@@ -167,6 +194,12 @@ Android_InitMouse(void)
last_state = 0;
}
+void
+Android_QuitMouse(void)
+{
+ Android_DestroyEmptyCursor();
+}
+
/* Translate Android mouse button state to SDL mouse button */
static Uint8
TranslateButton(int state)
diff --git a/src/video/android/SDL_androidmouse.h b/src/video/android/SDL_androidmouse.h
index 9aa71f5..eca9e47 100644
--- a/src/video/android/SDL_androidmouse.h
+++ b/src/video/android/SDL_androidmouse.h
@@ -26,6 +26,7 @@
extern void Android_InitMouse(void);
extern void Android_OnMouse(int button, int action, float x, float y, SDL_bool relative);
+extern void Android_QuitMouse(void);
#endif /* SDL_androidmouse_h_ */
diff --git a/src/video/android/SDL_androidvideo.c b/src/video/android/SDL_androidvideo.c
index 79c20f6..3cf5040 100644
--- a/src/video/android/SDL_androidvideo.c
+++ b/src/video/android/SDL_androidvideo.c
@@ -201,6 +201,7 @@ Android_VideoInit(_THIS)
void
Android_VideoQuit(_THIS)
{
+ Android_QuitMouse();
Android_QuitTouch();
}