Qt: Fix crash on scanning empty directory

This commit is contained in:
Connor McLaughlin 2022-07-22 23:33:59 +10:00
parent 701780e2ef
commit 91fcb56148
6 changed files with 15 additions and 7 deletions

View file

@ -361,7 +361,8 @@ void ControllerMacroEditWidget::modFrequency(s32 delta)
void ControllerMacroEditWidget::updateFrequency() void ControllerMacroEditWidget::updateFrequency()
{ {
m_bwidget->getDialog()->setIntValue(m_bwidget->getConfigSection().c_str(), m_bwidget->getDialog()->setIntValue(m_bwidget->getConfigSection().c_str(),
fmt::format("Macro{}Frequency", m_index).c_str(), static_cast<s32>(m_frequency)); fmt::format("Macro{}Frequency", m_index + 1u).c_str(),
static_cast<s32>(m_frequency));
updateFrequencyText(); updateFrequencyText();
} }

View file

@ -248,7 +248,7 @@ bool ControllerSettingsDialog::getBoolValue(const char* section, const char* key
return Host::GetBaseBoolSettingValue(section, key, default_value); return Host::GetBaseBoolSettingValue(section, key, default_value);
} }
bool ControllerSettingsDialog::getIntValue(const char* section, const char* key, s32 default_value) const s32 ControllerSettingsDialog::getIntValue(const char* section, const char* key, s32 default_value) const
{ {
if (m_profile_interface) if (m_profile_interface)
return m_profile_interface->GetIntValue(section, key, default_value); return m_profile_interface->GetIntValue(section, key, default_value);

View file

@ -50,7 +50,7 @@ public:
// Helper functions for updating setting values globally or in the profile. // Helper functions for updating setting values globally or in the profile.
bool getBoolValue(const char* section, const char* key, bool default_value) const; bool getBoolValue(const char* section, const char* key, bool default_value) const;
bool getIntValue(const char* section, const char* key, s32 default_value) const; s32 getIntValue(const char* section, const char* key, s32 default_value) const;
std::string getStringValue(const char* section, const char* key, const char* default_value) const; std::string getStringValue(const char* section, const char* key, const char* default_value) const;
void setBoolValue(const char* section, const char* key, bool value); void setBoolValue(const char* section, const char* key, bool value);
void setIntValue(const char* section, const char* key, s32 value); void setIntValue(const char* section, const char* key, s32 value);

View file

@ -420,6 +420,7 @@ void MainWindow::destroyDisplayWidget(bool show_game_list)
{ {
m_game_list_widget->setVisible(true); m_game_list_widget->setVisible(true);
setCentralWidget(m_game_list_widget); setCentralWidget(m_game_list_widget);
m_game_list_widget->resizeTableViewColumnsToFit();
} }
} }
else else
@ -427,7 +428,10 @@ void MainWindow::destroyDisplayWidget(bool show_game_list)
AssertMsg(m_ui.mainContainer->indexOf(m_display_widget) == 1, "Display widget in stack"); AssertMsg(m_ui.mainContainer->indexOf(m_display_widget) == 1, "Display widget in stack");
m_ui.mainContainer->removeWidget(m_display_widget); m_ui.mainContainer->removeWidget(m_display_widget);
if (show_game_list) if (show_game_list)
{
m_ui.mainContainer->setCurrentIndex(0); m_ui.mainContainer->setCurrentIndex(0);
m_game_list_widget->resizeTableViewColumnsToFit();
}
} }
} }
@ -1187,6 +1191,7 @@ void MainWindow::onGameListRefreshProgress(const QString& status, int current, i
void MainWindow::onGameListRefreshComplete() void MainWindow::onGameListRefreshComplete()
{ {
m_ui.statusBar->clearMessage();
clearProgressBar(); clearProgressBar();
} }
@ -1650,7 +1655,7 @@ void MainWindow::updateWindowState(bool force_visible)
void MainWindow::setProgressBar(int current, int total) void MainWindow::setProgressBar(int current, int total)
{ {
const int value = (current * 100) / total; const int value = (total != 0) ? ((current * 100) / total) : 0;
if (m_status_progress_widget->value() != value) if (m_status_progress_widget->value() != value)
m_status_progress_widget->setValue(value); m_status_progress_widget->setValue(value);

View file

@ -425,7 +425,6 @@ void GameList::ScanDirectory(const char* path, bool recursive, bool only_cache,
{ {
Log_InfoPrintf("Scanning %s%s", path, recursive ? " (recursively)" : ""); Log_InfoPrintf("Scanning %s%s", path, recursive ? " (recursively)" : "");
progress->PushState();
progress->SetFormattedStatusText("Scanning directory '%s'%s...", path, recursive ? " (recursively)" : ""); progress->SetFormattedStatusText("Scanning directory '%s'%s...", path, recursive ? " (recursively)" : "");
FileSystem::FindResultsArray files; FileSystem::FindResultsArray files;
@ -433,11 +432,14 @@ void GameList::ScanDirectory(const char* path, bool recursive, bool only_cache,
recursive ? (FILESYSTEM_FIND_FILES | FILESYSTEM_FIND_HIDDEN_FILES | FILESYSTEM_FIND_RECURSIVE) : recursive ? (FILESYSTEM_FIND_FILES | FILESYSTEM_FIND_HIDDEN_FILES | FILESYSTEM_FIND_RECURSIVE) :
(FILESYSTEM_FIND_FILES | FILESYSTEM_FIND_HIDDEN_FILES), (FILESYSTEM_FIND_FILES | FILESYSTEM_FIND_HIDDEN_FILES),
&files); &files);
if (files.empty())
return;
u32 files_scanned = 0; progress->PushState();
progress->SetProgressRange(static_cast<u32>(files.size())); progress->SetProgressRange(static_cast<u32>(files.size()));
progress->SetProgressValue(0); progress->SetProgressValue(0);
u32 files_scanned = 0;
for (FILESYSTEM_FIND_DATA& ffd : files) for (FILESYSTEM_FIND_DATA& ffd : files)
{ {
files_scanned++; files_scanned++;

View file

@ -1144,7 +1144,7 @@ void InputManager::LoadMacroButtonConfig(SettingsInterface& si, const std::strin
{ {
if (button == cinfo->bindings[j].name) if (button == cinfo->bindings[j].name)
{ {
binding = &cinfo->bindings[i]; binding = &cinfo->bindings[j];
break; break;
} }
} }