diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2017-05-03 16:10:45 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2017-05-05 12:32:52 +0000 |
commit | a230f0eac4eb743a6ad502e3d2d939a2c7731dcd (patch) | |
tree | 80a4873b83edcf47ba2f273f58c45dfe771cc681 /src | |
parent | 96c9211bdde4c170e2fdb2f14178247eb7d8366b (diff) |
Consistently check qApp and equivalents before using them
We might run an event loop after destroying qApp and additional events
may be generated from that. Therefore we should not access qApp
unchecked from event handlers. In most places we did already check qApp
for null. Now we do it everywhere.
Task-number: QTBUG-60000
Change-Id: Id72bbf133989e4f8127d85ee63cba64f915d3649
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/virtualkeyboard/desktopinputpanel.cpp | 3 | ||||
-rw-r--r-- | src/virtualkeyboard/desktopinputselectioncontrol.cpp | 5 | ||||
-rw-r--r-- | src/virtualkeyboard/inputcontext.cpp | 11 | ||||
-rw-r--r-- | src/virtualkeyboard/shifthandler.cpp | 9 |
4 files changed, 22 insertions, 6 deletions
diff --git a/src/virtualkeyboard/desktopinputpanel.cpp b/src/virtualkeyboard/desktopinputpanel.cpp index aad97e66..e9a8836a 100644 --- a/src/virtualkeyboard/desktopinputpanel.cpp +++ b/src/virtualkeyboard/desktopinputpanel.cpp @@ -152,7 +152,8 @@ void DesktopInputPanel::createView() } d->view->setColor(QColor(Qt::transparent)); d->view->setSource(QUrl("qrc:///QtQuick/VirtualKeyboard/content/InputPanel.qml")); - connect(qGuiApp, SIGNAL(aboutToQuit()), SLOT(destroyView())); + if (QGuiApplication *app = qGuiApp) + connect(app, SIGNAL(aboutToQuit()), SLOT(destroyView())); } } diff --git a/src/virtualkeyboard/desktopinputselectioncontrol.cpp b/src/virtualkeyboard/desktopinputselectioncontrol.cpp index ec7f962e..7ecf0f6c 100644 --- a/src/virtualkeyboard/desktopinputselectioncontrol.cpp +++ b/src/virtualkeyboard/desktopinputselectioncontrol.cpp @@ -180,7 +180,10 @@ void DesktopInputSelectionControl::createHandles() m_cursorSelectionHandle.reset(new InputSelectionHandle(this, focusWindow)); reloadGraphics(); - connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, this, &DesktopInputSelectionControl::destroyHandles); + if (QCoreApplication *app = QCoreApplication::instance()) { + connect(app, &QCoreApplication::aboutToQuit, + this, &DesktopInputSelectionControl::destroyHandles); + } } } diff --git a/src/virtualkeyboard/inputcontext.cpp b/src/virtualkeyboard/inputcontext.cpp index d069927b..6d36ae5e 100644 --- a/src/virtualkeyboard/inputcontext.cpp +++ b/src/virtualkeyboard/inputcontext.cpp @@ -731,8 +731,15 @@ void InputContext::update(Qt::InputMethodQueries queries) Qt::InputMethodHints inputMethodHints = Qt::InputMethodHints(imQueryEvent.value(Qt::ImHints).toInt()); const int cursorPosition = imQueryEvent.value(Qt::ImCursorPosition).toInt(); const int anchorPosition = imQueryEvent.value(Qt::ImAnchorPosition).toInt(); - QRectF anchorRectangle = qApp->inputMethod()->anchorRectangle(); - QRectF cursorRectangle = qApp->inputMethod()->cursorRectangle(); + QRectF anchorRectangle; + QRectF cursorRectangle; + if (const QGuiApplication *app = qApp) { + anchorRectangle = app->inputMethod()->anchorRectangle(); + cursorRectangle = app->inputMethod()->cursorRectangle(); + } else { + anchorRectangle = d->anchorRectangle; + cursorRectangle = d->cursorRectangle; + } QString surroundingText = imQueryEvent.value(Qt::ImSurroundingText).toString(); QString selectedText = imQueryEvent.value(Qt::ImCurrentSelection).toString(); diff --git a/src/virtualkeyboard/shifthandler.cpp b/src/virtualkeyboard/shifthandler.cpp index c40fd78e..376410e3 100644 --- a/src/virtualkeyboard/shifthandler.cpp +++ b/src/virtualkeyboard/shifthandler.cpp @@ -259,7 +259,8 @@ void ShiftHandler::autoCapitalize() void ShiftHandler::restart() { Q_D(ShiftHandler); - if (!qGuiApp->inputMethod()->isVisible()) { + const QGuiApplication *app = qGuiApp; + if (!app || !app->inputMethod()->isVisible()) { d->resetWhenVisible = true; return; } @@ -282,7 +283,11 @@ void ShiftHandler::localeChanged() void ShiftHandler::inputMethodVisibleChanged() { Q_D(ShiftHandler); - if (d->resetWhenVisible && qGuiApp->inputMethod()->isVisible()) { + if (!d->resetWhenVisible) + return; + + const QGuiApplication *app = qGuiApp; + if (app && app->inputMethod()->isVisible()) { d->resetWhenVisible = false; reset(); } |