From 5aa14793c422dc77f3b464c27091dcd1b2ed1c72 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Tue, 11 Oct 2011 16:20:47 +0200 Subject: Add default actions to QAccessibleWidget. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I9f251aad663fd0b8db2ef068c6581241d91c090d Reviewed-by: Jan-Arve Sæther --- src/gui/accessible/qaccessible2.cpp | 31 ++++++------------------ src/gui/accessible/qaccessible2.h | 2 ++ src/plugins/accessible/widgets/complexwidgets.h | 2 +- src/plugins/accessible/widgets/simplewidgets.cpp | 24 +++++++++--------- src/plugins/accessible/widgets/simplewidgets.h | 2 +- src/widgets/accessible/qaccessiblewidget.cpp | 27 +++++++++++++++++++++ src/widgets/accessible/qaccessiblewidget.h | 8 +++++- 7 files changed, 59 insertions(+), 37 deletions(-) (limited to 'src') diff --git a/src/gui/accessible/qaccessible2.cpp b/src/gui/accessible/qaccessible2.cpp index b33d9755c5..b3ad00cbce 100644 --- a/src/gui/accessible/qaccessible2.cpp +++ b/src/gui/accessible/qaccessible2.cpp @@ -198,32 +198,17 @@ QT_BEGIN_NAMESPACE \sa actionNames() */ -const QString QAccessibleActionInterface::PressAction = QStringLiteral("Press"); -const QString QAccessibleActionInterface::IncreaseAction = QStringLiteral("Increase"); -const QString QAccessibleActionInterface::DecreaseAction = QStringLiteral("Decrease"); -const QString QAccessibleActionInterface::ShowMenuAction = QStringLiteral("ShowMenu"); -const QString QAccessibleActionInterface::SetFocusAction = QStringLiteral("SetFocus"); -const QString QAccessibleActionInterface::CheckAction = QStringLiteral("Check"); -const QString QAccessibleActionInterface::UncheckAction = QStringLiteral("Uncheck"); +const QString QAccessibleActionInterface::PressAction = QStringLiteral(QT_TR_NOOP("Press")); +const QString QAccessibleActionInterface::IncreaseAction = QStringLiteral(QT_TR_NOOP("Increase")); +const QString QAccessibleActionInterface::DecreaseAction = QStringLiteral(QT_TR_NOOP("Decrease")); +const QString QAccessibleActionInterface::ShowMenuAction = QStringLiteral(QT_TR_NOOP("ShowMenu")); +const QString QAccessibleActionInterface::SetFocusAction = QStringLiteral(QT_TR_NOOP("SetFocus")); +const QString QAccessibleActionInterface::CheckAction = QStringLiteral(QT_TR_NOOP("Check")); +const QString QAccessibleActionInterface::UncheckAction = QStringLiteral(QT_TR_NOOP("Uncheck")); QString QAccessibleActionInterface::localizedActionName(const QString &actionName) const { - if (actionName == PressAction) - return QCoreApplication::translate("QAccessibleActionInterface", "Press"); - else if (actionName == IncreaseAction) - return QCoreApplication::translate("QAccessibleActionInterface", "Increase"); - else if (actionName == DecreaseAction) - return QCoreApplication::translate("QAccessibleActionInterface", "Decrease"); - else if (actionName == ShowMenuAction) - return QCoreApplication::translate("QAccessibleActionInterface", "ShowMenu"); - else if (actionName == SetFocusAction) - return QCoreApplication::translate("QAccessibleActionInterface", "SetFocus"); - else if (actionName == CheckAction) - return QCoreApplication::translate("QAccessibleActionInterface", "Check"); - else if (actionName == UncheckAction) - return QCoreApplication::translate("QAccessibleActionInterface", "Uncheck"); - - return QString(); + return QAccessibleActionInterface::tr(qPrintable(actionName)); } QString QAccessibleActionInterface::localizedActionDescription(const QString &actionName) const diff --git a/src/gui/accessible/qaccessible2.h b/src/gui/accessible/qaccessible2.h index 65e63b4fbf..d3777d6561 100644 --- a/src/gui/accessible/qaccessible2.h +++ b/src/gui/accessible/qaccessible2.h @@ -43,6 +43,7 @@ #define QACCESSIBLE2_H #include +#include QT_BEGIN_HEADER @@ -328,6 +329,7 @@ friend class QAbstractItemViewPrivate; class Q_GUI_EXPORT QAccessibleActionInterface: public QAccessible2Interface { + Q_DECLARE_TR_FUNCTIONS(QAccessibleActionInterface) public: inline QAccessible2Interface *qAccessibleActionCastHelper() { return this; } diff --git a/src/plugins/accessible/widgets/complexwidgets.h b/src/plugins/accessible/widgets/complexwidgets.h index 980eee2502..13fe9beb9f 100644 --- a/src/plugins/accessible/widgets/complexwidgets.h +++ b/src/plugins/accessible/widgets/complexwidgets.h @@ -250,7 +250,7 @@ protected: #endif // QT_NO_TABBAR #ifndef QT_NO_COMBOBOX -class QAccessibleComboBox : public QAccessibleWidget, public QAccessibleActionInterface +class QAccessibleComboBox : public QAccessibleWidget { Q_ACCESSIBLE_OBJECT public: diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/plugins/accessible/widgets/simplewidgets.cpp index 4771d93980..d2c5256b19 100644 --- a/src/plugins/accessible/widgets/simplewidgets.cpp +++ b/src/plugins/accessible/widgets/simplewidgets.cpp @@ -187,6 +187,7 @@ QStringList QAccessibleButton::actionNames() const break; } } + names << QAccessibleWidget::actionNames(); return names; } @@ -203,12 +204,13 @@ void QAccessibleButton::doAction(const QString &actionName) else #endif button()->animateClick(); - } - - if (actionName == CheckAction) + } else if (actionName == CheckAction) { button()->setChecked(true); - if (actionName == UncheckAction) + } else if (actionName == UncheckAction) { button()->setChecked(false); + } else { + QAccessibleWidget::doAction(actionName); + } } QStringList QAccessibleButton::keyBindingsForAction(const QString &actionName) const @@ -456,10 +458,10 @@ QAccessible::Relation QAccessibleDisplay::relationTo(int child, const QAccessibl #endif #ifndef QT_NO_GROUPBOX } else { - QGroupBox *groupbox = qobject_cast(object()); - if (groupbox && !groupbox->title().isEmpty()) - if (groupbox->children().contains(o)) - relation |= Label; + QGroupBox *groupbox = qobject_cast(object()); + if (groupbox && !groupbox->title().isEmpty()) + if (groupbox->children().contains(o)) + relation |= Label; #endif } return relation; @@ -478,9 +480,9 @@ int QAccessibleDisplay::navigate(RelationFlag rel, int entry, QAccessibleInterfa #endif #ifndef QT_NO_GROUPBOX } else { - QGroupBox *groupbox = qobject_cast(object()); - if (groupbox && !groupbox->title().isEmpty()) - rel = Child; + QGroupBox *groupbox = qobject_cast(object()); + if (groupbox && !groupbox->title().isEmpty()) + rel = Child; #endif } *target = QAccessible::queryAccessibleInterface(targetObject); diff --git a/src/plugins/accessible/widgets/simplewidgets.h b/src/plugins/accessible/widgets/simplewidgets.h index 252d994d1b..8642f8d9b9 100644 --- a/src/plugins/accessible/widgets/simplewidgets.h +++ b/src/plugins/accessible/widgets/simplewidgets.h @@ -55,7 +55,7 @@ class QLineEdit; class QToolButton; class QProgressBar; -class QAccessibleButton : public QAccessibleWidget, public QAccessibleActionInterface +class QAccessibleButton : public QAccessibleWidget { Q_ACCESSIBLE_OBJECT Q_DECLARE_TR_FUNCTIONS(QAccessibleButton) diff --git a/src/widgets/accessible/qaccessiblewidget.cpp b/src/widgets/accessible/qaccessiblewidget.cpp index 9e11ab88c6..b4613a6eb8 100644 --- a/src/widgets/accessible/qaccessiblewidget.cpp +++ b/src/widgets/accessible/qaccessiblewidget.cpp @@ -819,6 +819,33 @@ QString QAccessibleWidget::text(Text t, int child) const return str; } +QStringList QAccessibleWidget::actionNames() const +{ + QStringList names; + if (widget()->isEnabled()) { + if (widget()->focusPolicy() != Qt::NoFocus) + names << SetFocusAction; + } + return names; +} + +void QAccessibleWidget::doAction(const QString &actionName) +{ + if (!widget()->isEnabled()) + return; + + if (actionName == SetFocusAction) { + if (widget()->isWindow()) + widget()->activateWindow(); + widget()->setFocus(); + } +} + +QStringList QAccessibleWidget::keyBindingsForAction(const QString &actionName) const +{ + return QStringList(); +} + /*! \reimp */ QAccessible::Role QAccessibleWidget::role(int child) const { diff --git a/src/widgets/accessible/qaccessiblewidget.h b/src/widgets/accessible/qaccessiblewidget.h index 9a6dae69e7..e3b5a86356 100644 --- a/src/widgets/accessible/qaccessiblewidget.h +++ b/src/widgets/accessible/qaccessiblewidget.h @@ -54,8 +54,9 @@ QT_MODULE(Gui) class QAccessibleWidgetPrivate; -class Q_WIDGETS_EXPORT QAccessibleWidget : public QAccessibleObject +class Q_WIDGETS_EXPORT QAccessibleWidget : public QAccessibleObject, public QAccessibleActionInterface { + Q_ACCESSIBLE_OBJECT public: explicit QAccessibleWidget(QWidget *o, Role r = Client, const QString& name = QString()); @@ -80,6 +81,11 @@ public: QVariant invokeMethod(Method method, int child, const QVariantList ¶ms); + // QAccessibleActionInterface + QStringList actionNames() const; + void doAction(const QString &actionName); + QStringList keyBindingsForAction(const QString &actionName) const; + protected: ~QAccessibleWidget(); QWidget *widget() const; -- cgit v1.2.3