Commit 79510b75690ab4cdd0bd756e58d53545e0510edd

Peter Kosyh 2019-11-11T22:22:40

haiku: mouse->ShowMouse method added Partially fixes Bugzilla #4442.

diff --git a/src/main/haiku/SDL_BApp.h b/src/main/haiku/SDL_BApp.h
index fca7835..ab2fe30 100644
--- a/src/main/haiku/SDL_BApp.h
+++ b/src/main/haiku/SDL_BApp.h
@@ -244,7 +244,7 @@ private:
 				be_app->HideCursor();
 		} else {
 			SDL_SendMouseMotion(win, 0, 0, x, y);
-			if (be_app->IsCursorHidden())
+			if (SDL_ShowCursor(-1) && be_app->IsCursorHidden())
 				be_app->ShowCursor();
 		}
 
diff --git a/src/video/haiku/SDL_bvideo.cc b/src/video/haiku/SDL_bvideo.cc
index 52e0f1d..68300a9 100644
--- a/src/video/haiku/SDL_bvideo.cc
+++ b/src/video/haiku/SDL_bvideo.cc
@@ -19,6 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 #include "../../SDL_internal.h"
+#include "../../main/haiku/SDL_BApp.h"
 
 #if SDL_VIDEO_DRIVER_HAIKU
 
@@ -132,6 +133,33 @@ void HAIKU_DeleteDevice(SDL_VideoDevice * device)
     SDL_free(device);
 }
 
+static int HAIKU_ShowCursor(SDL_Cursor *cur)
+{
+	SDL_Mouse *mouse = SDL_GetMouse();
+	int show;
+	if (!mouse)
+		return 0;
+	show = (cur || !mouse->focus);
+	if (show) {
+		if (be_app->IsCursorHidden())
+			be_app->ShowCursor();
+	} else {
+		if (!be_app->IsCursorHidden())
+			be_app->HideCursor();
+	}
+	return 0;
+}
+
+static void HAIKU_MouseInit(_THIS)
+{
+	SDL_Mouse *mouse = SDL_GetMouse();
+	if (!mouse)
+		return;
+	mouse->ShowCursor = HAIKU_ShowCursor;
+	mouse->cur_cursor = (SDL_Cursor*)0x1;
+	mouse->def_cursor = (SDL_Cursor*)0x2;
+}
+
 int HAIKU_VideoInit(_THIS)
 {
     /* Initialize the Be Application for appserver interaction */
@@ -145,6 +173,8 @@ int HAIKU_VideoInit(_THIS)
     /* Init the keymap */
     HAIKU_InitOSKeymap();
 
+    HAIKU_MouseInit(_this);
+
 #if SDL_VIDEO_OPENGL
         /* testgl application doesn't load library, just tries to load symbols */
         /* is it correct? if so we have to load library here */