summaryrefslogtreecommitdiff
path: root/accessibility
AgeCommit message (Collapse)Author
2024-07-12icon choice ctrl entry a11y: Use OAccessibleComponentHelper as baseMichael Weghorn
Let `AccessibleIconChoiceCtrlEntry` derive from `comphelper::OAccessibleComponentHelper` which allows simplifying the class. It just requires implementing the virtual `implGetBounds()` method and provides implementations for the the other location/size-related methods using that, so drop the custom implementations doing the same. This also makes it unnecessary to implement the `XAccessibleEventBroadcaster` methods ourselves, so drop the custom handling and `AccessibleIconChoiceCtrlEntry::m_nClientId` altogether as well. Change-Id: Iaa14293a911ea7b199a21baf8c5c3cfb5075efcf Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170380 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-07-12icon choice ctrl a11y: Drop extra checkMichael Weghorn
`AccessibleIconChoiceCtrl::getAccessibleChildCount` returns the the number of elements in the `SvxIconChoiceCtrl_Impl::maEntries` vector, and `SvtIconChoiceCtrl->GetEntry` returns the the element at the given index. Given the index check above, a valid entry should always be there, so drop the extra check that would throw a RuntimeException in `AccessibleIconChoiceCtrl::getAccessibleChild`. The `pEntry` isn't otherwise used right here anyway. Change-Id: I446b6d8d92780d484ebf5fc531bfa51a7c87cac7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170372 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-07-12icon choice ctrl a11y: Clean up/simplify selection handlingMichael Weghorn
As mentioned in Change-Id: I852b5bf7480daf18bfdf26c3105849c27624ad8c Author: Michael Weghorn <m.weghorn@posteo.de> Date: Wed Jul 10 10:18:42 2024 +0200 icon choice ctrl a11y: Don't allow unselecting entry , only a single entry can be selected, and that one can be retrieved via `SvtIconChoiceCtrl::GetCursor` and set via `SvtIconChoiceCtrl::SetCursor`. Therefore, don't try to set multiple cursors in `AccessibleIconChoiceCtrl::selectAllAccessibleChildren` and don't loop over all entries in `AccessibleIconChoiceCtrl::getSelectedAccessibleChildCount`. Change-Id: I9b01c76a546b3d385a91e87d1a8e29e80a4aef17 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170371 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-07-12icon choice ctrl a11y: Don't report selectable state for list/tabbarMichael Weghorn
While entries can be selected and the `SELECTABLE` and `SELECTED` states are reported accordingly for them in `AccessibleIconChoiceCtrlEntry::getAccessibleStateSet`, reporting the selectable state doesn't make sense for the `AccessibleIconChoiceCtrl` itself, so drop that. (The `SELECTED` state also was never reported, without which the `SELECTABLE` state doesn't make much sense.) Change-Id: I8e7e501b9052b47babc835b6e03266f2cbfcf699 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170370 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-07-12icon choice ctrl a11y: Don't allow unselecting entryMichael Weghorn
`SvtIconChoiceCtrl` is (only) used in `VerticalTabControl`, and having no tab selected doesn't make much sense. Support for non-single selection modes was dropped in commit af9413cb4ad49c0b4854c08cc2804644220755ae Author: Michael Weghorn <m.weghorn@posteo.de> Date: Tue Jul 2 11:53:27 2024 +0200 tdf#161853 icon choice ctrl: Drop support for non-single selection modes Consequently, also drop support for explicitly unselecting one or all entries via the `XAccessibleSelection` interface in the corresponding a11y class, `AccessibleIconChoiceCtrl`. Drop the now unused `SvtIconChoiceCtrl::SetNoSelection` and `SvxIconChoiceCtrl_Impl::SetNoSelection`. This is also in line with handling for the the non-vertical tab control used elsewehere. Change-Id: I852b5bf7480daf18bfdf26c3105849c27624ad8c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170369 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-07-12icon choice ctrl a11y: Don't explicitly unset selectionMichael Weghorn
`SvtIconChoiceCtrl::SetCursor` already takes care of unselecting all other entries when one is selected, so there's no need to explicitly call `SvtIconChoiceCtrl::SetNoSelection` first. This can e.g. be tested by triggering the action of the entries in the "Insert" -> "Hyperlink" dialog in Writer from Accerciser when running LO with the qt6 VCL plugin. The action causes the corresponding entry to get selected. Change-Id: Ic0c31d987b286095d58756fd92aacc662a723680 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170368 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-07-12icon choice ctrl a11y: Drop misleading commentMichael Weghorn
There's only a single action, so the "only three actions" comment is misleading. Drop it. While at it, switch from `#define` to `constexpr` for the `ACCESSIBLE_ACTION_COUNT` constant. Change-Id: I2a031419d6166dee7f63612c6d51cc1232151110 Fixup Change-Id: Iea85d528468d7ae97b98439715cb9e18ee1d1fab Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170367 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-07-11Unify/Port to use VCLUnoHelper for AWT <-> VCL conversionsMichael Weghorn
Following Change-Id: Id48f81deb05aee2026509037f7d14575735e5be0 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Wed Jul 10 14:49:03 2024 +0200 VCLUnoHelper: Align AWT <-> VCL helpers with convert.hxx impl , port all uses of the helper functions defined in `include/toolkit/helper/convert.hxx` to use the `VCLUnoHelper` equivalents instead, to unify usage and avoid duplication. Drop `include/toolkit/helper/convert.hxx` now that it's unused. Change-Id: I22695a93e40e47bb2b14d191a2e0a4eb7c856895 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170317 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-05-29a11y: Don't report dummy a11y name for icon choice controlMichael Weghorn
If no a11y name is set for the `SvtIconChoiceCtrl`, don't report any, rather than using "IconChoiceControl" as accessible name. Having the Orca screen reader (when used with the qt6 VCL plugin) announce "IconChoiceControl" and then the name of the actually selected item e.g. in Writer's "Insert" -> "Hyperlink" or the "Format" -> "Page Setup" dialog is rather confusing when an entry in the control gets focus. Change-Id: Ie7e25d5a65c57be118abf2dcaff0648430f26154 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168155 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-05-29a11y: Report focused state for icon choice control entriesMichael Weghorn
Handle the FOCUSABLE and FOCUSED a11y states in `AccessibleIconChoiceCtrlEntry::getAccessibleStateSet`. Without this, the currently focused tab item would e.g. not be reported by Orca when using the qt6 VCL plugin in Writer's "Insert" -> "Hyperlink" dialog or in "Format" -> "Page Style" that was recently converted to use vertical tabs. Monitoring AT-SPI events showed that an `object:state-changed:focused` event was sent on the AT-SPI layer (see also `AccessibleIconChoiceCtrl::ProcessWindowEvent` that sends an `AccessibleEventId::ACTIVE_DESCENDANT_CHANGED` event): However, the focused state is not set, so Orca would not report the item as the new focus item: 95.1 object:state-changed:focused(0, 0, [list item | Mail]) source: [list item | Mail] application: [application | soffice.bin] With this change in place, the state is properly set now and Orca announces the newly focused item: 31.0 object:state-changed:focused(1, 0, [list item | Mail]) source: [list item | Mail] application: [application | soffice.bin] Change-Id: I41667c842e607f494b9e0e236b8c6f2f9ca95dfb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168154 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-05-24a11y: Rename m_aAccessibleChildren1 -> m_aAccessibleChildrenMichael Weghorn
Was previously changed the other way around in commit 28c89e58d90ea73513e273db274eb46ff9081c35 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-24a11y: Drop AccessibleChildren typedefMichael Weghorn
... 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-20Change for loop to have getAccessibleChildCount in accessibletabbarHakimOttey
Change-Id: Ic020b1cd36abe2c568a119dfd400c718dc9de452 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166989 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-05-10tdf#160971 a11y: Send full text on changed combobox textMichael Weghorn
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 9f078ed7b625e86182d64d5ccfbb410cdd38081c 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] https://gitlab.gnome.org/GNOME/orca/-/commit/3a9e6b8d7b16bf2fc7919868cfd1a16e44422710 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-10tdf#160971 a11y: Add null check in AccessibleListBox::getAccessibleRoleMichael Weghorn
Add a null check in `AccessibleListBox::getAccessibleRole`. Otherwise, LO Writer crashes on exit when using the qt6 VCL plugin with Orca running for this scenario: 1) start Writer with the qt6 VCL plugin 2) press F6 until focus is in the formatting toolbar 3) use tab key to get to the editable comboboxes 4) use up/down keys to change entries 5) use Alt+Down to expand combobox 6) switch between entries using up/down keys 7) close Writer The reason is that the window gets unset when when `SvTreeListBox::dispose` emits the `VclEventId::ObjectDying` event, see `VCLXAccessibleComponent::ProcessWindowEvent`. But then, Qt's AT-SPI adaptor wants to query the accessible role when the `AccessibleEventId::CHILD` event is forwarded in our Qt a11y bridge, which previously resulted in a nullptr dereference with the below backtrace. Just return `AccessibleRole::LIST` for the null case. Backtrace: 1 std::__uniq_ptr_impl<WindowImpl, std::default_delete<WindowImpl>>::_M_ptr unique_ptr.h 199 0x7f0c1ee0b055 2 std::unique_ptr<WindowImpl, std::default_delete<WindowImpl>>::get unique_ptr.h 470 0x7f0c1ee0b035 3 std::unique_ptr<WindowImpl, std::default_delete<WindowImpl>>::operator bool unique_ptr.h 487 0x7f0c1ee4abc5 4 vcl::Window::GetStyle window2.cxx 989 0x7f0c1f0e594d 5 accessibility::AccessibleListBox::getAccessibleRole accessiblelistbox.cxx 347 0x7f0be055205a 6 QtAccessibleWidget::role QtAccessibleWidget.cxx 380 0x7f0c151cc242 7 AtSpiAdaptor::pathForInterface atspiadaptor.cpp 1771 0x7f0c13a8b112 8 AtSpiAdaptor::notifyAboutDestruction atspiadaptor.cpp 1419 0x7f0c13a86e81 9 AtSpiAdaptor::notify atspiadaptor.cpp 988 0x7f0c13a8246b 10 QSpiAccessibleBridge::notifyAccessibilityUpdate qspiaccessiblebridge.cpp 85 0x7f0c13ad9bf2 11 QAccessible::updateAccessibility qaccessible.cpp 940 0x7f0c13a603aa 12 QtAccessibleEventListener::notifyEvent QtAccessibleEventListener.cxx 232 0x7f0c151c1363 13 comphelper::AccessibleEventNotifier::addEvent accessibleeventnotifier.cxx 256 0x7f0c270ee1b7 14 comphelper::OCommonAccessibleComponent::NotifyAccessibleEvent accessiblecomponenthelper.cxx 127 0x7f0c270e95b1 15 VCLXAccessibleComponent::ProcessWindowEvent vclxaccessiblecomponent.cxx 229 0x7f0c20e80720 16 VCLXAccessibleComponent::WindowEventListener vclxaccessiblecomponent.cxx 109 0x7f0c20e7fbbe 17 VCLXAccessibleComponent::LinkStubWindowEventListener vclxaccessiblecomponent.cxx 98 0x7f0c20e7f58d 18 Link<VclWindowEvent&, void>::Call link.hxx 111 0x7f0c1efa2898 19 vcl::Window::CallEventListeners event.cxx 262 0x7f0c1ef9f62e 20 vcl::Window::dispose window.cxx 163 0x7f0c1f0f6513 21 Control::dispose ctrl.cxx 65 0x7f0c1f177a06 22 SvTreeListBox::dispose treelistbox.cxx 1340 0x7f0c1f464d1b 23 SvTabListBox::dispose svtabbx.cxx 243 0x7f0c1f407a09 24 VclReferenceBase::disposeOnce vclreferencebase.cxx 38 0x7f0c1f3a957a 25 VclPtr<vcl::Window>::disposeAndClear vclptr.hxx 207 0x7f0c1eebfb19 26 VclBuilder::disposeBuilder builder.cxx 814 0x7f0c1ee96f91 27 VclBuilder::~VclBuilder builder.cxx 806 0x7f0c1ee96df9 28 std::default_delete<VclBuilder>::operator() unique_ptr.h 99 0x7f0c1ef6375b 29 std::__uniq_ptr_impl<VclBuilder, std::default_delete<VclBuilder>>::reset unique_ptr.h 211 0x7f0c1ef9da3c 30 std::unique_ptr<VclBuilder, std::default_delete<VclBuilder>>::reset unique_ptr.h 509 0x7f0c1ef9cfcd 31 SalInstanceBuilder::~SalInstanceBuilder salvtables.cxx 7436 0x7f0c1f900b3e 32 SalInstanceBuilder::~SalInstanceBuilder salvtables.cxx 7431 0x7f0c1f900ba9 33 std::default_delete<weld::Builder>::operator() unique_ptr.h 99 0x7f0c2490445f 34 std::__uniq_ptr_impl<weld::Builder, std::default_delete<weld::Builder>>::reset unique_ptr.h 211 0x7f0c2490438c 35 std::unique_ptr<weld::Builder, std::default_delete<weld::Builder>>::reset unique_ptr.h 509 0x7f0c24900e5d 36 PanelLayout::~PanelLayout PanelLayout.cxx 76 0x7f0c24f71c06 37 SfxTemplatePanelControl::~SfxTemplatePanelControl templdlg.cxx 163 0x7f0c24bd3d51 38 SfxTemplatePanelControl::~SfxTemplatePanelControl templdlg.cxx 160 0x7f0c24bd3d99 39 std::default_delete<PanelLayout>::operator() unique_ptr.h 99 0x7f0c24f1bedc 40 std::__uniq_ptr_impl<PanelLayout, std::default_delete<PanelLayout>>::reset unique_ptr.h 211 0x7f0c24f1bfdc 41 std::unique_ptr<PanelLayout, std::default_delete<PanelLayout>>::reset unique_ptr.h 509 0x7f0c24f1b06d 42 sfx2::sidebar::SidebarPanelBase::disposing SidebarPanelBase.cxx 86 0x7f0c24f1a1df 43 comphelper::WeakComponentImplHelperBase::dispose compbase.cxx 26 0x7f0c2715c7a4 44 comphelper::WeakComponentImplHelper<com::sun::star::ui::XContextChangeEventListener, com::sun::star::ui::XUIElement, com::sun::star::ui::XToolPanel, com::sun::star::ui::XSidebarPanel, com::sun::star::ui::XUpdateModel>::dispose compbase.hxx 75 0x7f0c24f1b235 45 sfx2::sidebar::Panel::~Panel Panel.cxx 124 0x7f0c24f6fa51 46 std::destroy_at<sfx2::sidebar::Panel> stl_construct.h 88 0x7f0c24f17315 47 std::_Destroy<sfx2::sidebar::Panel> stl_construct.h 149 0x7f0c24f172f5 48 std::allocator_traits<std::allocator<void>>::destroy<sfx2::sidebar::Panel> alloc_traits.h 675 0x7f0c24f170ff 49 std::_Sp_counted_ptr_inplace<sfx2::sidebar::Panel, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_M_dispose shared_ptr_base.h 613 0x7f0c24f170ff 50 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release shared_ptr_base.h 346 0x7f0c2481f0ce 51 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count shared_ptr_base.h 1071 0x7f0c2481f04a 52 std::__shared_ptr<sfx2::sidebar::Panel, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr shared_ptr_base.h 1524 0x7f0c24f15469 53 std::__shared_ptr<sfx2::sidebar::Panel, (__gnu_cxx::_Lock_policy)2>::reset shared_ptr_base.h 1642 0x7f0c24f0cc84 54 sfx2::sidebar::Deck::dispose Deck.cxx 93 0x7f0c24f5842b 55 VclReferenceBase::disposeOnce vclreferencebase.cxx 38 0x7f0c1f3a957a 56 VclPtr<sfx2::sidebar::Deck>::disposeAndClear vclptr.hxx 207 0x7f0c24f0bc96 57 sfx2::sidebar::ResourceManager::disposeDecks ResourceManager.cxx 800 0x7f0c24f79791 58 sfx2::sidebar::SidebarController::disposeDecks SidebarController.cxx 250 0x7f0c24efde01 59 sfx2::sidebar::SidebarController::unregisterSidebarForFrame SidebarController.cxx 212 0x7f0c24efd7e3 60 sfx2::sidebar::SidebarController::frameAction SidebarController.cxx 1619 0x7f0c24f07542 61 (anonymous namespace)::XFrameImpl::implts_sendFrameActionEvent frame.cxx 2960 0x7f0c25e25207 62 (anonymous namespace)::XFrameImpl::setComponent frame.cxx 1457 0x7f0c25e1d8b2 63 (anonymous namespace)::XFrameImpl::close frame.cxx 1706 0x7f0c25e20158 64 framework::Desktop::impl_closeFrames desktop.cxx 1699 0x7f0c25e03be4 65 framework::Desktop::terminate desktop.cxx 205 0x7f0c25e0315b 66 framework::CloseDispatcher::implts_terminateApplication closedispatcher.cxx 552 0x7f0c25c33510 67 framework::CloseDispatcher::impl_asyncCallback closedispatcher.cxx 406 0x7f0c25c326af 68 framework::CloseDispatcher::LinkStubimpl_asyncCallback closedispatcher.cxx 246 0x7f0c25c30b7d 69 Link<LinkParamNone *, void>::Call link.hxx 111 0x7f0c1ee22718 70 vcl::EventPoster::DoEvent_Impl evntpost.cxx 52 0x7f0c1f8a1485 71 vcl::EventPoster::LinkStubDoEvent_Impl evntpost.cxx 48 0x7f0c1f8a143d 72 Link<void *, void>::Call link.hxx 111 0x7f0c1f12d138 73 ImplHandleUserEvent winproc.cxx 2287 0x7f0c1f128e19 74 ImplWindowFrameProc winproc.cxx 2851 0x7f0c1f1257d0 75 SalFrame::CallCallback salframe.hxx 312 0x7f0c15240b90 76 QtInstance::ProcessEvent QtInstance.cxx 516 0x7f0c15263e3f 77 SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const salusereventlist.cxx 119 0x7f0c1f8b585d 78 SalUserEventList::DispatchUserEvents salusereventlist.cxx 120 0x7f0c1f8b5704 79 QtInstance::ImplYield QtInstance.cxx 442 0x7f0c15260541 80 QtInstance::DoYield QtInstance.cxx 464 0x7f0c15263945 81 ImplYield svapp.cxx 378 0x7f0c1f995c9c 82 Application::Yield svapp.cxx 466 0x7f0c1f9955ab 83 Application::Execute svapp.cxx 353 0x7f0c1f995342 84 desktop::Desktop::Main app.cxx 1615 0x7f0c28b275a9 85 ImplSVMain svmain.cxx 229 0x7f0c1f9b84ae 86 SVMain svmain.cxx 261 0x7f0c1f9ba4f9 87 soffice_main sofficemain.cxx 93 0x7f0c28bab36c 88 sal_main main.c 51 0x5644eb5ffa5d 89 main main.c 49 0x5644eb5ffa37 Change-Id: I3fefaed31c6557620ecbe1627d265f2065fe9747 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167475 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-05-07a11y: Drop AccessibleChildren typedefMichael Weghorn
Change-Id: I13946bb4a991dceeb26a0a9364f6067397b94001 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167197 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-05-03WaE: C6011 Dereferencing NULL pointer warningsCaolán McNamara
Change-Id: I8a15be14850b9fe48f80820f4308c35748497727 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167034 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-04-30loplugin:ostr in accessibilityNoel Grandin
Change-Id: Iff3e6af9627aa5d31b00ad48bc6c6ea8d3913fe9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166927 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-04-29Drop uses of css::uno::Sequence::getConstArray in accessibility .. basegfxMike Kaganski
where it was obsoleted by commits 2484de6728bd11bb7949003d112f1ece2223c7a1 (Remove non-const Sequence::begin()/end() in internal code, 2021-10-15) and fb3c04bd1930eedacd406874e1a285d62bbf27d9 (Drop non-const Sequence::operator[] in internal code 2021-11-05). Change-Id: I14e3634d8e8dd294b673dcda4dde13f01c3e5112 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166813 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Tested-by: Jenkins
2024-04-24[API CHANGE] a11y: Use XAccessible for relation targetsMichael Weghorn
Use a Sequence of XAccessible rather than its base interface XInterface for AccessibleRelation's TargetSet. As the targets are accessible objects as well, anything other than XAccessible doesn't make much sense. Using XAccessible right away makes that clearer and avoids the need to query the XAccessible interface. (The winaccessibility bridge was already using `static_cast`, relying on the fact that the objects are XAccessibles.) The a11y UNO API is not published, so an API change should be unproblematic. Change-Id: I7f08e98d1ec303d5343d9a7954187cdd71495ebc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166586 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-04-01tdf#146619 Drop unused 'using namespace' in: accessibility/Gabor Kelemen
Change-Id: I92662f0577c0f90ec0dc5eba1b685fbb7ac3da39 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165530 Tested-by: Jenkins Reviewed-by: Gabor Kelemen <gabor.kelemen.extern@allotropia.de>
2024-03-28convert VCLXAccessibleListItem to comphelper::WeakComponentImplHelperNoel Grandin
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-07vcl,accessibility: try to fix a crash while disposing SvxFontNameBox_ImplMichael Stahl
This happened in a 6.3 based branch, no idea how to reproduce it. Clearly the SvxFontNameBox_Impl is being disposed and in its base class Window::dispose() when a call to SvxFontNameBox_Impl::CreateAccessible() happens, which seems very suspicious; try to prevent that. mergedlo.dll!ImplListBox::InsertEntry(long nPos, const rtl::OUString & rStr) Zeile 2225 unter d:\lo\core\vcl\source\control\imp_listbox.cxx (2225) mergedlo.dll!ComboBox::InsertEntry(const rtl::OUString & rStr, long nPos) Zeile 886 unter d:\lo\core\vcl\source\control\combobox.cxx (886) mergedlo.dll!FontNameBox::Fill(const FontList * pList) Zeile 447 unter d:\lo\core\svtools\source\control\ctrlbox.cxx (447) [Inlineframe] mergedlo.dll!SvxFontNameBox_Impl::Fill(const FontList * pList) Zeile 236 unter d:\lo\core\svx\source\tbxctrls\tbcontrl.cxx (236) mergedlo.dll!lcl_GetDocFontList(const FontList * * ppFontList, SvxFontNameBox_Impl * pBox) Zeile 1290 unter d:\lo\core\svx\source\tbxctrls\tbcontrl.cxx (1290) mergedlo.dll!SvxFontNameBox_Impl::FillList() Zeile 1331 unter d:\lo\core\svx\source\tbxctrls\tbcontrl.cxx (1331) mergedlo.dll!SvxFontNameBox_Impl::CreateAccessible() Zeile 3739 unter d:\lo\core\svx\source\tbxctrls\tbcontrl.cxx (3739) mergedlo.dll!vcl::Window::GetAccessible(bool bCreate) Zeile 129 unter d:\lo\core\vcl\source\window\accessibility.cxx (129) acclo.dll!VCLXAccessibleToolBox::getAccessibleChild(long i) Zeile 733 unter d:\lo\core\accessibility\source\standard\vclxaccessibletoolbox.cxx (733) acclo.dll!VCLXAccessibleToolBox::GetItemWindowAccessible(const VclWindowEvent & rVclWindowEvent) Zeile 784 unter d:\lo\core\accessibility\source\standard\vclxaccessibletoolbox.cxx (784) acclo.dll!VCLXAccessibleToolBox::GetChildAccessible(const VclWindowEvent & rVclWindowEvent) Zeile 795 unter d:\lo\core\accessibility\source\standard\vclxaccessibletoolbox.cxx (795) mergedlo.dll!VCLXAccessibleComponent::ProcessWindowChildEvent(const VclWindowEvent & rVclWindowEvent) Zeile 165 unter d:\lo\core\toolkit\source\awt\vclxaccessiblecomponent.cxx (165) acclo.dll!VCLXAccessibleToolBox::ProcessWindowChildEvent(const VclWindowEvent & rVclWindowEvent) Zeile 657 unter d:\lo\core\accessibility\source\standard\vclxaccessibletoolbox.cxx (657) mergedlo.dll!VCLXAccessibleComponent::WindowChildEventListener(VclWindowEvent & rEvent) Zeile 129 unter d:\lo\core\toolkit\source\awt\vclxaccessiblecomponent.cxx (129) mergedlo.dll!VCLXAccessibleComponent::LinkStubWindowChildEventListener(void * instance, VclWindowEvent & data) Zeile 118 unter d:\lo\core\toolkit\source\awt\vclxaccessiblecomponent.cxx (118) [Inlineframe] mergedlo.dll!Link<VclWindowEvent &,void>::Call(VclWindowEvent &) Zeile 84 unter d:\lo\core\include\tools\link.hxx (84) mergedlo.dll!vcl::Window::CallEventListeners(VclEventId nEvent, void * pData) Zeile 280 unter d:\lo\core\vcl\source\window\event.cxx (280) mergedlo.dll!vcl::Window::ImplResetReallyVisible() Zeile 735 unter d:\lo\core\vcl\source\window\stacking.cxx (735) mergedlo.dll!vcl::Window::ImplResetReallyVisible() Zeile 747 unter d:\lo\core\vcl\source\window\stacking.cxx (747) mergedlo.dll!vcl::Window::Show(bool bVisible, ShowFlags nFlags) Zeile 2198 unter d:\lo\core\vcl\source\window\window.cxx (2198) mergedlo.dll!vcl::Window::Show(bool bVisible, ShowFlags nFlags) Zeile 2176 unter d:\lo\core\vcl\source\window\window.cxx (2176) [Inlineframe] mergedlo.dll!vcl::Window::Hide() Zeile 925 unter d:\lo\core\include\vcl\window.hxx (925) mergedlo.dll!vcl::Window::dispose() Zeile 402 unter d:\lo\core\vcl\source\window\window.cxx (402) mergedlo.dll!Edit::dispose() Zeile 258 unter d:\lo\core\vcl\source\control\edit.cxx (258) mergedlo.dll!ComboBox::dispose() Zeile 132 unter d:\lo\core\vcl\source\control\combobox.cxx (132) mergedlo.dll!SvxFontNameBox_Impl::dispose() Zeile 1322 unter d:\lo\core\svx\source\tbxctrls\tbcontrl.cxx (1322) [Inlineframe] mergedlo.dll!VclPtr<SvxFontNameBox_Impl>::disposeAndClear() Zeile 206 unter d:\lo\core\include\vcl\vclptr.hxx (206) mergedlo.dll!SvxFontNameToolBoxControl::dispose() Zeile 3309 unter d:\lo\core\svx\source\tbxctrls\tbcontrl.cxx (3309) mergedlo.dll!framework::ToolBarManager::RemoveControllers() Zeile 651 unter d:\lo\core\framework\source\uielement\toolbarmanager.cxx (651) mergedlo.dll!framework::ToolBarManager::dispose() Zeile 468 unter d:\lo\core\framework\source\uielement\toolbarmanager.cxx (468) mergedlo.dll!framework::ToolBarWrapper::dispose() Zeile 105 unter d:\lo\core\framework\source\uielement\toolbarwrapper.cxx (105) mergedlo.dll!framework::ToolbarLayoutManager::destroyToolbars() Zeile 666 unter d:\lo\core\framework\source\layoutmanager\toolbarlayoutmanager.cxx (666) mergedlo.dll!framework::ToolbarLayoutManager::reset() Zeile 364 unter d:\lo\core\framework\source\layoutmanager\toolbarlayoutmanager.cxx (364) mergedlo.dll!framework::LayoutManager::implts_reset(bool bAttached) Zeile 458 unter d:\lo\core\framework\source\layoutmanager\layoutmanager.cxx (458) mergedlo.dll!framework::LayoutManager::frameAction(const com::sun::star::frame::FrameActionEvent & aEvent) Zeile 2757 unter d:\lo\core\framework\source\layoutmanager\layoutmanager.cxx (2757) mergedlo.dll!`anonymous namespace'::XFrameImpl::implts_sendFrameActionEvent(const com::sun::star::frame::FrameAction & aAction) Zeile 2952 unter d:\lo\core\framework\source\services\frame.cxx (2952) mergedlo.dll!`anonymous namespace'::XFrameImpl::setComponent(const com::sun::star::uno::Reference<com::sun::star::awt::XWindow> & xComponentWindow, const com::sun::star::uno::Reference<com::sun::star::frame::XController> & xController) Zeile 1470 unter d:\lo\core\framework\source\services\frame.cxx (1470) mergedlo.dll!`anonymous namespace'::XFrameImpl::close(unsigned char bDeliverOwnership) Zeile 1701 unter d:\lo\core\framework\source\services\frame.cxx (1701) mergedlo.dll!framework::pattern::frame::closeIt(const com::sun::star::uno::Reference<com::sun::star::uno::XInterface> & xResource) Zeile 62 unter d:\lo\core\framework\source\inc\pattern\frame.hxx (62) [Inlineframe] mergedlo.dll!framework::CloseDispatcher::implts_closeFrame() Zeile 492 unter d:\lo\core\framework\source\dispatch\closedispatcher.cxx (492) Change-Id: Ie05cd05158df58021d0fb4a19e9e38cd35af2426 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164451 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
2024-02-29Create an UNO service to do the symbol lookup in toolkit::AccessibilityClientNoel Grandin
which means I can remove one usage of gb_Library_set_plugin_for, which is blocking linking the accessibility module into --enable-mergelibs=more Change-Id: I8664ae1d2da4526cc7eab79b36e1589eb391d7c4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163680 Tested-by: Noel Grandin <noel.grandin@collabora.co.uk> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-02-28tdf#159910 a11y: Dispose VCLXAccessibleList childrenMichael Weghorn
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 51de048ae97cbd371457dbc07120e30db9ee4187 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::star::accessibility::XAccessible, com::sun::star::accessibility::XAccessibleContext, com::sun::star::accessibility::XAccessibleComponent, com::sun::star::accessibility::XAccessibleEventBroadcaster, com::sun::star::accessibility::XAccessibleText, com::sun::star::lang::XServiceInfo>::dispose compbase.hxx 90 0x7f0ddf7cb7c5 12 cppu::WeakComponentImplHelperBase::release implbase.cxx 79 0x7f0e1873f1fe 13 cppu::PartialWeakComponentImplHelper<com::sun::star::accessibility::XAccessible, com::sun::star::accessibility::XAccessibleContext, com::sun::star::accessibility::XAccessibleComponent, com::sun::star::accessibility::XAccessibleEventBroadcaster, com::sun::star::accessibility::XAccessibleText, com::sun::star::lang::XServiceInfo>::release compbase.hxx 86 0x7f0ddf7cd0c5 14 com::sun::star::uno::Reference<com::sun::star::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-28a11y: Drop extra local variableMichael Weghorn
Just assign to `VCLXAccessibleBox::m_xList` right away. Change-Id: Id6cd871ccb54cd709ddf3ed6e59b8f3feb8314ed Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164061 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-02-28a11y: Just use reference instead of extra pointer to contentMichael Weghorn
Just use the `VCLXAccessibleBox::m_xList` member directly instead of extra local pointer variables referring to the reference's body. Change-Id: Ic760d766221df773e8285c927e58ea7419cc7da6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164060 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-02-27tdf#159910 vcl a11y: Allow explicitly setting toolbar item a11y nameMichael Weghorn
Add `ToolBox::SetAccessibleName` (and corresponding getter) to allow explicitly setting an accessible name for a toolbox/toolbar item with the VCL toolbar implementation. In the a11y class for a toolbar item, use any explicitly set name if it's non-empty, otherwise fall back to the previous logic. This will be used in an upcoming commit to take into account the accessible name set in .ui files and align the VCL ToolBox more with the gtk implementation using native GtkToolbar and native widgets for the toolbar items. Change-Id: Ib0255e2741a7ab2489a857ac120fb87f680fa775 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164033 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-02-26a11y: Drop some AccessibleTextHelper_BASE typedefsMichael Weghorn
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-26tdf#159910 a11y: Distinguish a11y name and text of toolbar itemMichael Weghorn
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-26tdf#159910 a11y: Merge VCLXAccessibleToolBoxItem::{,impl}GetTextMichael Weghorn
`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-26tdf#159910 a11y: Slightly simplify VCLXAccessibleToolBoxItem::GetTextMichael Weghorn
* Avoid deep nesting by returning non-empty value right away. * Drop the `if (!sWinText.isEmpty())` before the last assignment. At this point, `sRet` is already empty, so reassigning an empty string makes no difference. Change-Id: Ib17e363f761e3ce09b359cebb1599042a8f6b8bb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163956 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-02-16tdf#159213 a11y: Only send child event if there's a childMichael Weghorn
When reviewing all the places sending an `AccessibleEventId::CHILD` event as described in tdf#159213 comment 8, this here looks like one where the child might not be set. Add a corresponding check to avoid sending an invalid event. Change-Id: I6fea72e8a0619eeec7ac7c9d38dec996ab34752f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163427 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-02-16a11y: Drop extra nesting levelMichael Weghorn
These checks can all be done in a single if condition rather than having two nested ones. (Use `git show -w` to ignore whitespace change.) Change-Id: Icbaaf45914f4dead9fc27d6e5e69d4cd03ee7393 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163426 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-02-16a11y: Drop 'using namespace com::sun::star::accessibility::AccessibleEventId"Michael Weghorn
This e.g. makes it easier to grep where a certain kind of event is sent. Change-Id: I50bbdf4413e720188c9e4bbce9c02187183f3858 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163425 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-01-22cid#1586675 Missing move assignment operatorCaolán McNamara
and cid#1586677 Missing move assignment operator Change-Id: I1bd2cd0f102d8ce44feb579b85c41b3c1f789f23 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162369 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-01-15loplugin:unnecessaryvirtualNoel Grandin
Change-Id: I14ee125874b6f0f1ff5406a3eafea0b19df1a7f2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162082 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-12-29use string OUString literals in a11y for XServiceInfo impl.Arnaud VERSINI
Used in getImplementationName and getSupportedServiceNames Change-Id: I003db960123c66d4d47b99aec678b156bf4c4d91 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161301 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-12-22Use emplace_back instead of push_back (accessibility)Julien Nabet
Change-Id: I1b5aa26e92c6e5eaef43bd1c03281d4068b0487a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161175 Tested-by: Jenkins Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2023-12-19cid#1557601 COPY_INSTEAD_OF_MOVECaolán McNamara
and cid#1546498 COPY_INSTEAD_OF_MOVE cid#1546384 COPY_INSTEAD_OF_MOVE cid#1546376 COPY_INSTEAD_OF_MOVE cid#1546374 COPY_INSTEAD_OF_MOVE cid#1546373 COPY_INSTEAD_OF_MOVE cid#1546368 COPY_INSTEAD_OF_MOVE cid#1546365 COPY_INSTEAD_OF_MOVE cid#1546356 COPY_INSTEAD_OF_MOVE cid#1546340 COPY_INSTEAD_OF_MOVE cid#1546266 COPY_INSTEAD_OF_MOVE cid#1546236 COPY_INSTEAD_OF_MOVE cid#1546188 COPY_INSTEAD_OF_MOVE cid#1546178 COPY_INSTEAD_OF_MOVE cid#1546166 COPY_INSTEAD_OF_MOVE cid#1546156 COPY_INSTEAD_OF_MOVE cid#1546144 COPY_INSTEAD_OF_MOVE cid#1546143 COPY_INSTEAD_OF_MOVE cid#1546100 COPY_INSTEAD_OF_MOVE cid#1546078 COPY_INSTEAD_OF_MOVE cid#1546041 COPY_INSTEAD_OF_MOVE cid#1546036 COPY_INSTEAD_OF_MOVE cid#1546033 COPY_INSTEAD_OF_MOVE Change-Id: Ib3586d93198992e206baf5c2de5a663d5574aa3c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160979 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2023-12-19tdf#123864 a11y: Handle new checkable state for VCLXAccessibleMenuItemMichael Weghorn
Add reporting for the new CHECKABLE a11y state introduced in commit d6c6472bbe1c90b733a4d69c4c8528f4de3750d3 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-19tdf#123864 a11y: Handle new CHECKABLE state in misc placesMichael Weghorn
Add reporting/handling of the CHECKABLE a11y state added in commit d6c6472bbe1c90b733a4d69c4c8528f4de3750d3 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Mon Nov 13 15:53:44 2023 +0100 tdf#123864 a11y: Add new AccessibleStateType::CHECKABLE in various places where it seems pretty straightforward. `VCLXAccessibleMenuItem` is a bit more complex and will be handled separately. Change-Id: I212b8439609d34410413959973163aa7d809cbf1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160901 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-12-07simplify and modernise ScopedBitmapAccessNoel Grandin
(*) Make all of it use a "Scoped" paradigm (*) pass by value, no need to allocate on heap (*) make all of the construction go via the *Access constructors, instead of it being some via the constructors and some via the Acquire*Access methods. (*) take the Bitmap& by const& in the constructor, so we can avoid doing const_cast in random places. Change-Id: Ie03a9145c0965980ee8df9a89b8714a425e18f74 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160293 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-11-02tdf#112661 tdf#112662 a11y: Fix toggling button via a11y actionMichael Weghorn
`PushButton::Click does not` toggle a `PushButton` that is a toggle button. Therefore, call `PushButton::Check` and `PushButton::Toggle` instead when the acessible "press" action is performed on a toggle button, which makes this work as expected. The same is already done in the UITest code, see `ButtonUIObject::execute`. The originally rerported issue in tdf#112661 and tdf#112662 was that there was no action available for the "Templates" and "Recent Documents" toggle buttons in the start center via the NSAccessibility API on macOS at all. By now, the "press" action was available, but performing the action (e.g. using the Ctrl+CapsLock+Space keyboard shortcut for VoiceOver) didn't have any effect. The same was true when performing the action via Accerciser using the AT-SPI Action interface when using the qt6 VCL plugin on Linux. With this change in place, toggling between showing the templates and the recently used documents in the start center works using that action, just as it does when clicking on one of the toggle buttons in the UI using the mouse. For gtk3, which is using native GtkToggleButtons, this was already working without this change in place. Change-Id: Ie3f02ec914239e0718ca1bfb4ba701f0831bb16a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158807 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-10-24tdf#135921 a11y Send event when toggling listbox checkboxMichael Weghorn
When toggling the state of the checkbox in a listbox/ treelist entry using the mouse or the keyboard, emit a `VclEventId::CheckboxToggle` event and process that in the a11y class that's used for the case where there's just a single checkbox (like in the spelling options dialog), `AccessibleListBoxEntry` by sending a corresponding STATE_CHANGED event on the a11y layer. This makes Orca with the qt6 VCL plugin and NVDA on Windows announce the new value when toggling a checkbox in the Spelling options dialog using either the mouse or the keyboard. As mentioned in the previous commit, Change-Id Ic78f9052d166be0da17a76261a09da02b8a11cd7 tdf#135921 a11y: Toggle listbox item checkbox on space , the case where a listbox entry has multiple checkboxes (like the autocorrect options dialog in Writer) uses different a11y classes and toggling a checkbox there still doesn't result in the new value being announced. Change-Id: I36a2b0a3fa3154279fb06af023fdb96f699fac2f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158375 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-10-23a11y: Don't throw exception on valid list box entry action indexMichael Weghorn
`checkActionIndex_Impl` was previously throwing an IndexOutOfBoundsException for any index other than 0. The // only three actions comment in there was only adding to the confusion... Convert that helper function to a method of the class and take the actual count of actions into account. Also drop the misleading `ACCESSIBLE_ACTION_COUNT` define altogether, and just return 1 at the only remaining place using it. This fixes a crash seen with the qt6 VCL plugin and Orca running when opening the spelling options dialog ("Tools" -> "Spelling", then press the "Options..." button). 1 __pthread_kill_implementation pthread_kill.c 44 0x7f29908a80fc 2 __pthread_kill_internal pthread_kill.c 78 0x7f29908a815f 3 __GI_raise raise.c 26 0x7f299085a472 4 __GI_abort abort.c 79 0x7f29908444b2 5 ?? 0x7f29904a09db 6 ?? 0x7f29904affaa 7 std::terminate() 0x7f29904b0015 8 __cxa_throw 0x7f29904b0268 9 (anonymous namespace)::checkActionIndex_Impl accessiblelistboxentry.cxx 49 0x7f29562aeb82 10 accessibility::AccessibleListBoxEntry::getAccessibleActionDescription accessiblelistboxentry.cxx 770 0x7f29562b2b9b 11 QtAccessibleWidget::actionNames QtAccessibleWidget.cxx 805 0x7f297c84a8d7 12 QAccessibleBridgeUtils::effectiveActionNames qaccessiblebridgeutils.cpp 25 0x7f297b6c90a5 13 AtSpiAdaptor::actionInterface atspiadaptor.cpp 1862 0x7f297b6e2cc0 14 AtSpiAdaptor::handleMessage atspiadaptor.cpp 1438 0x7f297b6de432 15 QDBusConnectionPrivate::activateObject qdbusintegrator.cpp 1438 0x7f2979ec0ecb 16 QDBusActivateObjectEvent::placeMetaCall qdbusintegrator.cpp 1594 0x7f2979ec1bb0 17 QObject::event qobject.cpp 1446 0x7f297c02116e 18 QApplicationPrivate::notify_helper qapplication.cpp 3295 0x7f297a59d714 19 QApplication::notify qapplication.cpp 3246 0x7f297a59d524 20 QCoreApplication::notifyInternal2 qcoreapplication.cpp 1131 0x7f297bfa23ba 21 QCoreApplication::sendEvent qcoreapplication.cpp 1572 0x7f297bfa2ead 22 QCoreApplicationPrivate::sendPostedEvents qcoreapplication.cpp 1937 0x7f297bfa3ea6 23 QCoreApplication::sendPostedEvents qcoreapplication.cpp 1794 0x7f297bfa37ae 24 postEventSourceDispatch qeventdispatcher_glib.cpp 244 0x7f297c3b9108 25 ?? 0x7f29835111b4 26 ?? 0x7f29835142d7 27 g_main_context_iteration 0x7f29835148f0 28 QEventDispatcherGlib::processEvents qeventdispatcher_glib.cpp 394 0x7f297c3b999d 29 QXcbGlibEventDispatcher::processEvents qxcbeventdispatcher.cpp 96 0x7f2979c67036 30 QtInstance::ImplYield QtInstance.cxx 421 0x7f297c8c27c6 31 QtInstance::DoYield QtInstance.cxx 432 0x7f297c8c28ef 32 ImplYield svapp.cxx 377 0x7f298732dcc8 33 Application::Yield svapp.cxx 461 0x7f298732ea66 34 Application::Execute svapp.cxx 355 0x7f298732d9bb 35 desktop::Desktop::Main app.cxx 1601 0x7f2990a35716 36 ImplSVMain svmain.cxx 204 0x7f298734d600 37 SVMain svmain.cxx 236 0x7f298734d735 38 soffice_main sofficemain.cxx 94 0x7f2990aa058f 39 sal_main main.c 51 0x5629220af9d4 40 main main.c 49 0x5629220af9ba Change-Id: Ib3ed8616fb539942d9ba0cd60d5607859deb5a7b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158344 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-10-23Extended loplugin:ostr: Rewrite some O[U]StringLiteral -> O[U]StringStephan Bergmann
...in include files. This is a mix of automatic rewriting in include files and manual fixups (mostly addressing loplugin:redundantfcast) in source files that include those. Change-Id: I1f3cc1e67b9cabd2e9d61a4d9e9a01e587ea35cc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158337 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-10-15a11y: Add include to fix clang-cl buildMichael Weghorn
Without this, my clang-cl build on windows would fail like this: In file included from C:/tools/cygwin/home/user/development/git/libreoffice/accessibility/source/extended/accessibletabbarbase.cxx:20: In file included from C:/tools/cygwin/home/user/development/git/libreoffice/accessibility/inc\extended/accessibletabbarbase.hxx:24: In file included from C:/tools/cygwin/home/user/development/git/libreoffice/include\vcl/vclptr.hxx:25: C:/tools/cygwin/home/user/development/git/libreoffice/include\rtl/ref.hxx(129,20): error: member access into incomplete type 'accessibility::AccessibleTabBarPage' 129 | m_pBody->release(); | ^ C:/PROGRA~1/MICROS~2/2022/COMMUN~1/VC/Tools/MSVC/1437~1.328/Include\xmemory(321,21): note: in instantiation of member function 'rtl::Reference<accessibility::AccessibleTabBarPage>::~Reference' requested here 321 | _Location->~_Ty(); | ^ C:/tools/cygwin/home/user/development/git/libreoffice/accessibility/inc\extended/accessibletabbarpagelist.hxx(32,11): note: forward declaration of 'accessibility::AccessibleTabBarPage' 32 | class AccessibleTabBarPage; | ^ 1 error generated. make[1]: *** [C:/tools/cygwin/home/user/development/git/libreoffice/solenv/gbuild/LinkTarget.mk:340: C:/tools/cygwin/home/user/development/git/libreoffice/workdir/CxxObject/accessibility/source/extended/accessibletabbarbase.o] Error 1 make: *** [Makefile:121: accessibility] Error 2 Change-Id: I3961fb95602b96667f33ea0b087e1df5375faf19 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157982 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-10-12Make NC_ constexpr-friendlyStephan Bergmann
...by moving the char8_t -> char reinterpret_cast out of any potential constexpr paths into a new TranslateId::getId. And demonstrate constexpr'ability by making the aCategories var in OApplicationIconControl::Fill (dbaccess/source/ui/app/AppIconControl.cxx) constexpr. (And there might be more such cases that could now be made constexpr.) Change-Id: I0b4e3292faf8f6b901f9b9e934e1aa6bf0f583ff Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157862 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-10-11Drop o3tl::span, can use C++20 std::span directly nowStephan Bergmann
Change-Id: Ic21ff7bf48f07f7277979d52e99d2c5c268de83f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157825 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>