29ab560c21
The a11y tree was broken: While the table has the cells as children, the cells did not have the table set as parent, but the table's header. Since the IAccessibleTableCell implementation in winaccessibility relies on the table being set as the parent, this wouldn't work when moving around within the tree view in the Expert Configuration dialog. Fix this by setting the table as parent. The issue could also be observed with the qt6 VCL plugin on Linux and Accerciser. With the table selected in Accerciser's tree view of the a11y hierarchy, the incorrect hierarchy could be seen using this in Accerciser's IPython console. In [8]: acc.childCount Out[8]: 48 In [9]: acc.get_child_at_index(4).name Out[9]: 'Migration' In [10]: acc.get_child_at_index(4).parent == acc Out[10]: False In [11]: acc.get_child_at_index(4).parent.childCount Out[11]: 4 With the fix in place, the table's child's parent is now the table again as expected: In [13]: acc.childCount Out[13]: 48 In [14]: acc.get_child_at_index(4).name Out[14]: 'Migration' In [15]: acc.get_child_at_index(4).parent == acc Out[15]: True In [16]: acc.get_child_at_index(4).parent.childCount Out[16]: 48 NVDA on Windows now announces *something* when moving between rows in the Expert Configuration dialog, but it's not the correct row yet. (That looks like another issue in winaccessibility code that needs to be fixed separately.) Change-Id: I400fa9811bb297ea7fd1accb0970811cdf11a119 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154670 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
102 lines
3.2 KiB
C++
102 lines
3.2 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* This file incorporates work covered by the following license notice:
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
* with this work for additional information regarding copyright
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <extended/AccessibleBrowseBox.hxx>
|
|
#include <cppuhelper/implbase1.hxx>
|
|
#include <vcl/accessibletableprovider.hxx>
|
|
|
|
class SvHeaderTabListBox;
|
|
|
|
|
|
namespace accessibility {
|
|
|
|
class AccessibleBrowseBoxTable;
|
|
|
|
typedef ::cppu::ImplHelper1 < css::accessibility::XAccessible
|
|
> AccessibleTabListBox_Base;
|
|
|
|
/** !!! */
|
|
class AccessibleTabListBox final
|
|
:public AccessibleBrowseBox
|
|
,public AccessibleTabListBox_Base
|
|
,public ::vcl::IAccessibleTabListBox
|
|
{
|
|
private:
|
|
VclPtr<SvHeaderTabListBox> m_pTabListBox;
|
|
|
|
public:
|
|
/** ctor()
|
|
@param rxParent XAccessible interface of the parent object.
|
|
@param rBox The HeaderTabListBox control. */
|
|
AccessibleTabListBox(
|
|
const css::uno::Reference< css::accessibility::XAccessible >& rxParent,
|
|
SvHeaderTabListBox& rBox );
|
|
|
|
// XInterface
|
|
DECLARE_XINTERFACE( )
|
|
// XTypeProvider
|
|
DECLARE_XTYPEPROVIDER( )
|
|
|
|
// XAccessibleContext -----------------------------------------------------
|
|
|
|
/** @return The count of visible children. */
|
|
virtual sal_Int64 SAL_CALL getAccessibleChildCount() override;
|
|
|
|
/** @return The XAccessible interface of the specified child. */
|
|
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL
|
|
getAccessibleChild( sal_Int64 nChildIndex ) override;
|
|
|
|
// XAccessibleContext
|
|
css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override;
|
|
|
|
// IAccessibleTabListBox
|
|
virtual css::uno::Reference< css::accessibility::XAccessible >
|
|
getMyself() override
|
|
{
|
|
return this;
|
|
}
|
|
|
|
css::uno::Reference< css::accessibility::XAccessible >
|
|
getHeaderBar() override
|
|
{
|
|
return AccessibleBrowseBox::getHeaderBar( AccessibleBrowseBoxObjType::ColumnHeaderBar );
|
|
}
|
|
|
|
css::uno::Reference<css::accessibility::XAccessible> getTable() override
|
|
{
|
|
return implGetTable();
|
|
}
|
|
|
|
private:
|
|
/** dtor() */
|
|
virtual ~AccessibleTabListBox() override;
|
|
|
|
/** This method creates and returns an accessible table.
|
|
@return An AccessibleBrowseBoxTable. */
|
|
virtual rtl::Reference<AccessibleBrowseBoxTable> createAccessibleTable() override;
|
|
};
|
|
|
|
|
|
} // namespace accessibility
|
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|