diff options
-rw-r--r-- | src/osd/windows/window.cpp | 28 | ||||
-rw-r--r-- | src/osd/windows/winmain.h | 1 |
2 files changed, 27 insertions, 2 deletions
diff --git a/src/osd/windows/window.cpp b/src/osd/windows/window.cpp index 96810127c8b..bb81f0b9de5 100644 --- a/src/osd/windows/window.cpp +++ b/src/osd/windows/window.cpp @@ -274,15 +274,39 @@ void windows_osd_interface::update_slider_list() { for (win_window_info *window = win_window_list; window != nullptr; window = window->m_next) { - // every created window uses the same renderer if (window->m_renderer && window->m_renderer->sliders_dirty()) { - m_sliders = window->m_renderer->get_slider_list(); + build_slider_list(); return; } } } +void windows_osd_interface::build_slider_list() +{ + m_sliders = nullptr; + slider_state *curr = m_sliders; + for (win_window_info *info = win_window_list; info != nullptr; info = info->m_next) + { + slider_state *window_sliders = info->m_renderer->get_slider_list(); + if (window_sliders != nullptr) + { + if (m_sliders == nullptr) + { + m_sliders = curr = window_sliders; + } + else + { + while (curr->next != nullptr) + { + curr = curr->next; + } + curr->next = window_sliders; + } + } + } +} + //============================================================ // winwindow_exit // (main thread) diff --git a/src/osd/windows/winmain.h b/src/osd/windows/winmain.h index 91a7eac3d0f..666c533e182 100644 --- a/src/osd/windows/winmain.h +++ b/src/osd/windows/winmain.h @@ -271,6 +271,7 @@ public: private: virtual void osd_exit() override; + void build_slider_list(); void update_slider_list(); windows_options & m_options; |