aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJarkko Koivikko <jarkko.koivikko@code-q.fi>2018-08-29 09:42:16 +0300
committerJarkko Koivikko <jarkko.koivikko@code-q.fi>2018-08-29 08:58:07 +0000
commit30479f9771e60938dc0f6e325e3b16fb52663796 (patch)
tree78512243541253ad9283da57030d2bd9503b2bf8
parent4a92afe75bfb7886ecb1b3282b05b2985c39fe3c (diff)
Fix possible crash in PlatformInputContext::update
Under some condition, QPlatformInputContext::update is called before our (QML) input context is created. This will result in crash if desktop integration is also enabled, since null pointer check is missing. [ChangeLog] Fixed possible crash in PlatformInputContext::update. Task-number: QTBUG-67595 Change-Id: I19c78dbf19cf3c2a72193c2e2a60f46995c1f6ad Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r--src/virtualkeyboard/platforminputcontext.cpp19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/virtualkeyboard/platforminputcontext.cpp b/src/virtualkeyboard/platforminputcontext.cpp
index 6d555160..8b5ce99b 100644
--- a/src/virtualkeyboard/platforminputcontext.cpp
+++ b/src/virtualkeyboard/platforminputcontext.cpp
@@ -84,18 +84,17 @@ void PlatformInputContext::commit()
void PlatformInputContext::update(Qt::InputMethodQueries queries)
{
VIRTUALKEYBOARD_DEBUG() << "PlatformInputContext::update():" << queries;
- bool enabled = inputMethodQuery(Qt::ImEnabled).toBool();
-#ifdef QT_VIRTUALKEYBOARD_DESKTOP
- if (enabled && !m_inputPanel) {
- m_inputPanel = new DesktopInputPanel(this);
- m_inputPanel->createView();
- m_selectionControl = new DesktopInputSelectionControl(this, m_inputContext);
- m_selectionControl->createHandles();
- }
-#endif
-
if (m_inputContext) {
+ bool enabled = inputMethodQuery(Qt::ImEnabled).toBool();
if (enabled) {
+#ifdef QT_VIRTUALKEYBOARD_DESKTOP
+ if (!m_inputPanel) {
+ m_inputPanel = new DesktopInputPanel(this);
+ m_inputPanel->createView();
+ m_selectionControl = new DesktopInputSelectionControl(this, m_inputContext);
+ m_selectionControl->createHandles();
+ }
+#endif
m_inputContext->update(queries);
if (m_visible)
updateInputPanelVisible();