Update accessibility StateChange by custom event.

Subclass QAccessibleEvent to give details what changed in the
state change.

Change-Id: I9005d311e85a3c8bfa6e062833fa6a8a7dc6a4a4
Reviewed-by: Jan-Arve Sæther <jan-arve.saether@nokia.com>
bb10
Frederik Gladhorn 2012-03-07 13:51:31 +01:00 committed by Qt by Nokia
parent 0ecec0e903
commit eb57da5b3f
6 changed files with 32 additions and 16 deletions

View File

@ -257,7 +257,8 @@ QT_BEGIN_NAMESPACE
\value SelectionWithin Several changes to a selection has occurred in an item
view.
\value SoundPlayed A sound has been played by an object
\value StateChanged The QAccessible::State of an object has changed.
\omitvalue StateChanged The QAccessible::State of an object has changed.
This value is used internally for the QAccessibleStateChangeEvent.
\value TableCaptionChanged A table caption has been changed.
\value TableColumnDescriptionChanged The description of a table column, typically found in
the column's header, has been changed.

View File

@ -452,6 +452,21 @@ private:
int m_child;
};
class Q_GUI_EXPORT QAccessibleStateChangeEvent :public QAccessibleEvent
{
public:
inline QAccessibleStateChangeEvent(QAccessible::State state, QObject *obj, int chld = -1)
: QAccessibleEvent(QAccessible::StateChanged, obj, chld), m_changedStates(state)
{}
QAccessible::State changedStates() const {
return m_changedStates;
}
private:
QAccessible::State m_changedStates;
};
#define QAccessibleInterface_iid "org.qt-project.Qt.QAccessibleInterface"
Q_DECLARE_INTERFACE(QAccessibleInterface, QAccessibleInterface_iid)

View File

@ -8245,12 +8245,15 @@ bool QWidget::event(QEvent *event)
void QWidget::changeEvent(QEvent * event)
{
switch(event->type()) {
case QEvent::EnabledChange:
case QEvent::EnabledChange: {
update();
#ifndef QT_NO_ACCESSIBILITY
QAccessible::updateAccessibility(QAccessibleEvent(QAccessible::StateChanged, this, 0));
QAccessible::State s;
s.disabled = true;
QAccessible::updateAccessibility(QAccessibleStateChangeEvent(s, this));
#endif
break;
}
case QEvent::FontChange:
case QEvent::StyleChange: {
@ -10515,13 +10518,6 @@ void QWidget::updateMicroFocus()
{
// updating everything since this is currently called for any kind of state change
qApp->inputMethod()->update(Qt::ImQueryAll);
#ifndef QT_NO_ACCESSIBILITY
if (isVisible()) {
// ##### is this correct
QAccessible::updateAccessibility(QAccessibleEvent(QAccessible::StateChanged, this, 0));
}
#endif
}
/*!

View File

@ -504,9 +504,6 @@ void QAbstractButtonPrivate::refresh()
if (blockRefresh)
return;
q->update();
#ifndef QT_NO_ACCESSIBILITY
QAccessible::updateAccessibility(QAccessibleEvent(QAccessible::StateChanged, q, 0));
#endif
}
void QAbstractButtonPrivate::click()
@ -767,6 +764,13 @@ void QAbstractButton::setChecked(bool checked)
d->notifyChecked();
if (guard)
emit toggled(checked);
#ifndef QT_NO_ACCESSIBILITY
QAccessible::State s;
s.checked = true;
QAccessible::updateAccessibility(QAccessibleStateChangeEvent(s, this));
#endif
}
bool QAbstractButton::isChecked() const

View File

@ -376,7 +376,9 @@ void QPushButton::setDefault(bool enable)
}
update();
#ifndef QT_NO_ACCESSIBILITY
QAccessible::updateAccessibility(QAccessibleEvent(QAccessible::StateChanged, this, 0));
QAccessible::State s;
s.defaultButton = true;
QAccessible::updateAccessibility(QAccessibleStateChangeEvent(s, this));
#endif
}

View File

@ -419,8 +419,6 @@ void tst_QAccessibility::eventTest()
button->setFocus(Qt::MouseFocusReason);
QTestAccessibility::clearEvents();
QTest::mouseClick(button, Qt::LeftButton, 0);
QVERIFY_EVENT(button, 0, QAccessible::StateChanged);
QVERIFY_EVENT(button, 0, QAccessible::StateChanged);
button->setAccessibleName("Olaf the second");
QVERIFY_EVENT(button, -1, QAccessible::NameChanged);