diff --git a/inc/dd.h b/inc/dd.h index 2fde977..2939e26 100644 --- a/inc/dd.h +++ b/inc/dd.h @@ -109,6 +109,7 @@ typedef struct CNCDDRAW BOOL wine; BOOL altenter; BOOL hidecursor; + HCURSOR old_cursor; BOOL accurate_timers; BOOL resizable; BOOL nonexclusive; diff --git a/src/mouse.c b/src/mouse.c index 78681e8..be2af5a 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -64,6 +64,8 @@ void mouse_lock() } else { + real_SetCursor(g_ddraw->old_cursor); + if (g_ddraw->hidecursor) { g_ddraw->hidecursor = FALSE; @@ -125,6 +127,8 @@ void mouse_unlock() } } + real_SetCursor(LoadCursor(NULL, IDC_ARROW)); + real_ClipCursor(NULL); real_SetCursorPos( diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c index b8f6fa4..43d3c82 100644 --- a/src/winapi_hooks.c +++ b/src/winapi_hooks.c @@ -122,7 +122,7 @@ int WINAPI fake_ShowCursor(BOOL bShow) HCURSOR WINAPI fake_SetCursor(HCURSOR hCursor) { if (g_ddraw && !g_ddraw->handlemouse && (g_ddraw->locked || g_ddraw->devmode)) - return real_SetCursor(hCursor); + return real_SetCursor(g_ddraw->old_cursor = hCursor); return NULL; } diff --git a/src/wndproc.c b/src/wndproc.c index 48696e5..7b1c7f8 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -102,7 +102,10 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam return DefWindowProc(hWnd, uMsg, wParam, lParam); case HTCLIENT: if (!g_ddraw->locked) + { + real_SetCursor(LoadCursor(NULL, IDC_ARROW)); return DefWindowProc(hWnd, uMsg, wParam, lParam); + } default: break; }