summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan-Arve Saether <jan-arve.saether@nokia.com>2012-03-07 11:59:30 +0100
committerQt by Nokia <qt-info@nokia.com>2012-07-11 02:47:34 +0200
commit159b28d97226c9b40e3e47188396a17cee70852e (patch)
tree1abec302b1433a111a6df8127ce5a15ce88252ce /src
parent825cd7b9e5ac16546fe224d48e5ea319fc171248 (diff)
Remove clipboard operations from QAccessibleEditableTextInterface
Also, remove its subclass QAccessibleSimpleEditableTextInterface Instead of having the subclass that implements this conveniently, we move this behaviour over to the bridge. The bridge should check if role() == EditableText is set, and then it should try to support the IAccessibleEditableText interface (i.e. it should accept the calls to replaceText(), deleteText() and insertText()) and change the text with the following operations: 1. Query the text using QAccessibleTextInterface::text() or by using QAccessibleInterface::text(QAccessible::Value) as a fallback 2. Do the requested delete/insert/replace manipulation 3. Update the text with setText(QAccessible::Value, newText); Change-Id: Iee5e41faf14351951e2bfca8c9eac970a113e878 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/gui/accessible/qaccessible2.cpp113
-rw-r--r--src/gui/accessible/qaccessible2.h21
-rw-r--r--src/plugins/accessible/widgets/qaccessiblewidgets.cpp62
-rw-r--r--src/plugins/accessible/widgets/qaccessiblewidgets.h5
-rw-r--r--src/plugins/accessible/widgets/simplewidgets.cpp7
-rw-r--r--src/plugins/accessible/widgets/simplewidgets.h3
-rw-r--r--src/plugins/platforms/windows/accessible/comutils.h5
-rw-r--r--src/plugins/platforms/windows/accessible/iaccessible2.cpp129
-rw-r--r--src/plugins/platforms/windows/accessible/iaccessible2.h6
9 files changed, 151 insertions, 200 deletions
diff --git a/src/gui/accessible/qaccessible2.cpp b/src/gui/accessible/qaccessible2.cpp
index 41275628f2..4936846d6c 100644
--- a/src/gui/accessible/qaccessible2.cpp
+++ b/src/gui/accessible/qaccessible2.cpp
@@ -190,10 +190,6 @@ QT_BEGIN_NAMESPACE
When implementing this interface you will almost certainly also want to implement \l QAccessibleTextInterface.
- Since this interface can be implemented by means of the normal \l QAccessibleTextInterface,
- \l QAccessibleSimpleEditableTextInterface provides a convenience implementation of this interface.
- Consider inheriting \l QAccessibleSimpleEditableTextInterface instead.
-
\sa QAccessibleInterface
\l{IAccessible2 Specification}
@@ -206,14 +202,6 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn void QAccessibleEditableTextInterface::copyText(int startOffset, int endOffset) const
-
- Copies the text from \a startOffset to \a endOffset to the system clip board.
- The \a startOffset is the first character that will be copied.
- The \a endOffset is the first character that will not be copied.
-*/
-
-/*!
\fn void QAccessibleEditableTextInterface::deleteText(int startOffset, int endOffset)
Deletes the text from \a startOffset to \a endOffset.
@@ -226,18 +214,6 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn void QAccessibleEditableTextInterface::cutText(int startOffset, int endOffset)
-
- Removes the text from \a startOffset to \a endOffset and puts it in the system clip board.
-*/
-
-/*!
- \fn void QAccessibleEditableTextInterface::pasteText(int offset)
-
- Pastes text from the system clip board at the position \a offset.
-*/
-
-/*!
\fn void QAccessibleEditableTextInterface::replaceText(int startOffset, int endOffset, const QString &text)
Removes the text from \a startOffset to \a endOffset and instead inserts \a text.
@@ -250,20 +226,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \class QAccessibleSimpleEditableTextInterface
- \inmodule QtGui
- \ingroup accessibility
- \internal
-
- \brief The QAccessibleSimpleEditableTextInterface class is a convenience class for
- text-based widgets. It can be inherited instead of \l QAccessibleEditableTextInterface.
-
- \sa QAccessibleInterface, QAccessibleEditableTextInterface
-
- \l{IAccessible2 Specification}
-*/
-
-/*!
+ \class QAccessibleValueInterface
\class QAccessibleValueInterface
\inmodule QtGui
\ingroup accessibility
@@ -667,80 +630,6 @@ QString Q_GUI_EXPORT qTextAtOffsetFromString(int offset, QAccessible2::BoundaryT
return text.mid(*startOffset, *endOffset - *startOffset);
}
-QAccessibleSimpleEditableTextInterface::QAccessibleSimpleEditableTextInterface(
- QAccessibleInterface *accessibleInterface)
- : iface(accessibleInterface)
-{
- Q_ASSERT(iface);
-}
-
-#ifndef QT_NO_CLIPBOARD
-static QString textForRange(QAccessibleInterface *iface, int startOffset, int endOffset)
-{
- return iface->text(QAccessible::Value).mid(startOffset, endOffset - startOffset);
-}
-#endif
-
-/*! \reimp */
-void QAccessibleSimpleEditableTextInterface::copyText(int startOffset, int endOffset) const
-{
-#ifdef QT_NO_CLIPBOARD
- Q_UNUSED(startOffset);
- Q_UNUSED(endOffset);
-#else
- QGuiApplication::clipboard()->setText(textForRange(iface, startOffset, endOffset));
-#endif
-}
-
-/*! \reimp */
-void QAccessibleSimpleEditableTextInterface::deleteText(int startOffset, int endOffset)
-{
- QString txt = iface->text(QAccessible::Value);
- txt.remove(startOffset, endOffset - startOffset);
- iface->setText(QAccessible::Value, txt);
-}
-
-/*! \reimp */
-void QAccessibleSimpleEditableTextInterface::insertText(int offset, const QString &text)
-{
- QString txt = iface->text(QAccessible::Value);
- txt.insert(offset, text);
- iface->setText(QAccessible::Value, txt);
-}
-
-/*! \reimp */
-void QAccessibleSimpleEditableTextInterface::cutText(int startOffset, int endOffset)
-{
-#ifdef QT_NO_CLIPBOARD
- Q_UNUSED(startOffset);
- Q_UNUSED(endOffset);
-#else
- QString sub = textForRange(iface, startOffset, endOffset);
- deleteText(startOffset, endOffset);
- QGuiApplication::clipboard()->setText(sub);
-#endif
-}
-
-/*! \reimp */
-void QAccessibleSimpleEditableTextInterface::pasteText(int offset)
-{
-#ifdef QT_NO_CLIPBOARD
- Q_UNUSED(offset);
-#else
- QString txt = iface->text(QAccessible::Value);
- txt.insert(offset, QGuiApplication::clipboard()->text());
- iface->setText(QAccessible::Value, txt);
-#endif
-}
-
-/*! \reimp */
-void QAccessibleSimpleEditableTextInterface::replaceText(int startOffset, int endOffset, const QString &text)
-{
- QString txt = iface->text(QAccessible::Value);
- txt.replace(startOffset, endOffset - startOffset, text);
- iface->setText(QAccessible::Value, txt);
-}
-
QT_END_NAMESPACE
#endif // QT_NO_ACCESSIBILITY
diff --git a/src/gui/accessible/qaccessible2.h b/src/gui/accessible/qaccessible2.h
index 922fb73b7d..91f6b73f3e 100644
--- a/src/gui/accessible/qaccessible2.h
+++ b/src/gui/accessible/qaccessible2.h
@@ -97,30 +97,9 @@ class Q_GUI_EXPORT QAccessibleEditableTextInterface
public:
virtual ~QAccessibleEditableTextInterface() {}
- virtual void copyText(int startOffset, int endOffset) const = 0;
virtual void deleteText(int startOffset, int endOffset) = 0;
virtual void insertText(int offset, const QString &text) = 0;
- virtual void cutText(int startOffset, int endOffset) = 0;
- virtual void pasteText(int offset) = 0;
virtual void replaceText(int startOffset, int endOffset, const QString &text) = 0;
- virtual void setAttributes(int startOffset, int endOffset, const QString &attributes) = 0;
-};
-
-class Q_GUI_EXPORT QAccessibleSimpleEditableTextInterface: public QAccessibleEditableTextInterface
-{
-public:
- explicit QAccessibleSimpleEditableTextInterface(QAccessibleInterface *accessibleInterface); //###
-
- void copyText(int startOffset, int endOffset) const;
- void deleteText(int startOffset, int endOffset);
- void insertText(int offset, const QString &text);
- void cutText(int startOffset, int endOffset);
- void pasteText(int offset);
- void replaceText(int startOffset, int endOffset, const QString &text);
- inline void setAttributes(int, int, const QString &) {}
-
-private:
- QAccessibleInterface *iface;
};
class Q_GUI_EXPORT QAccessibleValueInterface
diff --git a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp
index a002b8bf26..f6ec940b58 100644
--- a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp
+++ b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp
@@ -142,12 +142,20 @@ void QAccessibleTextEdit::setText(QAccessible::Text t, const QString &text)
textEdit()->setText(text);
}
+QAccessible::State QAccessibleTextEdit::state() const
+{
+ QAccessible::State st = QAccessibleWidget::state();
+ if (textEdit()->isReadOnly())
+ st.readOnly = true;
+ else
+ st.editable = true;
+ return st;
+}
+
void *QAccessibleTextEdit::interface_cast(QAccessible::InterfaceType t)
{
if (t == QAccessible::TextInterface)
return static_cast<QAccessibleTextInterface*>(this);
- else if (t == QAccessible::EditableTextInterface)
- return static_cast<QAccessibleEditableTextInterface*>(this);
return QAccessibleWidget::interface_cast(t);
}
@@ -467,24 +475,9 @@ static QTextCursor cursorForRange(QTextEdit *textEdit, int startOffset, int endO
QTextCursor cursor(textEdit->document());
cursor.setPosition(startOffset, QTextCursor::MoveAnchor);
cursor.setPosition(endOffset, QTextCursor::KeepAnchor);
-
return cursor;
}
-void QAccessibleTextEdit::copyText(int startOffset, int endOffset) const
-{
-#ifndef QT_NO_CLIPBOARD
- QTextCursor previousCursor = textEdit()->textCursor();
- QTextCursor cursor = cursorForRange(textEdit(), startOffset, endOffset);
-
- if (!cursor.hasSelection())
- return;
-
- textEdit()->setTextCursor(cursor);
- textEdit()->copy();
- textEdit()->setTextCursor(previousCursor);
-#endif
-}
void QAccessibleTextEdit::deleteText(int startOffset, int endOffset)
{
@@ -501,34 +494,6 @@ void QAccessibleTextEdit::insertText(int offset, const QString &text)
cursor.insertText(text);
}
-void QAccessibleTextEdit::cutText(int startOffset, int endOffset)
-{
-#ifndef QT_NO_CLIPBOARD
- QTextCursor cursor = cursorForRange(textEdit(), startOffset, endOffset);
-
- if (!cursor.hasSelection())
- return;
-
- textEdit()->setTextCursor(cursor);
- textEdit()->cut();
-#endif
-}
-
-void QAccessibleTextEdit::pasteText(int offset)
-{
- QTextEdit *edit = textEdit();
-
- QTextCursor oldCursor = edit->textCursor();
- QTextCursor newCursor = oldCursor;
- newCursor.setPosition(offset);
-
- edit->setTextCursor(newCursor);
-#ifndef QT_NO_CLIPBOARD
- edit->paste();
-#endif
- edit->setTextCursor(oldCursor);
-}
-
void QAccessibleTextEdit::replaceText(int startOffset, int endOffset, const QString &text)
{
QTextCursor cursor = cursorForRange(textEdit(), startOffset, endOffset);
@@ -537,13 +502,6 @@ void QAccessibleTextEdit::replaceText(int startOffset, int endOffset, const QStr
cursor.insertText(text);
}
-void QAccessibleTextEdit::setAttributes(int startOffset, int endOffset, const QString &attributes)
-{
- // TODO
- Q_UNUSED(startOffset);
- Q_UNUSED(endOffset);
- Q_UNUSED(attributes);
-}
#endif // QT_NO_TEXTEDIT
#ifndef QT_NO_STACKEDWIDGET
diff --git a/src/plugins/accessible/widgets/qaccessiblewidgets.h b/src/plugins/accessible/widgets/qaccessiblewidgets.h
index 79ac5ae7b5..dba645570a 100644
--- a/src/plugins/accessible/widgets/qaccessiblewidgets.h
+++ b/src/plugins/accessible/widgets/qaccessiblewidgets.h
@@ -73,6 +73,7 @@ public:
QString text(QAccessible::Text t) const;
void setText(QAccessible::Text t, const QString &text);
+ QAccessible::State state() const;
void *interface_cast(QAccessible::InterfaceType t);
@@ -98,13 +99,9 @@ public:
void scrollToSubstring(int startIndex, int endIndex);
// QAccessibleEditableTextInterface
- void copyText(int startOffset, int endOffset) const;
void deleteText(int startOffset, int endOffset);
void insertText(int offset, const QString &text);
- void cutText(int startOffset, int endOffset);
- void pasteText(int offset);
void replaceText(int startOffset, int endOffset, const QString &text);
- void setAttributes(int startOffset, int endOffset, const QString &attributes);
protected:
QTextEdit *textEdit() const;
diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/plugins/accessible/widgets/simplewidgets.cpp
index 0fa6dc9990..cc10f598f6 100644
--- a/src/plugins/accessible/widgets/simplewidgets.cpp
+++ b/src/plugins/accessible/widgets/simplewidgets.cpp
@@ -575,7 +575,7 @@ QStringList QAccessibleGroupBox::keyBindingsForAction(const QString &) const
\a name is propagated to the QAccessibleWidget constructor.
*/
QAccessibleLineEdit::QAccessibleLineEdit(QWidget *w, const QString &name)
-: QAccessibleWidget(w, QAccessible::EditableText, name), QAccessibleSimpleEditableTextInterface(this)
+: QAccessibleWidget(w, QAccessible::EditableText, name)
{
addControllingSignal(QLatin1String("textChanged(const QString&)"));
addControllingSignal(QLatin1String("returnPressed()"));
@@ -626,6 +626,9 @@ QAccessible::State QAccessibleLineEdit::state() const
QLineEdit *l = lineEdit();
if (l->isReadOnly())
state.readOnly = true;
+ else
+ state.editable = true;
+
if (l->echoMode() != QLineEdit::Normal)
state.passwordEdit = true;
state.selectable = true;
@@ -643,8 +646,6 @@ void *QAccessibleLineEdit::interface_cast(QAccessible::InterfaceType t)
{
if (t == QAccessible::TextInterface)
return static_cast<QAccessibleTextInterface*>(this);
- else if (t == QAccessible::EditableTextInterface)
- return static_cast<QAccessibleEditableTextInterface*>(this);
return QAccessibleWidget::interface_cast(t);
}
diff --git a/src/plugins/accessible/widgets/simplewidgets.h b/src/plugins/accessible/widgets/simplewidgets.h
index 74c1da405d..baded3d76b 100644
--- a/src/plugins/accessible/widgets/simplewidgets.h
+++ b/src/plugins/accessible/widgets/simplewidgets.h
@@ -137,8 +137,7 @@ private:
#endif
#ifndef QT_NO_LINEEDIT
-class QAccessibleLineEdit : public QAccessibleWidget, public QAccessibleTextInterface,
- public QAccessibleSimpleEditableTextInterface
+class QAccessibleLineEdit : public QAccessibleWidget, public QAccessibleTextInterface
{
public:
explicit QAccessibleLineEdit(QWidget *o, const QString &name = QString());
diff --git a/src/plugins/platforms/windows/accessible/comutils.h b/src/plugins/platforms/windows/accessible/comutils.h
index 4d8e603899..40b89ed991 100644
--- a/src/plugins/platforms/windows/accessible/comutils.h
+++ b/src/plugins/platforms/windows/accessible/comutils.h
@@ -54,6 +54,11 @@ class QVariant;
bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &typeName, bool out);
+inline QString BSTRToQString(const BSTR &bstr)
+{
+ return QString((QChar*)bstr);
+}
+
inline BSTR QStringToBSTR(const QString &str)
{
return SysAllocStringLen((OLECHAR*)str.unicode(), str.length());
diff --git a/src/plugins/platforms/windows/accessible/iaccessible2.cpp b/src/plugins/platforms/windows/accessible/iaccessible2.cpp
index 71a26aff6b..5a82936a03 100644
--- a/src/plugins/platforms/windows/accessible/iaccessible2.cpp
+++ b/src/plugins/platforms/windows/accessible/iaccessible2.cpp
@@ -45,6 +45,7 @@
#include "qwindowsaccessibility.h"
#include <QtGui/qaccessible2.h>
+#include <QtGui/qclipboard.h>
#include <QtWidgets/qapplication.h>
#include <QtCore/qdebug.h>
@@ -241,9 +242,11 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::QueryInterface(REFIID id, LPVOI
} else if (id == IID_IAccessibleComponent) {
*iface = (IAccessibleComponent*)this;
} else if (id == IID_IAccessibleEditableText) {
- //if (accessible->editableTextInterface()) {
- //*iface = (IAccessibleEditableText*)this;
- //}
+ if (accessible->editableTextInterface() ||
+ accessible->role() == QAccessible::EditableText)
+ {
+ *iface = (IAccessibleEditableText*)this;
+ }
} else if (id == IID_IAccessibleHyperlink) {
//*iface = (IAccessibleHyperlink*)this;
} else if (id == IID_IAccessibleHypertext) {
@@ -673,6 +676,126 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_background(IA2Color *backgr
}
/**************************************************************\
+ * IAccessibleEditableText *
+ **************************************************************/
+#ifndef QT_NO_CLIPBOARD
+/*!
+ \internal
+
+ if \a endOffset == -1 it means end of the text
+*/
+QString QWindowsIA2Accessible::textForRange(int startOffset, int endOffset) const
+{
+ if (QAccessibleTextInterface *textIface = accessible->textInterface()) {
+ if (endOffset == IA2_TEXT_OFFSET_LENGTH)
+ endOffset = textIface->characterCount();
+ return textIface->text(startOffset, endOffset);
+ }
+ QString txt = accessible->text(QAccessible::Value);
+ if (endOffset == IA2_TEXT_OFFSET_LENGTH)
+ endOffset = txt.length();
+ return txt.mid(startOffset, endOffset - startOffset);
+}
+#endif
+
+/*!
+ \internal
+*/
+void QWindowsIA2Accessible::replaceTextFallback(long startOffset, long endOffset, const QString &txt)
+{
+ QString t = textForRange(0, -1);
+ if (endOffset == IA2_TEXT_OFFSET_LENGTH)
+ endOffset = t.length();
+ if (endOffset - startOffset == 0) {
+ t.insert(startOffset, txt);
+ } else {
+ t.replace(startOffset, endOffset - startOffset, txt);
+ }
+ accessible->setText(QAccessible::Value, t);
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::copyText(long startOffset, long endOffset)
+{
+ accessibleDebugClientCalls(accessible);
+#ifndef QT_NO_CLIPBOARD
+ const QString t = textForRange(startOffset, endOffset);
+ QGuiApplication::clipboard()->setText(t);
+ return S_OK;
+#else
+ return E_NOTIMPL;
+#endif
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::deleteText(long startOffset, long endOffset)
+{
+ accessibleDebugClientCalls(accessible);
+ if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface())
+ editableTextIface->deleteText(startOffset, endOffset);
+ else
+ replaceTextFallback(startOffset, endOffset, QString());
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::insertText(long offset, BSTR *text)
+{
+ accessibleDebugClientCalls(accessible);
+ const QString txt(BSTRToQString(*text));
+ if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface())
+ editableTextIface->insertText(offset, txt);
+ else
+ replaceTextFallback(offset, offset, txt);
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::cutText(long startOffset, long endOffset)
+{
+ accessibleDebugClientCalls(accessible);
+#ifndef QT_NO_CLIPBOARD
+ const QString t = textForRange(startOffset, endOffset);
+ if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface())
+ editableTextIface->deleteText(startOffset, endOffset);
+ else
+ replaceTextFallback(startOffset, endOffset, QString());
+ QGuiApplication::clipboard()->setText(t);
+ return S_OK;
+#else
+ return E_NOTIMPL;
+#endif
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::pasteText(long offset)
+{
+ accessibleDebugClientCalls(accessible);
+#ifndef QT_NO_CLIPBOARD
+ const QString txt = QGuiApplication::clipboard()->text();
+ if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface())
+ editableTextIface->insertText(offset, txt);
+ else
+ replaceTextFallback(offset, offset, txt);
+ return S_OK;
+#else
+ return E_NOTIMPL;
+#endif
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::replaceText(long startOffset, long endOffset, BSTR *text)
+{
+ accessibleDebugClientCalls(accessible);
+ const QString txt(BSTRToQString(*text));
+ if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface())
+ editableTextIface->replaceText(startOffset, endOffset, txt);
+ else
+ replaceTextFallback(startOffset, endOffset, txt);
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::setAttributes(long /*startOffset*/, long /*endOffset*/, BSTR * /*attributes*/)
+{
+ return E_NOTIMPL;
+}
+
+
+/**************************************************************\
* IAccessibleTable2 *
**************************************************************/
HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_cellAt( long row, long column, IUnknown **cell)
diff --git a/src/plugins/platforms/windows/accessible/iaccessible2.h b/src/plugins/platforms/windows/accessible/iaccessible2.h
index 0f9d3b3c41..bfd9031e88 100644
--- a/src/plugins/platforms/windows/accessible/iaccessible2.h
+++ b/src/plugins/platforms/windows/accessible/iaccessible2.h
@@ -73,7 +73,7 @@ QT_BEGIN_NAMESPACE
class QWindowsIA2Accessible : public QWindowsMsaaAccessible,
public IAccessibleAction,
public IAccessibleComponent,
- /*public IAccessibleEditableText,*/
+ public IAccessibleEditableText,
public IAccessibleTable2,
public IAccessibleTableCell,
public IAccessibleText,
@@ -122,7 +122,6 @@ public:
HRESULT STDMETHODCALLTYPE get_background(IA2Color *background);
/* IAccessibleEditableText */
- /*
HRESULT STDMETHODCALLTYPE copyText(long startOffset, long endOffset);
HRESULT STDMETHODCALLTYPE deleteText(long startOffset, long endOffset);
HRESULT STDMETHODCALLTYPE insertText(long offset, BSTR *text);
@@ -130,7 +129,6 @@ public:
HRESULT STDMETHODCALLTYPE pasteText(long offset);
HRESULT STDMETHODCALLTYPE replaceText(long startOffset, long endOffset, BSTR *text);
HRESULT STDMETHODCALLTYPE setAttributes(long startOffset, long endOffset, BSTR *attributes);
- */
/* IAccessibleTable2 */
HRESULT STDMETHODCALLTYPE get_cellAt( long row, long column, IUnknown **cell);
@@ -265,6 +263,8 @@ private:
HRESULT wrapListOfCells(const QList<QAccessibleInterface*> &inputCells, IUnknown ***outputAccessibles, long *nCellCount);
uint uniqueID() const;
QByteArray IIDToString(REFIID id);
+ QString textForRange(int startOffset, int endOffset) const;
+ void replaceTextFallback(long startOffset, long endOffset, const QString &txt);
};