From 4760e70697f491a19071ac2e6e0928f3fb65d0d4 Mon Sep 17 00:00:00 2001 From: 0penBrain <48731257+0penBrain@users.noreply.github.com> Date: Sat, 22 Oct 2022 11:46:24 +0200 Subject: [PATCH] Gui: modernize management of decimal converter event filter Use unique_ptr with custom deleter to be more defensive --- src/Gui/Language/Translator.cpp | 20 +++++++++++--------- src/Gui/Language/Translator.h | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/Gui/Language/Translator.cpp b/src/Gui/Language/Translator.cpp index b7b5ffdc4a..add3472c6c 100644 --- a/src/Gui/Language/Translator.cpp +++ b/src/Gui/Language/Translator.cpp @@ -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>(this, + [](Translator* evFilter) { + qApp->removeEventFilter(evFilter); + } + ); + qApp->installEventFilter(decimalPointConverter.get()); + } } #include "moc_Translator.cpp" diff --git a/src/Gui/Language/Translator.h b/src/Gui/Language/Translator.h index adb59c58b9..ece19edd32 100644 --- a/src/Gui/Language/Translator.h +++ b/src/Gui/Language/Translator.h @@ -90,7 +90,7 @@ private: private: static Translator* _pcSingleton; TranslatorP* d; - bool decimalPointConversionEnabled; + std::unique_ptr> decimalPointConverter; }; } // namespace Gui