Merge pull request #9606 from Filoppi/patch-14
Qt: avoid queuing ConfigChanged() more than once
This commit is contained in:
commit
a09d9cf608
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
#include "DolphinQt/Settings.h"
|
#include "DolphinQt/Settings.h"
|
||||||
|
|
||||||
|
#include <atomic>
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
@ -42,8 +44,21 @@ Settings::Settings()
|
||||||
QueueOnObject(this, [this, new_state] { emit EmulationStateChanged(new_state); });
|
QueueOnObject(this, [this, new_state] { emit EmulationStateChanged(new_state); });
|
||||||
});
|
});
|
||||||
|
|
||||||
Config::AddConfigChangedCallback(
|
Config::AddConfigChangedCallback([this] {
|
||||||
[this] { QueueOnObject(this, [this] { emit ConfigChanged(); }); });
|
static std::atomic<bool> do_once{true};
|
||||||
|
if (do_once.exchange(false))
|
||||||
|
{
|
||||||
|
// Calling ConfigChanged() with a "delay" can have risks, for example, if from
|
||||||
|
// code we change some configs that result in Qt greying out some setting, we could
|
||||||
|
// end up editing that setting before its greyed out, sending out an event,
|
||||||
|
// which might not be expected or handled by the code, potentially crashing.
|
||||||
|
// The only safe option would be to wait on the Qt thread to have finished executing this.
|
||||||
|
QueueOnObject(this, [this] {
|
||||||
|
do_once = true;
|
||||||
|
emit ConfigChanged();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
g_controller_interface.RegisterDevicesChangedCallback([this] {
|
g_controller_interface.RegisterDevicesChangedCallback([this] {
|
||||||
if (Host::GetInstance()->IsHostThread())
|
if (Host::GetInstance()->IsHostThread())
|
||||||
|
|
Loading…
Reference in New Issue