summaryrefslogtreecommitdiffstats
path: root/src/plugins/accessible
diff options
context:
space:
mode:
authorJosé Millán Soto <fid@gpul.org>2012-01-14 23:48:04 (GMT)
committerQt by Nokia <qt-info@nokia.com>2012-01-18 12:11:15 (GMT)
commit3e4fa9abefc5e6ede2c47d22e6aca3f38183d4a0 (patch)
tree8bd3ef5f32435d163c4cc8dfdd685ccd9da048e1 /src/plugins/accessible
parentd558a2c85f61ad2c634531b06cfc75581e2e2e2b (diff)
downloadQt-3e4fa9abefc5e6ede2c47d22e6aca3f38183d4a0.zip
Qt-3e4fa9abefc5e6ede2c47d22e6aca3f38183d4a0.tar.gz
Qt-3e4fa9abefc5e6ede2c47d22e6aca3f38183d4a0.tar.bz2
Handle closable tabs in QAccessibleTabBar
Tab information was hidden by the closing buttons. Closing is implented by using doAction and actionText methods, as it's not possible to use QAccessibleActionInterface to send actions to child widgets in complex widgets. Change-Id: I0f55d5084737fa13c81df402f5dd54f11e164f8a Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
Diffstat (limited to 'src/plugins/accessible')
-rw-r--r--src/plugins/accessible/widgets/complexwidgets.cpp65
-rw-r--r--src/plugins/accessible/widgets/complexwidgets.h4
2 files changed, 68 insertions, 1 deletions
diff --git a/src/plugins/accessible/widgets/complexwidgets.cpp b/src/plugins/accessible/widgets/complexwidgets.cpp
index 193a625..dae4e9c 100644
--- a/src/plugins/accessible/widgets/complexwidgets.cpp
+++ b/src/plugins/accessible/widgets/complexwidgets.cpp
@@ -1545,6 +1545,28 @@ QAccessible::Role QAccessibleTabBar::role(int child) const
}
/*! \reimp */
+int QAccessibleTabBar::navigate(RelationFlag relation, int entry, QAccessibleInterface** target) const
+{
+ //QAccessibleWidgetEx::navigate might think that this is not a complex widget
+ //if close buttons are enabled, so this functions handles those cases in which
+ //the value to return is different if it's a complex widget and if it's not.
+ if (!target)
+ return -1;
+
+ *target = 0;
+
+ switch (relation) {
+ case Child:
+ if ((entry >= 0) && (entry <= childCount()))
+ return entry;
+ return -1;
+ default:
+ return QAccessibleWidgetEx::navigate(relation, entry, target);
+ }
+}
+
+
+/*! \reimp */
QAccessible::State QAccessibleTabBar::state(int child) const
{
State st = QAccessibleWidgetEx::state(0);
@@ -1574,18 +1596,59 @@ QAccessible::State QAccessibleTabBar::state(int child) const
else
st |= Selectable;
- if (!tb->currentIndex() == child - 1)
+ if (tb->currentIndex() == child - 1)
st |= Selected;
return st;
}
/*! \reimp */
+QString QAccessibleTabBar::actionText(int action, Text t, int child) const
+{
+ if (!child)
+ return QString();
+
+ switch (t) {
+ case QAccessible::Name:
+ if ((action == 1) && (child <= tabBar()->count())) {
+ return tabBar()->tabsClosable() ? QTabBar::tr("Close") : QString();
+ } else if (action == 0) {
+ if (child <= tabBar()->count())
+ return QTabBar::tr("Activate");
+ else //it's an scroll button
+ return QTabBar::tr("Press");
+ }
+ break;
+ case QAccessible::Description:
+ if ((action == 1) && (child <= tabBar()->count())) {
+ return tabBar()->tabsClosable() ? QTabBar::tr("Close the tab") : QString();
+ } else if (action == 0) {
+ if (child <= tabBar()->count())
+ return QTabBar::tr("Activate the tab");
+ }
+ break;
+ }
+ return QString();
+}
+
+/*! \reimp */
+int QAccessibleTabBar::userActionCount(int child) const
+{
+ if (!child || (child > tabBar()->count()))
+ return 0;
+ return tabBar()->tabsClosable() ? 1 : 0;
+}
+
+/*! \reimp */
bool QAccessibleTabBar::doAction(int action, int child, const QVariantList &)
{
if (!child)
return false;
+ if ((action == 1) && (child <= tabBar()->count()) && tabBar()->tabsClosable()) {
+ emit tabBar()->tabCloseRequested(child - 1);
+ }
+
if (action != QAccessible::DefaultAction && action != QAccessible::Press)
return false;
diff --git a/src/plugins/accessible/widgets/complexwidgets.h b/src/plugins/accessible/widgets/complexwidgets.h
index 88aded5..14ad622 100644
--- a/src/plugins/accessible/widgets/complexwidgets.h
+++ b/src/plugins/accessible/widgets/complexwidgets.h
@@ -241,8 +241,12 @@ public:
QString text(Text t, int child) const;
Role role(int child) const;
State state(int child) const;
+ int navigate(RelationFlag relation, int entry,
+ QAccessibleInterface **target) const;
bool doAction(int action, int child, const QVariantList &params);
+ QString actionText(int action, Text t, int child) const;
+ int userActionCount(int child) const;
bool setSelected(int child, bool on, bool extend);
QVector<int> selection() const;