diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c index 9d47e4ad7d..ee869f9e51 100644 --- a/src/events/SDL_mouse.c +++ b/src/events/SDL_mouse.c @@ -1607,7 +1607,7 @@ bool SDL_SetCursor(SDL_Cursor *cursor) { SDL_Mouse *mouse = SDL_GetMouse(); - // Return immediately if setting the cursor to the currently set one (fixes #7151) + // already on this cursor, no further action required if (cursor == mouse->cur_cursor) { return true; } @@ -1627,23 +1627,20 @@ bool SDL_SetCursor(SDL_Cursor *cursor) } } mouse->cur_cursor = cursor; + } else if (mouse->focus) { + cursor = mouse->cur_cursor; } else { - if (mouse->focus) { - cursor = mouse->cur_cursor; - } else { - cursor = mouse->def_cursor; - } + cursor = mouse->def_cursor; } - if (cursor && (!mouse->focus || (mouse->cursor_visible && (!mouse->relative_mode || !mouse->relative_mode_hide_cursor)))) { - if (mouse->ShowCursor) { - mouse->ShowCursor(cursor); - } - } else { - if (mouse->ShowCursor) { - mouse->ShowCursor(NULL); - } + if (mouse->focus && (!mouse->cursor_visible || (mouse->relative_mode && mouse->relative_mode_hide_cursor))) { + cursor = NULL; } + + if (mouse->ShowCursor) { + mouse->ShowCursor(cursor); + } + return true; }