Commit graph

120 commits

Author SHA1 Message Date
Michael Weghorn
739b071650 a11y: Move menu a11y classes to vcl, no more use factory
Other than most of the a11y implementations for vcl
classes, VCLXAccessiblePopupMenu etc. do not
make use of any VCLXWindow (i.e. UNO/toolkit wrapper of a
vcl::Window) and thus do not depend on the toolkit
module, which the accessibility module depends on.

Therefore, there's also no need to use the accessible
factory to create them (which is needed when toolkit
classes are involved to avoid a dependency cycle).

Move those classes from the accessibility module to
vcl and add a new method Menu::CreateAccessible and
move the logic from AccessibleFactory::createAccessible
there. Drop the now unnecessary factory methods
previously used for those classes.

No change in behavior intended (yet), but this
also simplifies the code involved for the
tdf#164093 scenario.

Change-Id: Ie3f6f1a02bf6662206d31383473cdc868e1f9164
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177812
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-04 20:47:30 +01:00
Michael Weghorn
a2c1a337f0 [API CHANGE] a11y: Drop XAccessibleExtendedComponent::getFont
This method from the unpublished XAccessibleExtendedComponent
interface is not used by any of the a11y platform bridges, and
I don't know of any platform a11y API that would need it.

In order to report character/font attributes, there is the
XAccessibleText interface and its
XAccessiText::getCharacterAttributes method instead, which
actually gets used by the platform a11y bridges.

Therefore, drop this method to simplify code, and also decouple
the accessibility module a bit further from the toolkit
module without having to reorganize code further.
(VCLXFont from the toolkit module currently gets used in
various implementations.)

Change-Id: I06ea3cc5998a13927b3f869877b28f03ac07c89b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177809
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-04 20:46:21 +01:00
Michael Weghorn
f81af8f7a5 a11y: Handle combobox subedit a11y name in VCLXAccessibleEdit
Let VCLXAccessibleEdit::getAccessibleName take care
of returning the same accessible name as the combobox
parent for the combobox subedit instead of trying
to set the same name when that combobox child is
requested the first time.

This makes sure the name remains in sync, and prevents
trying to get the combobox a11y name while a dialog
containing it might still be in the process of getting
constructed by VclBuilder, in which case e.g. the
AccessibleRelation::LABELLED_BY relation that
gets used in Window::getDefaultAccessibleName
may not have been set. That relation e.g. gets
set if a label has the combobox set as its
"mnemonic-widget" in a .ui file.

The previous logic was triggering an assert
when opening the "Fonts" page in the "Tools" -> "Options"
dialog or using the search feature in that dialog on Windows
with an AT (like NVDA) active when trying to set the a11y
name of the "font2" combobox's entry
(UI file: cui/uiconfig/ui/optfontspage.ui):

    Assertion failed: GetChildCount() == 4 || pWindowImpl->mbInDispose, file .../vcl/source/window/layout.cxx, line 1945

