aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-03-04 21:26:13 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-03-07 11:58:50 +0100
commit962609bef1aaa61125700ceb5e5e25c243113a0a (patch)
tree86f82b97e0dcf523546a520a1b44b1602f2bbcc0 /src/quick
parent04592dae5067b87b39e1ae9387e522fb394159d6 (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>
Diffstat (limited to 'src/quick')
-rw-r--r--src/quick/items/qquicktextedit.cpp55
-rw-r--r--src/quick/items/qquicktextedit_p.h3
-rw-r--r--src/quick/items/qquicktextedit_p_p.h1
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;