svx a11y: Let AccessibleTableHeaderShape subclass OAccessible

Reuse existing OAccessible logic by subclassing it.
This aligns AccessibleTableHeaderShape with other
a11y implementations.

No user-visible change in behavior intended.

Sample steps to make use of the class on Linux with
the qt6 vcl plugin:

* start Impress
* use the "Insert" -> "Table" dialog to insert a table
* type something in some cells
* start Accerciser
* in Accerciser's tree view of LO's a11y hierarchy, navigate
  to the a11y object of the table (which uses an a11y name of
  "TableShape")
* use Accerciser's IPython console to interact with the table header:

    In [6]: table = acc.queryTable()
    In [7]: table_header_cell = table.getRowHeader(0)
    In [8]: table_header_cell.get_name()
    Out[8]: 'A1'

This matches the behavior without this change in place.

(The question of whether all of the semantics/logic implemented in
AccessibleTableHeaderShape makes sense as is is a separate question,
unrelated to this refactor.)

Change-Id: I15c6a19aaa4ae69085dd8cb3a53447e55bf096f9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210456
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
This commit is contained in:
Michael Weghorn
2026-09-04 08:15:00 +02:00
parent e7d7f1094c
commit 6736df00ad
2 changed files with 9 additions and 40 deletions
+8 -16
View File
@@ -125,15 +125,10 @@ private:
sal_Int64 GetIndexOfSelectedChild( sal_Int64 nSelectedChildIndex ) const;
};
typedef ::cppu::WeakImplHelper<
css::accessibility::XAccessible,
css::accessibility::XAccessibleComponent,
css::accessibility::XAccessibleContext,
css::accessibility::XAccessibleTable,
css::accessibility::XAccessibleTableSelection >
AccessibleTableHeaderShape_BASE;
class AccessibleTableHeaderShape final : public AccessibleTableHeaderShape_BASE
class AccessibleTableHeaderShape final
: public cppu::ImplInheritanceHelper<comphelper::OAccessible,
css::accessibility::XAccessibleTable,
css::accessibility::XAccessibleTableSelection>
{
public:
// bRow, true means rowheader, false means columnheader
@@ -142,9 +137,6 @@ public:
AccessibleTableHeaderShape(const AccessibleTableHeaderShape&) = delete;
AccessibleTableHeaderShape& operator=(const AccessibleTableHeaderShape&) = delete;
// XAccessible
virtual css::uno::Reference< css::accessibility::XAccessibleContext> SAL_CALL getAccessibleContext( ) override;
// XAccessibleContext
virtual sal_Int64 SAL_CALL getAccessibleChildCount( ) override;
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int64 i ) override;
@@ -158,12 +150,8 @@ public:
virtual css::lang::Locale SAL_CALL getLocale( ) override;
//XAccessibleComponent
virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint ) override;
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) override;
virtual css::awt::Rectangle SAL_CALL getBounds( ) override;
virtual css::awt::Point SAL_CALL getLocation( ) override;
virtual css::awt::Point SAL_CALL getLocationOnScreen( ) override;
virtual css::awt::Size SAL_CALL getSize( ) override;
virtual sal_Int32 SAL_CALL getForeground( ) override;
virtual sal_Int32 SAL_CALL getBackground( ) override;
virtual void SAL_CALL grabFocus( ) override;
@@ -194,6 +182,10 @@ public:
virtual sal_Bool SAL_CALL selectColumn( sal_Int32 column ) override ;
virtual sal_Bool SAL_CALL unselectRow( sal_Int32 row ) override ;
virtual sal_Bool SAL_CALL unselectColumn( sal_Int32 column ) override ;
protected:
virtual css::awt::Rectangle implGetBounds() override;
private:
bool mbRow;
rtl::Reference< AccessibleTableShape > mpTable;
+1 -24
View File
@@ -953,12 +953,6 @@ AccessibleTableHeaderShape::~AccessibleTableHeaderShape()
mpTable = nullptr;
}
// XAccessible
Reference< XAccessibleContext > SAL_CALL AccessibleTableHeaderShape::getAccessibleContext()
{
return this;
}
// XAccessibleContext
sal_Int64 SAL_CALL AccessibleTableHeaderShape::getAccessibleChildCount( )
{
@@ -1012,36 +1006,19 @@ Locale SAL_CALL AccessibleTableHeaderShape::getLocale()
}
//XAccessibleComponent
sal_Bool SAL_CALL AccessibleTableHeaderShape::containsPoint ( const css::awt::Point& aPoint )
{
return mpTable->containsPoint( aPoint );
}
Reference< XAccessible > SAL_CALL AccessibleTableHeaderShape::getAccessibleAtPoint ( const css::awt::Point& aPoint)
{
return mpTable->getAccessibleAtPoint( aPoint );
}
css::awt::Rectangle SAL_CALL AccessibleTableHeaderShape::getBounds()
{
return mpTable->getBounds();
}
css::awt::Point SAL_CALL AccessibleTableHeaderShape::getLocation()
{
return mpTable->getLocation();
}
css::awt::Rectangle AccessibleTableHeaderShape::implGetBounds() { return mpTable->getBounds(); }
css::awt::Point SAL_CALL AccessibleTableHeaderShape::getLocationOnScreen()
{
return mpTable->getLocationOnScreen();
}
css::awt::Size SAL_CALL AccessibleTableHeaderShape::getSize()
{
return mpTable->getSize();
}
sal_Int32 SAL_CALL AccessibleTableHeaderShape::getForeground()
{
return mpTable->getForeground();