aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2017-05-03 16:10:45 +0200
committerUlf Hermann <ulf.hermann@qt.io>2017-05-05 12:32:52 +0000
commita230f0eac4eb743a6ad502e3d2d939a2c7731dcd (patch)
tree80a4873b83edcf47ba2f273f58c45dfe771cc681 /src
parent96c9211bdde4c170e2fdb2f14178247eb7d8366b (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.cpp3
-rw-r--r--src/virtualkeyboard/desktopinputselectioncontrol.cpp5
-rw-r--r--src/virtualkeyboard/inputcontext.cpp11
-rw-r--r--src/virtualkeyboard/shifthandler.cpp9
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();
}