Settings struct now has a flags variable

This commit is contained in:
libretroadmin 2024-09-08 22:49:26 +02:00
parent 9efb498bde
commit 01a9745f5b
6 changed files with 83 additions and 76 deletions

View file

@ -4563,7 +4563,7 @@ bool config_unload_override(void)
* Might be useful for other devices as well? */ * Might be useful for other devices as well? */
if ( settings->bools.video_window_save_positions if ( settings->bools.video_window_save_positions
&& !settings->bools.video_fullscreen) && !settings->bools.video_fullscreen)
settings->skip_window_positions = true; settings->flags |= SETTINGS_FLG_SKIP_WINDOW_POSITIONS;
if (flags & RUNLOOP_FLAG_CORE_RUNNING) if (flags & RUNLOOP_FLAG_CORE_RUNNING)
command_event(CMD_EVENT_REINIT, NULL); command_event(CMD_EVENT_REINIT, NULL);

View file

@ -40,31 +40,31 @@
#define configuration_set_float(settings, var, newvar) \ #define configuration_set_float(settings, var, newvar) \
{ \ { \
settings->modified = true; \ settings->flags |= SETTINGS_FLG_MODIFIED; \
var = newvar; \ var = newvar; \
} }
#define configuration_set_bool(settings, var, newvar) \ #define configuration_set_bool(settings, var, newvar) \
{ \ { \
settings->modified = true; \ settings->flags |= SETTINGS_FLG_MODIFIED; \
var = newvar; \ var = newvar; \
} }
#define configuration_set_uint(settings, var, newvar) \ #define configuration_set_uint(settings, var, newvar) \
{ \ { \
settings->modified = true; \ settings->flags |= SETTINGS_FLG_MODIFIED; \
var = newvar; \ var = newvar; \
} }
#define configuration_set_int(settings, var, newvar) \ #define configuration_set_int(settings, var, newvar) \
{ \ { \
settings->modified = true; \ settings->flags |= SETTINGS_FLG_MODIFIED; \
var = newvar; \ var = newvar; \
} }
#define configuration_set_string(settings, var, newvar) \ #define configuration_set_string(settings, var, newvar) \
{ \ { \
settings->modified = true; \ settings->flags |= SETTINGS_FLG_MODIFIED; \
strlcpy(var, newvar, sizeof(var)); \ strlcpy(var, newvar, sizeof(var)); \
} }
@ -88,6 +88,12 @@ enum override_type
OVERRIDE_GAME OVERRIDE_GAME
}; };
enum settings_glob_flags
{
SETTINGS_FLG_MODIFIED = (1 << 0),
SETTINGS_FLG_SKIP_WINDOW_POSITIONS = (1 << 1)
};
typedef struct settings typedef struct settings
{ {
struct struct
@ -590,8 +596,6 @@ typedef struct settings
char app_icon[PATH_MAX_LENGTH]; char app_icon[PATH_MAX_LENGTH];
} paths; } paths;
bool modified;
bool skip_window_positions;
struct struct
{ {
@ -1089,6 +1093,8 @@ typedef struct settings
#endif #endif
} bools; } bools;
uint8_t flags;
} settings_t; } settings_t;
/** /**

View file

@ -567,9 +567,9 @@ bool dxgi_check_display_hdr_support(DXGIFactory1 factory, HWND hwnd)
video_driver_set_hdr_support(); video_driver_set_hdr_support();
else else
{ {
settings_t* settings = config_get_ptr(); settings_t* settings = config_get_ptr();
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
settings->bools.video_hdr_enable = false; settings->bools.video_hdr_enable = false;
video_driver_unset_hdr_support(); video_driver_unset_hdr_support();
} }

View file

@ -877,12 +877,12 @@ static void win32_save_position(void)
placement.rcNormalPosition.right = 0; placement.rcNormalPosition.right = 0;
placement.rcNormalPosition.bottom = 0; placement.rcNormalPosition.bottom = 0;
/* If 'skip_window_positions' is true it means we've /* If SETTINGS_FLG_SKIP_WINDOW_POSITIONS is set, it means we've
* just unloaded an override that had fullscreen mode * just unloaded an override that had fullscreen mode
* enabled while we have windowed mode set globally, * enabled while we have windowed mode set globally,
* in this case we skip the following blocks to not * in this case we skip the following blocks to not
* end up with fullscreen size and position. */ * end up with fullscreen size and position. */
if (!settings->skip_window_positions) if (!(settings->flags & SETTINGS_FLG_SKIP_WINDOW_POSITIONS))
{ {
if (GetWindowPlacement(main_window.hwnd, &placement)) if (GetWindowPlacement(main_window.hwnd, &placement))
{ {
@ -897,7 +897,7 @@ static void win32_save_position(void)
} }
} }
else else
settings->skip_window_positions = false; settings->flags &= ~SETTINGS_FLG_SKIP_WINDOW_POSITIONS;
if (window_save_positions) if (window_save_positions)
{ {

View file

@ -7343,7 +7343,8 @@ static int action_ok_push_dropdown_item_input_select_reserved_device(const char
} }
} }
} }
settings->modified = true;
settings->flags |= SETTINGS_FLG_MODIFIED;
command_event(CMD_EVENT_REINIT, NULL); command_event(CMD_EVENT_REINIT, NULL);
@ -7401,7 +7402,7 @@ static int action_ok_push_dropdown_item_input_select_physical_keyboard(const cha
* now or already working as the physical keyboard. * now or already working as the physical keyboard.
*/ */
} }
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
command_event(CMD_EVENT_REINIT, NULL); command_event(CMD_EVENT_REINIT, NULL);

