diff --git a/src/main/haiku/SDL_BApp.h b/src/main/haiku/SDL_BApp.h index fca783545..ab2fe3037 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 52e0f1d98..68300a967 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 */