[plugins/qpa] Handle case that qtvirtualkeyboard plugin is not available more gracefully

We didn't check whether creating the QPlatfromInputContext worked and
accessed the m_inputContext unconditionally which obviously crashed.

Now the connects related to QInputMethods are not setup if we failed
to create the QPlatfromInputContext.

Reviewed-By: bshah
icc-effect-5.14.5
Martin Gräßlin 2016-06-02 15:25:31 +02:00
parent 13adf9609f
commit 5344bf1619
1 changed files with 23 additions and 21 deletions

View File

@ -97,29 +97,31 @@ void Integration::initialize()
screenAdded(m_dummyScreen);
m_inputContext.reset(QPlatformInputContextFactory::create(QStringLiteral("qtvirtualkeyboard")));
qunsetenv("QT_IM_MODULE");
connect(qApp, &QGuiApplication::focusObjectChanged, this,
[this] {
if (VirtualKeyboard::self() && qApp->focusObject() != VirtualKeyboard::self()) {
m_inputContext->setFocusObject(VirtualKeyboard::self());
}
}
);
connect(kwinApp(), &Application::workspaceCreated, this,
[this] {
if (VirtualKeyboard::self()) {
m_inputContext->setFocusObject(VirtualKeyboard::self());
}
}
);
connect(qApp->inputMethod(), &QInputMethod::visibleChanged, this,
[this] {
if (qApp->inputMethod()->isVisible()) {
if (QWindow *w = VirtualKeyboard::self()->inputPanel()) {
QWindowSystemInterface::handleWindowActivated(w, Qt::ActiveWindowFocusReason);
if (!m_inputContext.isNull()) {
connect(qApp, &QGuiApplication::focusObjectChanged, this,
[this] {
if (VirtualKeyboard::self() && qApp->focusObject() != VirtualKeyboard::self()) {
m_inputContext->setFocusObject(VirtualKeyboard::self());
}
}
}
);
);
connect(kwinApp(), &Application::workspaceCreated, this,
[this] {
if (VirtualKeyboard::self()) {
m_inputContext->setFocusObject(VirtualKeyboard::self());
}
}
);
connect(qApp->inputMethod(), &QInputMethod::visibleChanged, this,
[this] {
if (qApp->inputMethod()->isVisible()) {
if (QWindow *w = VirtualKeyboard::self()->inputPanel()) {
QWindowSystemInterface::handleWindowActivated(w, Qt::ActiveWindowFocusReason);
}
}
}
);
}
}
QAbstractEventDispatcher *Integration::createEventDispatcher() const