summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYann Bodson <yann.bodson@nokia.com>2010-03-04 07:23:27 (GMT)
committerYann Bodson <yann.bodson@nokia.com>2010-03-04 07:23:27 (GMT)
commit2d6b1a1975af87c33fc45d2da3bfc7d2668135c9 (patch)
treed5bf386ea5b79bce6f0dbb9db8c83587493cd187 /src
parent372f474d97f2169597f994ee80e6c3d5b7f6d7bf (diff)
parent4802116c73c0b9ee80dddc8ef4720bfdbde4e885 (diff)
downloadQt-2d6b1a1975af87c33fc45d2da3bfc7d2668135c9.zip
Qt-2d6b1a1975af87c33fc45d2da3bfc7d2668135c9.tar.gz
Qt-2d6b1a1975af87c33fc45d2da3bfc7d2668135c9.tar.bz2
Merge branch 'tab-navigation' into 4.7
Diffstat (limited to 'src')
-rw-r--r--src/declarative/graphicsitems/qdeclarativeitem.cpp88
-rw-r--r--src/declarative/graphicsitems/qdeclarativeitem_p.h13
2 files changed, 87 insertions, 14 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp
index 5014fd8..3bee5b8 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp
@@ -498,6 +498,32 @@ void QDeclarativeKeyNavigationAttached::setDown(QDeclarativeItem *i)
emit changed();
}
+QDeclarativeItem *QDeclarativeKeyNavigationAttached::tab() const
+{
+ Q_D(const QDeclarativeKeyNavigationAttached);
+ return d->tab;
+}
+
+void QDeclarativeKeyNavigationAttached::setTab(QDeclarativeItem *i)
+{
+ Q_D(QDeclarativeKeyNavigationAttached);
+ d->tab = i;
+ emit changed();
+}
+
+QDeclarativeItem *QDeclarativeKeyNavigationAttached::backtab() const
+{
+ Q_D(const QDeclarativeKeyNavigationAttached);
+ return d->backtab;
+}
+
+void QDeclarativeKeyNavigationAttached::setBacktab(QDeclarativeItem *i)
+{
+ Q_D(QDeclarativeKeyNavigationAttached);
+ d->backtab = i;
+ emit changed();
+}
+
void QDeclarativeKeyNavigationAttached::keyPressed(QKeyEvent *event)
{
Q_D(QDeclarativeKeyNavigationAttached);
@@ -529,6 +555,18 @@ void QDeclarativeKeyNavigationAttached::keyPressed(QKeyEvent *event)
event->accept();
}
break;
+ case Qt::Key_Tab:
+ if (d->tab) {
+ d->tab->setFocus(true);
+ event->accept();
+ }
+ break;
+ case Qt::Key_Backtab:
+ if (d->backtab) {
+ d->backtab->setFocus(true);
+ event->accept();
+ }
+ break;
default:
break;
}
@@ -563,6 +601,16 @@ void QDeclarativeKeyNavigationAttached::keyReleased(QKeyEvent *event)
event->accept();
}
break;
+ case Qt::Key_Tab:
+ if (d->tab) {
+ event->accept();
+ }
+ break;
+ case Qt::Key_Backtab:
+ if (d->backtab) {
+ event->accept();
+ }
+ break;
default:
break;
}
@@ -902,6 +950,8 @@ const QDeclarativeKeysAttached::SigMap QDeclarativeKeysAttached::sigMap[] = {
{ Qt::Key_Right, "rightPressed" },
{ Qt::Key_Up, "upPressed" },
{ Qt::Key_Down, "downPressed" },
+ { Qt::Key_Tab, "tabPressed" },
+ { Qt::Key_Backtab, "backtabPressed" },
{ Qt::Key_Asterisk, "asteriskPressed" },
{ Qt::Key_NumberSign, "numberSignPressed" },
{ Qt::Key_Escape, "escapePressed" },
@@ -1440,7 +1490,7 @@ QDeclarativeAnchors *QDeclarativeItem::anchors()
void QDeclarativeItemPrivate::data_append(QDeclarativeListProperty<QObject> *prop, QObject *o)
{
QDeclarativeItem *i = qobject_cast<QDeclarativeItem *>(o);
- if (i)
+ if (i)
i->setParentItem(static_cast<QDeclarativeItem *>(prop->object));
else
o->setParent(static_cast<QDeclarativeItem *>(prop->object));
@@ -1568,7 +1618,7 @@ void QDeclarativeItemPrivate::transform_clear(QDeclarativeListProperty<QGraphics
*/
/*! \internal */
-QDeclarativeListProperty<QObject> QDeclarativeItem::data()
+QDeclarativeListProperty<QObject> QDeclarativeItem::data()
{
return QDeclarativeListProperty<QObject>(this, 0, QDeclarativeItemPrivate::data_append);
}
@@ -2179,16 +2229,16 @@ void QDeclarativeItem::focusChanged(bool flag)
QDeclarativeListProperty<QDeclarativeItem> QDeclarativeItem::fxChildren()
{
return QDeclarativeListProperty<QDeclarativeItem>(this, 0, QDeclarativeItemPrivate::children_append,
- QDeclarativeItemPrivate::children_count,
- QDeclarativeItemPrivate::children_at);
+ QDeclarativeItemPrivate::children_count,
+ QDeclarativeItemPrivate::children_at);
}
/*! \internal */
QDeclarativeListProperty<QObject> QDeclarativeItem::resources()
{
- return QDeclarativeListProperty<QObject>(this, 0, QDeclarativeItemPrivate::resources_append,
- QDeclarativeItemPrivate::resources_count,
- QDeclarativeItemPrivate::resources_at);
+ return QDeclarativeListProperty<QObject>(this, 0, QDeclarativeItemPrivate::resources_append,
+ QDeclarativeItemPrivate::resources_count,
+ QDeclarativeItemPrivate::resources_at);
}
/*!
@@ -2465,14 +2515,26 @@ QPointF QDeclarativeItemPrivate::computeTransformOrigin() const
/*! \internal */
bool QDeclarativeItem::sceneEvent(QEvent *event)
{
- bool rv = QGraphicsItem::sceneEvent(event);
+ if (event->type() == QEvent::KeyPress) {
+ QKeyEvent *k = static_cast<QKeyEvent *>(event);
- if (event->type() == QEvent::FocusIn ||
- event->type() == QEvent::FocusOut) {
- focusChanged(hasFocus());
- }
+ if ((k->key() == Qt::Key_Tab || k->key() == Qt::Key_Backtab) &&
+ !(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier))) {
+ keyPressEvent(static_cast<QKeyEvent *>(event));
+ if (!event->isAccepted())
+ QGraphicsItem::sceneEvent(event);
+ } else {
+ QGraphicsItem::sceneEvent(event);
+ }
+ } else {
+ bool rv = QGraphicsItem::sceneEvent(event);
- return rv;
+ if (event->type() == QEvent::FocusIn ||
+ event->type() == QEvent::FocusOut) {
+ focusChanged(hasFocus());
+ }
+ return rv;
+ }
}
/*! \internal */
diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h
index 4b4917e..e424970 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h
@@ -289,12 +289,14 @@ class QDeclarativeKeyNavigationAttachedPrivate : public QObjectPrivate
{
public:
QDeclarativeKeyNavigationAttachedPrivate()
- : QObjectPrivate(), left(0), right(0), up(0), down(0) {}
+ : QObjectPrivate(), left(0), right(0), up(0), down(0), tab(0), backtab(0) {}
QDeclarativeItem *left;
QDeclarativeItem *right;
QDeclarativeItem *up;
QDeclarativeItem *down;
+ QDeclarativeItem *tab;
+ QDeclarativeItem *backtab;
};
class QDeclarativeKeyNavigationAttached : public QObject, public QDeclarativeItemKeyFilter
@@ -306,6 +308,9 @@ class QDeclarativeKeyNavigationAttached : public QObject, public QDeclarativeIte
Q_PROPERTY(QDeclarativeItem *right READ right WRITE setRight NOTIFY changed)
Q_PROPERTY(QDeclarativeItem *up READ up WRITE setUp NOTIFY changed)
Q_PROPERTY(QDeclarativeItem *down READ down WRITE setDown NOTIFY changed)
+ Q_PROPERTY(QDeclarativeItem *tab READ tab WRITE setTab NOTIFY changed)
+ Q_PROPERTY(QDeclarativeItem *backtab READ backtab WRITE setBacktab NOTIFY changed)
+
public:
QDeclarativeKeyNavigationAttached(QObject * = 0);
@@ -317,6 +322,10 @@ public:
void setUp(QDeclarativeItem *);
QDeclarativeItem *down() const;
void setDown(QDeclarativeItem *);
+ QDeclarativeItem *tab() const;
+ void setTab(QDeclarativeItem *);
+ QDeclarativeItem *backtab() const;
+ void setBacktab(QDeclarativeItem *);
static QDeclarativeKeyNavigationAttached *qmlAttachedProperties(QObject *);
@@ -407,6 +416,8 @@ Q_SIGNALS:
void rightPressed(QDeclarativeKeyEvent *event);
void upPressed(QDeclarativeKeyEvent *event);
void downPressed(QDeclarativeKeyEvent *event);
+ void tabPressed(QDeclarativeKeyEvent *event);
+ void backtabPressed(QDeclarativeKeyEvent *event);
void asteriskPressed(QDeclarativeKeyEvent *event);
void numberSignPressed(QDeclarativeKeyEvent *event);