summaryrefslogtreecommitdiff
path: root/accessibility
AgeCommit message (Collapse)Author
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>
2023-10-03accessibility: avoid OUString creation by using unicode OUString literalsArnaud Versini
Change-Id: I0f1f8c4e7601c68af607d6c540527e2979520586 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157136 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Tested-by: Mike Kaganski <mike.kaganski@collabora.com>
2023-09-22tdf#146619 Recheck include/c* with IWYUGabor Kelemen
Change-Id: I0cf6f675483bddf82e7347b484a874c71963bfd7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156984 Tested-by: Jenkins Reviewed-by: Gabor Kelemen <kelemeng@ubuntu.com>
2023-09-13loplugin:unusedmethodsNoel Grandin
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-12loplugin:unodispose in accessibilityNoel Grandin
Change-Id: I7e4f464c9130318c8b10d8e00e01ce4b6c05e06a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156840 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-09-11AccessibleListBoxEntry does not need to implement XAggreggationNoel Grandin
Checked on jenkins using 'make check' and +void SAL_CALL setDelegator(css::uno::Reference<css::uno::XInterface> const &) final { assert(false); } Change-Id: I92ec69dfab2aa5eb2acbb9804359853ffc27e565 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156801 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-09-11accessibility::Paragraph does not need to implement XAggreggationNoel Grandin
Checked on jenkins using 'make check' and +void SAL_CALL setDelegator(css::uno::Reference<css::uno::XInterface> const &) final { assert(false); } Change-Id: Ic0e9e3d58792fb21950a66253176eba413861600 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156800 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-09-11VCLXAccessibleList does not need to implement XAggreggationNoel Grandin
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-11AccessibleIconChoiceCtrlEntry does not need to implement XAggreggationNoel Grandin
Checked on jenkins using 'make check' and +void SAL_CALL setDelegator(css::uno::Reference<css::uno::XInterface> const &) final { assert(false); } Change-Id: I80459b404d610847395d2eae4d529a808c53f3d8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156802 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-09-07tdf#157137 a11y: Don't report active descendant when not focusedMichael Weghorn
Since an active descendant is the UI element with keyboard focus, only send an `ACTIVE_DESCENDANT_CHANGED` event in `VCLXAccessibleList` if the listbox/combobox actually has focus, not when the selection changed otherwise, e.g. because the value was changed programmatically because it depends on another UI control (like the paper size in the print dialog depends on the selected printer. Change-Id: I008e742ccf3b81c70832707b2f3a6551827a0706 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156666 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-09-06simplify VclEventId::TabpageRemoved handlingNoel Grandin
Change-Id: I9fe97a8d71fb898c0603ec76f7b86afb19c60654 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156572 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-09-06a11y: Drop unnecessary casting/code for toolbox itemsMichael Weghorn
All (top-level) toolbox items have always been `VCLXAccessibleToolBoxItem` ever since commit f7da8972336b8ce3e0fb71b0c50464508837a5f3 Author: Jens-Heiner Rechtien <hr@openoffice.org> Date: Wed Jun 27 14:41:59 2007 +0000 INTEGRATION: CWS a11ysep (1.1.2); FILE ADDED 2007/02/28 07:29:13 fs 1.1.2.4: #i10000# 2006/10/05 08:20:15 fs 1.1.2.3: MANUAL RESYNC m130->m185: file had been modified in MWS, but moved herein in CWS 2005/09/28 11:35:38 fs 1.1.2.2: manual resync (files have been moved herein from another location): licence change 2005/03/07 08:29:10 fs 1.1.2.1: #i44293# moved implementations herein from toolkit module , so the dynamic_cast to check whether an item is a `OToolBoxWindowItem` is unnecessary and misleading when reading the code. This is even easier to see now after commit af08e6c2f46a6d99b2e18fe176c15ec2b6edb2fd Author: Noel Grandin <noel.grandin@collabora.co.uk> Date: Wed Aug 30 14:02:11 2023 +0200 use concrete type for ToolBoxItemsMap `OToolBoxWindowItem`s are only set as children for the `VCLXAccessibleToolBoxItem`s, s. `VCLXAccessibleToolBox::getAccessibleChild`. Also drop now unused `OToolBoxWindowItem::getIndexInParent` and `OToolBoxWindowItem::setIndexInParent`. Change-Id: I7dcef304942ed25b77918f01cf9b679b6be6e23c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156566 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-09-05use more concrete type in VCLXAccessibleBoxNoel Grandin
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-05use more concrete type in ParagraphInfoNoel Grandin
and avoid some casting Change-Id: I22ff61a028c102b0b8b03b53ac9657af0fbe5acd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156569 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-09-05use more concrete types in AccessibleListBoxEntryNoel Grandin
which means we only need one field, not two Change-Id: I0229348a797d0f01f3d35c46563efed161676efb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156568 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-09-04a11y: Hold list items by rtl::ReferenceMichael Weghorn
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-04a11y: Drop ListItems typdefMichael Weghorn
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-04tdf#157088 a11y: Dispose list items with listMichael Weghorn
Don't only clear, but also dispose the list items when the `VCLXAccessibleList` gets disposed. Interestingly, there was already a comment saying // Dispose all items in the list. , but that wasn't done so far... Fixes a crash on exit with the below backtrace after using the font color toolbox item with the qt6 VCL plugin and Orca running: 1 __pthread_kill_implementation pthread_kill.c 44 0x7fe2a2ea80fc 2 __pthread_kill_internal pthread_kill.c 78 0x7fe2a2ea815f 3 __GI_raise raise.c 26 0x7fe2a2e5a472 4 __GI_abort abort.c 79 0x7fe2a2e444b2 5 __assert_fail_base assert.c 92 0x7fe2a2e443d5 6 __assert_fail assert.c 101 0x7fe2a2e533a2 7 (anonymous namespace)::implLookupClient accessibleeventnotifier.cxx 140 0x7fe2a21138a4 8 comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing accessibleeventnotifier.cxx 185 0x7fe2a2113bb8 9 VCLXAccessibleListItem::disposing vclxaccessiblelistitem.cxx 164 0x7fe26870cb58 10 cppu::WeakAggComponentImplHelperBase::dispose implbase.cxx 230 0x7fe2a1c755e3 11 cppu::WeakAggComponentImplHelperBase::release implbase.cxx 204 0x7fe2a1c75312 12 cppu::WeakAggComponentImplHelper6<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 compbase6.hxx 142 0x7fe26870fc0c 13 com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessible>::~Reference Reference.hxx 114 0x7fe28f2428a7 14 QtAccessibleWidget::~QtAccessibleWidget QtAccessibleWidget.hxx 39 0x7fe28f262cf9 15 QtAccessibleWidget::~QtAccessibleWidget QtAccessibleWidget.hxx 39 0x7fe28f262dd0 16 QAccessibleCache::deleteInterface qaccessiblecache.cpp 173 0x7fe28e0c8e4b 17 QAccessibleCache::~QAccessibleCache qaccessiblecache.cpp 31 0x7fe28e0c845c 18 QAccessibleCache::~QAccessibleCache qaccessiblecache.cpp 32 0x7fe28e0c84e2 19 cleanupAccessibleCache qaccessiblecache.cpp 24 0x7fe28e0c83c8 20 qt_call_post_routines qcoreapplication.cpp 327 0x7fe28e9a4593 21 QApplication::~QApplication qapplication.cpp 663 0x7fe28cf9dff6 22 QApplication::~QApplication qapplication.cpp 717 0x7fe28cf9e2f4 23 std::default_delete<QApplication>::operator() unique_ptr.h 99 0x7fe28f2cf3ae 24 std::__uniq_ptr_impl<QApplication, std::default_delete<QApplication>>::reset unique_ptr.h 211 0x7fe28f2cf7f6 25 std::unique_ptr<QApplication, std::default_delete<QApplication>>::reset unique_ptr.h 509 0x7fe28f2cd72d 26 QtInstance::~QtInstance QtInstance.cxx 273 0x7fe28f2c614f 27 QtInstance::~QtInstance QtInstance.cxx 274 0x7fe28f2c6226 28 DestroySalInstance salplug.cxx 389 0x7fe299a62611 29 DeInitVCL svmain.cxx 600 0x7fe299b41226 30 ImplSVMain svmain.cxx 229 0x7fe299b3f9f7 31 SVMain svmain.cxx 236 0x7fe299b3fa53 32 soffice_main sofficemain.cxx 94 0x7fe2a30a1b5d 33 sal_main main.c 51 0x55c86565c9d4 34 main main.c 49 0x55c86565c9ba Change-Id: I42ddcf5501ddfb363aeae10a86f1c38251e6793b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156522 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-09-04tdf#157088 a11y: No need to use WeakReference for list childrenMichael Weghorn
`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-01accessibility: fix crash in getAccessibleActionDescriptionXisco Fauli
See https://crashreport.libreoffice.org/stats/signature/SvTreeListEntry::HasChildren() Change-Id: I21879ad531a5c61b3a6808c373454522557e2ff9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156403 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-09-01tdf#104833 a11y Send name changed event for text controlsMichael Weghorn
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-01tdf#104833 a11y: Use VCLXAccessibleEdit for VCLXMultiLineEditMichael Weghorn
Instead of the generic `VCLXAccessibleComponent`, use `VCLXAccessibleEdit` as a11y class for `VCLXMultiLineEdit` (the component interface class for MultiLineEdit) as well, not just for `VCLXEdit`. With the preparatory changes from Change-Id I8218db61feb07605f6ea5309f26eebd38312458a tdf#104833 a11y: Don't use VCLXEdit in VCLXAccessibleEdit in place, it behaves as expected when interacting with the multi line edit from the sample dialog in attachment 189287 in tdf#104833 using Accerciser and the qt6 or gtk3 VCL plugin (and the text can also be edited when removing the readonly flag from the control) or the update dialog (which uses UNO controls, `UnoControlEditModel` for the panes that were not announced, s. extensions/source/update/check/updatehdl.cxx ). In particular, the a11y text interface is supported by the multi line edit on the a11y layer, which makes Orca with the gtk3 VCL plugin announce the text content when the control gets focused. NVDA on Windows still announces "Checking..." instead of using the actual text that would be retrievable via the IAccessibleText interface now. This is probably because "Checking..." is the (outdated) accessible name, as can be seen by interacting with the object in NVDA's Python console: >>> focus.name 'Checking...' >>> txt = focus.IAccessibleTextObject >>> txt.text(0, txt.nCharacters) 'LibreOfficeDev 24.2 is up to date.' For both, gtk3 and qt6, the a11y object does have the new text as a11y name as well, as can be verified in Accerciser: In [10]: acc.name Out[10]: 'LibreOfficeDev 24.2 is up to date.' In [11]: txt = acc.queryText() In [12]: txt.getTextAtOffset(0,3) Out[12]: ('LibreOfficeDev 24.2 is up to date.', 0, 34) Change-Id: Id80e191cdd5342b3215fdb9d2ad3847470366337 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156402 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-09-01tdf#104833 a11y: Don't use VCLXEdit in VCLXAccessibleEditMichael Weghorn
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-08-31a11y: Re-add check for empty reference in VCLXAccessibleTabControlMichael Weghorn
It got lost with commit a3f77a61c03340b79930e89d5c4045d814b93edf Date: Wed Aug 30 14:43:18 2023 +0200 use concrete type for VCLXAccessibleTabControl::m_aAccessibleChildren and resulted in a crash when e.g. doing the following with the qt6 VCL plugin on Linux: 1) open attachment 189287 from tdf#104833 2) "Tools" -> "Macros" -> "Organize Dialogs" 3) select the dialog from the doc 4) select "Edit" Change-Id: I2c4aea951976738c575943a64d01eaac2766fdd1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156343 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-08-31use concrete type for AccessibleTabBarPageList::m_aAccessibleChildrenNoel Grandin
avoid some unnecessary casting Change-Id: Ib8bddff9fe91afd192584fa1ad2728d0701f425a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156316 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-08-31use concrete type for OAccessibleMenuBaseComponent::m_aAccessibleChildrenNoel Grandin
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-31use concrete type for VCLXAccessibleStatusBar::m_aAccessibleChildrenNoel Grandin
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-30use concrete type for VCLXAccessibleTabControl::m_aAccessibleChildrenNoel Grandin
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-30use concrete type for ToolBoxItemsMapNoel Grandin
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-30make IAccessibleBrowseBox extend cppu::WeakImplHelperNoel Grandin
i.e. push this up from the implementation class AccessibleBrowseBoxAccess to the interface class. Which means we don't need the getMyself helper method, and make the memory management simpler. Change-Id: Icecb83834bb3f5304908bbd3682b3d2ea06dbfe0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156285 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-08-30make IAccessibleTableControl extend cppu::WeakImplHelperNoel Grandin
i.e. push this up from the implementation class AccessibleGridControlAccess to the interface class. Which means we don't need the getMyself helper method, and make the memory management simpler. Change-Id: Iced5f259638531a74ce86876d1a295e105530474 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156284 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-08-30a11y: Hold focused list box entry by rtl::ReferenceMichael Weghorn
Use an `rtl::Reference<AccessibleListBoxEntry>` for the currently focused entry instead of using a `css::uno::Reference<css::accessibility::XAccessible>` and casting almost every time that it's used. Change-Id: Ia3aeca18e61d82b127bf19dd0902d781168b93d0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156281 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-08-23tdf#99609 tdf#156473 a11y: Check whether row header existsMichael Weghorn
Don't allow using `BBINDEX_ROWHEADERBAR` as the child index unconditionally, but only if the browse box actually has a row header. An `AccessibleTabListBox` doesn't have a header and instead returns the table when requesting the child at index 1 (`BBINDEX_ROWHEADERBAR`). Now that row headers are propagated to the Windows platform accessibility layer with commit 2b30d37bd555188733a006e1a5796461ab11d326 Date: Thu Aug 3 15:48:48 2023 +0100 tdf#156473 wina11y: Fix invalid write due to row/col mismatch in place, NVDA confusingly started announcing all cells in the currently selected row as row headers for the currently selected cell in the Expert Configuration dialog, because of the table being returned without this change in place (while the cells in that table don't actually have any row headers). Related backtrace of how the table was returned for the row headers: 1 accessibility::AccessibleTabListBox::getAccessibleChild accessibletablistbox.cxx 90 0x7fffb8ab64bb 2 accessibility::AccessibleBrowseBoxTable::implGetHeaderBar AccessibleBrowseBoxTable.cxx 214 0x7fffb8a7e241 3 accessibility::AccessibleBrowseBoxTable::getAccessibleRowHeaders AccessibleBrowseBoxTable.cxx 116 0x7fffb8a7da02 4 QtAccessibleWidget::rowHeaderCells QtAccessibleWidget.cxx 1808 0x7fffe3e51e97 5 AtSpiAdaptor::tableCellInterface atspiadaptor.cpp 2801 0x7fffe2cee526 6 AtSpiAdaptor::handleMessage atspiadaptor.cpp 1450 0x7fffe2cde6ee 7 QDBusConnectionPrivate::activateObject qdbusintegrator.cpp 1416 0x7fffe14cc216 8 QDBusActivateObjectEvent::placeMetaCall qdbusintegrator.cpp 1572 0x7fffe14cceba 9 QObject::event qobject.cpp 1438 0x7fffe3621280 10 QApplicationPrivate::notify_helper qapplication.cpp 3287 0x7fffe1ba2414 11 QApplication::notify qapplication.cpp 3238 0x7fffe1ba2224 12 QCoreApplication::notifyInternal2 qcoreapplication.cpp 1123 0x7fffe35a3c34 13 QCoreApplication::sendEvent qcoreapplication.cpp 1557 0x7fffe35a46f5 14 QCoreApplicationPrivate::sendPostedEvents qcoreapplication.cpp 1924 0x7fffe35a55b2 15 QCoreApplication::sendPostedEvents qcoreapplication.cpp 1781 0x7fffe35a4eba 16 postEventSourceDispatch qeventdispatcher_glib.cpp 240 0x7fffe39b26d3 17 ?? 0x7fffe97135b4 18 ?? 0x7fffe9716607 19 g_main_context_iteration 0x7fffe9716bfc 20 QEventDispatcherGlib::processEvents qeventdispatcher_glib.cpp 390 0x7fffe39b2f67 ... <More> Also add an assert that `AccessibleBrowseBoxTable::implGetHeaderBar` only gets called with indices for row/col header, not arbitrary integers. Change-Id: Id7ebab9bfa8a7f05cb43da1bf5756e5980f4ed20 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156012 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>