Simplify levelwarp_menu handling of EVENT_WINDOW_CLOSE

This commit is contained in:
Kp 2020-12-27 22:03:09 +00:00
parent e24d3cba9a
commit 306b5ddebe

View file

@ -1521,41 +1521,44 @@ struct levelwarp_menu_items
}}; }};
}; };
struct levelwarp_menu : levelwarp_menu_items, newmenu struct levelwarp_menu : levelwarp_menu_items, passive_newmenu
{ {
levelwarp_menu(grs_canvas &src) : levelwarp_menu(grs_canvas &src) :
newmenu(menu_title{nullptr}, menu_subtitle{TXT_WARP_TO_LEVEL}, menu_filename{nullptr}, tiny_mode_flag::normal, tab_processing_flag::ignore, adjusted_citem::create(menu_items, 0), src) passive_newmenu(menu_title{nullptr}, menu_subtitle{TXT_WARP_TO_LEVEL}, menu_filename{nullptr}, tiny_mode_flag::normal, tab_processing_flag::ignore, adjusted_citem::create(menu_items, 0), src)
{ {
} }
virtual int subfunction_handler(const d_event &event) override; virtual window_event_result event_handler(const d_event &event) override;
void handle_close_event();
}; };
int levelwarp_menu::subfunction_handler(const d_event &event) void levelwarp_menu::handle_close_event()
{
if (!text[0])
return;
char *p;
const auto l = strtoul(text, &p, 0);
if (*p)
return;
/* No handling for secret levels. Warping to secret
* levels is not supported.
*/
if (l > Last_level)
return;
window_set_visible(*Game_wind, 0);
StartNewLevel(l);
window_set_visible(*Game_wind, 1);
}
window_event_result levelwarp_menu::event_handler(const d_event &event)
{ {
switch (event.type) switch (event.type)
{ {
case EVENT_WINDOW_CLOSE: case EVENT_WINDOW_CLOSE:
{ handle_close_event();
if (!text[0]) return window_event_result::ignored;
break;
char *p;
const auto l = strtoul(text, &p, 0);
if (*p)
break;
/* No handling for secret levels. Warping to secret
* levels is not supported.
*/
if (l > Last_level)
break;
window_set_visible(*Game_wind, 0);
StartNewLevel(l);
window_set_visible(*Game_wind, 1);
}
break;
default: default:
break; return newmenu::event_handler(event);
} }
return 0;
} }
static window_event_result FinalCheats() static window_event_result FinalCheats()