Create menu_settings_apply_deferred

This commit is contained in:
twinaphex 2015-08-17 15:54:23 +02:00
parent fa177cb291
commit 0218a2755d
4 changed files with 62 additions and 52 deletions

View File

@ -43,7 +43,7 @@ int menu_entry_go_back(void)
if (!menu_list)
return -1;
menu_setting_apply_deferred();
menu_settings_apply_deferred();
menu_list_pop_stack(menu_list);
if (menu_entries_needs_refresh())

View File

@ -363,7 +363,62 @@ int menu_setting_set(unsigned type, const char *label,
return ret;
}
void menu_setting_apply_deferred(void)
int menu_setting_apply_deferred(rarch_setting_t *setting)
{
if (!setting)
return -1;
if (setting->type >= ST_GROUP)
return -1;
if (!(setting->flags & SD_FLAG_IS_DEFERRED))
return -1;
switch (setting->type)
{
case ST_BOOL:
if (*setting->value.boolean != setting->original_value.boolean)
{
setting->original_value.boolean = *setting->value.boolean;
setting->deferred_handler(setting);
}
break;
case ST_INT:
if (*setting->value.integer != setting->original_value.integer)
{
setting->original_value.integer = *setting->value.integer;
setting->deferred_handler(setting);
}
break;
case ST_UINT:
if (*setting->value.unsigned_integer != setting->original_value.unsigned_integer)
{
setting->original_value.unsigned_integer = *setting->value.unsigned_integer;
setting->deferred_handler(setting);
}
break;
case ST_FLOAT:
if (*setting->value.fraction != setting->original_value.fraction)
{
setting->original_value.fraction = *setting->value.fraction;
setting->deferred_handler(setting);
}
break;
case ST_PATH:
case ST_DIR:
case ST_STRING:
case ST_BIND:
/* Always run the deferred write handler */
setting->deferred_handler(setting);
break;
default:
break;
}
return 0;
}
void menu_settings_apply_deferred(void)
{
rarch_setting_t *setting = menu_setting_get_ptr();
@ -371,54 +426,7 @@ void menu_setting_apply_deferred(void)
return;
for (; setting->type != ST_NONE; setting++)
{
if (setting->type >= ST_GROUP)
continue;
if (!(setting->flags & SD_FLAG_IS_DEFERRED))
continue;
switch (setting->type)
{
case ST_BOOL:
if (*setting->value.boolean != setting->original_value.boolean)
{
setting->original_value.boolean = *setting->value.boolean;
setting->deferred_handler(setting);
}
break;
case ST_INT:
if (*setting->value.integer != setting->original_value.integer)
{
setting->original_value.integer = *setting->value.integer;
setting->deferred_handler(setting);
}
break;
case ST_UINT:
if (*setting->value.unsigned_integer != setting->original_value.unsigned_integer)
{
setting->original_value.unsigned_integer = *setting->value.unsigned_integer;
setting->deferred_handler(setting);
}
break;
case ST_FLOAT:
if (*setting->value.fraction != setting->original_value.fraction)
{
setting->original_value.fraction = *setting->value.fraction;
setting->deferred_handler(setting);
}
break;
case ST_PATH:
case ST_DIR:
case ST_STRING:
case ST_BIND:
/* Always run the deferred write handler */
setting->deferred_handler(setting);
break;
default:
break;
}
}
menu_setting_apply_deferred(setting);
}

View File

@ -216,7 +216,9 @@ typedef struct rarch_setting
void menu_setting_apply_deferred(void);
int menu_setting_apply_deferred(rarch_setting_t *setting);
void menu_settings_apply_deferred(void);
int menu_setting_set_flags(rarch_setting_t *setting);

View File

@ -1427,7 +1427,7 @@ void rarch_main_set_state(unsigned cmd)
break;
case RARCH_ACTION_STATE_MENU_RUNNING_FINISHED:
#ifdef HAVE_MENU
menu_setting_apply_deferred();
menu_settings_apply_deferred();
menu_driver_toggle(false);
menu_driver_unset_alive();