summaryrefslogtreecommitdiff
path: root/accessibility
AgeCommit message (Collapse)Author
2024-12-17a11y: Merge accessibility module into vclMichael Weghorn
Now that the accessibility module no longer depends on toolkit and svtools and there's therefore no more cyclic dependency, merge it into the vcl library, where the vcl widgets are located, for which the classes in the accessibility module (primarily) provide the a11y classes. Initially, take over the existing UNO service "com.sun.star.accessibility.comp.GetStandardAccessibleFactoryService" to vcl as is. It used to be necessary to break the cyclic dependency between the vcl, svtools, toolkit and accessibility module. (vcl is the lowest and accessibility used to be furthest up in the dependency chain; yet vcl needed it to create the objects providing the XAccessible/XAccessibleContext for its widgets.) Further simplification can happen in upcoming commits. Change-Id: Ib46c87446dc9121d3b8e735e0e5a40594da73cc5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178647 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-17a11y: Merge toolkit::IAccessibleFactory into vcl oneMichael Weghorn
toolkit::IAccessibleFactory and vcl::IAccessibleFactory are abstract classes providing methods to retrieve the XAccessible or XAccessibleContext for different vcl widgets. Both are implemented by the same class in the accessibility module: AccessibleFactory Merge toolkit::IAccessibleFactory into vcl::IAccessibleFactory to have things in one place, and have everything in vcl, i.e. no longer part of it in toolkit that itself depends on vcl. Change-Id: I5da571899c9987267cbec2950630d0c44ff4d2f7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178643 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-16a11y: Move TabBar a11y classses to svtools, no longer use factoryMichael Weghorn
Move AccessibleTabBar and related classes to implement accessibility for the TabBar control to svtools, where the TabBar code is also located. (This matches how it's organized for the Ruler control whose a11y class AccessibleRuler is also in svtools.) This removes the last dependency of the accessibility module on svtools, so drop that from accessibility/Library_acc.mk. Instead of using the AccessibleFactory to create an instance in TabBar::CreateAccessible, just call the AccessibleTabBar ctor directly. Change-Id: Id6a8852de930ffe7fe7509f84f33861d274120dd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178588 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-16a11y: Drop unnecessary #ifndef checkMichael Weghorn
`ACCESSIBILITY_EXT_ACCESSIBLETABBARPAGELIST` isn't defined anywhere, so this check doesn't make any difference. Change-Id: I4f9c2ec1f7893158c4a9780acfa8d442924db6d0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178587 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-16a11y: Drop special menu/toolbar handling in AccessibleFactoryMichael Weghorn
IIUC, this code path should never be reached: The accessible for menu and menu floating windows gets created in Menu::CreateAccessible. The menu floating window reuses the Menu's accessible and if the code path dropped in this commit was ever reached for menu floating windows, it would be problematic, see the commit messsage of commit b608604d0bbecdc24a17175374581b4e2d720658 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Thu Dec 5 14:07:52 2024 +0000 tdf#164093 tdf#157001 wina11y: Use vcl::Window's actual XAccessible for more details. Implementation for floating toolbar windows to have a null XAccessible is implemented in ImplPopupFloatWin::CreateAccessible, so that case also shouldn't get here (where a null XAccessibleContext would have been returned). Change-Id: Ie9a55b4120a6857e9cac534fa2bdfd3a0cf7d9c9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178584 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-14cid#1636693 COPY_INSTEAD_OF_MOVECaolán McNamara
Change-Id: I0122df11e30fb4f083d4183a450b00a0b2adca72 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178450 Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com> Tested-by: Jenkins
2024-12-13a11y: Port from svtools to vcl clipboard helperMichael Weghorn
Switch from using svt::OStringTransfer::CopyString to vcl::unohelper::TextDataObject::CopyStringTo to copy a string to the clipboard, to avoid a dependency on the svtools library for this task. Change-Id: I5226c28b5519d4fc020f45d7967b9ad15aab0dae Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178438 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-13a11y: Make TabBar a11y independent of HAVE_FEATURE_SCRIPTINGMichael Weghorn
Build the code for the TabBar a11y classes independent of whether or not the scripting feature is enabled. Otherwise, e.g. the tab bar showing sheets in Calc is inaccessible in a `--disable-scripting` build, i.e. it e.g. doesn't show up in Accerciser. It was made conditional on HAVE_FEATURE_SCRIPTING in commit fb308c193bc9f0d07ad2cccd5a0b239f86cbe442 Date: Wed May 19 12:16:42 2021 +0200 Fix --disable-scripting for DESKTOP build , which doesn't give any explicit reason, so my assumption is that it had some dependency relying on that feature being enabled back then. At least a local `--disable-scripting` build of mine works fine with this enabled again now, so let's assume whatever was the problem back then is solved by now. Change-Id: I6ee2ea6823aaa30bf597678c2b3ee86b42111920 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178437 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-13a11y: No longer let accessibility module depend on toolkitMichael Weghorn
In the AccessibleBrowseBox ctor, no longer use the VCLUnoHelper::GetInterface helper from the toolkit module, but do the same inline. (Assigning to AccessibleBrowseBoxBase::m_xFocusWindow after the AccessibleBrowseBoxBase base class ctor has been called looks a little odd to me as that one would add a focus listener for that window if already set/passed when called - but leave the logic unchanged for now.) With this, Library_acc no longer depends on the toolkit module, so drop the dependency from the make file. Change-Id: I8e7759c2d92a344bef51d154df0045c78f0471fe Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178435 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-13a11y: Move VCLXAccessibleComponent from toolkit to vclMichael Weghorn
After commit 168512dce7f1f1453c045584d47bd78a0a6c73f7 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Thu Dec 12 18:06:13 2024 +0100 a11y: Stop using VCLXWindow in vcl a11y classes and further related commits, VCLXAccessibleComponent no longer depends on anything in the toolkit module, so move it from there to vcl. This way, subclassing VCLXAccessibleComponent (as the a11y classes for vcl widgets do, currently located in accessibility/ ) no longer introduces a toolkit dependency. Change-Id: I4fd33fb1dc2265d75e8ca9ad87bcc70db61639d3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178434 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-13a11y: Drop always null BrowseBoxAccessibleElement focus win paramMichael Weghorn
Drop the `_xFocusWindow` param from the BrowseBoxAccessibleElement ctor. Both subclasses are unconditionally passing nullptr. Just unconditionally pass nullptr in the base class ctor instead of forwarding the (always nullptr) param. Change-Id: I9296ae8dae8ac53c52cec99e143288e70a586ce0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178432 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-13a11y: Drop always null AccessibleBrowseBoxHeaderCell focus win paramMichael Weghorn
Both callers of AccessibleFactory::createAccessibleCheckBoxCell (in SvHeaderTabListBox::CreateAccessibleColumnHeader) unconditionally pass nullptr for the `_xFocusWindow` param. Therefore, drop the parameter from that method and the AccessibleBrowseBoxHeaderCell ctor, and unconditionally pass nullptr to the base class ctor. This is basically the same as for AccessibleBrowseBoxTableCell in previous commit Change-Id: I22d5cb98332aa5d89fc4c479d0ec29588fe83e4d Author: Michael Weghorn <m.weghorn@posteo.de> Date: Fri Dec 13 12:37:03 2024 +0100 a11y: Drop always null AccessibleBrowseBoxTableCell focus win param Change-Id: Ife57d0163f1c99407e08875ba98725ea114597cb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178418 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-13a11y: Drop always null AccessibleCheckBoxCell focus win paramMichael Weghorn
Both callers of AccessibleFactory::createAccessibleCheckBoxCell unconditionally pass nullptr for the `_xFocusWindow` param. Therefore, drop the parameter from that method and the AccessibleCheckBoxCell ctor, and unconditionally pass nullptr to the base class ctor. This is the same as for AccessibleBrowseBoxTableCell in previous commit Change-Id: I22d5cb98332aa5d89fc4c479d0ec29588fe83e4d Author: Michael Weghorn <m.weghorn@posteo.de> Date: Fri Dec 13 12:37:03 2024 +0100 a11y: Drop always null AccessibleBrowseBoxTableCell focus win param Change-Id: I76660aed909fc73ab19bc99a3e3bfb54176e7e10 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178417 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-13a11y: Drop always null AccessibleBrowseBoxTableCell focus win paramMichael Weghorn
Both callers of AccessibleFactory::createAccessibleBrowseBoxTableCell unconditionally pass nullptr for the `_xFocusWindow` param. Therefore, drop the parameter from that method and the AccessibleBrowseBoxTableCell ctor, and unconditionally pass nullptr to the base class ctor. Change-Id: I22d5cb98332aa5d89fc4c479d0ec29588fe83e4d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178416 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-13a11y: Use delegating ctor in AccessibleBrowseBoxBaseMichael Weghorn
... and pass the Reference params by const ref, as suggested by loplugin:passparamsbyref. Change-Id: I7f0e153d901f451d47d6a9b94255dd41f89c7d0a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178408 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-13a11y: Drop unused includesMichael Weghorn
Change-Id: I99d087f820cc8195de525889b8d766304ef18396 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178407 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-13a11y: Report font slant (italic) in IDE editor with correct typeMichael Weghorn
Use the existing vcl::unohelper::ConvertFontSlant helper to convert the FontItalic enum value to the corresponding FontSlant instead of casting to an integer. The latter would trigger an assertion when trying to extract a FontSlant from the Any later, seen e.g. with the qt6 VCL plugin when navigating to the paragraphs in the "Tools" > "Macros" > "Edit Macros" dialog in Accerciser, or when moving navigating through the text while Orca is active. Backtrace: 1 __pthread_kill_implementation pthread_kill.c 44 0x7ffff789dc8c 2 __pthread_kill_internal pthread_kill.c 78 0x7ffff789dcef 3 __GI_raise raise.c 26 0x7ffff7849c42 4 __GI_abort abort.c 79 0x7ffff78324f0 5 ?? 0x7ffff74a1a3d 6 ?? 0x7ffff74b300a 7 std::terminate() 0x7ffff74a15e9 8 __cxa_throw 0x7ffff74b3288 9 o3tl::doAccess<com::sun::star::awt::FontSlant> any.hxx 284 0x7fffee23ea99 10 ConvertUnoToIAccessible2TextAttributes AccessibleTextAttributeHelper.cxx 288 0x7fffee23bd8e 11 AccessibleTextAttributeHelper::GetIAccessible2TextAttributes AccessibleTextAttributeHelper.cxx 347 0x7fffee23b45e 12 QtAccessibleWidget::attributes QtAccessibleWidget.cxx 1001 0x7fffe4685866 13 non-virtual thunk to QtAccessibleWidget::attributes(int, int *, int *) const 0x7fffe4685bca 14 AtSpiAdaptor::getAttributes atspiadaptor.cpp 2329 0x7fffe2d15b79 15 AtSpiAdaptor::textInterface atspiadaptor.cpp 1990 0x7fffe2d0c3ed 16 AtSpiAdaptor::handleMessage atspiadaptor.cpp 1481 0x7fffe2d067f8 17 QDBusConnectionPrivate::activateObject qdbusintegrator.cpp 1448 0x7fffe046d567 18 QDBusActivateObjectEvent::placeMetaCall qdbusintegrator.cpp 1604 0x7fffe046e520 19 QObject::event qobject.cpp 1432 0x7fffe3908d70 20 QApplicationPrivate::notify_helper qapplication.cpp 3297 0x7fffe17e2d90 21 QApplication::notify qapplication.cpp 3247 0x7fffe17e6cad 22 QCoreApplication::notifyInternal2 qcoreapplication.cpp 1122 0x7fffe3845c99 23 QCoreApplication::sendEvent qcoreapplication.cpp 1564 0x7fffe3846a79 24 QCoreApplicationPrivate::sendPostedEvents qcoreapplication.cpp 1920 0x7fffe38483b8 25 QCoreApplication::sendPostedEvents qcoreapplication.cpp 1751 0x7fffe38468bc 26 postEventSourceDispatch qeventdispatcher_glib.cpp 246 0x7fffe3e39281 27 ?? 0x7fffea10b81f 28 ?? 0x7fffea10da57 29 g_main_context_iteration 0x7fffea10e1c0 30 QEventDispatcherGlib::processEvents qeventdispatcher_glib.cpp 399 0x7fffe3e3847b 31 QPAEventDispatcherGlib::processEvents qeventdispatcher_glib.cpp 89 0x7fffe2f67218 32 QtInstance::ImplYield QtInstance.cxx 464 0x7fffe472d3c2 33 QtInstance::DoYield QtInstance.cxx 475 0x7fffe4730441 34 ImplYield svapp.cxx 385 0x7fffeed3c9d6 35 Application::Yield svapp.cxx 473 0x7fffeed3c36f 36 Application::Execute svapp.cxx 360 0x7fffeed3c150 37 desktop::Desktop::Main app.cxx 1679 0x7ffff7b2788b 38 ImplSVMain svmain.cxx 228 0x7fffeed5e2a6 39 SVMain svmain.cxx 246 0x7fffeed5fe99 40 soffice_main sofficemain.cxx 121 0x7ffff7ba11ba 41 sal_main main.c 51 0x555555555a6d 42 main main.c 49 0x555555555a47 Change-Id: Id30fc0acf20af5213c025a337765bb638ab6b02c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178404 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-13a11y: Pass vcl::Window instead of VCLXWindow for TextWindow a11yMichael Weghorn
As was done for the other a11y classes subclassing VCLXAccessibleComponent in commit 168512dce7f1f1453c045584d47bd78a0a6c73f7 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Thu Dec 12 18:06:13 2024 +0100 a11y: Stop using VCLXWindow in vcl a11y classes , also pass the vcl::Window when creating an XAccessibleContext for a TextView, to get rid of the UNO/toolkit dependency. Change-Id: I3c5febd27a53fe17f83cc4e95dd7466f11a7a225 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178403 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-13a11y: Get text window doc accessible from Window on demandMichael Weghorn
Instead of storing a reference to the VCLXWindow (which is a TextWindowPeer), which is the EditorWindow's accessible as Document::m_xAccessible member, adjust Document::getAccessible to get the accessible on demand via vcl::Window::GetAccessible instead. This also prepares for no more passing the VCLXWindow to the ctor in an upcoming commit. Change-Id: I498f90a456eda453508a4f1ed84983006594ea86 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178402 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-12a11y: Stop using VCLXWindow in vcl a11y classesMichael Weghorn
Adjust VCLXAccessibleComponent and subclasses to take a vcl::Window arg instead of a VCLXWindow in the ctor and drop the VCLXAccessibleComponent::m_xVCLXWindow member that used to hold a reference to the VCLXWindow. (VCLXAccessibleComponent still holds a VclPtr to the corresponding vcl::Window.) Instead of passing the UNO/toolkit peer (VCLXWindow and subclasses) to the AccessibleFactory to create an XAccessibleContext context for the underlying VCL widget, pass the underlying vcl widget, which can now be passed as is to the corresponding ctors of VCLXAccessibleComponent and specialized subclasses. This follows earlier commits replacing the use of the VCLXWindow classes by direct uses of the vcl::Window subclasses inside VCLXAccessibleComponent and subclasses and is the next step in reducing the UNO/toolkit dependency in the accessibility implementation for vcl widgets. For now, the logic where those accessible objects are created remains in VCLXWindow::CreateAccessibleContext and overrides, but that can change in the future. `IAccessibleFactory::createAccessibleContext(VCLXMultiLineEdit*)` is just dropped and doesn't need its own replacement: The previous VCLXMultiLineEdit variant was creating a VCLXAccessibleEdit like the variant taking a VCLXEdit, but VCLXMultiLineEdit doesn't subclass VCLXEdit. The vcl MultiLineEdit however subclasses Edit, so VCLXMultiLineEdit::CreateAccessibleContext can make use of `IAccessibleFactory::createAccessibleContext(Edit*)` as well now. This also implements what was mentioned in earlier commit Change-Id: I67bb7a6a237e57d0c522790c09a595c02ac06325 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Thu Dec 12 17:16:29 2024 +0100 sw annotation win a11y: Skip VCLXWindow logic : > Drop the comment about the code being dodgy from > SwAnnotationWin::CreateAccessible. This commit partially > addresses it and switching VCLXAccessibleComponent > to using the vcl::Window will take care of the rest, > see upcoming commit > Change-Id If0894e733273eecad268c6a932ecee7c2e34b4c2 > ("a11y: Stop using VCLXWindow in vcl a11y classes"). Now that the VCLXAccessibleComponent ctor takes a vcl::Window, the sw::annotation::SwAnnotationWin can be passed directly. From a user perspective, no change in behavior is intended by this commit. Change-Id: If0894e733273eecad268c6a932ecee7c2e34b4c2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178385 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-12a11y: Pass non-const ref to AccessibleListBox ctorMichael Weghorn
... and to the AccessibleIconView subclass one, too. This is in preparation of switching the base class VCLXAccessibleComponent ctor to taking a vcl::Window* instead of a VCLXWindow* in an upcoming commit. Change-Id: I10074f4c6716c2c7cb3b800c75bec8200ee6208c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178366 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-12a11y: Pass non-const ref in AccessibleIconChoiceCtrl ctorMichael Weghorn
Pass a non-const SvtIconChoiceCtrl& instead of a const one, in preparation of switching the base class VCLXAccessibleComponent ctor to taking a vcl::Window* instead of a VCLXWindow* in an upcoming commit. Change-Id: Ib2fd0efeb897c8f375309b00946a89dd2f8fd097 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178365 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-12a11y: Return early in AccessibleFactory::createAccessibleContextMichael Weghorn
... if `pWindow` is null. (`git show --ignore-space-change` shows the "actual change" more clearly.) Change-Id: I39685d0a51ee9a5a280d302c940b2cdbc21c2b6e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178322 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-10a11y: Directly use vcl ScrollBar in VCLXAccessibleScrollBarMichael Weghorn
... instead of using the toolkit/UNO wrapper class VCLXScrollBar. WIP: simplify Change-Id: I9df8efb514d2bcf555bd163a7fe418c5c8d9e903 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178241 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-10a11y: Extract a VCLXAccessibleScrollBar::GetOrientationState helperMichael Weghorn
See also VCLXScrollBar::getOrientation which uses the same logic and was called earlier. This is in preparation of using the vcl ScrollBar directly instead of depending on its VCLXScrollbar toolkit/UNO peer. Change-Id: Ie2a1a104c69d56036890e995fc97849d5acc137a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178240 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-10a11y: Directly use vcl RadioButton in VCLXAccessibleRadioButtonMichael Weghorn
... instead of using the toolkit/UNO wrapper class VCLXRadioButton. While at it, also switch the single use of VCLXAccessibleComponent::GetAsDynamic to VCLXAccessibleComponent::GetAs, too, as the control is known to be a RadioButton. Change-Id: I9d26e0ca165c8df16095a3bc460907567c04ccd0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178239 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-07Use std::initializer_list, C-style array instead of more expensive SequenceMike Kaganski
Change-Id: Ibb268268926cc91f595f19026f6cee4b5a74a8bc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178038 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2024-12-07Simplify AccessibleGridControlTableBaseMike Kaganski
Change-Id: If4b8379f676a1a412eed6d79bf6b5382d3c726b0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178030 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2024-12-07Simplify GridControlAccessibleElementMike Kaganski
Change-Id: I1509ca337b5864805132a87dab2627df721091db Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178029 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2024-12-07Simplify AccessibleBrowseBoxTableBaseMike Kaganski
Change-Id: I8af6ac72923aa823db356769153790ae9d7752a7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178028 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Tested-by: Jenkins
2024-12-07Simplify BrowseBoxAccessibleElementMike Kaganski
Change-Id: Ic8322090d38d58475c4c946e1f850950bce7421a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178027 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Tested-by: Jenkins
2024-12-04a11y: Use vcl CheckBox directly in VCLXAccessibleCheckBoxMichael Weghorn
... instead of using the toolkit/UNO wrapper class VCLXCheckBox. Change-Id: I271535f3e2e46202e2ca3d2e3f9a1d05ac380c41 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177815 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-04a11y: Use FormattedField directly in SVTXAccessibleNumericFieldMichael Weghorn
... instead of using the toolkit/UNO wrapper SVTXNumericField. Change-Id: I86e274a06f210e2076e287087a1d4b979abe7c35 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177814 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-04a11y: Use vcl::Window instead of VCLXWindow right awayMichael Weghorn
Use the vcl::Window for the null check instead of the corresponding VCLXWindow. There's no need to use a toolkit class here, in particular since the vcl::Window is used later anyway. Change-Id: Ia2c80f9634eadf33601af8c9ea1f628e7ea3e96b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177813 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-04a11y: Move menu a11y classes to vcl, no more use factoryMichael Weghorn
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-04Move helpers for css::awt/VCL point/rect/size to vcl::unohelperMichael Weghorn
Move helpers to convert between the Rectangle, Point and Size classes in vcl and in css::awt from VCLUnoHelper (in the toolkit module) to vcl::unohelper (in the vcl module), for reuse in vcl in upcoming commits. Change-Id: I7b11c8a6b8c843a01ce25b1e4c0fb1869ad1e6ee Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177816 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-04a11y: Move action string header to vclMichael Weghorn
... so these constants can be reused in vcl. See commit message of Change-Id: I6aeee104f271c804c85727002822b89a9263628f Author: Michael Weghorn <m.weghorn@posteo.de> Date: Wed Dec 4 11:45:44 2024 +0100 a11y: Move CharacterAttributeshelper from accessibility to vcl for motivation. Change-Id: I1552c0a0111c81643ab9bb6f202c8a31662251d9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177811 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-04a11y: Move CharacterAttributeshelper from accessibility to vclMichael Weghorn
This is in preparation of moving more from the accessibility module to vcl. Currently, the a11y implementations for vcl widgets are implemented in the accessibility module (in directory of the same name), which in turn depends on the toolkit module. To break the dependency cycle (vcl needs accessibility to create a11y objects for its widgets), there's a UNO service. At least some a11y classes don't really need toolkit, however, so the plan is to decouple this and move those from the accessibility module into vcl in upcoming commits. Change-Id: I6aeee104f271c804c85727002822b89a9263628f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177810 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-04[API CHANGE] a11y: Drop XAccessibleExtendedComponent::getFontMichael Weghorn
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-04toolkit: Pass VCLXFont init args in ctorMichael Weghorn
Pass arguments right away in ctor rather than having a ctor that takes no arguments and then having to call VCLXFont::Init with the arguments right after calling the ctor. Change-Id: I651e27154499f61638409377438f9589bc7412a3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177795 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-11-26a11y: Handle combobox subedit a11y name in VCLXAccessibleEditMichael Weghorn
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-26a11y: Drop misleading commentMichael Weghorn
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-26a11y: Create VCLXAccessibleEdit::isComboBoxChild helperMichael Weghorn
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-26a11y: Drop VCLXAccessibleComponent::supportsService overridesMichael Weghorn
Like the base class implementation, they call cppu::supportsService, so there's no need to override the former. Change-Id: I6550edce0567502a411cac402923c2c02e02f58d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177311 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-11-25a11y: Move identical implementations to base classMichael Weghorn
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-21Related: cid#1364016 Missing move assignment operatorCaolán McNamara
Change-Id: I186718f4e74ca3a77d92a62358d6007a1f6fd7fe Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176903 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-11-14tdf#163486: PVS: simplify expressionXisco Fauli
V728 An excessive check can be simplified. The '(A && !B) || (!A && B)' expression is equivalent to the 'bool(A) != bool(B)' expression. Change-Id: I31edbbc7ce3b10085c5f1404e74485ea180ddec3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176577 Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org> Tested-by: Jenkins
2024-11-10com::sun::star -> cssMike Kaganski
Change-Id: I890ec73e30d3cc6b210903ecee29431f3cb5f635 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175979 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2024-11-07[API CHANGE] a11y: Switch AccessibleRelationType to enumMichael Weghorn
Switch css::accessibility::AccessibleRelationType from integer constants to an enum. This provides more type safety and improves the debugging experience, e.g. GDB now prints com::sun::star::accessibility::AccessibleRelationType::AccessibleRelationType_CONTENT_FLOWS_TO instead of just "2" when printing the value of a corresponding variable, so it's no longer necessary to manually look up what constant has that integer value to know what relation this refers to. offapi/com/sun/star/accessibility/AccessibleRelationType.idl had this comment: > <p>We are using constants instead of a more typesafe enum. The reason > for this is that IDL enums may not be extended. Therefore, in order to > include future extensions to the set of roles we have to use constants > here.</p> However, the a11y UNO API is internal (not published), so that shouldn't be a concern. Change-Id: I44a7d56cb085dc24effb24fcd34bb222b78ef4cd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176153 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-10-31tdf#163697: avoid premature handling of following notificationsMike Kaganski
This avoids re-entry to Document::handleParagraphNotifications, which already was known to be problematic (see comments in Document::Notify, and m_bSelectionChangedNotification introduced to avoid one such case). Change-Id: I9e0b451f13ad109d08b1afc9cc0346cd6049b026 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175879 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Tested-by: Jenkins