diff options
author | Jüri Valdmann <juri.valdmann@qt.io> | 2019-02-18 16:10:17 +0100 |
---|---|---|
committer | Jüri Valdmann <juri.valdmann@qt.io> | 2019-02-25 09:13:59 +0000 |
commit | 1f77d4709946511b919810354f19875824399096 (patch) | |
tree | 1fc4ff1f0df40afb0a9dbf340994c80ee178918f /src/core/web_engine_settings.cpp | |
parent | 837347e1901086a9757b5aca7e5bbee7b0d8e20e (diff) |
Fix crash on dynamic_cast in global event filter
Installing an event filter on QApplication which uses dynamic_cast will crash
the application since QtWebEngine is sending QTimerEvents to classes without
RTTI information.
Fix by
1. Moving the QObject part of MessagePumpForUIQt into api/ as a private class.
2. Using QTimer directly in WebEngineSettings, without subclassing.
Fixes: QTBUG-73833
Change-Id: Ida73006a4fef76637c964f8f05468adcc4a190ce
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/core/web_engine_settings.cpp')
-rw-r--r-- | src/core/web_engine_settings.cpp | 34 |
1 files changed, 8 insertions, 26 deletions
diff --git a/src/core/web_engine_settings.cpp b/src/core/web_engine_settings.cpp index 2e48a806a..664951e66 100644 --- a/src/core/web_engine_settings.cpp +++ b/src/core/web_engine_settings.cpp @@ -67,27 +67,6 @@ QHash<WebEngineSettings::FontSize, int> WebEngineSettings::s_defaultFontSizes; static const int batchTimerTimeout = 0; -class BatchTimer : public QTimer { - Q_OBJECT -public: - BatchTimer(WebEngineSettings *settings) - : m_settings(settings) - { - setSingleShot(true); - setInterval(batchTimerTimeout); - connect(this, SIGNAL(timeout()), SLOT(onTimeout())); - } - -private Q_SLOTS: - void onTimeout() - { - m_settings->doApply(); - } - -private: - WebEngineSettings *m_settings; -}; - static inline bool isTouchEventsAPIEnabled() { static bool initialized = false; static bool touchEventsAPIEnabled = false; @@ -113,12 +92,17 @@ static inline bool isTouchEventsAPIEnabled() { WebEngineSettings::WebEngineSettings(WebEngineSettings *_parentSettings) : m_adapter(0) - , m_batchTimer(new BatchTimer(this)) , parentSettings(_parentSettings) , m_unknownUrlSchemePolicy(WebEngineSettings::InheritedUnknownUrlSchemePolicy) { if (parentSettings) parentSettings->childSettings.insert(this); + + m_batchTimer.setSingleShot(true); + m_batchTimer.setInterval(batchTimerTimeout); + QObject::connect(&m_batchTimer, &QTimer::timeout, [this]() { + doApply(); + }); } WebEngineSettings::~WebEngineSettings() @@ -335,8 +319,8 @@ void WebEngineSettings::initDefaults() void WebEngineSettings::scheduleApply() { - if (!m_batchTimer->isActive()) - m_batchTimer->start(); + if (!m_batchTimer.isActive()) + m_batchTimer.start(); } void WebEngineSettings::doApply() @@ -448,5 +432,3 @@ void WebEngineSettings::setParentSettings(WebEngineSettings *_parentSettings) } } // namespace QtWebEngineCore - -#include "web_engine_settings.moc" |