Skip to content

Commit d9b6e5f

Browse files
committed
frontend/mame/luaengine.cpp, ui: Patched up some rather disturbing code.
1 parent 3dfb72c commit d9b6e5f

9 files changed

Lines changed: 46 additions & 20 deletions

File tree

src/frontend/mame/luaengine.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -943,11 +943,10 @@ void lua_engine::initialize()
943943
m_menu.push_back(name);
944944
};
945945
emu["show_menu"] =
946-
[this](const char *name)
946+
[] (const char *name)
947947
{
948948
mame_ui_manager &mui = mame_machine_manager::instance()->ui();
949-
render_target &target = machine().render().ui_target(); // FIXME: it should really ask the UI manager where to show this
950-
ui::menu_plugin::show_menu(mui, target, name);
949+
ui::menu_plugin::show_menu(mui, name);
951950
};
952951
emu["register_callback"] =
953952
[this] (sol::function cb, const std::string &name)
@@ -2243,7 +2242,7 @@ void lua_engine::initialize()
22432242
ui_type["image_display_enabled"] = sol::property(&mame_ui_manager::image_display_enabled, &mame_ui_manager::set_image_display_enabled);
22442243

22452244
// undocumented/unsupported
2246-
ui_type["show_menu"] = &mame_ui_manager::show_menu; // FIXME: this is dangerous - it doesn't give a proper chance for the current UI handler to clean up
2245+
ui_type["show_menu"] = static_cast<bool (mame_ui_manager::*)()>(&mame_ui_manager::show_menu);
22472246

22482247

