summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/input/input_sdlcommon.cpp
diff options
context:
space:
mode:
author Brad Hughes <bradhugh@outlook.com>2016-08-22 08:28:55 -0400
committer Brad Hughes <bradhugh@outlook.com>2016-08-22 15:02:56 -0400
commit7d3ce203b52531989d8895f92c19c83f8a14eb21 (patch)
treefe9e40b536a046872041760c7b82c50c311ccf27 /src/osd/modules/input/input_sdlcommon.cpp
parenta65776420e6e7d16ff494f00b1eb0fede2be390e (diff)
osd input code cleanup (nw)
Diffstat (limited to 'src/osd/modules/input/input_sdlcommon.cpp')
-rw-r--r--src/osd/modules/input/input_sdlcommon.cpp33
1 files changed, 20 insertions, 13 deletions
diff --git a/src/osd/modules/input/input_sdlcommon.cpp b/src/osd/modules/input/input_sdlcommon.cpp
index 4abcbd0251c..028c4d53ee9 100644
--- a/src/osd/modules/input/input_sdlcommon.cpp
+++ b/src/osd/modules/input/input_sdlcommon.cpp
@@ -19,6 +19,7 @@
#include <stddef.h>
#include <mutex>
#include <memory>
+#include <algorithm>
// MAME headers
#include "emu.h"
@@ -35,19 +36,20 @@
#define GET_WINDOW(ev) window_from_id((ev)->windowID)
//#define GET_WINDOW(ev) ((ev)->windowID)
-static inline std::shared_ptr<sdl_window_info> window_from_id(Uint32 windowID)
+static std::shared_ptr<sdl_window_info> window_from_id(Uint32 windowID)
{
- SDL_Window *window = SDL_GetWindowFromID(windowID);
+ SDL_Window *sdl_window = SDL_GetWindowFromID(windowID);
- for (auto w : osd_common_t::s_window_list)
+ auto& windows = osd_common_t::s_window_list;
+ auto window = std::find_if(windows.begin(), windows.end(), [sdl_window](std::shared_ptr<osd_window> w)
{
- //printf("w->window_id: %d\n", w->window_id);
- if (w->platform_window<SDL_Window*>() == window)
- {
- return std::static_pointer_cast<sdl_window_info>(w);
- }
- }
- return nullptr;
+ return w->platform_window<SDL_Window*>() == sdl_window;
+ });
+
+ if (window == windows.end())
+ return nullptr;
+
+ return std::static_pointer_cast<sdl_window_info>(*window);
}
void sdl_event_manager::process_events(running_machine &machine)
@@ -64,8 +66,10 @@ void sdl_event_manager::process_events(running_machine &machine)
auto subscribers = m_subscription_index.equal_range(sdlevent.type);
// Dispatch the events
- for (auto iter = subscribers.first; iter != subscribers.second; ++iter)
- iter->second->handle_event(sdlevent);
+ std::for_each(subscribers.first, subscribers.second, [&sdlevent](auto sub)
+ {
+ sub.second->handle_event(sdlevent);
+ });
}
}
@@ -74,7 +78,10 @@ void sdl_event_manager::process_window_event(running_machine &machine, SDL_Event
std::shared_ptr<sdl_window_info> window = GET_WINDOW(&sdlevent.window);
if (window == nullptr)
+ {
+ osd_printf_warning("Skipped window event due to missing window param from SDL\n");
return;
+ }
switch (sdlevent.window.event)
{
@@ -98,7 +105,7 @@ void sdl_event_manager::process_window_event(running_machine &machine, SDL_Event
break;
case SDL_WINDOWEVENT_RESIZED:
-#ifndef SDLMAME_WIN32
+#ifdef SDLMAME_LINUX
/* FIXME: SDL2 sends some spurious resize events on Ubuntu
* while in fullscreen mode. Ignore them for now.
*/