Backtrace:

    1   abort                                                                                                     ucrtbase                           0x7ffad46e286e
    2   get_wpgmptr                                                                                               ucrtbase                           0x7ffad46e426e
    3   get_wpgmptr                                                                                               ucrtbase                           0x7ffad46e4165
    4   wassert                                                                                                   ucrtbase                           0x7ffad46e44f1
    5   VclScrolledWindow::get_child                                                                              layout.cxx                    1945 0x7ffa88f67e35
    6   nextLogicalChildOfParent                                                                                  dialog.cxx                    139  0x7ffa88f147cf
    7   nextLogicalChildOfParent                                                                                  dialog.cxx                    157  0x7ffa88f14884
    8   nextLogicalChildOfParent                                                                                  dialog.cxx                    157  0x7ffa88f14884
    9   ImplGetSubChildWindow                                                                                     dlgctrl.cxx                   137  0x7ffa88f197e1
    10  ImplGetChildWindow                                                                                        dlgctrl.cxx                   151  0x7ffa88f18dae
    11  ImplGetNextWindow                                                                                         dlgctrl.cxx                   180  0x7ffa88f19600
    12  ImplFindDlgCtrlWindow                                                                                     dlgctrl.cxx                   362  0x7ffa88f18a2b
    13  vcl::ImplGetLabeledBy                                                                                     legacyaccessibility.cxx       122  0x7ffa88e65437
    14  vcl::Window::getLegacyNonLayoutAccessibleRelationLabeledBy                                                legacyaccessibility.cxx       178  0x7ffa88e657ac
    15  vcl::Window::GetAccessibleRelationLabeledBy                                                               accessibility.cxx             604  0x7ffa88e6193a
    16  vcl::Window::getDefaultAccessibleName                                                                     accessibility.cxx             470  0x7ffa88e63c73
    17  vcl::Window::GetAccessibleName                                                                            accessibility.cxx             441  0x7ffa88e614ba
    18  vcl::Window::SetAccessibleName                                                                            accessibility.cxx             427  0x7ffa88e623bc
    19  VCLXAccessibleBox::getAccessibleChild                                                                     vclxaccessiblebox.cxx         319  0x7ffa853e3e02
    20  AccObjectWinManager::InsertChildrenAccObj                                                                 AccObjectWinManager.cxx       536  0x7ffa855b2ed1
    21  AccEventListener::HandleChildChangedEvent                                                                 AccEventListener.cxx          109  0x7ffa855b9593
    22  AccEventListener::notifyEvent                                                                             AccEventListener.cxx          64   0x7ffa855ba6ef
    23  AccContainerEventListener::notifyEvent                                                                    AccContainerEventListener.cxx 95   0x7ffa855bdfbc
    24  comphelper::AccessibleEventNotifier::addEvent                                                             accessibleeventnotifier.cxx   256  0x7ffa916598c0
    25  comphelper::OCommonAccessibleComponent::NotifyAccessibleEvent                                             accessiblecomponenthelper.cxx 127  0x7ffa9165071e
    26  VCLXAccessibleComponent::ProcessWindowChildEvent                                                          vclxaccessiblecomponent.cxx   165  0x7ffa8b7e6029
    27  VCLXAccessibleComponent::WindowChildEventListener                                                         vclxaccessiblecomponent.cxx   124  0x7ffa8b7e6d62
    28  VCLXAccessibleComponent::LinkStubWindowChildEventListener                                                 vclxaccessiblecomponent.cxx   114  0x7ffa8b7e5ee6
    29  Link<VclWindowEvent &,void>::Call                                                                         link.hxx                      111  0x7ffa88f3bf43
    30  vcl::Window::CallEventListeners                                                                           event.cxx                     300  0x7ffa88f3c57c
    31  vcl::Window::ImplSetReallyVisible                                                                         window.cxx                    1331 0x7ffa8904394d
    32  vcl::Window::ImplSetReallyVisible                                                                         window.cxx                    1344 0x7ffa89043a1d
    33  vcl::Window::Show                                                                                         window.cxx                    2336 0x7ffa89047671
    34  vcl::Window::Show                                                                                         window.cxx                    2349 0x7ffa8904776e
    35  vcl::Window::set_property                                                                                 window2.cxx                   1537 0x7ffa8902d4b3
    36  ComboBox::set_property                                                                                    combobox.cxx                  1553 0x7ffa89097521
    37  BuilderUtils::set_properties                                                                              builder.cxx                   2192 0x7ffa88ef13c5
    38  VclBuilder::insertObject                                                                                  builder.cxx                   2469 0x7ffa88ee18df
    39  WidgetBuilder<vcl::Window,VclPtr<vcl::Window>,PopupMenu,VclPtr<PopupMenu>>::handleObject                  widgetbuilder.hxx             230  0x7ffa88e23d54
    40  WidgetBuilder<vcl::Window,VclPtr<vcl::Window>,PopupMenu,VclPtr<PopupMenu>>::handleChild                   widgetbuilder.hxx             127  0x7ffa88e22c30
    41  WidgetBuilder<vcl::Window,VclPtr<vcl::Window>,PopupMenu,VclPtr<PopupMenu>>::handleObject                  widgetbuilder.hxx             234  0x7ffa88e23dff
    42  WidgetBuilder<vcl::Window,VclPtr<vcl::Window>,PopupMenu,VclPtr<PopupMenu>>::handleChild                   widgetbuilder.hxx             127  0x7ffa88e22c30
    43  WidgetBuilder<vcl::Window,VclPtr<vcl::Window>,PopupMenu,VclPtr<PopupMenu>>::handleObject                  widgetbuilder.hxx             234  0x7ffa88e23dff
    44  WidgetBuilder<vcl::Window,VclPtr<vcl::Window>,PopupMenu,VclPtr<PopupMenu>>::handleChild                   widgetbuilder.hxx             127  0x7ffa88e22c30
    45  WidgetBuilder<vcl::Window,VclPtr<vcl::Window>,PopupMenu,VclPtr<PopupMenu>>::handleObject                  widgetbuilder.hxx             234  0x7ffa88e23dff
    46  WidgetBuilder<vcl::Window,VclPtr<vcl::Window>,PopupMenu,VclPtr<PopupMenu>>::handleChild                   widgetbuilder.hxx             127  0x7ffa88e22c30
    47  WidgetBuilder<vcl::Window,VclPtr<vcl::Window>,PopupMenu,VclPtr<PopupMenu>>::handleObject                  widgetbuilder.hxx             234  0x7ffa88e23dff
    48  WidgetBuilder<vcl::Window,VclPtr<vcl::Window>,PopupMenu,VclPtr<PopupMenu>>::handleChild                   widgetbuilder.hxx             127  0x7ffa88e22c30
    49  WidgetBuilder<vcl::Window,VclPtr<vcl::Window>,PopupMenu,VclPtr<PopupMenu>>::processUIFile                 widgetbuilder.hxx             70   0x7ffa88e24b4a
    50  VclBuilder::VclBuilder                                                                                    builder.cxx                   523  0x7ffa88ea53be
    51  SalInstanceBuilder::SalInstanceBuilder                                                                    salvtables.cxx                7088 0x7ffa895da3ff
    52  std::make_unique<SalInstanceBuilder,vcl::Window * &,rtl::OUString const &,rtl::OUString const &,0>        memory                        3434 0x7ffa895d44c8
    53  SalInstance::CreateBuilder                                                                                salvtables.cxx                7470 0x7ffa895ef18e
    54  Application::CreateBuilder                                                                                builder.cxx                   198  0x7ffa88ebed2a
    55  BuilderPage::BuilderPage                                                                                  weldutils.cxx                 28   0x7ffa89684128
    56  SfxTabPage::SfxTabPage                                                                                    tabdlg.cxx                    137  0x7ffa8cd5f0e5
    57  SvxFontSubstTabPage::SvxFontSubstTabPage                                                                  fontsubs.cxx                  36   0x7ffa8372d1cd
    58  std::make_unique<SvxFontSubstTabPage,weld::Container * &,weld::DialogController * &,SfxItemSet const &,0> memory                        3434 0x7ffa8372cdbf
    59  SvxFontSubstTabPage::Create                                                                               fontsubs.cxx                  146  0x7ffa8372f692
    60  CreateGeneralTabPage                                                                                      treeopt.cxx                   289  0x7ffa8383199a
    61  OfaTreeOptionsDialog::SelectHdl_Impl                                                                      treeopt.cxx                   1317 0x7ffa838372e7
    62  OfaTreeOptionsDialog::ShowPageHdl_Impl                                                                    treeopt.cxx                   623  0x7ffa83837f11
    63  OfaTreeOptionsDialog::LinkStubShowPageHdl_Impl                                                            treeopt.cxx                   620  0x7ffa83834366
    64  Link<weld::TreeView &,void>::Call                                                                         link.hxx                      111  0x7ffa88ebdf13
    65  weld::TreeView::signal_changed                                                                            weld.hxx                      969  0x7ffa88ef210f
    66  SalInstanceTreeView::SelectHdl                                                                            salvtables.cxx                5304 0x7ffa895f4b39
    67  SalInstanceTreeView::LinkStubSelectHdl                                                                    salvtables.cxx                5299 0x7ffa895f38c6
    68  Link<SvTreeListBox *,void>::Call                                                                          link.hxx                      111  0x7ffa88ebe413
    69  SvTreeListBox::SelectHdl                                                                                  treelistbox.cxx               454  0x7ffa892ba7a1
    70  SvTreeListBox::Select                                                                                     treelistbox.cxx               2128 0x7ffa892ba514
    71  SvImpLBox::SetCursor                                                                                      svimpbox.cxx                  617  0x7ffa892d05e8
    72  ImpLBSelEng::SetCursorAtPoint                                                                             svimpbox.cxx                  2596 0x7ffa892d08a9
    73  SelectionEngine::SelMouseButtonDown                                                                       seleng.cxx                    174  0x7ffa88fd0071
    74  SvImpLBox::MouseButtonDown                                                                                svimpbox.cxx                  2016 0x7ffa892cc580
    75  SvTreeListBox::MouseButtonDown                                                                            treelistbox.cxx               2277 0x7ffa892b71e2
    76  ImplHandleMouseEvent                                                                                      winproc.cxx                   708  0x7ffa89059867
    77  ImplHandleSalMouseButtonDown                                                                              winproc.cxx                   2338 0x7ffa8905afef
    78  ImplWindowFrameProc                                                                                       winproc.cxx                   2683 0x7ffa8905ca47
    79  SalFrame::CallCallback                                                                                    salframe.hxx                  312  0x7ffa88e1ee56
    80  ImplHandleMouseMsg                                                                                        salframe.cxx                  3335 0x7ffa85c270bf
    81  SalFrameWndProc                                                                                           salframe.cxx                  5987 0x7ffa85c2de7d
    82  SalFrameWndProcW                                                                                          salframe.cxx                  6342 0x7ffa85c2ec60
    83  CallWindowProcW                                                                                           USER32                             0x7ffad61cef5c
    84  DispatchMessageW                                                                                          USER32                             0x7ffad61ce684
    85  ImplSalDispatchMessage                                                                                    salinst.cxx                   475  0x7ffa85b8cf98
    86  ImplSalYield                                                                                              salinst.cxx                   552  0x7ffa85b8d6bd
    87  WinSalInstance::DoYield                                                                                   salinst.cxx                   581  0x7ffa85b8cc61
    88  ImplYield                                                                                                 svapp.cxx                     385  0x7ffa89656364
    89  Application::Yield                                                                                        svapp.cxx                     474  0x7ffa89659fe2
    90  Dialog::Execute                                                                                           dialog.cxx                    1077 0x7ffa88f0c017
    91  SalInstanceDialog::run                                                                                    salvtables.cxx                1882 0x7ffa896149af
    92  weld::DialogController::run                                                                               weld.hxx                      2691 0x7ffa88eef436
    93  OfaTreeOptionsDialog::run                                                                                 treeopt.cxx                   2514 0x7ffa83841dd2
    94  CuiAbstractController_Impl::Execute                                                                       dlgfact.cxx                   144  0x7ffa837085c8
    95  SfxApplication::OfaExec_Impl                                                                              appserv.cxx                   1641 0x7ffa8cb36506
    96  SfxStubSfxApplicationOfaExec_Impl                                                                         sfxslots.hxx                  1307 0x7ffa8cb10165
    97  SfxDispatcher::Call_Impl                                                                                  dispatch.cxx                  257  0x7ffa8cc1f4ae
    98  SfxDispatcher::Execute_                                                                                   dispatch.cxx                  754  0x7ffa8cc2260f
    99  SfxBindings::Execute_Impl                                                                                 bindings.cxx                  1062 0x7ffa8cc0086d
    100 SfxDispatchController_Impl::dispatch                                                                      unoctitm.cxx                  736  0x7ffa8cc93caa
    101 SfxOfficeDispatch::dispatch                                                                               unoctitm.cxx                  254  0x7ffa8cc945b0
    102 framework::MenuBarManager::Select                                                                         menubarmanager.cxx            821  0x7ffa8d8574d4
    103 framework::MenuBarManager::LinkStubSelect                                                                 menubarmanager.cxx            776  0x7ffa8d855796
    104 Link<Menu *,bool>::Call                                                                                   link.hxx                      111  0x7ffa88f77d88
    105 Menu::Select                                                                                              menu.cxx                      360  0x7ffa88f83e19
    106 Menu::ImplCallSelect                                                                                      menu.cxx                      2152 0x7ffa88f7c761
    107 Menu::LinkStubImplCallSelect                                                                              menu.cxx                      2148 0x7ffa88f82366
    108 Link<void *,void>::Call                                                                                   link.hxx                      111  0x7ffa890529b3
    109 ImplHandleUserEvent                                                                                       winproc.cxx                   2288 0x7ffa8905ba97
    110 ImplWindowFrameProc                                                                                       winproc.cxx                   2850 0x7ffa8905d256
    111 SalFrame::CallCallback                                                                                    salframe.hxx                  312  0x7ffa88e1ee56
    112 ImplHandleUserEvent                                                                                       salframe.cxx                  4471 0x7ffa85c28fab
    113 SalFrameWndProc                                                                                           salframe.cxx                  6236 0x7ffa85c2e654
    114 SalFrameWndProcW                                                                                          salframe.cxx                  6342 0x7ffa85c2ec60
    115 CallWindowProcW                                                                                           USER32                             0x7ffad61cef5c
    116 DispatchMessageW                                                                                          USER32                             0x7ffad61ce684
    117 ImplSalDispatchMessage                                                                                    salinst.cxx                   475  0x7ffa85b8cf98
    118 ImplSalYield                                                                                              salinst.cxx                   506  0x7ffa85b8d09b
    119 WinSalInstance::DoYield                                                                                   salinst.cxx                   581  0x7ffa85b8cc61
    120 ImplYield                                                                                                 svapp.cxx                     385  0x7ffa89656364
    121 Application::Yield                                                                                        svapp.cxx                     474  0x7ffa89659fe2
    122 Application::Execute                                                                                      svapp.cxx                     361  0x7ffa89653aa6
    123 desktop::Desktop::Main                                                                                    app.cxx                       1679 0x7ffa9336887f
    124 ImplSVMain                                                                                                svmain.cxx                    228  0x7ffa8966b310
    125 SVMain                                                                                                    svmain.cxx                    247  0x7ffa8966baf2
    126 soffice_main                                                                                              sofficemain.cxx               121  0x7ffa933b86f4
    127 sal_main                                                                                                  main.c                        51   0x7ff64a491013
    128 main                                                                                                      main.c                        49   0x7ff64a49105a
    129 __scrt_common_main_seh                                                                                    exe_common.inl                288  0x7ff64a491344
    130 BaseThreadInitThunk                                                                                       KERNEL32                           0x7ffad5c07374
    131 RtlUserThreadStart                                                                                        ntdll                              0x7ffad679cc91