22492248
/* rom_entry library

src/frontend/mame/ui/filemngr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ void menu_file_manager::force_file_manager(mame_ui_manager &mui, render_target &
279279
// drop any existing menus and start the file manager
280280
menu::stack_reset(mui);
281281
menu::stack_push_special_main<menu_file_manager>(mui, target, std::move(warnings));
282-
mui.show_menu();
282+
mui.show_menu(target);
283283

284284
// make sure MAME is paused
285285
mui.machine().pause();

src/frontend/mame/ui/menu.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1913,6 +1913,7 @@ void menu::activate_menu(render_target &target)
19131913
{
19141914
if (&target != m_target)
19151915
{
1916+
assert(target.ui_container());
19161917
m_target = &target;
19171918
m_last_aspect = 0.0F;
19181919
}

src/frontend/mame/ui/pluginopt.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ void menu_plugin::populate()
4343
item_append(menu_item_type::SEPARATOR);
4444
}
4545

46-
void menu_plugin::show_menu(mame_ui_manager &mui, render_target &target, std::string_view menu)
46+
void menu_plugin::show_menu(mame_ui_manager &mui, std::string_view menu)
4747
{
4848
// add the plugin menu entry
49-
menu::stack_push<menu_plugin_opt>(mui, target, menu, true);
49+
menu::stack_push<menu_plugin_opt>(mui, mui.machine().render().ui_target(), menu, true);
5050

5151
// force the menus on
5252
mui.show_menu();

src/frontend/mame/ui/pluginopt.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class menu_plugin : public menu
2727
public:
2828
menu_plugin(mame_ui_manager &mui, render_target &target);
2929

30-
static void show_menu(mame_ui_manager &mui, render_target &target, std::string_view menu);
30+
static void show_menu(mame_ui_manager &mui, std::string_view menu);
3131

3232
virtual ~menu_plugin();
3333

src/frontend/mame/ui/selgame.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ void menu_select_game::force_game_select(mame_ui_manager &mui, render_target &ta
538538
// drop any existing menus and start the system selection menu
539539
menu::stack_reset(mui);
540540
menu::stack_push_special_main<menu_select_game>(mui, target, nullptr);
541-
mui.show_menu();
541+
mui.show_menu(target);
542542

543543
// make sure MAME is paused
544544
mui.machine().pause();

src/frontend/mame/ui/simpleselgame.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ void simple_menu_select_game::force_game_select(mame_ui_manager &mui, render_tar
463463
// drop any existing menus and start the system selection menu
464464
menu::stack_reset(mui);
465465
menu::stack_push_special_main<simple_menu_select_game>(mui, target, gamename);
466-
mui.show_menu();
466+
mui.show_menu(target);
467467

468468
// make sure MAME is paused
469469
mui.machine().pause();

src/frontend/mame/ui/ui.cpp

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -880,12 +880,14 @@ void mame_ui_manager::display_startup_screens(bool first_time)
880880
// if we're the empty driver, force the menus on
881881
if (ui::menu::stack_has_special_main_menu(*this))
882882
{
883-
show_menu();
883+
m_ui_target = &machine().render().ui_target();
884+
activate_menu();
884885
}
885886
else if (config_menu)
886887
{
887-
ui::menu::stack_push<ui::menu_main>(*this, machine().render().ui_target());
888-
show_menu();
888+
m_ui_target = &machine().render().ui_target();
889+
ui::menu::stack_push<ui::menu_main>(*this, *m_ui_target);
890+
activate_menu();
889891

890892
// loop while we have a handler
891893
while (m_handler_callback_type != ui_callback_type::GENERAL && !machine().scheduled_event_pending())
@@ -1356,7 +1358,29 @@ bool mame_ui_manager::show_profiler() const
13561358
// show_menu - show the menus
13571359
//-------------------------------------------------
13581360

1359-
void mame_ui_manager::show_menu()
1361+
bool mame_ui_manager::show_menu()
1362+
{
1363+
return show_menu(current_ui_target());
1364+
}
1365+
1366+
bool mame_ui_manager::show_menu(render_target &target)
1367+
{
1368+
if (ui_callback_type::GENERAL != m_handler_callback_type)
1369+
return false;
1370+
1371+
m_ui_target = &target;
1372+
if (ui::menu::stack_empty(*this))
1373+
ui::menu::stack_push<ui::menu_main>(*this, *m_ui_target);
1374+
activate_menu();
1375+
return true;
1376+
}
1377+
1378+
1379+
//-------------------------------------------------
1380+
// activate_menu - show the menus
1381+
//-------------------------------------------------
1382+
1383+
void mame_ui_manager::activate_menu()
13601384
{
13611385
assert(m_ui_target);
13621386

@@ -1710,7 +1734,7 @@ uint32_t mame_ui_manager::handler_ingame()
17101734
}
17111735
if (ui::menu::stack_empty(*this))
17121736
ui::menu::stack_push<ui::menu_main>(*this, *m_ui_target);
1713-
show_menu();
1737+
activate_menu();
17141738
return 0;
17151739
}
17161740

@@ -1719,7 +1743,7 @@ uint32_t mame_ui_manager::handler_ingame()
17191743
{
17201744
m_ui_target = &current_ui_target();
17211745
ui::menu::stack_push<ui::menu_sliders>(*this, *m_ui_target, true);
1722-
show_menu();
1746+
activate_menu();
17231747
return 0;
17241748
}
17251749

@@ -1774,7 +1798,7 @@ uint32_t mame_ui_manager::handler_ingame()
17741798
{
17751799
m_ui_target = &current_ui_target();
17761800
ui::menu::stack_push<ui::menu_save_state>(*this, *m_ui_target, true);
1777-
show_menu();
1801+
activate_menu();
17781802
return 0;
17791803
}
17801804

@@ -1783,7 +1807,7 @@ uint32_t mame_ui_manager::handler_ingame()
17831807
{
17841808
m_ui_target = &current_ui_target();
17851809
ui::menu::stack_push<ui::menu_load_state>(*this, *m_ui_target, true);
1786-
show_menu();
1810+
activate_menu();
17871811
return 0;
17881812
}
17891813

@@ -1889,7 +1913,7 @@ void mame_ui_manager::request_quit()
18891913
m_paused_for_menu = true;
18901914
}
18911915
ui::menu::stack_push<ui::menu_confirm_quit>(*this, *m_ui_target);
1892-
show_menu();
1916+
activate_menu();
18931917
}
18941918
}
18951919

src/frontend/mame/ui/ui.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,8 @@ class mame_ui_manager : public ui_manager
202202
bool show_fps_counter();
203203
void set_show_profiler(bool show);
204204
bool show_profiler() const;
205-
void show_menu();
205+
bool show_menu();
206+
bool show_menu(render_target &target);
206207
virtual bool is_menu_active() override;
207208
bool can_paste();
208209
void image_handler_ingame();
@@ -340,6 +341,7 @@ class mame_ui_manager : public ui_manager
340341

341342
// private methods
342343
void set_handler(ui_callback_type callback_type, handler_callback_func &&callback);
344+
void activate_menu();
343345
void frame_update();
344346
void exit();
345347
void increase_frameskip();

0 commit comments

Comments
 (0)