Several RARCH_CTL switches don't belong to retroarch state but

runloop state, hence remove
This commit is contained in:
libretroadmin 2023-01-22 20:16:14 +01:00
parent b23eaba217
commit e798f99fea
6 changed files with 154 additions and 183 deletions

View file

@ -470,6 +470,7 @@ static int menu_displaylist_parse_core_info(menu_displaylist_info_t *info,
core_info_t *core_info = NULL; core_info_t *core_info = NULL;
const char *core_path = NULL; const char *core_path = NULL;
const char *savestate_support = NULL; const char *savestate_support = NULL;
runloop_state_t *runloop_st = runloop_state_get_ptr();
bool kiosk_mode_enable = settings->bools.kiosk_mode_enable; bool kiosk_mode_enable = settings->bools.kiosk_mode_enable;
#if defined(HAVE_NETWORKING) && defined(HAVE_ONLINE_UPDATER) #if defined(HAVE_NETWORKING) && defined(HAVE_ONLINE_UPDATER)
bool menu_show_core_updater = settings->bools.menu_show_core_updater; bool menu_show_core_updater = settings->bools.menu_show_core_updater;
@ -693,12 +694,12 @@ static int menu_displaylist_parse_core_info(menu_displaylist_info_t *info,
firmware_info.path = core_info->path; firmware_info.path = core_info->path;
firmware_info.directory.system = settings->paths.directory_system; firmware_info.directory.system = settings->paths.directory_system;
retroarch_ctl(RARCH_CTL_UNSET_MISSING_BIOS, NULL); update_missing_firmware = core_info_list_update_missing_firmware(&firmware_info, &set_missing_firmware);
update_missing_firmware = core_info_list_update_missing_firmware(&firmware_info, &set_missing_firmware);
if (set_missing_firmware) if (set_missing_firmware)
retroarch_ctl(RARCH_CTL_SET_MISSING_BIOS, NULL); runloop_st->missing_bios = true;
else
runloop_st->missing_bios = false;
if (update_missing_firmware) if (update_missing_firmware)
{ {
@ -1237,9 +1238,10 @@ static unsigned menu_displaylist_parse_core_option_override_list(
menu_displaylist_info_t *info, settings_t *settings) menu_displaylist_info_t *info, settings_t *settings)
{ {
unsigned count = 0; unsigned count = 0;
runloop_state_t *runloop_st = runloop_state_get_ptr();
uint32_t flags = runloop_get_flags(); uint32_t flags = runloop_get_flags();
bool core_has_options = !retroarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL) && bool core_has_options = !retroarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL) &&
retroarch_ctl(RARCH_CTL_HAS_CORE_OPTIONS, NULL); (runloop_st->core_options);
bool game_options_active = flags & RUNLOOP_FLAG_GAME_OPTIONS_ACTIVE; bool game_options_active = flags & RUNLOOP_FLAG_GAME_OPTIONS_ACTIVE;
bool folder_options_active = flags & RUNLOOP_FLAG_FOLDER_OPTIONS_ACTIVE; bool folder_options_active = flags & RUNLOOP_FLAG_FOLDER_OPTIONS_ACTIVE;
bool show_core_options_flush = settings ? bool show_core_options_flush = settings ?
@ -12911,11 +12913,12 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
* we therefore have to check that the current selection * we therefore have to check that the current selection
* index is less than the current number of menu entries * index is less than the current number of menu entries
* - if not, we reset the navigation pointer */ * - if not, we reset the navigation pointer */
size_t selection = menu_navigation_get_selection(); size_t selection = menu_navigation_get_selection();
runloop_state_t *runloop_st = runloop_state_get_ptr();
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
if (retroarch_ctl(RARCH_CTL_HAS_CORE_OPTIONS, NULL)) if (runloop_st->core_options)
{ {
bool game_specific_options = settings->bools.game_specific_options; bool game_specific_options = settings->bools.game_specific_options;
const char *category = info->path; const char *category = info->path;

View file

@ -6405,19 +6405,6 @@ bool retroarch_ctl(enum rarch_ctl_state state, void *data)
p_rarch->flags &= ~RARCH_FLAGS_BLOCK_CONFIG_READ; p_rarch->flags &= ~RARCH_FLAGS_BLOCK_CONFIG_READ;
break; break;
#endif #endif
case RARCH_CTL_GET_CORE_OPTION_SIZE:
{
unsigned *idx = (unsigned*)data;
if (!idx)
return false;
if (runloop_st->core_options)
*idx = (unsigned)runloop_st->core_options->size;
else
*idx = 0;
}
break;
case RARCH_CTL_HAS_CORE_OPTIONS:
return (runloop_st->core_options != NULL);
case RARCH_CTL_CORE_OPTIONS_LIST_GET: case RARCH_CTL_CORE_OPTIONS_LIST_GET:
{ {
core_option_manager_t **coreopts = (core_option_manager_t**)data; core_option_manager_t **coreopts = (core_option_manager_t**)data;
@ -6427,8 +6414,8 @@ bool retroarch_ctl(enum rarch_ctl_state state, void *data)
} }
break; break;
case RARCH_CTL_CORE_OPTION_UPDATE_DISPLAY: case RARCH_CTL_CORE_OPTION_UPDATE_DISPLAY:
if (runloop_st->core_options && if ( runloop_st->core_options
runloop_st->core_options_callback.update_display) && runloop_st->core_options_callback.update_display)
{ {
/* Note: The update_display() callback may read /* Note: The update_display() callback may read
* core option values via RETRO_ENVIRONMENT_GET_VARIABLE. * core option values via RETRO_ENVIRONMENT_GET_VARIABLE.
@ -6462,14 +6449,6 @@ bool retroarch_ctl(enum rarch_ctl_state state, void *data)
runloop_st->flags |= RUNLOOP_FLAG_REMAPS_CONTENT_DIR_ACTIVE; runloop_st->flags |= RUNLOOP_FLAG_REMAPS_CONTENT_DIR_ACTIVE;
break; break;
#endif #endif
case RARCH_CTL_SET_MISSING_BIOS:
runloop_st->missing_bios = true;
break;
case RARCH_CTL_UNSET_MISSING_BIOS:
runloop_st->missing_bios = false;
break;
case RARCH_CTL_IS_MISSING_BIOS:
return runloop_st->missing_bios;
case RARCH_CTL_GET_PERFCNT: case RARCH_CTL_GET_PERFCNT:
{ {
bool **perfcnt = (bool**)data; bool **perfcnt = (bool**)data;

View file

@ -79,10 +79,6 @@ enum rarch_ctl_state
RARCH_CTL_SET_REMAPS_GAME_ACTIVE, RARCH_CTL_SET_REMAPS_GAME_ACTIVE,
#endif #endif
RARCH_CTL_IS_MISSING_BIOS,
RARCH_CTL_SET_MISSING_BIOS,
RARCH_CTL_UNSET_MISSING_BIOS,
RARCH_CTL_SET_SHUTDOWN, RARCH_CTL_SET_SHUTDOWN,
/* Runloop state */ /* Runloop state */
@ -95,8 +91,6 @@ enum rarch_ctl_state
RARCH_CTL_IS_PERFCNT_ENABLE, RARCH_CTL_IS_PERFCNT_ENABLE,
/* Core options */ /* Core options */
RARCH_CTL_HAS_CORE_OPTIONS,
RARCH_CTL_GET_CORE_OPTION_SIZE,
RARCH_CTL_CORE_OPTIONS_LIST_GET, RARCH_CTL_CORE_OPTIONS_LIST_GET,
RARCH_CTL_CORE_OPTION_PREV, RARCH_CTL_CORE_OPTION_PREV,
RARCH_CTL_CORE_OPTION_NEXT, RARCH_CTL_CORE_OPTION_NEXT,

View file

@ -1854,8 +1854,9 @@ static bool firmware_update_status(
{ {
char s[PATH_MAX_LENGTH]; char s[PATH_MAX_LENGTH];
core_info_ctx_firmware_t firmware_info; core_info_ctx_firmware_t firmware_info;
bool set_missing_firmware = false; bool set_missing_firmware = false;
core_info_t *core_info = NULL; core_info_t *core_info = NULL;
runloop_state_t *runloop_st = runloop_state_get_ptr();
core_info_get_current_core(&core_info); core_info_get_current_core(&core_info);
@ -1878,13 +1879,13 @@ static bool firmware_update_status(
core_info->path, core_info->path,
firmware_info.directory.system); firmware_info.directory.system);
retroarch_ctl(RARCH_CTL_UNSET_MISSING_BIOS, NULL);
core_info_list_update_missing_firmware(&firmware_info, core_info_list_update_missing_firmware(&firmware_info,
&set_missing_firmware); &set_missing_firmware);
if (set_missing_firmware) if (set_missing_firmware)
retroarch_ctl(RARCH_CTL_SET_MISSING_BIOS, NULL); runloop_st->missing_bios = true;
else
runloop_st->missing_bios = false;
if ( if (
(content_ctx->flags & CONTENT_INFO_FLAG_BIOS_IS_MISSING) (content_ctx->flags & CONTENT_INFO_FLAG_BIOS_IS_MISSING)
@ -1934,7 +1935,7 @@ bool task_push_start_dummy_core(content_ctx_info_t *content_info)
if (runloop_st->flags & RUNLOOP_FLAG_PATCH_BLOCKED) if (runloop_st->flags & RUNLOOP_FLAG_PATCH_BLOCKED)
content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED; content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED;
#endif #endif
if (retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL)) if (runloop_st->missing_bios)
content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING; content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING;
content_ctx.directory_system = NULL; content_ctx.directory_system = NULL;
content_ctx.directory_cache = NULL; content_ctx.directory_cache = NULL;
@ -2024,7 +2025,7 @@ bool task_push_load_content_from_playlist_from_menu(
if (runloop_st->flags & RUNLOOP_FLAG_PATCH_BLOCKED) if (runloop_st->flags & RUNLOOP_FLAG_PATCH_BLOCKED)
content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED; content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED;
#endif #endif
if (retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL)) if (runloop_st->missing_bios)
content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING; content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING;
content_ctx.directory_system = NULL; content_ctx.directory_system = NULL;
content_ctx.directory_cache = NULL; content_ctx.directory_cache = NULL;
@ -2164,7 +2165,7 @@ bool task_push_start_current_core(content_ctx_info_t *content_info)
if (runloop_st->flags & RUNLOOP_FLAG_PATCH_BLOCKED) if (runloop_st->flags & RUNLOOP_FLAG_PATCH_BLOCKED)
content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED; content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED;
#endif #endif
if (retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL)) if (runloop_st->missing_bios)
content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING; content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING;
content_ctx.directory_system = NULL; content_ctx.directory_system = NULL;
content_ctx.directory_cache = NULL; content_ctx.directory_cache = NULL;
@ -2283,12 +2284,12 @@ bool task_push_load_contentless_core_from_menu(
if (string_is_empty(core_path)) if (string_is_empty(core_path))
return false; return false;
content_ctx.flags = 0; content_ctx.flags = 0;
if (check_firmware_before_loading) if (check_firmware_before_loading)
content_ctx.flags |= CONTENT_INFO_FLAG_CHECK_FW_BEFORE_LOADING; content_ctx.flags |= CONTENT_INFO_FLAG_CHECK_FW_BEFORE_LOADING;
if (retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL)) if (runloop_st->missing_bios)
content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING; content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING;
if (!string_is_empty(path_dir_system)) if (!string_is_empty(path_dir_system))
content_ctx.directory_system = strdup(path_dir_system); content_ctx.directory_system = strdup(path_dir_system);
@ -2399,8 +2400,8 @@ bool task_push_load_content_with_new_core_from_menu(
if (runloop_st->flags & RUNLOOP_FLAG_PATCH_BLOCKED) if (runloop_st->flags & RUNLOOP_FLAG_PATCH_BLOCKED)
content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED; content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED;
#endif #endif
if (retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL)) if (runloop_st->missing_bios)
content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING; content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING;
content_ctx.directory_system = NULL; content_ctx.directory_system = NULL;
content_ctx.directory_cache = NULL; content_ctx.directory_cache = NULL;
content_ctx.name_ips = NULL; content_ctx.name_ips = NULL;
@ -2506,8 +2507,8 @@ static bool task_load_content_internal(
if (runloop_st->flags & RUNLOOP_FLAG_PATCH_BLOCKED) if (runloop_st->flags & RUNLOOP_FLAG_PATCH_BLOCKED)
content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED; content_ctx.flags |= CONTENT_INFO_FLAG_PATCH_IS_BLOCKED;
#endif #endif
if (retroarch_ctl(RARCH_CTL_IS_MISSING_BIOS, NULL)) if (runloop_st->missing_bios)
content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING; content_ctx.flags |= CONTENT_INFO_FLAG_BIOS_IS_MISSING;
content_ctx.directory_system = NULL; content_ctx.directory_system = NULL;
content_ctx.directory_cache = NULL; content_ctx.directory_cache = NULL;
content_ctx.name_ips = NULL; content_ctx.name_ips = NULL;

View file

@ -1042,8 +1042,8 @@ void CoreOptionsDialog::onCoreOptionComboBoxCurrentIndexChanged(int index)
{ {
unsigned i, k; unsigned i, k;
QString key, val; QString key, val;
size_t opts = 0; runloop_state_t *runloop_st = runloop_state_get_ptr();
QComboBox *combo_box = qobject_cast<QComboBox*>(sender()); QComboBox *combo_box = qobject_cast<QComboBox*>(sender());
if (!combo_box) if (!combo_box)
return; return;
@ -1051,37 +1051,34 @@ void CoreOptionsDialog::onCoreOptionComboBoxCurrentIndexChanged(int index)
key = combo_box->itemData(index, Qt::UserRole).toString(); key = combo_box->itemData(index, Qt::UserRole).toString();
val = combo_box->itemText(index); val = combo_box->itemText(index);
if (retroarch_ctl(RARCH_CTL_HAS_CORE_OPTIONS, NULL)) if (runloop_st->core_options)
{ {
retroarch_ctl(RARCH_CTL_GET_CORE_OPTION_SIZE, &opts); core_option_manager_t *coreopts = NULL;
if (opts) retroarch_ctl(RARCH_CTL_CORE_OPTIONS_LIST_GET, &coreopts);
if (coreopts)
{ {
core_option_manager_t *coreopts = NULL; size_t opts = runloop_st->core_options->size;
retroarch_ctl(RARCH_CTL_CORE_OPTIONS_LIST_GET, &coreopts); for (i = 0; i < opts; i++)
if (coreopts)
{ {
for (i = 0; i < opts; i++) QString optKey;
struct core_option *option = static_cast<struct core_option*>(&coreopts->opts[i]);
if (!option)
continue;
optKey = option->key;
if (key == optKey)
{ {
QString optKey; for (k = 0; k < option->vals->size; k++)
struct core_option *option = static_cast<struct core_option*>(&coreopts->opts[i]);
if (!option)
continue;
optKey = option->key;
if (key == optKey)
{ {
for (k = 0; k < option->vals->size; k++) QString str = option->vals->elems[k].data;
{
QString str = option->vals->elems[k].data;
if (!str.isEmpty() && str == val) if (!str.isEmpty() && str == val)
core_option_manager_set_val(coreopts, i, k, true); core_option_manager_set_val(coreopts, i, k, true);
}
} }
} }
} }
@ -1092,138 +1089,134 @@ void CoreOptionsDialog::onCoreOptionComboBoxCurrentIndexChanged(int index)
void CoreOptionsDialog::buildLayout() void CoreOptionsDialog::buildLayout()
{ {
unsigned j, k; unsigned j, k;
size_t opts = 0; QFormLayout *form = NULL;
QFormLayout *form = NULL; settings_t *settings = config_get_ptr();
settings_t *settings = config_get_ptr(); runloop_state_t *runloop_st = runloop_state_get_ptr();
bool has_core_options = retroarch_ctl(RARCH_CTL_HAS_CORE_OPTIONS, NULL); bool has_core_options = (runloop_st->core_options != NULL);
size_t opts = (runloop_st->core_options) ? runloop_st->core_options->size : 0;
clearLayout(); clearLayout();
if (has_core_options) if (has_core_options)
{ {
retroarch_ctl(RARCH_CTL_GET_CORE_OPTION_SIZE, &opts); core_option_manager_t *coreopts = NULL;
if (opts) form = new QFormLayout();
if (settings->bools.game_specific_options)
{ {
core_option_manager_t *coreopts = NULL; QString contentLabel;
QString label;
rarch_system_info_t *system = &runloop_st->system;
form = new QFormLayout(); /* TODO/FIXME - why have this check here? system is not used */
if (system)
contentLabel = QFileInfo(path_get(RARCH_PATH_BASENAME)).completeBaseName();
if (settings->bools.game_specific_options) if (!contentLabel.isEmpty())
{ {
QString contentLabel; uint32_t flags = runloop_st->flags;
QString label; if (flags & RUNLOOP_FLAG_GAME_OPTIONS_ACTIVE)
rarch_system_info_t *system = &runloop_state_get_ptr()->system; label = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_IN_USE);
else
label = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_CREATE);
/* TODO/FIXME - why have this check here? system is not used */ if (!label.isEmpty())
if (system)
contentLabel = QFileInfo(path_get(RARCH_PATH_BASENAME)).completeBaseName();
if (!contentLabel.isEmpty())
{ {
uint32_t flags = runloop_get_flags(); QHBoxLayout *gameOptionsLayout = new QHBoxLayout();
if (flags & RUNLOOP_FLAG_GAME_OPTIONS_ACTIVE) QPushButton *button = new QPushButton(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_SAVE), this);
label = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_IN_USE);
else
label = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_CREATE);
if (!label.isEmpty()) connect(button, SIGNAL(clicked()), this, SLOT(onSaveGameSpecificOptions()));
{
QHBoxLayout *gameOptionsLayout = new QHBoxLayout();
QPushButton *button = new QPushButton(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_SAVE), this);
connect(button, SIGNAL(clicked()), this, SLOT(onSaveGameSpecificOptions())); gameOptionsLayout->addWidget(new QLabel(contentLabel, this));
gameOptionsLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Preferred));
gameOptionsLayout->addWidget(button);
gameOptionsLayout->addWidget(new QLabel(contentLabel, this)); form->addRow(label, gameOptionsLayout);
gameOptionsLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Preferred));
gameOptionsLayout->addWidget(button);
form->addRow(label, gameOptionsLayout);
}
} }
} }
}
retroarch_ctl(RARCH_CTL_CORE_OPTIONS_LIST_GET, &coreopts); retroarch_ctl(RARCH_CTL_CORE_OPTIONS_LIST_GET, &coreopts);
if (coreopts) if (coreopts)
{
QToolButton *resetAllButton = new QToolButton(this);
resetAllButton->setDefaultAction(new QAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_RESET_ALL), this));
connect(resetAllButton, SIGNAL(clicked()), this, SLOT(onCoreOptionResetAllClicked()));
for (j = 0; j < opts; j++)
{ {
QToolButton *resetAllButton = new QToolButton(this); QString desc =
core_option_manager_get_desc(coreopts, j, false);
QString val =
core_option_manager_get_val(coreopts, j);
QComboBox *combo_box = NULL;
QLabel *descLabel = NULL;
QHBoxLayout *comboLayout = NULL;
QToolButton *resetButton = NULL;
struct core_option *option = NULL;
resetAllButton->setDefaultAction(new QAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_RESET_ALL), this)); if (desc.isEmpty() || !coreopts->opts)
connect(resetAllButton, SIGNAL(clicked()), this, SLOT(onCoreOptionResetAllClicked())); continue;
for (j = 0; j < opts; j++) option = static_cast<struct core_option*>(&coreopts->opts[j]);
if (!option->vals || option->vals->size == 0)
continue;
comboLayout = new QHBoxLayout();
descLabel = new QLabel(desc, this);
combo_box = new QComboBox(this);
combo_box->setObjectName("coreOptionComboBox");
resetButton = new QToolButton(this);
resetButton->setObjectName("resetButton");
resetButton->setDefaultAction(new QAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_RESET), this));
resetButton->setProperty("comboBox",
QVariant::fromValue(combo_box));
connect(resetButton, SIGNAL(clicked()),
this, SLOT(onCoreOptionResetClicked()));
if (!string_is_empty(option->info))
{ {
QString desc = char *new_info;
core_option_manager_get_desc(coreopts, j, false); size_t option_info_len = strlen(option->info);
QString val = size_t new_info_len = option_info_len + 1;
core_option_manager_get_val(coreopts, j);
QComboBox *combo_box = NULL;
QLabel *descLabel = NULL;
QHBoxLayout *comboLayout = NULL;
QToolButton *resetButton = NULL;
struct core_option *option = NULL;
if (desc.isEmpty() || !coreopts->opts) if (!(new_info = (char *)malloc(new_info_len)))
continue; return;
new_info[0] = '\0';
option = static_cast<struct core_option*>(&coreopts->opts[j]); word_wrap(new_info, new_info_len, option->info,
option_info_len, 50, 100, 0);
if (!option->vals || option->vals->size == 0) descLabel->setToolTip(new_info);
continue; combo_box->setToolTip(new_info);
free(new_info);
comboLayout = new QHBoxLayout();
descLabel = new QLabel(desc, this);
combo_box = new QComboBox(this);
combo_box->setObjectName("coreOptionComboBox");
resetButton = new QToolButton(this);
resetButton->setObjectName("resetButton");
resetButton->setDefaultAction(new QAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_RESET), this));
resetButton->setProperty("comboBox",
QVariant::fromValue(combo_box));
connect(resetButton, SIGNAL(clicked()),
this, SLOT(onCoreOptionResetClicked()));
if (!string_is_empty(option->info))
{
char *new_info;
size_t option_info_len = strlen(option->info);
size_t new_info_len = option_info_len + 1;
if (!(new_info = (char *)malloc(new_info_len)))
return;
new_info[0] = '\0';
word_wrap(new_info, new_info_len, option->info,
option_info_len, 50, 100, 0);
descLabel->setToolTip(new_info);
combo_box->setToolTip(new_info);
free(new_info);
}
for (k = 0; k < option->vals->size; k++)
combo_box->addItem(option->vals->elems[k].data, option->key);
combo_box->setCurrentText(val);
combo_box->setProperty("default_index",
static_cast<unsigned>(option->default_index));
/* Only connect the signal after setting the default item */
connect(combo_box, SIGNAL(currentIndexChanged(int)),
this,
SLOT(onCoreOptionComboBoxCurrentIndexChanged(int)));
comboLayout->addWidget(combo_box);
comboLayout->addWidget(resetButton);
form->addRow(descLabel, comboLayout);
} }
form->addRow(resetAllButton, new QWidget(this)); for (k = 0; k < option->vals->size; k++)
combo_box->addItem(option->vals->elems[k].data, option->key);
m_layout->addLayout(form); combo_box->setCurrentText(val);
combo_box->setProperty("default_index",
static_cast<unsigned>(option->default_index));
/* Only connect the signal after setting the default item */
connect(combo_box, SIGNAL(currentIndexChanged(int)),
this,
SLOT(onCoreOptionComboBoxCurrentIndexChanged(int)));
comboLayout->addWidget(combo_box);
comboLayout->addWidget(resetButton);
form->addRow(descLabel, comboLayout);
} }
form->addRow(resetAllButton, new QWidget(this));
m_layout->addLayout(form);
} }
} }

