diff options
author | Michael Meeks <michael.meeks@suse.com> | 2012-12-18 13:29:03 +0000 |
---|---|---|
committer | Tor Lillqvist <tml@iki.fi> | 2012-12-18 18:03:17 +0200 |
commit | 15aac31ebac23ef745400a8d9c146aef85923c9d (patch) | |
tree | 65e9e72455cb5ee63f7259fd2c492e2bbf8e47f5 /sc/source/ui/Accessibility | |
parent | 626969aa7cce72692767e265a2a98ef111202487 (diff) |
fdo#56937 - mac a11y hang related to traversing vast, broken hierarchies.
Change-Id: Iff0537a69b2c6ae929da6a05f26c0d55415d6d8a
Diffstat (limited to 'sc/source/ui/Accessibility')
-rw-r--r-- | sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/Accessibility/AccessibleTableBase.cxx | 20 |
2 files changed, 17 insertions, 5 deletions
diff --git a/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx b/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx index d57d92e0e652..e4d00607fa6b 100644 --- a/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx +++ b/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx @@ -44,6 +44,8 @@ using namespace ::com::sun::star::accessibility; //===== internal ============================================================ +// FIXME: really unclear why we have an ScAccessibleTableBase with +// only this single sub-class ScAccessibleSpreadsheet::ScAccessibleSpreadsheet( ScAccessibleDocument* pAccDoc, ScTabViewShell* pViewShell, diff --git a/sc/source/ui/Accessibility/AccessibleTableBase.cxx b/sc/source/ui/Accessibility/AccessibleTableBase.cxx index 780638b592aa..3a950c49e3f6 100644 --- a/sc/source/ui/Accessibility/AccessibleTableBase.cxx +++ b/sc/source/ui/Accessibility/AccessibleTableBase.cxx @@ -261,7 +261,7 @@ sal_Bool SAL_CALL ScAccessibleTableBase::isAccessibleSelected( sal_Int32 /* nRow return false; } - //===== XAccessibleExtendedTable ======================================== +// ===== XAccessibleExtendedTable ======================================== sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleIndex( sal_Int32 nRow, sal_Int32 nColumn ) throw (uno::RuntimeException, lang::IndexOutOfBoundsException) @@ -304,7 +304,7 @@ sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleColumn( sal_Int32 nChildI return nChildIndex % static_cast<sal_Int32>(maRange.aEnd.Col() - maRange.aStart.Col() + 1); } - //===== XAccessibleContext ============================================== +// ===== XAccessibleContext ============================================== sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleChildCount(void) @@ -312,9 +312,16 @@ sal_Int32 SAL_CALL { SolarMutexGuard aGuard; IsObjectValid(); - return static_cast<sal_Int32>(maRange.aEnd.Row() - maRange.aStart.Row() + 1) * - (maRange.aEnd.Col() - maRange.aStart.Col() + 1); -// return 1; + + // FIXME: representing rows & columns this way is a plain and simple madness. + // this needs a radical re-think. + sal_Int64 nMax = ((sal_Int64)(maRange.aEnd.Row() - maRange.aStart.Row() + 1) * + (sal_Int64)(maRange.aEnd.Col() - maRange.aStart.Col() + 1)); + if (nMax > SAL_MAX_INT32) + nMax = SAL_MAX_INT32; + if (nMax < 0) + return 0; + return static_cast<sal_Int32>(nMax); } uno::Reference< XAccessible > SAL_CALL @@ -328,6 +335,9 @@ uno::Reference< XAccessible > SAL_CALL if (nIndex >= getAccessibleChildCount() || nIndex < 0) throw lang::IndexOutOfBoundsException(); + // FIXME: representing rows & columns this way is a plain and simple madness. + // this needs a radical re-think. + sal_Int32 nRow(0); sal_Int32 nColumn(0); sal_Int32 nTemp(maRange.aEnd.Col() - maRange.aStart.Col() + 1); |