diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index 67c7fd53df..d2296afa03 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -3773,5 +3773,5 @@ STR_5436 :Edit Title Sequences... STR_5437 :No save selected STR_5438 :Can't make changes while command editor is open STR_5439 :A restart is used without a wait command -STR_5440 : +STR_5440 :Minimize fullscreen on focus loss STR_5441 :{SMALLFONT}{BLACK}Identifies rides by track type,{NEWLINE}so vehicles can be changed{NEWLINE}afterwards, like in RCT1. Only{NEWLINE}toggleable in the title screen. diff --git a/src/config.c b/src/config.c index 551dcb0e1d..a98127b24e 100644 --- a/src/config.c +++ b/src/config.c @@ -182,6 +182,7 @@ config_property_definition _generalDefinitions[] = { { offsetof(general_configuration, last_run_version), "last_run_version", CONFIG_VALUE_TYPE_STRING, { .value_string = NULL }, NULL }, { offsetof(general_configuration, invert_viewport_drag), "invert_viewport_drag", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL }, { offsetof(general_configuration, load_save_sort), "load_save_sort", CONFIG_VALUE_TYPE_UINT8, SORT_NAME_ASCENDING, NULL }, + { offsetof(general_configuration, minimize_fullscreen_focus_loss), "minimize_fullscreen_focus_loss",CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, }; config_property_definition _interfaceDefinitions[] = { diff --git a/src/config.h b/src/config.h index 60a95d9022..922d0edbf7 100644 --- a/src/config.h +++ b/src/config.h @@ -152,6 +152,7 @@ typedef struct { utf8string last_run_version; uint8 invert_viewport_drag; uint8 load_save_sort; + uint8 minimize_fullscreen_focus_loss; } general_configuration; typedef struct { diff --git a/src/platform/shared.c b/src/platform/shared.c index 6e2ea0cf26..a0a929c8b4 100644 --- a/src/platform/shared.c +++ b/src/platform/shared.c @@ -534,6 +534,7 @@ static void platform_create_window() } SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, 0); + SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, gConfigGeneral.minimize_fullscreen_focus_loss ? "1" : "0"); platform_load_cursors(); @@ -730,6 +731,8 @@ void platform_refresh_video() { int width = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16); int height = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, sint16); + + SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, gConfigGeneral.minimize_fullscreen_focus_loss ? "1" : "0"); if (gConfigGeneral.hardware_display) { if (gRenderer == NULL) diff --git a/src/windows/options.c b/src/windows/options.c index 341d98ec95..f9e592a518 100644 --- a/src/windows/options.c +++ b/src/windows/options.c @@ -78,6 +78,7 @@ enum WINDOW_OPTIONS_WIDGET_IDX { WIDX_TILE_SMOOTHING_CHECKBOX, WIDX_GRIDLINES_CHECKBOX, WIDX_HARDWARE_DISPLAY_CHECKBOX, + WIDX_MINIMIZE_FOCUS_LOSS, WIDX_CONSTRUCTION_MARKER, WIDX_CONSTRUCTION_MARKER_DROPDOWN, WIDX_THEMES, @@ -162,11 +163,12 @@ static rct_widget window_options_display_widgets[] = { { WWT_CHECKBOX, 1, 10, 290, 84, 95, STR_TILE_SMOOTHING, STR_TILE_SMOOTHING_TIP }, // landscape smoothing { WWT_CHECKBOX, 1, 10, 290, 99, 110, STR_GRIDLINES, STR_GRIDLINES_TIP }, // gridlines { WWT_CHECKBOX, 1, 10, 290, 114, 125, 5154, STR_NONE }, // hardware display - { WWT_DROPDOWN, 1, 155, 299, 128, 139, STR_NONE, STR_NONE }, // construction marker - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 129, 138, 876, STR_NONE }, - { WWT_DROPDOWN, 1, 155, 299, 143, 154, STR_NONE, STR_NONE }, // colour schemes + { WWT_CHECKBOX, 1, 10, 290, 129, 140, 5440, STR_NONE }, // minimize fullscreen focus loss + { WWT_DROPDOWN, 1, 155, 299, 143, 154, STR_NONE, STR_NONE }, // construction marker { WWT_DROPDOWN_BUTTON, 1, 288, 298, 144, 153, 876, STR_NONE }, - { WWT_DROPDOWN_BUTTON, 1, 26, 185, 159, 170, 5153, STR_NONE }, // colour schemes button + { WWT_DROPDOWN, 1, 155, 299, 158, 169, STR_NONE, STR_NONE }, // colour schemes + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 159, 168, 876, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 26, 185, 174, 185, 5153, STR_NONE }, // colour schemes button { WIDGETS_END }, }; @@ -325,6 +327,7 @@ static uint32 window_options_page_enabled_widgets[] = { (1 << WIDX_TILE_SMOOTHING_CHECKBOX) | (1 << WIDX_GRIDLINES_CHECKBOX) | (1 << WIDX_HARDWARE_DISPLAY_CHECKBOX) | + (1 << WIDX_MINIMIZE_FOCUS_LOSS) | (1 << WIDX_CONSTRUCTION_MARKER) | (1 << WIDX_CONSTRUCTION_MARKER_DROPDOWN) | (1 << WIDX_THEMES) | @@ -460,6 +463,12 @@ static void window_options_mouseup() config_save_default(); window_invalidate(w); break; + case WIDX_MINIMIZE_FOCUS_LOSS: + gConfigGeneral.minimize_fullscreen_focus_loss ^= 1; + platform_refresh_video(); + config_save_default(); + window_invalidate(w); + break; case WIDX_THEMES_BUTTON: window_themes_open(); window_invalidate(w); @@ -1055,6 +1064,7 @@ static void window_options_invalidate() widget_set_checkbox_value(w, WIDX_TILE_SMOOTHING_CHECKBOX, (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_DISABLE_SMOOTH_LANDSCAPE) == 0); widget_set_checkbox_value(w, WIDX_GRIDLINES_CHECKBOX, RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_ALWAYS_SHOW_GRIDLINES); widget_set_checkbox_value(w, WIDX_HARDWARE_DISPLAY_CHECKBOX, gConfigGeneral.hardware_display); + widget_set_checkbox_value(w, WIDX_MINIMIZE_FOCUS_LOSS, gConfigGeneral.minimize_fullscreen_focus_loss); // construction marker: celsius/fahrenheit window_options_display_widgets[WIDX_CONSTRUCTION_MARKER].image = STR_WHITE + RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_CONSTRUCTION_MARKER, uint8); @@ -1068,6 +1078,7 @@ static void window_options_invalidate() window_options_display_widgets[WIDX_CONSTRUCTION_MARKER].type = WWT_DROPDOWN; window_options_display_widgets[WIDX_CONSTRUCTION_MARKER_DROPDOWN].type = WWT_DROPDOWN_BUTTON; window_options_display_widgets[WIDX_HARDWARE_DISPLAY_CHECKBOX].type = WWT_CHECKBOX; + window_options_display_widgets[WIDX_MINIMIZE_FOCUS_LOSS].type = WWT_CHECKBOX; window_options_display_widgets[WIDX_THEMES].type = WWT_DROPDOWN; window_options_display_widgets[WIDX_THEMES_DROPDOWN].type = WWT_DROPDOWN_BUTTON; window_options_display_widgets[WIDX_THEMES_BUTTON].type = WWT_DROPDOWN_BUTTON;