[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [qtatspi] src: Handle TableModelChange
From: José Millán Soto <fid () gpul ! org>
Date: 2012-08-31 23:03:47
Message-ID: 20120831230347.97C1CA6094 () git ! kde ! org
[Download RAW message or body]
Git commit 0d8a7c1f0968d40e0c64003e6b693d2768aa17d7 by José Millán Soto.
Committed on 16/08/2012 at 16:38.
Pushed by millansoto into branch 'master'.
Handle TableModelChange
AtSpiAdaptor::handleModelChange was created to be handle TableModelChange \
event.
This method will be called when notify is called with TableModelChange as \
reason and will send PropertyChange signals with name and description as \
arguments.
REVIEW: 106178
M +67 -1 src/atspiadaptor.cpp
M +1 -0 src/atspiadaptor.h
http://commits.kde.org/qtatspi/0d8a7c1f0968d40e0c64003e6b693d2768aa17d7
diff --git a/src/atspiadaptor.cpp b/src/atspiadaptor.cpp
index 314acad..b09f2b8 100644
--- a/src/atspiadaptor.cpp
+++ b/src/atspiadaptor.cpp
@@ -24,6 +24,8 @@
#include <qdbusmessage.h>
#include <qdbusreply.h>
#include <qwidget.h>
+#include <qabstractitemview.h>
+#include <qabstractproxymodel.h>
#include <qdebug.h>
@@ -890,7 +892,69 @@ QPair<QAIPointer, int> \
AtSpiAdaptor::interfaceFromPath(const QString& dbusPath) return \
qMakePair(QAIPointer(), 0); }
+void AtSpiAdaptor::handleModelChange(QAccessibleInterface *interface) {
+ QAccessibleTable2Interface *table2Interface = \
interface->table2Interface(); + if (!table2Interface)
+ return;
+
+ QAbstractItemView *view = qobject_cast< QAbstractItemView* \
>(interface->object()); + if (view) {
+ if (qobject_cast< QAbstractProxyModel* >(view->model()))
+ return; //Handling it like a normal model would crash
+ }
+
+ int firstEntry;
+ int lastEntry;
+ QAccessible2::TableModelChange change = \
table2Interface->modelChange(); +
+ switch (change.type) {
+ case QAccessible2::TableModelChangeInsert:
+ if ((change.firstRow < table2Interface->rowCount()) && \
(change.firstColumn < table2Interface->columnCount())) { + \
QAccessibleTable2CellInterface *firstCell = \
table2Interface->cellAt(change.firstRow, change.firstColumn); + \
firstEntry = firstCell ? interface->indexOfChild(firstCell) : 0; + \
lastEntry = interface->childCount(); + } else {
+ firstEntry = 0;
+ lastEntry = interface->childCount();
+ }
+ break;
+ case QAccessible2::TableModelChangeDelete:
+ if (change.firstRow < table2Interface->rowCount()) {
+ if (change.firstColumn < table2Interface->columnCount()) {
+ QAccessibleTable2CellInterface *firstCell = \
table2Interface->cellAt(change.firstRow, change.firstColumn); + \
firstEntry = firstCell ? interface->indexOfChild(firstCell) : 0; + \
lastEntry = interface->childCount(); + } else {
+ firstEntry = 0;
+ lastEntry = interface->childCount();
+ }
+ } else {
+ return;
+ }
+ break;
+ case QAccessible2::TableModelChangeUpdate:
+ if ((change.firstRow < table2Interface->rowCount()) && \
(change.firstColumn < table2Interface->columnCount())) { + \
QAccessibleTable2CellInterface *firstCell = \
table2Interface->cellAt(change.firstRow, change.firstColumn); + \
firstEntry = firstCell ? interface->indexOfChild(firstCell) : 0; + \
QAccessibleTable2CellInterface *lastCell = \
table2Interface->cellAt(change.lastRow, change.lastColumn); + \
lastEntry = lastCell ? interface->indexOfChild(lastCell) : \
interface->childCount(); + } else {
+ firstEntry = 0;
+ lastEntry = interface->childCount();
+ }
+ break;
+ }
+ for (int i = firstEntry; i <= lastEntry; i++) {
+ QString path = pathForInterface(interface, i);
+ QVariantList args = \
packDBusSignalArguments(QLatin1String("accessible-name"), 0, 0, \
variantForPath(path)); + sendDBusSignal(path, \
QLatin1String(ATSPI_DBUS_INTERFACE_EVENT_OBJECT), + \
QLatin1String("PropertyChange"), args); + args = \
packDBusSignalArguments(QLatin1String("accessible-description"), 0, 0, \
variantForPath(path)); + sendDBusSignal(path, \
QLatin1String(ATSPI_DBUS_INTERFACE_EVENT_OBJECT), + \
QLatin1String("PropertyChange"), args); + }
+}
/*!
This function gets called when Qt notifies about accessibility \
updates.
*/
@@ -1088,7 +1152,9 @@ void AtSpiAdaptor::notify(int reason, \
QAccessibleInterface *interface, int child case QAccessible::DialogEnd:
break;
case QAccessible::TableModelChanged:
- // For now ignore this event, should be handled together with \
active descendant changed + if (sendObject || \
sendObject_property_change || sendObject_property_change_accessible_name) { \
+ handleModelChange(interface); + }
break;
case QAccessible::SelectionRemove:
break;
diff --git a/src/atspiadaptor.h b/src/atspiadaptor.h
index 56b9790..2a18ed5 100644
--- a/src/atspiadaptor.h
+++ b/src/atspiadaptor.h
@@ -62,6 +62,7 @@ private:
bool sendDBusSignal(const QString &path, const QString &interface, \
const QString &name, const QVariantList &arguments) const; QVariant \
variantForPath(const QString &path) const;
+ void handleModelChange(QAccessibleInterface *interface);
void sendFocusChanged(QAccessibleInterface *interface, int child) \
const;
void notifyAboutCreation(QAccessibleInterface *interface, int child) \
const;
void notifyAboutDestruction(QAccessibleInterface *interface, int \
child) const;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic