diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-05-31 15:51:07 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-08-30 14:21:57 +0000 |
commit | a1d32483da20e8ba616bb5d32ef72928e012dac0 (patch) | |
tree | 585270b3130d7c0c1050177d543ff6899508d0dc | |
parent | 4c46dce8fd9c9dddddd1d07f56396b3eabb2efc4 (diff) |
Add QQuickItemPrivate::filterKeyEvent()
This allows Qt Quick Controls 2 to support attached Keys signal
handlers for an editable ComboBox by forwarding its internal text
editor's key events to the attached Keys handler of the ComboBox
control.
Task-number: QTBUG-61135
Change-Id: Ib642133a19389beb04a3b53375c083d17e185500
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Liang Qi <liang.qi@qt.io>
-rw-r--r-- | src/quick/items/qquickitem.cpp | 42 | ||||
-rw-r--r-- | src/quick/items/qquickitem_p.h | 1 |
2 files changed, 22 insertions, 21 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index 9f2d543387..3a11a1f3fe 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -5029,22 +5029,31 @@ void QQuickItemPrivate::transformChanged() #endif } +bool QQuickItemPrivate::filterKeyEvent(QKeyEvent *e, bool post) +{ + if (!extra.isAllocated() || !extra->keyHandler) + return false; + + if (post) + e->accept(); + + if (e->type() == QEvent::KeyPress) + extra->keyHandler->keyPressed(e, post); + else + extra->keyHandler->keyReleased(e, post); + + return e->isAccepted(); +} + void QQuickItemPrivate::deliverKeyEvent(QKeyEvent *e) { Q_Q(QQuickItem); Q_ASSERT(e->isAccepted()); - if (extra.isAllocated() && extra->keyHandler) { - if (e->type() == QEvent::KeyPress) - extra->keyHandler->keyPressed(e, false); - else - extra->keyHandler->keyReleased(e, false); - - if (e->isAccepted()) - return; - else - e->accept(); - } + if (filterKeyEvent(e, false)) + return; + else + e->accept(); if (e->type() == QEvent::KeyPress) q->keyPressEvent(e); @@ -5054,16 +5063,7 @@ void QQuickItemPrivate::deliverKeyEvent(QKeyEvent *e) if (e->isAccepted()) return; - if (extra.isAllocated() && extra->keyHandler) { - e->accept(); - - if (e->type() == QEvent::KeyPress) - extra->keyHandler->keyPressed(e, true); - else - extra->keyHandler->keyReleased(e, true); - } - - if (e->isAccepted() || !q->window()) + if (filterKeyEvent(e, true) || !q->window()) return; //only care about KeyPress now diff --git a/src/quick/items/qquickitem_p.h b/src/quick/items/qquickitem_p.h index d1aaf6026b..446a7d0945 100644 --- a/src/quick/items/qquickitem_p.h +++ b/src/quick/items/qquickitem_p.h @@ -564,6 +564,7 @@ public: virtual void transformChanged(); void deliverKeyEvent(QKeyEvent *); + bool filterKeyEvent(QKeyEvent *, bool post); #if QT_CONFIG(im) void deliverInputMethodEvent(QInputMethodEvent *); #endif |