View file

@ -1050,8 +1050,8 @@ static int setting_generic_action_ok_default(
void setting_generic_handle_change(rarch_setting_t *setting) void setting_generic_handle_change(rarch_setting_t *setting)
{ {
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
if (setting->change_handler) if (setting->change_handler)
setting->change_handler(setting); setting->change_handler(setting);
@ -5766,7 +5766,7 @@ static int setting_action_left_input_device_index(
else else
*p = MAX_INPUT_DEVICES - 1; *p = MAX_INPUT_DEVICES - 1;
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
return 0; return 0;
} }
@ -5786,7 +5786,7 @@ static int setting_action_left_input_device_reservation_type(
else else
*p = INPUT_DEVICE_RESERVATION_LAST - 1; *p = INPUT_DEVICE_RESERVATION_LAST - 1;
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
return 0; return 0;
} }
@ -5807,7 +5807,7 @@ static int setting_action_left_input_mouse_index(
else else
*p = MAX_INPUT_DEVICES - 1; *p = MAX_INPUT_DEVICES - 1;
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
return 0; return 0;
} }
@ -7962,7 +7962,7 @@ static int setting_action_right_analog_dpad_mode(
port = setting->index_offset; port = setting->index_offset;
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
settings->uints.input_analog_dpad_mode[port] = settings->uints.input_analog_dpad_mode[port] =
(settings->uints.input_analog_dpad_mode[port] + 1) (settings->uints.input_analog_dpad_mode[port] + 1)
% ANALOG_DPAD_LAST; % ANALOG_DPAD_LAST;
@ -8056,7 +8056,7 @@ static int setting_action_right_input_device_index(
else else
*p = 0; *p = 0;
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
return 0; return 0;
} }
@ -8076,7 +8076,7 @@ static int setting_action_right_input_device_reservation_type(
else else
*p = 0; *p = 0;
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
return 0; return 0;
} }
@ -8096,7 +8096,7 @@ static int setting_action_right_input_mouse_index(
else else
*p = 0; *p = 0;
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
return 0; return 0;
} }
@ -8644,23 +8644,23 @@ static void general_write_handler(rarch_setting_t *setting)
break; break;
#endif #endif
case MENU_ENUM_LABEL_VIDEO_SCALE: case MENU_ENUM_LABEL_VIDEO_SCALE:
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
settings->uints.video_scale = *setting->value.target.unsigned_integer; settings->uints.video_scale = *setting->value.target.unsigned_integer;
if (!settings->bools.video_fullscreen) if (!settings->bools.video_fullscreen)
rarch_cmd = CMD_EVENT_REINIT; rarch_cmd = CMD_EVENT_REINIT;
break; break;
case MENU_ENUM_LABEL_VIDEO_HDR_ENABLE: case MENU_ENUM_LABEL_VIDEO_HDR_ENABLE:
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
settings->bools.video_hdr_enable = *setting->value.target.boolean; settings->bools.video_hdr_enable = *setting->value.target.boolean;
rarch_cmd = CMD_EVENT_REINIT; rarch_cmd = CMD_EVENT_REINIT;
break; break;
case MENU_ENUM_LABEL_VIDEO_HDR_MAX_NITS: case MENU_ENUM_LABEL_VIDEO_HDR_MAX_NITS:
{ {
video_driver_state_t *video_st = video_state_get_ptr(); video_driver_state_t *video_st = video_state_get_ptr();
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
settings->floats.video_hdr_max_nits = roundf(*setting->value.target.fraction); settings->floats.video_hdr_max_nits = roundf(*setting->value.target.fraction);
if (video_st && video_st->poke && video_st->poke->set_hdr_max_nits) if (video_st && video_st->poke && video_st->poke->set_hdr_max_nits)
video_st->poke->set_hdr_max_nits(video_st->data, settings->floats.video_hdr_max_nits); video_st->poke->set_hdr_max_nits(video_st->data, settings->floats.video_hdr_max_nits);
@ -8668,10 +8668,10 @@ static void general_write_handler(rarch_setting_t *setting)
break; break;
case MENU_ENUM_LABEL_VIDEO_HDR_PAPER_WHITE_NITS: case MENU_ENUM_LABEL_VIDEO_HDR_PAPER_WHITE_NITS:
{ {
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
video_driver_state_t *video_st = video_state_get_ptr(); video_driver_state_t *video_st = video_state_get_ptr();
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
settings->floats.video_hdr_paper_white_nits = roundf(*setting->value.target.fraction); settings->floats.video_hdr_paper_white_nits = roundf(*setting->value.target.fraction);
if (video_st && video_st->poke && video_st->poke->set_hdr_paper_white_nits) if (video_st && video_st->poke && video_st->poke->set_hdr_paper_white_nits)
@ -8680,9 +8680,9 @@ static void general_write_handler(rarch_setting_t *setting)
break; break;
case MENU_ENUM_LABEL_VIDEO_HDR_CONTRAST: case MENU_ENUM_LABEL_VIDEO_HDR_CONTRAST:
{ {
video_driver_state_t *video_st = video_state_get_ptr(); video_driver_state_t *video_st = video_state_get_ptr();
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
settings->floats.video_hdr_display_contrast = *setting->value.target.fraction; settings->floats.video_hdr_display_contrast = *setting->value.target.fraction;
if (video_st && video_st->poke && video_st->poke->set_hdr_contrast) if (video_st && video_st->poke && video_st->poke->set_hdr_contrast)
video_st->poke->set_hdr_contrast(video_st->data, VIDEO_HDR_MAX_CONTRAST - settings->floats.video_hdr_display_contrast); video_st->poke->set_hdr_contrast(video_st->data, VIDEO_HDR_MAX_CONTRAST - settings->floats.video_hdr_display_contrast);
@ -8690,9 +8690,9 @@ static void general_write_handler(rarch_setting_t *setting)
break; break;
case MENU_ENUM_LABEL_VIDEO_HDR_EXPAND_GAMUT: case MENU_ENUM_LABEL_VIDEO_HDR_EXPAND_GAMUT:
{ {
video_driver_state_t *video_st = video_state_get_ptr(); video_driver_state_t *video_st = video_state_get_ptr();
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
settings->bools.video_hdr_expand_gamut = *setting->value.target.boolean; settings->bools.video_hdr_expand_gamut = *setting->value.target.boolean;
if (video_st && video_st->poke && video_st->poke->set_hdr_expand_gamut) if (video_st && video_st->poke && video_st->poke->set_hdr_expand_gamut)
video_st->poke->set_hdr_expand_gamut(video_st->data, settings->bools.video_hdr_expand_gamut); video_st->poke->set_hdr_expand_gamut(video_st->data, settings->bools.video_hdr_expand_gamut);
@ -8703,7 +8703,7 @@ static void general_write_handler(rarch_setting_t *setting)
break; break;
#ifdef ANDROID #ifdef ANDROID
case MENU_ENUM_LABEL_INPUT_SELECT_PHYSICAL_KEYBOARD: case MENU_ENUM_LABEL_INPUT_SELECT_PHYSICAL_KEYBOARD:
settings->modified = true; settings->flags |= SETTINGS_FLG_MODIFIED;
strlcpy(settings->arrays.input_android_physical_keyboard, setting->value.target.string, sizeof(settings->arrays.input_android_physical_keyboard)); strlcpy(settings->arrays.input_android_physical_keyboard, setting->value.target.string, sizeof(settings->arrays.input_android_physical_keyboard));
break; break;
#endif #endif