Gui: modernize management of decimal converter event filter

Use unique_ptr with custom deleter to be more defensive
This commit is contained in:
0penBrain
2022-10-22 11:46:24 +02:00
committed by wwmayer
parent f5b91de0e6
commit 4760e70697
2 changed files with 12 additions and 10 deletions

View File

@@ -128,8 +128,7 @@ void Translator::destruct ()
_pcSingleton=nullptr;
}
Translator::Translator():
decimalPointConversionEnabled(false)
Translator::Translator()
{
// This is needed for Qt's lupdate
d = new TranslatorP;
@@ -384,19 +383,22 @@ bool Translator::eventFilter(QObject* obj, QEvent* ev)
void Translator::enableDecimalPointConversion(bool on)
{
if (!on) {
qApp->removeEventFilter(this);
decimalPointConversionEnabled = false;
decimalPointConverter.reset();
return;
}
if (on && !decimalPointConversionEnabled) {
qApp->installEventFilter(this);
decimalPointConversionEnabled = true;
}
#if FC_DEBUG
if (on && decimalPointConversionEnabled) {
if (on && decimalPointConverter) {
Base::Console().Instance().Warning("Translator: decimal point converter is already installed\n");
}
#endif
if (on && !decimalPointConverter) {
decimalPointConverter = std::unique_ptr<Translator, std::function<void(Translator*)>>(this,
[](Translator* evFilter) {
qApp->removeEventFilter(evFilter);
}
);
qApp->installEventFilter(decimalPointConverter.get());
}
}
#include "moc_Translator.cpp"

View File

@@ -90,7 +90,7 @@ private:
private:
static Translator* _pcSingleton;
TranslatorP* d;
bool decimalPointConversionEnabled;
std::unique_ptr<Translator, std::function<void(Translator*)>> decimalPointConverter;
};
} // namespace Gui