Change-Id: I3be8a8e4acd1c87fdfa495c755fd947e9a11b9aa
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177314
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2024-11-26 12:04:14 +01:00
Michael Weghorn
4622e28f83 a11y: Drop misleading comment
The "The role is always AccessibleRole::COMBO_BOX." comment
for VCLXAccessibleBox::getAccessibleRole is misleading,
as the actual implementation can also return AccessibleRole::PANEL.

Change-Id: I15b089e168aa7ec0701eacc8630023123f3a10dd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177313
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-11-26 12:04:07 +01:00
Michael Weghorn
c7e210919a a11y: Create VCLXAccessibleEdit::isComboBoxChild helper
It will be reused in another method in an upcoming commit.

Change-Id: Ie6b4559e268d9340b5b13844c906232c6ff38a6e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177312
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
2024-11-26 12:04:01 +01:00
Michael Weghorn
579d0a72a3 a11y: Move identical implementations to base class
Instead of having a purely virtual
VCLXAccessibleBox::IsValid that all subclasses
implement the same way, deduplicate this by
moving the implementation to the VCLXAccessibleBox
base class.

Change-Id: I354bf3d0be6751a165b373c06b951c6f0b63480b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177252
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-11-25 13:45:37 +01:00
Caolán McNamara
94273b45b5 cid#1608497 Double lock
Change-Id: Idacac84614411efe7516de9aa7740d7d47863ad7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172438
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-08-27 09:41:17 +02:00
Michael Weghorn
248a19ad2b a11y: Rename m_aAccessibleChildren1 -> m_aAccessibleChildren
Was previously changed the other way around in

    commit 28c89e58d9
    Date:   Wed Aug 30 15:16:01 2023 +0200

        use concrete type for OAccessibleMenuBaseComponent::m_aAccessibleChildren

