Skip to content

Commit

Permalink
Qt/ Config controls system: Remove signal block so the UI can update …
Browse files Browse the repository at this point in the history
…properly when a new config is loaded (such as on starting a game).

Block unwanted behavior with a new safety check.
  • Loading branch information
TryTwo committed Jan 4, 2025
1 parent b8921b1 commit 10cb848
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ void ConfigStringChoice::Load()
const int index = m_text_is_data ? findText(setting_value) : findData(setting_value);

// This can be called publicly.
const QSignalBlocker block(this);
setCurrentIndex(index);
}

Expand Down Expand Up @@ -145,6 +144,7 @@ void ConfigComplexChoice::UpdateComboIndex()
auto it = std::find(m_options.begin(), m_options.end(), values);
int index = static_cast<int>(std::distance(m_options.begin(), it));

// Will crash if not blocked
const QSignalBlocker blocker(this);
setCurrentIndex(index);
}
Expand Down
11 changes: 9 additions & 2 deletions Source/Core/DolphinQt/Config/ConfigControls/ConfigControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

#include <QFont>
#include <QMouseEvent>
#include <QSignalBlocker>

#include "Common/Config/Enums.h"
#include "Common/Config/Layer.h"
Expand Down Expand Up @@ -49,14 +48,21 @@ class ConfigControl : public Derived
bf.setBold(IsConfigLocal());
Derived::setFont(bf);

const QSignalBlocker blocker(this);
// This isn't signal blocked because the UI may need to be updated.
m_updating = true;
OnConfigChanged();
m_updating = false;
});
}

template <typename T>
void SaveValue(const Config::Info<T>& setting, const T& value)
{
// Avoid OnConfigChanged -> option changed to current config's value -> unnecessary save ->
// ConfigChanged.
if (m_updating)
return;

if (m_layer != nullptr)
{
m_layer->Set(m_location, value);
Expand Down Expand Up @@ -100,6 +106,7 @@ class ConfigControl : public Derived
}
}

bool m_updating = false;
const Config::Location m_location;
Config::Layer* m_layer;
};

0 comments on commit 10cb848

Please sign in to comment.