From 477c43260eea8461dff1e0e8acb4b61a1600518a Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Mon, 30 Jan 2012 18:52:46 +0100 Subject: Accessibility: add text update events MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Iece9d100b3f5a379d7d8e29dea67a10d0c918c06 Reviewed-by: Jan-Arve Sæther --- src/testlib/qtestaccessible.h | 74 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 6 deletions(-) (limited to 'src/testlib') diff --git a/src/testlib/qtestaccessible.h b/src/testlib/qtestaccessible.h index 6d8d6125c1..fa2718b1b7 100644 --- a/src/testlib/qtestaccessible.h +++ b/src/testlib/qtestaccessible.h @@ -68,14 +68,51 @@ typedef QList EventList; bool operator==(const QAccessibleEvent &l, const QAccessibleEvent &r) { - if (l.type() != r.type() || - l.object() != r.object() || - l.child() != r.child()) + if (l.type() != r.type()) { +// qDebug() << "QAccessibleEvent with wrong type: " << qAccessibleEventString(l.type()) << " and " << qAccessibleEventString(r.type()); return false; + } + if (l.object() != r.object() || + l.child() != r.child()) { +// qDebug() << "QAccessibleEvent for wrong object: " << l.object() << " and " << r.object() << " child: " << l.child() << " and " << r.child(); + return false; + } if (l.type() == QAccessible::StateChanged) { return static_cast(&l)->changedStates() == static_cast(&r)->changedStates(); + } else if (l.type() == QAccessible::TextCaretMoved) { + return static_cast(&l)->cursorPosition() + == static_cast(&r)->cursorPosition(); + } else if (l.type() == QAccessible::TextSelectionChanged) { + const QAccessibleTextSelectionEvent *le = static_cast(&l); + const QAccessibleTextSelectionEvent *re = static_cast(&r); + return le->cursorPosition() == re->cursorPosition() && + le->selectionStart() == re->selectionStart() && + le->selectionEnd() == re->selectionEnd(); + } else if (l.type() == QAccessible::TextInserted) { + const QAccessibleTextInsertEvent *le = static_cast(&l); + const QAccessibleTextInsertEvent *re = static_cast(&r); + return le->cursorPosition() == re->cursorPosition() && + le->changePosition() == re->changePosition() && + le->textInserted() == re->textInserted(); + } else if (l.type() == QAccessible::TextRemoved) { + const QAccessibleTextRemoveEvent *le = static_cast(&l); + const QAccessibleTextRemoveEvent *re = static_cast(&r); + return le->cursorPosition() == re->cursorPosition() && + le->changePosition() == re->changePosition() && + le->textRemoved() == re->textRemoved(); + } else if (l.type() == QAccessible::TextUpdated) { + const QAccessibleTextUpdateEvent *le = static_cast(&l); + const QAccessibleTextUpdateEvent *re = static_cast(&r); + return le->cursorPosition() == re->cursorPosition() && + le->changePosition() == re->changePosition() && + le->textInserted() == re->textInserted() && + le->textRemoved() == re->textRemoved(); + } else if (l.type() == QAccessible::ValueChanged) { + const QAccessibleValueChangeEvent *le = static_cast(&l); + const QAccessibleValueChangeEvent *re = static_cast(&r); + return le->value() == re->value(); } return true; } @@ -108,7 +145,7 @@ public: return res; } static bool containsEvent(QAccessibleEvent *event) { - Q_FOREACH (QAccessibleEvent *ev, eventList()) { + Q_FOREACH (const QAccessibleEvent *ev, eventList()) { if (*ev == *event) return true; } @@ -146,9 +183,34 @@ private: } static QAccessibleEvent *copyEvent(QAccessibleEvent *event) { - if (event->type() == QAccessible::StateChanged) - return new QAccessibleStateChangeEvent(static_cast(event)->changedStates(), + if (event->type() == QAccessible::StateChanged) { + return new QAccessibleStateChangeEvent(static_cast(event)->changedStates(), event->object(), event->child()); + } else if (event->type() == QAccessible::TextCaretMoved) { + return new QAccessibleTextCursorEvent(static_cast(event)->cursorPosition(), event->object(), event->child()); + } else if (event->type() == QAccessible::TextSelectionChanged) { + const QAccessibleTextSelectionEvent *original = static_cast(event); + QAccessibleTextSelectionEvent *ev = new QAccessibleTextSelectionEvent(original->selectionStart(), original->selectionEnd(), event->object(), event->child()); + ev->setCursorPosition(original->cursorPosition()); + return ev; + } else if (event->type() == QAccessible::TextInserted) { + const QAccessibleTextInsertEvent *original = static_cast(event); + QAccessibleTextInsertEvent *ev = new QAccessibleTextInsertEvent(original->changePosition(), original->textInserted(), event->object(), event->child()); + ev->setCursorPosition(original->cursorPosition()); + return ev; + } else if (event->type() == QAccessible::TextRemoved) { + const QAccessibleTextRemoveEvent *original = static_cast(event); + QAccessibleTextRemoveEvent *ev = new QAccessibleTextRemoveEvent(original->changePosition(), original->textRemoved(), event->object(), event->child()); + ev->setCursorPosition(original->cursorPosition()); + return ev; + } else if (event->type() == QAccessible::TextUpdated) { + const QAccessibleTextUpdateEvent *original = static_cast(event); + QAccessibleTextUpdateEvent *ev = new QAccessibleTextUpdateEvent(original->changePosition(), original->textRemoved(), original->textInserted(), event->object(), event->child()); + ev->setCursorPosition(original->cursorPosition()); + return ev; + } else if (event->type() == QAccessible::ValueChanged) { + return new QAccessibleValueChangeEvent(static_cast(event)->value(), event->object(), event->child()); + } return new QAccessibleEvent(event->type(), event->object(), event->child()); } -- cgit v1.2.3