for no apparent reason.

Change-Id: I0d0c6627134bcef8ac9732cc8a5213ab266afbf7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168005
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
2024-05-24 11:07:42 +02:00
Michael Weghorn
56572e8b9a a11y: Drop AccessibleChildren typedef
... which is only used in the next line anyway.

Change-Id: I3bb038cfba3b3b31df45ca316242d54442db7220
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168004
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
2024-05-24 11:07:29 +02:00
Michael Weghorn
ab7a94b840 tdf#160971 a11y: Send full text on changed combobox text
When the text of an editable combobox is changed
(e.g. using the up/down keys), the Orca screen
reader on Linux announces the newly inserted text.

This has been the case for other GTK or Qt
applications for a while, and with recent Orca
commit [1]

    commit 3a9e6b8d7b16bf2fc7919868cfd1a16e44422710
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Fri May 10 10:16:58 2024 +0200

        soffice: Use default logic for editable combobox value change

, the same logic is used for LibreOffice as well.

For the gtk3 VCL plugin which has a custom combobox
implementation using native GTK widgets, this generally
works since

    commit 9f078ed7b6
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Tue May 7 10:04:16 2024 +0200

        tdf#160971 gtk3 a11y: Set role for custom editable combobox

However, the qt6 VCL plugin uses the VCL combobox
implementation, and only the actual difference between
the text of the previous and current entry was sent
in the TEXT_CHANGED event, resulting in Orca only
announcing those letters that were added/changed,
e.g. just "ans Narrow" when changing the font in the
Writer formatting toolbar from "Liberation Serif"
to "Liberation Sans Narrow".

This doesn't really make clear what entry is selected.
Align the a11y event with what GTK and Qt do
and set the full old and new entry texts in the event.

To do that, add a new virtual
`VCLXAccessibleTextComponent:PreferFullTextInTextChangedEvent`
that defaults to false to keep the previous behavior as default,
and override it for `VCLXAccessibleEdit` to return true
in the case that the edit is the subedit of a combobox
(the parent has a combobox role).
Use this in `VCLXAccessibleTextComponent::SetText` to
determine whether to notify just of the changed characters
or to send the whole old/new text.

