[Libreoffice-commits] core.git: Branch 'libreoffice-6-2' - vcl/inc vcl/qt5
Katarina Behrens (via logerrit)
logerrit at kemper.freedesktop.org
Wed May 22 06:13:16 UTC 2019
vcl/inc/qt5/Qt5AccessibleWidget.hxx | 1
vcl/qt5/Qt5AccessibleWidget.cxx | 285 +++++++++++++++++++++++++-----------
2 files changed, 201 insertions(+), 85 deletions(-)
New commits:
commit 74df5affeba4c5deb443e7974b1693a7c12561bc
Author: Katarina Behrens <Katarina.Behrens at cib.de>
AuthorDate: Thu Mar 21 22:16:42 2019 +0100
Commit: Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Wed May 22 08:12:42 2019 +0200
tdf#122056: Catch DisposedExceptions everywhere
Change-Id: I6bdb9aa89a8a5181b096f47f90ab6fb5711e7447
Reviewed-on: https://gerrit.libreoffice.org/69541
Tested-by: Jenkins
Reviewed-by: Katarina Behrens <Katarina.Behrens at cib.de>
(cherry picked from commit 9e37ab4e650481f8bf03d1469815299b8ef1fb5f)
Reviewed-on: https://gerrit.libreoffice.org/72661
Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
diff --git a/vcl/inc/qt5/Qt5AccessibleWidget.hxx b/vcl/inc/qt5/Qt5AccessibleWidget.hxx
index 19478586ea42..6b0d71cba9f5 100644
--- a/vcl/inc/qt5/Qt5AccessibleWidget.hxx
+++ b/vcl/inc/qt5/Qt5AccessibleWidget.hxx
@@ -136,6 +136,7 @@ public:
private:
css::uno::Reference<css::accessibility::XAccessible> m_xAccessible;
+ css::uno::Reference<css::accessibility::XAccessibleContext> getAccessibleContextImpl() const;
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/qt5/Qt5AccessibleWidget.cxx b/vcl/qt5/Qt5AccessibleWidget.cxx
index efafab17f3cf..b76acb4a1c57 100644
--- a/vcl/qt5/Qt5AccessibleWidget.cxx
+++ b/vcl/qt5/Qt5AccessibleWidget.cxx
@@ -71,11 +71,41 @@ Qt5AccessibleWidget::Qt5AccessibleWidget(const Reference<XAccessible> xAccessibl
}
}
+Reference<XAccessibleContext> Qt5AccessibleWidget::getAccessibleContextImpl() const
+{
+ Reference<XAccessibleContext> xAc;
+
+ if (m_xAccessible.is())
+ {
+ try
+ {
+ xAc = m_xAccessible->getAccessibleContext();
+ }
+ catch (css::lang::DisposedException /*ex*/)
+ {
+ SAL_WARN("vcl.qt5", "Accessible context disposed already");
+ }
+ // sometimes getAccessibleContext throws also RuntimeException if context is no longer alive
+ catch (css::uno::RuntimeException /*ex*/)
+ {
+ // so let's catch it here, cuz otherwise soffice falls flat on its face
+ // with FatalError and nothing else
+ SAL_WARN("vcl.qt5", "Accessible context no longer alive");
+ }
+ }
+
+ return xAc;
+}
+
QWindow* Qt5AccessibleWidget::window() const { return nullptr; }
int Qt5AccessibleWidget::childCount() const
{
- return m_xAccessible->getAccessibleContext()->getAccessibleChildCount();
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return 0;
+
+ return xAc->getAccessibleChildCount();
}
int Qt5AccessibleWidget::indexOfChild(const QAccessibleInterface* /* child */) const { return 0; }
@@ -144,25 +174,29 @@ QVector<QPair<QAccessibleInterface*, QAccessible::Relation>>
Qt5AccessibleWidget::relations(QAccessible::Relation match) const
{
QVector<QPair<QAccessibleInterface*, QAccessible::Relation>> relations;
- Reference<XAccessibleRelationSet> xRelationSet
- = m_xAccessible->getAccessibleContext()->getAccessibleRelationSet();
- if (!xRelationSet.is())
+
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
return relations;
- if (match == QAccessible::AllRelations)
+ Reference<XAccessibleRelationSet> xRelationSet = xAc->getAccessibleRelationSet();
+ if (xRelationSet.is())
{
- int count = xRelationSet->getRelationCount();
- for (int i = 0; i < count; i++)
+ if (match == QAccessible::AllRelations)
+ {
+ int count = xRelationSet->getRelationCount();
+ for (int i = 0; i < count; i++)
+ {
+ AccessibleRelation aRelation = xRelationSet->getRelation(i);
+ lcl_appendRelation(&relations, aRelation);
+ }
+ }
+ else
{
- AccessibleRelation aRelation = xRelationSet->getRelation(i);
+ AccessibleRelation aRelation = xRelationSet->getRelation(lcl_matchQtRelation(match));
lcl_appendRelation(&relations, aRelation);
}
}
- else
- {
- AccessibleRelation aRelation = xRelationSet->getRelation(lcl_matchQtRelation(match));
- lcl_appendRelation(&relations, aRelation);
- }
return relations;
}
@@ -177,8 +211,11 @@ QAccessibleInterface* Qt5AccessibleWidget::focusChild() const
QRect Qt5AccessibleWidget::rect() const
{
- Reference<XAccessibleComponent> xAccessibleComponent(m_xAccessible->getAccessibleContext(),
- UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return QRect();
+
+ Reference<XAccessibleComponent> xAccessibleComponent(xAc, UNO_QUERY);
awt::Point aPoint = xAccessibleComponent->getLocation();
awt::Size aSize = xAccessibleComponent->getSize();
@@ -187,24 +224,35 @@ QRect Qt5AccessibleWidget::rect() const
QAccessibleInterface* Qt5AccessibleWidget::parent() const
{
- return QAccessible::queryAccessibleInterface(
- new Qt5XAccessible(m_xAccessible->getAccessibleContext()->getAccessibleParent()));
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return nullptr;
+
+ return QAccessible::queryAccessibleInterface(new Qt5XAccessible(xAc->getAccessibleParent()));
}
QAccessibleInterface* Qt5AccessibleWidget::child(int index) const
{
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return nullptr;
+
return QAccessible::queryAccessibleInterface(
- new Qt5XAccessible(m_xAccessible->getAccessibleContext()->getAccessibleChild(index)));
+ new Qt5XAccessible(xAc->getAccessibleChild(index)));
}
QString Qt5AccessibleWidget::text(QAccessible::Text text) const
{
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return QString();
+
switch (text)
{
case QAccessible::Name:
- return toQString(m_xAccessible->getAccessibleContext()->getAccessibleName());
+ return toQString(xAc->getAccessibleName());
case QAccessible::Description:
case QAccessible::DebugDescription:
- return toQString(m_xAccessible->getAccessibleContext()->getAccessibleDescription());
+ return toQString(xAc->getAccessibleDescription());
case QAccessible::Value:
case QAccessible::Help:
case QAccessible::Accelerator:
@@ -215,10 +263,11 @@ QString Qt5AccessibleWidget::text(QAccessible::Text text) const
}
QAccessible::Role Qt5AccessibleWidget::role() const
{
- if (!m_xAccessible.is())
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
return QAccessible::NoRole;
- switch (m_xAccessible->getAccessibleContext()->getAccessibleRole())
+ switch (xAc->getAccessibleRole())
{
case AccessibleRole::UNKNOWN:
return QAccessible::NoRole;
@@ -589,10 +638,11 @@ QAccessible::State Qt5AccessibleWidget::state() const
{
QAccessible::State state;
- if (!m_xAccessible.is())
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
return state;
- Reference<XAccessibleStateSet> xStateSet(
- m_xAccessible->getAccessibleContext()->getAccessibleStateSet());
+
+ Reference<XAccessibleStateSet> xStateSet(xAc->getAccessibleStateSet());
if (!xStateSet.is())
return state;
@@ -609,14 +659,21 @@ QAccessible::State Qt5AccessibleWidget::state() const
QColor Qt5AccessibleWidget::foregroundColor() const
{
- Reference<XAccessibleComponent> xAccessibleComponent(m_xAccessible->getAccessibleContext(),
- UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return QColor();
+
+ Reference<XAccessibleComponent> xAccessibleComponent(xAc, UNO_QUERY);
return toQColor(xAccessibleComponent->getForeground());
}
+
QColor Qt5AccessibleWidget::backgroundColor() const
{
- Reference<XAccessibleComponent> xAccessibleComponent(m_xAccessible->getAccessibleContext(),
- UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return QColor();
+
+ Reference<XAccessibleComponent> xAccessibleComponent(xAc, UNO_QUERY);
return toQColor(xAccessibleComponent->getBackground());
}
@@ -637,22 +694,8 @@ void* Qt5AccessibleWidget::interface_cast(QAccessible::InterfaceType t)
bool Qt5AccessibleWidget::isValid() const
{
- if (m_xAccessible.is())
- {
- try
- {
- // getAccessibleContext throws RuntimeException if context is no longer alive
- Reference<XAccessibleContext> xAc = m_xAccessible->getAccessibleContext();
- return xAc.is();
- }
- // so let's catch it here, cuz otherwise soffice falls flat on its face
- // with FatalError and nothing else
- catch (css::uno::RuntimeException /*ex*/)
- {
- return false;
- }
- }
- return false;
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ return xAc.is();
}
QObject* Qt5AccessibleWidget::object() const { return nullptr; }
@@ -661,19 +704,10 @@ void Qt5AccessibleWidget::setText(QAccessible::Text /* t */, const QString& /* t
QAccessibleInterface* Qt5AccessibleWidget::childAt(int x, int y) const
{
- if (!m_xAccessible.is())
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
return nullptr;
- Reference<XAccessibleContext> xAc;
- try
- {
- xAc = m_xAccessible->getAccessibleContext();
- }
- catch (css::lang::DisposedException /*ex*/)
- {
- return nullptr;
- }
-
Reference<XAccessibleComponent> xAccessibleComponent(xAc, UNO_QUERY);
return QAccessible::queryAccessibleInterface(
new Qt5XAccessible(xAccessibleComponent->getAccessibleAtPoint(awt::Point(x, y))));
@@ -925,8 +959,11 @@ QString Qt5AccessibleWidget::textBeforeOffset(int /* offset */,
void Qt5AccessibleWidget::deleteText(int startOffset, int endOffset)
{
- Reference<XAccessibleEditableText> xEditableText(m_xAccessible->getAccessibleContext(),
- UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return;
+
+ Reference<XAccessibleEditableText> xEditableText(xAc, UNO_QUERY);
if (!xEditableText.is())
return;
xEditableText->deleteText(startOffset, endOffset);
@@ -934,8 +971,11 @@ void Qt5AccessibleWidget::deleteText(int startOffset, int endOffset)
void Qt5AccessibleWidget::insertText(int offset, const QString& text)
{
- Reference<XAccessibleEditableText> xEditableText(m_xAccessible->getAccessibleContext(),
- UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return;
+
+ Reference<XAccessibleEditableText> xEditableText(xAc, UNO_QUERY);
if (!xEditableText.is())
return;
xEditableText->insertText(toOUString(text), offset);
@@ -943,8 +983,11 @@ void Qt5AccessibleWidget::insertText(int offset, const QString& text)
void Qt5AccessibleWidget::replaceText(int startOffset, int endOffset, const QString& text)
{
- Reference<XAccessibleEditableText> xEditableText(m_xAccessible->getAccessibleContext(),
- UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return;
+
+ Reference<XAccessibleEditableText> xEditableText(xAc, UNO_QUERY);
if (!xEditableText.is())
return;
xEditableText->replaceText(startOffset, endOffset, toOUString(text));
@@ -953,7 +996,11 @@ void Qt5AccessibleWidget::replaceText(int startOffset, int endOffset, const QStr
// QAccessibleValueInterface
QVariant Qt5AccessibleWidget::currentValue() const
{
- Reference<XAccessibleValue> xValue(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return QVariant();
+
+ Reference<XAccessibleValue> xValue(xAc, UNO_QUERY);
if (!xValue.is())
return QVariant();
double aDouble = 0;
@@ -962,7 +1009,11 @@ QVariant Qt5AccessibleWidget::currentValue() const
}
QVariant Qt5AccessibleWidget::maximumValue() const
{
- Reference<XAccessibleValue> xValue(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return QVariant();
+
+ Reference<XAccessibleValue> xValue(xAc, UNO_QUERY);
if (!xValue.is())
return QVariant();
double aDouble = 0;
@@ -972,7 +1023,11 @@ QVariant Qt5AccessibleWidget::maximumValue() const
QVariant Qt5AccessibleWidget::minimumStepSize() const { return QVariant(); }
QVariant Qt5AccessibleWidget::minimumValue() const
{
- Reference<XAccessibleValue> xValue(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return QVariant();
+
+ Reference<XAccessibleValue> xValue(xAc, UNO_QUERY);
if (!xValue.is())
return QVariant();
double aDouble = 0;
@@ -981,7 +1036,11 @@ QVariant Qt5AccessibleWidget::minimumValue() const
}
void Qt5AccessibleWidget::setCurrentValue(const QVariant& value)
{
- Reference<XAccessibleValue> xValue(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return;
+
+ Reference<XAccessibleValue> xValue(xAc, UNO_QUERY);
if (!xValue.is())
return;
xValue->setCurrentValue(Any(value.toDouble()));
@@ -990,7 +1049,11 @@ void Qt5AccessibleWidget::setCurrentValue(const QVariant& value)
// QAccessibleTable
QAccessibleInterface* Qt5AccessibleWidget::caption() const
{
- Reference<XAccessibleTable> xTable(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return nullptr;
+
+ Reference<XAccessibleTable> xTable(xAc, UNO_QUERY);
if (!xTable.is())
return nullptr;
return QAccessible::queryAccessibleInterface(
@@ -999,7 +1062,11 @@ QAccessibleInterface* Qt5AccessibleWidget::caption() const
QAccessibleInterface* Qt5AccessibleWidget::cellAt(int row, int column) const
{
- Reference<XAccessibleTable> xTable(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return nullptr;
+
+ Reference<XAccessibleTable> xTable(xAc, UNO_QUERY);
if (!xTable.is())
return nullptr;
return QAccessible::queryAccessibleInterface(
@@ -1008,7 +1075,11 @@ QAccessibleInterface* Qt5AccessibleWidget::cellAt(int row, int column) const
int Qt5AccessibleWidget::columnCount() const
{
- Reference<XAccessibleTable> xTable(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return 0;
+
+ Reference<XAccessibleTable> xTable(xAc, UNO_QUERY);
if (!xTable.is())
return 0;
return xTable->getAccessibleColumnCount();
@@ -1016,7 +1087,11 @@ int Qt5AccessibleWidget::columnCount() const
QString Qt5AccessibleWidget::columnDescription(int column) const
{
- Reference<XAccessibleTable> xTable(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return QString();
+
+ Reference<XAccessibleTable> xTable(xAc, UNO_QUERY);
if (!xTable.is())
return QString();
return toQString(xTable->getAccessibleColumnDescription(column));
@@ -1030,7 +1105,11 @@ void Qt5AccessibleWidget::modelChange(QAccessibleTableModelChangeEvent*) {}
int Qt5AccessibleWidget::rowCount() const
{
- Reference<XAccessibleTable> xTable(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return 0;
+
+ Reference<XAccessibleTable> xTable(xAc, UNO_QUERY);
if (!xTable.is())
return 0;
return xTable->getAccessibleRowCount();
@@ -1038,7 +1117,11 @@ int Qt5AccessibleWidget::rowCount() const
QString Qt5AccessibleWidget::rowDescription(int row) const
{
- Reference<XAccessibleTable> xTable(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return QString();
+
+ Reference<XAccessibleTable> xTable(xAc, UNO_QUERY);
if (!xTable.is())
return QString();
return toQString(xTable->getAccessibleRowDescription(row));
@@ -1046,8 +1129,11 @@ QString Qt5AccessibleWidget::rowDescription(int row) const
bool Qt5AccessibleWidget::selectColumn(int column)
{
- Reference<XAccessibleTableSelection> xTableSelection(m_xAccessible->getAccessibleContext(),
- UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return false;
+
+ Reference<XAccessibleTableSelection> xTableSelection(xAc, UNO_QUERY);
if (!xTableSelection.is())
return false;
return xTableSelection->selectColumn(column);
@@ -1055,8 +1141,11 @@ bool Qt5AccessibleWidget::selectColumn(int column)
bool Qt5AccessibleWidget::selectRow(int row)
{
- Reference<XAccessibleTableSelection> xTableSelection(m_xAccessible->getAccessibleContext(),
- UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return false;
+
+ Reference<XAccessibleTableSelection> xTableSelection(xAc, UNO_QUERY);
if (!xTableSelection.is())
return false;
return xTableSelection->selectRow(row);
@@ -1076,7 +1165,11 @@ QList<QAccessibleInterface*> Qt5AccessibleWidget::selectedCells() const
int Qt5AccessibleWidget::selectedColumnCount() const
{
- Reference<XAccessibleTable> xTable(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return 0;
+
+ Reference<XAccessibleTable> xTable(xAc, UNO_QUERY);
if (!xTable.is())
return 0;
return xTable->getSelectedAccessibleColumns().getLength();
@@ -1084,7 +1177,11 @@ int Qt5AccessibleWidget::selectedColumnCount() const
QList<int> Qt5AccessibleWidget::selectedColumns() const
{
- Reference<XAccessibleTable> xTable(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return QList<int>();
+
+ Reference<XAccessibleTable> xTable(xAc, UNO_QUERY);
if (!xTable.is())
return QList<int>();
return toQList(xTable->getSelectedAccessibleColumns());
@@ -1092,7 +1189,11 @@ QList<int> Qt5AccessibleWidget::selectedColumns() const
int Qt5AccessibleWidget::selectedRowCount() const
{
- Reference<XAccessibleTable> xTable(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return 0;
+
+ Reference<XAccessibleTable> xTable(xAc, UNO_QUERY);
if (!xTable.is())
return 0;
return xTable->getSelectedAccessibleRows().getLength();
@@ -1100,7 +1201,11 @@ int Qt5AccessibleWidget::selectedRowCount() const
QList<int> Qt5AccessibleWidget::selectedRows() const
{
- Reference<XAccessibleTable> xTable(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return QList<int>();
+
+ Reference<XAccessibleTable> xTable(xAc, UNO_QUERY);
if (!xTable.is())
return QList<int>();
return toQList(xTable->getSelectedAccessibleRows());
@@ -1108,7 +1213,11 @@ QList<int> Qt5AccessibleWidget::selectedRows() const
QAccessibleInterface* Qt5AccessibleWidget::summary() const
{
- Reference<XAccessibleTable> xTable(m_xAccessible->getAccessibleContext(), UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return nullptr;
+
+ Reference<XAccessibleTable> xTable(xAc, UNO_QUERY);
if (!xTable.is())
return nullptr;
return QAccessible::queryAccessibleInterface(
@@ -1117,8 +1226,11 @@ QAccessibleInterface* Qt5AccessibleWidget::summary() const
bool Qt5AccessibleWidget::unselectColumn(int column)
{
- Reference<XAccessibleTableSelection> xTableSelection(m_xAccessible->getAccessibleContext(),
- UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return false;
+
+ Reference<XAccessibleTableSelection> xTableSelection(xAc, UNO_QUERY);
if (!xTableSelection.is())
return false;
return xTableSelection->unselectColumn(column);
@@ -1126,8 +1238,11 @@ bool Qt5AccessibleWidget::unselectColumn(int column)
bool Qt5AccessibleWidget::unselectRow(int row)
{
- Reference<XAccessibleTableSelection> xTableSelection(m_xAccessible->getAccessibleContext(),
- UNO_QUERY);
+ Reference<XAccessibleContext> xAc = getAccessibleContextImpl();
+ if (!xAc.is())
+ return false;
+
+ Reference<XAccessibleTableSelection> xTableSelection(xAc, UNO_QUERY);
if (!xTableSelection.is())
return false;
return xTableSelection->unselectRow(row);
More information about the Libreoffice-commits
mailing list