View file

@ -2246,6 +2246,7 @@ QVector<QHash<QString, QString> > MainWindow::getCoreInfo()
{ {
int i; int i;
QVector<QHash<QString, QString> > infoList; QVector<QHash<QString, QString> > infoList;
runloop_state_t *runloop_st = runloop_state_get_ptr();
QHash<QString, QString> currentCore = getSelectedCore(); QHash<QString, QString> currentCore = getSelectedCore();
core_info_t *core_info = NULL; core_info_t *core_info = NULL;
QByteArray currentCorePathArray = currentCore["core_path"].toUtf8(); QByteArray currentCorePathArray = currentCore["core_path"].toUtf8();
@ -2421,12 +2422,12 @@ QVector<QHash<QString, QString> > MainWindow::getCoreInfo()
firmware_info.path = core_info->path; firmware_info.path = core_info->path;
firmware_info.directory.system = settings->paths.directory_system; firmware_info.directory.system = settings->paths.directory_system;
retroarch_ctl(RARCH_CTL_UNSET_MISSING_BIOS, NULL);
update_missing_firmware = core_info_list_update_missing_firmware(&firmware_info, &set_missing_firmware); update_missing_firmware = core_info_list_update_missing_firmware(&firmware_info, &set_missing_firmware);
if (set_missing_firmware) if (set_missing_firmware)
retroarch_ctl(RARCH_CTL_SET_MISSING_BIOS, NULL); runloop_st->missing_bios = true;
else
runloop_st->missing_bios = false;
if (update_missing_firmware) if (update_missing_firmware)
{ {