With this in place, Orca also announces the whole new
entry text (e.g. "Liberation Sans Narrow" for the above
example) when using the qt6 VCL plugin.
(It currently additionally announces an extra "Selection
deleted" when switching entries, as the text selection
also changes, but that aspect is to be handled separate
from this change here.)

[1] 3a9e6b8d7b

Change-Id: I240aa0ad5ac9585e007d67a8c69e305cf1f38185
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167479
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-05-10 21:49:49 +02:00
Noel Grandin
6658a38424 convert VCLXAccessibleListItem to comphelper::WeakComponentImplHelper
Change-Id: I82b7dd9b0cdf379c710870a295c8f33ed9fff681
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165437
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-03-28 06:43:03 +01:00
Michael Weghorn
8f88aff98c tdf#159910 a11y: Dispose VCLXAccessibleList children
In `VCLXAccessibleList::HandleChangedItemList`,
don't just clear the vector of list items, but
dispose them first.

To avoid code duplication, extract a helper method
from `VCLXAccessibleList::disposing` which already
disposes the children since

    commit 51de048ae9
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Mon Sep 4 17:19:03 2023 +0200

        tdf#157088 a11y: Dispose list items with list

This fixes a similar crash/assert on exit, seen after using the
Navigator in Writer (in particular the combo/listboxes in
there) with the qt6 VCL plugin and the Orca screen reader
running.

