diff --git a/config.def.h b/config.def.h index 4172b098f4..4c184f6cfa 100644 --- a/config.def.h +++ b/config.def.h @@ -485,6 +485,8 @@ static bool config_save_on_exit = true; static const bool default_overlay_enable = false; +static const bool overlay_hide_in_menu = true; + #ifdef HAVE_MENU static bool default_block_config_read = true; diff --git a/configuration.c b/configuration.c index 9f6875fa00..7d41fcb758 100644 --- a/configuration.c +++ b/configuration.c @@ -1566,6 +1566,7 @@ static bool config_load_file(const char *path, bool set_defaults) config_get_path(conf, "input_overlay", settings->input.overlay, sizeof(settings->input.overlay)); CONFIG_GET_BOOL_BASE(conf, settings, input.overlay_enable, "input_overlay_enable"); CONFIG_GET_BOOL_BASE(conf, settings, input.overlay_enable_autopreferred, "input_overlay_enable_autopreferred"); + CONFIG_GET_BOOL_BASE(conf, settings, input.overlay_hide_in_menu, "input_overlay_hide_in_menu"); CONFIG_GET_FLOAT_BASE(conf, settings, input.overlay_opacity, "input_overlay_opacity"); CONFIG_GET_FLOAT_BASE(conf, settings, input.overlay_scale, "input_overlay_scale"); @@ -2573,6 +2574,7 @@ bool config_save_file(const char *path) config_set_path(conf, "input_overlay", settings->input.overlay); config_set_bool(conf, "input_overlay_enable", settings->input.overlay_enable); config_set_bool(conf, "input_overlay_enable_autopreferred", settings->input.overlay_enable_autopreferred); + config_set_bool(conf, "input_overlay_hide_in_menu", settings->input.overlay_hide_in_menu); config_set_float(conf, "input_overlay_opacity", settings->input.overlay_opacity); config_set_float(conf, "input_overlay_scale", diff --git a/configuration.h b/configuration.h index b8a9421e99..e603e5ac0c 100644 --- a/configuration.h +++ b/configuration.h @@ -231,6 +231,7 @@ typedef struct settings bool overlay_enable; bool overlay_enable_autopreferred; + bool overlay_hide_in_menu; char overlay[PATH_MAX_LENGTH]; float overlay_opacity; float overlay_scale; diff --git a/menu/intl/menu_hash_us.c b/menu/intl/menu_hash_us.c index adafb37fcd..76bc135844 100644 --- a/menu/intl/menu_hash_us.c +++ b/menu/intl/menu_hash_us.c @@ -26,6 +26,8 @@ static const char *menu_hash_to_str_us_label(uint32_t hash) { switch (hash) { + case MENU_LABEL_INPUT_OVERLAY_HIDE_IN_MENU: + return "overlay_hide_in_menu"; case MENU_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE: return "no_playlist_entries_available"; case MENU_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST: @@ -614,6 +616,8 @@ const char *menu_hash_to_str_us(uint32_t hash) switch (hash) { + case MENU_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU: + return "Hide Overlay In Menu"; case MENU_VALUE_LANG_POLISH: return "Polish"; case MENU_LABEL_VALUE_OVERLAY_AUTOLOAD_PREFERRED: diff --git a/menu/menu_hash.h b/menu/menu_hash.h index 4fcd6112c2..0a61b204c7 100644 --- a/menu/menu_hash.h +++ b/menu/menu_hash.h @@ -22,6 +22,9 @@ extern "C" { #endif +#define MENU_LABEL_INPUT_OVERLAY_HIDE_IN_MENU 0xf09e230aU +#define MENU_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU 0x39b5bd0dU + #define MENU_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST 0x39310fc8U #define MENU_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST 0xb4f82700U diff --git a/menu/menu_setting.c b/menu/menu_setting.c index b87c9bcc47..17a44dd4bc 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -2474,11 +2474,18 @@ static void settings_data_list_current_add_flags( static void overlay_enable_toggle_change_handler(void *data) { + settings_t *settings = config_get_ptr(); rarch_setting_t *setting = (rarch_setting_t *)data; if (!setting) return; + if (settings && settings->input.overlay_hide_in_menu) + { + event_command(EVENT_CMD_OVERLAY_DEINIT); + return; + } + if (setting->value.boolean) event_command(EVENT_CMD_OVERLAY_INIT); else @@ -4542,7 +4549,7 @@ static bool setting_append_list_overlay_options( (*list)[list_info->index - 1].change_handler = overlay_enable_toggle_change_handler; CONFIG_BOOL( - settings->input.overlay_enable, + settings->input.overlay_enable_autopreferred, menu_hash_to_str(MENU_LABEL_OVERLAY_AUTOLOAD_PREFERRED), menu_hash_to_str(MENU_LABEL_VALUE_OVERLAY_AUTOLOAD_PREFERRED), true, @@ -4555,6 +4562,20 @@ static bool setting_append_list_overlay_options( general_read_handler); (*list)[list_info->index - 1].change_handler = overlay_enable_toggle_change_handler; + CONFIG_BOOL( + settings->input.overlay_hide_in_menu, + menu_hash_to_str(MENU_LABEL_INPUT_OVERLAY_HIDE_IN_MENU), + menu_hash_to_str(MENU_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU), + overlay_hide_in_menu, + menu_hash_to_str(MENU_VALUE_OFF), + menu_hash_to_str(MENU_VALUE_ON), + group_info.name, + subgroup_info.name, + parent_group, + general_write_handler, + general_read_handler); + (*list)[list_info->index - 1].change_handler = overlay_enable_toggle_change_handler; + CONFIG_BOOL( settings->osk.enable, menu_hash_to_str(MENU_LABEL_INPUT_OSK_OVERLAY_ENABLE), diff --git a/retroarch.cfg b/retroarch.cfg index 102d77cf01..d710527be7 100644 --- a/retroarch.cfg +++ b/retroarch.cfg @@ -304,6 +304,8 @@ # Enable or disable the current overlay. # input_overlay_enable = true +# Hide the current overlay from appearing in menu screens. +# input_overlay_hide_in_menu = true # Path to input overlay # input_overlay = diff --git a/runloop.c b/runloop.c index dcf7acb32f..130399b9ff 100644 --- a/runloop.c +++ b/runloop.c @@ -430,23 +430,23 @@ static void check_shader_dir(bool pressed_next, bool pressed_prev) static void do_state_check_menu_toggle(void) { global_t *global = global_get_ptr(); + settings_t *settings = config_get_ptr(); if (menu_driver_alive()) { if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY)) { rarch_main_set_state(RARCH_ACTION_STATE_MENU_RUNNING_FINISHED); -#if 0 - event_command(EVENT_CMD_OVERLAY_INIT); -#endif + if (settings->input.overlay_hide_in_menu) + event_command(EVENT_CMD_OVERLAY_INIT); } return; } rarch_main_set_state(RARCH_ACTION_STATE_MENU_RUNNING); -#if 0 - event_command(EVENT_CMD_OVERLAY_DEINIT); -#endif + + if (settings->input.overlay_hide_in_menu) + event_command(EVENT_CMD_OVERLAY_DEINIT); } #endif @@ -873,6 +873,7 @@ static void rarch_main_iterate_linefeed_overlay(void) { static char prev_overlay_restore = false; driver_t *driver = driver_get_ptr(); + settings_t *settings = config_get_ptr(); if (driver->osk_enable && !driver->keyboard_linefeed_enable) { @@ -890,7 +891,8 @@ static void rarch_main_iterate_linefeed_overlay(void) } else if (prev_overlay_restore) { - event_command(EVENT_CMD_OVERLAY_INIT); + if (!settings->input.overlay_hide_in_menu) + event_command(EVENT_CMD_OVERLAY_INIT); prev_overlay_restore = false; } }