diff options
author | 2016-06-25 16:23:41 -0400 | |
---|---|---|
committer | 2016-06-25 20:36:54 -0400 | |
commit | eb97703a4cadfca16c61553f382b5b44c173d6cd (patch) | |
tree | ac07eae2cc2c30958ec440df44e3b1c0ae6c18cb | |
parent | f75a33f7d1ff7fa0baa893a3a374df2de23b050b (diff) |
Fix mouse behavior on OSX
-rw-r--r-- | src/osd/sdl/window.cpp | 32 | ||||
-rw-r--r-- | src/osd/sdl/window.h | 2 |
2 files changed, 27 insertions, 7 deletions
diff --git a/src/osd/sdl/window.cpp b/src/osd/sdl/window.cpp index fd4bc8943f2..7cca58ca6c3 100644 --- a/src/osd/sdl/window.cpp +++ b/src/osd/sdl/window.cpp @@ -212,27 +212,40 @@ void sdl_osd_interface::window_exit() void sdl_window_info::capture_pointer() { - if (!SDL_GetWindowGrab(platform_window<SDL_Window*>())) + if (!m_mouse_captured) + { SDL_SetWindowGrab(platform_window<SDL_Window*>(), SDL_TRUE); - SDL_SetRelativeMouseMode(SDL_TRUE); + SDL_SetRelativeMouseMode(SDL_TRUE); + m_mouse_captured = true; + } } void sdl_window_info::release_pointer() { - if (SDL_GetWindowGrab(platform_window<SDL_Window*>())) + if (m_mouse_captured) + { SDL_SetWindowGrab(platform_window<SDL_Window*>(), SDL_FALSE); - SDL_SetRelativeMouseMode(SDL_FALSE); + SDL_SetRelativeMouseMode(SDL_FALSE); + m_mouse_captured = false; + } } void sdl_window_info::hide_pointer() { - SDL_ShowCursor(SDL_DISABLE); + if (!m_mouse_hidden) + { + SDL_ShowCursor(SDL_DISABLE); + m_mouse_hidden = true; + } } void sdl_window_info::show_pointer() { - SDL_ShowCursor(SDL_ENABLE); - + if (m_mouse_hidden) + { + SDL_ShowCursor(SDL_ENABLE); + m_mouse_hidden = false; + } } @@ -429,12 +442,17 @@ error: void sdl_window_info::complete_destroy() { + // Release pointer grab and hide if needed + show_pointer(); + release_pointer(); + if (fullscreen() && video_config.switchres) { SDL_SetWindowFullscreen(platform_window<SDL_Window*>(), 0); // Try to set mode SDL_SetWindowDisplayMode(platform_window<SDL_Window*>(), &m_original_mode->mode); // Try to set mode SDL_SetWindowFullscreen(platform_window<SDL_Window*>(), SDL_WINDOW_FULLSCREEN); // Try to set mode } + SDL_DestroyWindow(platform_window<SDL_Window*>()); // release all keys ... downcast<sdl_osd_interface &>(machine().osd()).release_keys(); diff --git a/src/osd/sdl/window.h b/src/osd/sdl/window.h index d1c28c06e95..098c1823b50 100644 --- a/src/osd/sdl/window.h +++ b/src/osd/sdl/window.h @@ -111,6 +111,8 @@ private: // monitor info osd_monitor_info * m_monitor; int m_fullscreen; + bool m_mouse_captured; + bool m_mouse_hidden; void measure_fps(int update); |