stderr showed this:

    soffice.bin: .../libreoffice/comphelper/source/misc/accessibleeventnotifier.cxx:142: bool (anonymous namespace)::implLookupClient(const AccessibleEventNotifier::TClientId, ClientMap::iterator &): Assertion `rClients.end() != rPos && "AccessibleEventNotifier::implLookupClient: invalid client id " "(did you register your client?)!"' failed.
    Aborted

Backtrace:

    1 __pthread_kill_implementation pthread_kill.c 44 0x7f0e1a4a816c
    2 __pthread_kill_internal pthread_kill.c 78 0x7f0e1a4a81cf
    3 __GI_raise raise.c 26 0x7f0e1a45a472
    4 __GI_abort abort.c 79 0x7f0e1a4444b2
    5 __assert_fail_base assert.c 92 0x7f0e1a4443d5
    6 __assert_fail assert.c 101 0x7f0e1a4533a2
    7 (anonymous namespace)::implLookupClient accessibleeventnotifier.cxx 140 0x7f0e18ce59ac
    8 comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing accessibleeventnotifier.cxx 185 0x7f0e18ce5e68
    9 VCLXAccessibleListItem::disposing vclxaccessiblelistitem.cxx 164 0x7f0ddf7d237f
    10 cppu::WeakComponentImplHelperBase::dispose implbase.cxx 104 0x7f0e1873f544
    11 cppu::PartialWeakComponentImplHelper<com::sun::accessibility::XAccessible, com::sun::accessibility::XAccessibleContext, com::sun::accessibility::XAccessibleComponent, com::sun::accessibility::XAccessibleEventBroadcaster, com::sun::accessibility::XAccessibleText, com::sun::lang::XServiceInfo>::dispose compbase.hxx 90 0x7f0ddf7cb7c5
    12 cppu::WeakComponentImplHelperBase::release implbase.cxx 79 0x7f0e1873f1fe
    13 cppu::PartialWeakComponentImplHelper<com::sun::accessibility::XAccessible, com::sun::accessibility::XAccessibleContext, com::sun::accessibility::XAccessibleComponent, com::sun::accessibility::XAccessibleEventBroadcaster, com::sun::accessibility::XAccessibleText, com::sun::lang::XServiceInfo>::release compbase.hxx 86 0x7f0ddf7cd0c5
    14 com::sun::uno::Reference<com::sun::accessibility::XAccessible>::~Reference Reference.hxx 114 0x7f0e06bbccbe
    15 QtAccessibleWidget::~QtAccessibleWidget QtAccessibleWidget.hxx 39 0x7f0e06bd618d
    16 QtAccessibleWidget::~QtAccessibleWidget QtAccessibleWidget.hxx 39 0x7f0e06bd6219
    17 QAccessibleCache::deleteInterface qaccessiblecache.cpp 173 0x7f0e05545319
    18 QAccessibleCache::~QAccessibleCache qaccessiblecache.cpp 31 0x7f0e0554492a
    19 QAccessibleCache::~QAccessibleCache qaccessiblecache.cpp 32 0x7f0e055449b0
    20 cleanupAccessibleCache qaccessiblecache.cpp 24 0x7f0e05544896
    21 qt_call_post_routines qcoreapplication.cpp 332 0x7f0e05faf826
    22 QApplication::~QApplication qapplication.cpp 665 0x7f0e0419e24a
    23 QApplication::~QApplication qapplication.cpp 722 0x7f0e0419e55c
    24 std::default_delete<QApplication>::operator() unique_ptr.h 99 0x7f0e06c5d63c
    25 std::__uniq_ptr_impl<QApplication, std::default_delete<QApplication>>::reset unique_ptr.h 211 0x7f0e06c5df7c
    26 std::unique_ptr<QApplication, std::default_delete<QApplication>>::reset unique_ptr.h 509 0x7f0e06c58bfd
    27 QtInstance::~QtInstance QtInstance.cxx 305 0x7f0e06c51184
    28 QtInstance::~QtInstance QtInstance.cxx 302 0x7f0e06c51279
    29 DestroySalInstance salplug.cxx 368 0x7f0e114c0a18
    30 DeInitVCL svmain.cxx 625 0x7f0e115c5e7d
    31 ImplSVMain svmain.cxx 254 0x7f0e115c4031
    32 SVMain svmain.cxx 261 0x7f0e115c5f79
    33 soffice_main sofficemain.cxx 94 0x7f0e1a7a4ba3
    34 sal_main main.c 51 0x559ce9c67a5d
    35 main main.c 49 0x559ce9c67a37

Change-Id: Ic5121645a6920a8ac35154dda1dcfa1974ab9d4a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164062
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-02-28 09:02:46 +01:00
Michael Weghorn
4b3d6fadf0 a11y: Drop some AccessibleTextHelper_BASE typedefs
Just use `comphelper::OAccessibleTextHelper` directly
where `AccessibleTextHelper_BASE` is a typedef for that.

There are other `AccessibleTextHelper_BASE` typedefs with
a different meaning elsewhere in the codebase, which are left unchanged.

Change-Id: I323a2b103eccfcfc4f726caffa73e586decf6d65
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163960
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-02-26 22:55:02 +01:00
Michael Weghorn
c455fcd88f tdf#159910 a11y: Distinguish a11y name and text of toolbar item
So far, the accessible name and the text of the item
were considered to be the same, and fallbacks to still
get something else for the accessible name in case
of no item text (to use the quick help text or the item
window's accessible name instead) were implemented directly in
`VCLXAccessibleToolBoxItem::implGetText`.

However, `VCLXAccessibleToolBoxItem::implGetText` is also
used by the implementations for the methods from the
`XAccessibleText` interface and that one is clearly about
text displayed on screen, so using e.g. the quick help/tooltip
text doesn't make sense then.

Let `VCLXAccessibleToolBoxItem::implGetText` only handle the
actual item text and move the fallbacks to a new helper
method `VCLXAccessibleToolBoxItem::implGetAccessibleName`
instead that is only used when the actual accessible name
is wanted.

Change-Id: Icc394022d036ca619622cee1390e28ab15014be1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163959
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-02-26 22:54:51 +01:00
Michael Weghorn
86dff3ca4e tdf#159910 a11y: Merge VCLXAccessibleToolBoxItem::{,impl}GetText
`VCLXAccessibleToolBoxItem::implGetText` was just calling
`VCLXAccessibleToolBoxItem::GetText`, and both of them
were used from different places.

Just move the implementation to `VCLXAccessibleToolBoxItem::implGetText`
right away, drop `VCLXAccessibleToolBoxItem::implGetText` and adjust
callers to unify this.

Change-Id: I0f4a4652f9e1259826a566d42b4b6998fc8ac7db
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163958
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-02-26 22:38:31 +01:00
Noel Grandin
6583f5d6b2 loplugin:unnecessaryvirtual
Change-Id: I14ee125874b6f0f1ff5406a3eafea0b19df1a7f2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162082
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-01-15 13:56:05 +01:00
Michael Weghorn
eef4d5cbd1 tdf#123864 a11y: Handle new checkable state for VCLXAccessibleMenuItem
Add reporting for the new CHECKABLE a11y state introduced in

    commit d6c6472bbe
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Mon Nov 13 15:53:44 2023 +0100

        tdf#123864 a11y: Add new AccessibleStateType::CHECKABLE

for `VCLXAccessibleMenuItem`.

`MenuItemData::HasCheck` looks like it already provides
what's needed to say whether an item is checkable, therefore
add a `Menu::IsItemCheckable` that makes use of this and
and a `VCLXAccessibleMenuItem::IsCheckable` that
makes use of that in turn.

Extend `VCLXAccessibleMenuItem::FillAccessibleStateSet` to
use the latter to report the CHECKABLE state accordingly.

Change-Id: Id23196ef2527a71a338102a5143a8bd6fd41db84
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160902
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-12-19 09:30:23 +01:00
Noel Grandin
747a9838ee loplugin:unusedmethods
Change-Id: I00f228451574ca9f9e352d233c7f326c88e90a95
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156892
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-09-13 13:28:16 +02:00
Noel Grandin
dfd890c414 VCLXAccessibleList does not need to implement XAggreggation
Checked on jenkins using 'make check' and

+void SAL_CALL setDelegator(css::uno::Reference<css::uno::XInterface> const &) final { assert(false); }

Change-Id: I561af7931b5863857311df3cd6c3a85ad494f578
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156799
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-09-11 12:45:40 +02:00
Noel Grandin
277c651875 use more concrete type in VCLXAccessibleBox
and avoid some casting

Change-Id: I755caf9ba5a333862d1a89a054359781544930f7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156570
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-09-05 22:00:15 +02:00
Michael Weghorn
410632ac4b a11y: Hold list items by rtl::Reference
Use a vector of `rtl::Reference<VCLXAccessibleListItem>`
for the children instead of a vector of
`css::uno::Reference<css::accessibility::XAccessible>`
and casting in various places.

Change-Id: I1d0e72a7c844a685d762069002d747cf5e7d02dc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156525
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-09-04 21:43:22 +02:00
Michael Weghorn
307b9af242 a11y: Drop ListItems typdef
Change-Id: Ie8d62b769c44ab74a21fadd9ab395fe0f908ee76
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156524
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-09-04 21:41:40 +02:00
Michael Weghorn
bfa9d01920 tdf#157088 a11y: No need to use WeakReference for list children
`VCLXAccessibleList` is the owner of the
`VCLXAccessibleListItem`s held in that vector,
so I see no reason to hold them by weak reference,
which according to the doc in
`udkapi/com/sun/star/uno/XWeak.idl` is to avoid
affecting the lifetime of the objects:

> <p>The sense of weak references is to hold a reference to an object
> without affecting the lifetime of the object. That means that a weak
> reference may become invalid, at any time, if the referenced object dies.
> </p>

Quite the contrary, it is actually responsible for the
lifecycle of the list item a11y objects and should dispose
them when itself gets disposed, which will be added
in a subsequent commit.

Change-Id: I57fe3367f1199cd0c24f006f6e25a1e9c930c154
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156521
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-09-04 21:41:00 +02:00
Michael Weghorn
a5593114bb tdf#104833 a11y Send name changed event for text controls
The text is at least often used for the accessible name of
text controls (e.g. the MultiLineEdit case in tdf#104833).

Therefore, also check whether the a11y name has changed
from the previously remembered one in
`VCLXAccessibleTextComponent::SetText` and send
a NAME_CHANGED event if it has.

This e.g. makes sure that the a11y name for the multi line
edit in the update dialog is updated on Windows
and NVDA properly announces it when it receives focus.
 (It now correctly announces "LibreOfficeDev 24.2 is up to date."
instead of the obsolete cached name "Checking...").

Also see how `VCLXAccessibleTextComponent::ProcessWindowEvent`
calls `VCLXAccessibleTextComponent::SetText` when processing
`VclEventId::WindowFrameTitleChanged` and this comment in
`Window::SetText` mentions that `VclEventId::WindowFrameTitleChanged`
is used to notify about a11y name changes:

    // #107247# needed for accessibility
    // The VclEventId::WindowFrameTitleChanged is (mis)used to notify accessible name changes.
    // Therefore a window, which is labeled by this window, must also notify an accessible
    // name change.

Change-Id: I2f15fe78324b14c3bbeae943cb87384007e21618
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156411
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-09-01 16:13:40 +02:00
Michael Weghorn
9a559df3fe tdf#104833 a11y: Don't use VCLXEdit in VCLXAccessibleEdit
Don't rely on the `VCLXWindow` of the control
being a `VCLXEdit`, but use the `Edit` control
directly, as is already done in other methods
of this class.

This is in preparation of using
`VCLXAccessibleEdit` as the a11y class
for `MultiLineEdit` as well, which derives
from `Edit`, but its component interface class,
`VCLXMultiLineEdit` does not derive from `VCLXEdit`.

Already add reporting of the
`AccessibleStateType::MULTI_LINE` state instead of
`AccessibleStateType::SINGLE_LINE` to
`VCLXAccessibleTextComponent::FillAccessibleStateSet`
if the window type is `WindowType::MULTILINEEDIT`.

Add a small helper function,
`VCLXAccessibleEdit::isEditable` to use instead
of `VCLXEdit::isEditable`, which does the same.

Interacting with the single line edit from
the sample dialog in attachment 189287 in tdf#104833
in Accerciser still behaves as expected (and the
text can still be edited when removing the
readonly flag from the control).

Change-Id: I8218db61feb07605f6ea5309f26eebd38312458a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156400
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-09-01 16:13:19 +02:00
Noel Grandin
28c89e58d9 use concrete type for OAccessibleMenuBaseComponent::m_aAccessibleChildren
avoid some unnecessary casting

Change-Id: Iaa9ce18d7a0772d894ec8f93e16f4f59ffaae77d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156315
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-08-31 10:34:10 +02:00
Noel Grandin
5dbc129d49 use concrete type for VCLXAccessibleStatusBar::m_aAccessibleChildren
avoid some unnecessary casting

Change-Id: Id9e52b0b6dd8dc2cedc8b9cf80c17f1cf4afe502
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156314
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-08-31 10:33:53 +02:00
Noel Grandin
a3f77a61c0 use concrete type for VCLXAccessibleTabControl::m_aAccessibleChildren
avoid some unnecessary casting

Change-Id: I2f6ed71fbffbcdfad18ed03dd45c12ea1f52fff6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156291
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-08-30 22:16:36 +02:00
Noel Grandin
af08e6c2f4 use concrete type for ToolBoxItemsMap
avoid some unnecessary casting

Change-Id: I582144f0654837ac8864679b38c3d2676d1089b2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156290
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-08-30 22:16:23 +02:00
Michael Weghorn
ce0a48a1eb tdf#155625 a11y: Notify about menu item role change
Send a `AccessibleEventId::ROLE_CHANGED` event
when the accessible role of a menu item changes
(s. how `VCLXAccessibleMenuItem::getAccessibleRole`
takes into account `MenuItemBits::RADIOCHECK` and
`MenuItemBits::CHECKABLE` to determine the accessible
role for the underlying menu entry).

This fixes the issue of obsolete values for roles being
used, which was uncovered by the upcoming
Change-Id I1a047864ce8dc1f1bc3056ad00159f7fd5e5b7d3
("vcl gtk3: Introduce AT-SPI2 tests for the GTK3 accessibility layer").

With this in place, the workaround for tdf#155625 in
the upcoming gtk3/AT-SPI tests is no longer necessary
and `make CppunitTest_vcl_gtk3_a11y` with
https://gerrit.libreoffice.org/c/core/+/153069 patch set 11
still passes after dropping the workaround:

    diff --git a/vcl/qa/cppunit/a11y/atspi2/atspi2.cxx b/vcl/qa/cppunit/a11y/atspi2/atspi2.cxx
    index bbcd263fee0c..762401181bf4 100644
    --- a/vcl/qa/cppunit/a11y/atspi2/atspi2.cxx
    +++ b/vcl/qa/cppunit/a11y/atspi2/atspi2.cxx
    @@ -264,9 +264,6 @@ void Atspi2TestTree::compareObjects(uno::Reference<accessibility::XAccessible> x
          * be represented with a round trip. */
         const auto nLORole = mapToAtspiRole(xLOContext->getAccessibleRole());
         auto nAtspiRole = pAtspiAccessible.getRole();
    -    // FIXME: workaround for https://bugs.documentfoundation.org/show_bug.cgi?id=155625
    -    if (nLORole == ATSPI_ROLE_CHECK_MENU_ITEM && nAtspiRole == ATSPI_ROLE_MENU_ITEM)
    -        nAtspiRole = nLORole;
         CPPUNIT_ASSERT_EQUAL(nLORole, nAtspiRole);
         /* name (no need to worry about debugging suffixes as AccessibilityTools::nameEquals does, as
          * that will also be part of the name sent to ATSPI) */

Change-Id: I0d88a7eda592f5ee9abf368ce1d5feb6611b9971
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154947
Reviewed-by: Colomban Wendling <cwendling@hypra.fr>
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-07-27 16:58:22 +02:00
Michael Weghorn
07f4fa7119 a11y: Send VALUE_CHANGED event for FormattedField
`VCLXAccessibleEdit::ProcessWindowEvent` takes care
of sending a `TEXT_CHANGED` event. In the case of
`SVTXAccessibleNumericField`, numeric values are
handled, so send a `VALUE_CHANGED` event in addition.

This makes Orca with the qt6 VCL plugin announce
the new value when e.g. changing the page width
using the arrow up key in the "Format" -> "Page Style"
dialog.

For Accerciser, an additional fix is needed so the
value gets updated there in the interface view when
the a11y object is selected. Pending MR: [1]

[1] https://gitlab.gnome.org/GNOME/accerciser/-/merge_requests/25

Change-Id: Id911f50664df7220bc58204bc3477c5306a1da33
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150422
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-04-15 05:39:03 +02:00
Stephan Bergmann
4499db6b90 Use ImplInheritanceHelper in VCLXAccessibleToolBoxItem
Change-Id: I380d8ae6dd237c0d09209c71dfdcf7b1ad995fb2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146241
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-27 11:48:19 +00:00
Stephan Bergmann
3f39e4b674 Use ImplInheritanceHelper in VCLXAccessibleToolBox
Change-Id: I3b37cd67d6d32001ae6ac72f01ce156aeb93ca7e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146240
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-27 11:47:59 +00:00
Stephan Bergmann
148caa3612 Use ImplInheritanceHelper in VCLXAccessibleTextField
Change-Id: Ie6b9fd7d825940d090f76b23597c40d8cbbca7c8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146239
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-27 11:47:42 +00:00
Stephan Bergmann
cf38f560d0 Use ImplInheritanceHelper in VCLXAccessibleTabPage
Change-Id: Ia1b4df33d426265d5eb6f0b77c531ab3b53ea3d2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146238
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-27 11:47:21 +00:00
Stephan Bergmann
b1883a0ff9 Use ImplInheritanceHelper in VCLXAccessibleTabControl
Change-Id: I9426bac6b26feaa555842142dd3ce62bbe5f4a69
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146237
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-27 11:47:10 +00:00
Stephan Bergmann
90a64d3ca1 Use ImplInheritanceHelper in VCLXAccessibleStatusBarItem
Change-Id: I7ec38650b0ef44b59b57bd64ba74fcac918f8b6d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146236
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-27 11:47:01 +00:00
Stephan Bergmann
c1b17b0e91 Use ImplInheritanceHelper in VCLXAccessibleScrollBar
Change-Id: I8702abb22d14eb88655a1a133ecce8140b0cd4e1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146235
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-27 11:45:27 +00:00
Stephan Bergmann
d3080dc586 Use ImplInheritanceHelper in VCLXAccessibleRadioButton
Change-Id: If07a07cf4e6fa465d1d6d3e52abe550922edeb6c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146234
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-27 10:29:25 +00:00
Stephan Bergmann
2f7dee3a2d Use ImplInheritanceHelper in VCLXAccessibleMenu
Change-Id: Ia086713b06cd9525e5bb03e74a1908bdd6058b18
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146233
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-27 08:32:21 +00:00
Stephan Bergmann
969b3f1e54 Use ImplInheritanceHelper in VCLXAccessibleMenuItem
Change-Id: I0eca36225c2a43e2ba90253c013fefe43b2f29a0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146232
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-27 08:32:11 +00:00
Stephan Bergmann
4986d195c3 Use ImplInheritanceHelper in VCLXAccessibleList
Change-Id: I2412ef089b5b299b131916d21afa5c5d4fd74c39
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146190
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-26 19:55:55 +00:00
Stephan Bergmann
57f103f158 Use ImplInheritanceHelper in VCLXAccessibleHeaderBarItem
Change-Id: I18b54a3cd689aaf4870c073db8d76d41661a05c9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146189
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-26 19:55:47 +00:00
Stephan Bergmann
df4f438e74 Use ImplInheritanceHelper in VCLXAccessibleCheckBox
Change-Id: I6cb7926db61590a356db7c55eeda94053dbf189f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146188
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-26 19:55:32 +00:00
Stephan Bergmann
7c63d968bb Use ImplInheritanceHelper in VCLXAccessibleButton
Change-Id: Ia5c384e7ae4b78e008836fafc5433accd8489f07
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146187
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-26 19:55:22 +00:00
Stephan Bergmann
1bc2be265c Use ImplInheritanceHelper in VCLXAccessibleBox
Change-Id: I8763463a2fd85a528870d140051dd9fb49aea608
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146186
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-26 19:02:37 +00:00
Stephan Bergmann
e547fb841d Use ImplInheritanceHelper in SVTXAccessibleNumericField
Change-Id: I9d9b6a6d7cbd89983cbe803511b59226330ae9e8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146185
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-26 19:02:16 +00:00
Stephan Bergmann
fd92a175b5 Use ImplInheritanceHelper in VCLXAccessibleEdit
Change-Id: Ia81117c1819b4d3b5791a0d8ca66d79a26a3c9a7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146184
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-26 19:01:58 +00:00
Stephan Bergmann
b50d9685e8 Use ImplInheritanceHelper in VCLXAccessibleTextComponent
Change-Id: Iad1ae727e31908949d61d32b3828a67ac74398e7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146183
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-26 19:01:45 +00:00
Stephan Bergmann
fc2f4eb5ca Use ImplInheritanceHelper in OAccessibleMenuComponent
Change-Id: I7399a7e707d4a5915925d2e1b606ed7f6a364337
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146182
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-26 19:01:24 +00:00