From 4ea29bbf80b050d9a26b039541d94f3b7ad90434 Mon Sep 17 00:00:00 2001 From: Hielke Morsink Date: Sun, 26 Feb 2017 13:24:35 +0100 Subject: [PATCH] Close conflicting windows in main menu * The main buttons close the other main windows in the main menu * Only close other windows if the next is not open already --- src/openrct2/windows/title_menu.c | 32 ++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/openrct2/windows/title_menu.c b/src/openrct2/windows/title_menu.c index c0126076dc..cee05fc5cb 100644 --- a/src/openrct2/windows/title_menu.c +++ b/src/openrct2/windows/title_menu.c @@ -136,15 +136,41 @@ static void window_title_menu_scenarioselect_callback(const utf8 *path) static void window_title_menu_mouseup(rct_window *w, sint32 widgetIndex) { + rct_window *windowToOpen = NULL; + switch (widgetIndex) { case WIDX_START_NEW_GAME: - window_scenarioselect_open(window_title_menu_scenarioselect_callback); + windowToOpen = window_find_by_class(WC_SCENARIO_SELECT); + if (windowToOpen != NULL) { + window_bring_to_front(windowToOpen); + } + else { + window_close_by_class(WC_LOADSAVE); + window_close_by_class(WC_SERVER_LIST); + window_scenarioselect_open(window_title_menu_scenarioselect_callback); + } break; case WIDX_CONTINUE_SAVED_GAME: - game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 0, 0); + windowToOpen = window_find_by_class(WC_LOADSAVE); + if (windowToOpen != NULL) { + window_bring_to_front(windowToOpen); + } + else { + window_close_by_class(WC_SCENARIO_SELECT); + window_close_by_class(WC_SERVER_LIST); + game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 0, 0); + } break; case WIDX_MULTIPLAYER: - window_server_list_open(); + windowToOpen = window_find_by_class(WC_SERVER_LIST); + if (windowToOpen != NULL) { + window_bring_to_front(windowToOpen); + } + else { + window_close_by_class(WC_SCENARIO_SELECT); + window_close_by_class(WC_LOADSAVE); + window_server_list_open(); + } break; } }