summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Brad Hughes <bradhugh@outlook.com>2016-06-25 16:23:41 -0400
committer Brad Hughes <bradhugh@outlook.com>2016-06-25 20:36:54 -0400
commiteb97703a4cadfca16c61553f382b5b44c173d6cd (patch)
treeac07eae2cc2c30958ec440df44e3b1c0ae6c18cb
parentf75a33f7d1ff7fa0baa893a3a374df2de23b050b (diff)
Fix mouse behavior on OSX
-rw-r--r--src/osd/sdl/window.cpp32
-rw-r--r--src/osd/sdl/window.h2
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);