aboutsummaryrefslogtreecommitdiffstats
path: root/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp')
-rw-r--r--src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp b/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp
index cacf33f0..57e0d0c2 100644
--- a/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp
+++ b/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp
@@ -220,8 +220,6 @@ void QVirtualKeyboardInputContextPrivate::registerInputPanel(QObject *inputPanel
VIRTUALKEYBOARD_DEBUG() << "QVirtualKeyboardInputContextPrivate::registerInputPanel():" << inputPanel;
Q_ASSERT(!this->inputPanel);
this->inputPanel = inputPanel;
- if (QQuickItem *item = qobject_cast<QQuickItem *>(inputPanel))
- item->setZ(std::numeric_limits<qreal>::max());
}
void QVirtualKeyboardInputContextPrivate::hideInputPanel()
@@ -279,8 +277,23 @@ void QVirtualKeyboardInputContextPrivate::onInputItemChanged()
high z-order will make sure it gets events also during a modal session.
*/
if (isDesktopPanel.isValid() && !isDesktopPanel.toBool()) {
- if (QQuickWindow *quickWindow = quickItem->window())
- vkbPanel->setParentItem(quickWindow->contentItem());
+ if (QQuickWindow *quickWindow = quickItem->window()) {
+ QQuickItem *overlay = quickWindow->property("_q_QQuickOverlay").value<QQuickItem*>();
+ if (overlay && overlay->isVisible()) {
+ if (vkbPanel->parentItem() != overlay->parentItem()) {
+ inputPanelParentItem = vkbPanel->parentItem();
+ inputPanelZ = vkbPanel->z();
+ vkbPanel->setParentItem(overlay->parentItem());
+ vkbPanel->setZ(overlay->z() + 1);
+ }
+ } else {
+ if (QQuickItem *oldParentItem = qobject_cast<QQuickItem *>(inputPanelParentItem.data())) {
+ vkbPanel->setParentItem(oldParentItem);
+ vkbPanel->setZ(inputPanelZ);
+ inputPanelParentItem = nullptr;
+ }
+ }
+ }
}
}
}