Honor setFocusOnTouchRelease in QQuickTextInput
authorKai Uwe Broulik <kde@privat.broulik.de>
Tue, 17 Mar 2015 13:26:35 +0000 (14:26 +0100)
committerKai Uwe Broulik <kde@privat.broulik.de>
Mon, 30 Mar 2015 13:05:14 +0000 (13:05 +0000)
[ChangeLog][QtQuick][TextInput] SetFocusOnTouchRelease is honored

Change-Id: I0c5150465effadb7b1221250875aedf16a83bb2c
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
src/quick/items/qquicktextinput.cpp
src/quick/items/qquicktextinput_p.h

index 1b7552201f42a7b4cc1bbd81db26a6bb022b4106..5c8c0cf8234e6f150888c3259ecf831af9464d1b 100644 (file)
@@ -1580,15 +1580,8 @@ void QQuickTextInput::mousePressEvent(QMouseEvent *event)
     int cursor = d->positionAt(event->localPos());
     d->moveCursor(cursor, mark);
 
-    if (d->focusOnPress) {
-        bool hadActiveFocus = hasActiveFocus();
-        forceActiveFocus();
-#ifndef QT_NO_IM
-        // re-open input panel on press if already focused
-        if (hasActiveFocus() && hadActiveFocus && !d->m_readOnly)
-            qGuiApp->inputMethod()->show();
-#endif
-    }
+    if (d->focusOnPress && !qGuiApp->styleHints()->setFocusOnTouchRelease())
+        ensureActiveFocus();
 
     event->setAccepted(true);
 }
@@ -1638,6 +1631,10 @@ void QQuickTextInput::mouseReleaseEvent(QMouseEvent *event)
         }
     }
 #endif
+
+    if (d->focusOnPress && qGuiApp->styleHints()->setFocusOnTouchRelease())
+        ensureActiveFocus();
+
     if (!event->isAccepted())
         QQuickImplicitSizeItem::mouseReleaseEvent(event);
 }
@@ -1870,6 +1867,19 @@ void QQuickTextInput::invalidateFontCaches()
         d->m_textLayout.engine()->resetFontEngineCache();
 }
 
+void QQuickTextInput::ensureActiveFocus()
+{
+    Q_D(QQuickTextInput);
+
+    bool hadActiveFocus = hasActiveFocus();
+    forceActiveFocus();
+#ifndef QT_NO_IM
+    // re-open input panel on press if already focused
+    if (hasActiveFocus() && hadActiveFocus && !d->m_readOnly)
+        qGuiApp->inputMethod()->show();
+#endif
+}
+
 QSGNode *QQuickTextInput::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data)
 {
     Q_UNUSED(data);
index 78e6a6be7e8aa044ce49efeb7761f34fce9825eb..3bcbe0fa2521ca9d5a74a85577631d495cf0202b 100644 (file)
@@ -303,6 +303,7 @@ Q_SIGNALS:
 
 private:
     void invalidateFontCaches();
+    void ensureActiveFocus();
 
 protected:
     void geometryChanged(const QRectF &newGeometry,