diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-03-04 21:26:13 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-03-07 11:58:50 +0100 |
commit | 962609bef1aaa61125700ceb5e5e25c243113a0a (patch) | |
tree | 86f82b97e0dcf523546a520a1b44b1602f2bbcc0 | |
parent | 04592dae5067b87b39e1ae9387e522fb394159d6 (diff) |
Handle focus events directly in TextEdit.
Instead of relying on the item change
where we don't get focus reason, use
focusInEvent and focusOutEvent.
Change-Id: I2db7d81c67c65595b929fdcedc568af360831c5c
Reviewed-by: Caroline Chao <caroline.chao@digia.com>
-rw-r--r-- | src/quick/items/qquicktextedit.cpp | 55 | ||||
-rw-r--r-- | src/quick/items/qquicktextedit_p.h | 3 | ||||
-rw-r--r-- | src/quick/items/qquicktextedit_p_p.h | 1 |
3 files changed, 30 insertions, 29 deletions
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp index 4ddb992fa6..9d28bc7963 100644 --- a/src/quick/items/qquicktextedit.cpp +++ b/src/quick/items/qquicktextedit.cpp @@ -1601,30 +1601,7 @@ void QQuickTextEdit::inputMethodEvent(QInputMethodEvent *event) if (wasComposing != isInputMethodComposing()) emit inputMethodComposingChanged(); } -#endif // QT_NO_IM -void QQuickTextEdit::itemChange(ItemChange change, const ItemChangeData &value) -{ - Q_D(QQuickTextEdit); - if (change == ItemActiveFocusHasChanged) { - setCursorVisible(value.boolValue); - QFocusEvent focusEvent(value.boolValue ? QEvent::FocusIn : QEvent::FocusOut); - d->control->processEvent(&focusEvent, QPointF(-d->xoff, -d->yoff)); - if (value.boolValue) { - q_updateAlignment(); -#ifndef QT_NO_IM - connect(qApp->inputMethod(), SIGNAL(inputDirectionChanged(Qt::LayoutDirection)), - this, SLOT(q_updateAlignment())); - } else { - disconnect(qApp->inputMethod(), SIGNAL(inputDirectionChanged(Qt::LayoutDirection)), - this, SLOT(q_updateAlignment())); -#endif - } - } - QQuickItem::itemChange(change, value); -} - -#ifndef QT_NO_IM /*! \overload Returns the value of the given \a property. @@ -2070,12 +2047,36 @@ void QQuickTextEditPrivate::updateDefaultTextOption() void QQuickTextEdit::focusInEvent(QFocusEvent *event) { - Q_D(const QQuickTextEdit); + Q_D(QQuickTextEdit); + d->handleFocusEvent(event); + QQuickImplicitSizeItem::focusInEvent(event); +} + +void QQuickTextEdit::focusOutEvent(QFocusEvent *event) +{ + Q_D(QQuickTextEdit); + d->handleFocusEvent(event); + QQuickImplicitSizeItem::focusOutEvent(event); +} + +void QQuickTextEditPrivate::handleFocusEvent(QFocusEvent *event) +{ + Q_Q(QQuickTextEdit); + bool focus = event->type() == QEvent::FocusIn; + q->setCursorVisible(focus); + control->processEvent(event, QPointF(-xoff, -yoff)); + if (focus) { + q->q_updateAlignment(); #ifndef QT_NO_IM - if (d->focusOnPress && !isReadOnly()) - qGuiApp->inputMethod()->show(); + if (focusOnPress && !q->isReadOnly()) + qGuiApp->inputMethod()->show(); + q->connect(qApp->inputMethod(), SIGNAL(inputDirectionChanged(Qt::LayoutDirection)), + q, SLOT(q_updateAlignment())); + } else { + q->disconnect(qApp->inputMethod(), SIGNAL(inputDirectionChanged(Qt::LayoutDirection)), + q, SLOT(q_updateAlignment())); #endif - QQuickImplicitSizeItem::focusInEvent(event); + } } void QQuickTextEdit::q_canPasteChanged() diff --git a/src/quick/items/qquicktextedit_p.h b/src/quick/items/qquicktextedit_p.h index 744a7e290d..149d26f98e 100644 --- a/src/quick/items/qquicktextedit_p.h +++ b/src/quick/items/qquicktextedit_p.h @@ -329,6 +329,7 @@ protected: void keyPressEvent(QKeyEvent *); void keyReleaseEvent(QKeyEvent *); void focusInEvent(QFocusEvent *event); + void focusOutEvent(QFocusEvent *event); // mouse filter? void mousePressEvent(QMouseEvent *event); @@ -338,8 +339,6 @@ protected: #ifndef QT_NO_IM void inputMethodEvent(QInputMethodEvent *e); #endif - virtual void itemChange(ItemChange, const ItemChangeData &); - QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *updatePaintNodeData); friend class QQuickTextUtil; diff --git a/src/quick/items/qquicktextedit_p_p.h b/src/quick/items/qquicktextedit_p_p.h index 5306c979cf..f65af3d2d3 100644 --- a/src/quick/items/qquicktextedit_p_p.h +++ b/src/quick/items/qquicktextedit_p_p.h @@ -105,6 +105,7 @@ public: Qt::LayoutDirection textDirection(const QString &text) const; void setNativeCursorEnabled(bool enabled) { control->setCursorWidth(enabled ? 1 : 0); } + void handleFocusEvent(QFocusEvent *event); #ifndef QT_NO_IM Qt::InputMethodHints effectiveInputMethodHints() const; |