Age | Commit message (Collapse) | Author |
|
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>
|
|
`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>
|
|
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
|
|
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
|
|
`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>
|
|
`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>
|
|
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>
|
|
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>
|
|
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>
|
|
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
|
|
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
|
|
... 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
|
|
Change-Id: Ic020b1cd36abe2c568a119dfd400c718dc9de452
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166989
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
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>
|
|
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>
|
|
Change-Id: I13946bb4a991dceeb26a0a9364f6067397b94001
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167197
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: I8a15be14850b9fe48f80820f4308c35748497727
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167034
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
|
|
Change-Id: Iff3e6af9627aa5d31b00ad48bc6c6ea8d3913fe9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166927
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
|
|
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
|
|
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
|
|
Change-Id: I92662f0577c0f90ec0dc5eba1b685fbb7ac3da39
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165530
Tested-by: Jenkins
Reviewed-by: Gabor Kelemen <gabor.kelemen.extern@allotropia.de>
|
|
Change-Id: I82b7dd9b0cdf379c710870a295c8f33ed9fff681
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165437
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
`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>
|
|
* 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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
Change-Id: I14ee125874b6f0f1ff5406a3eafea0b19df1a7f2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162082
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
|
|
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>
|
|
Change-Id: I1b5aa26e92c6e5eaef43bd1c03281d4068b0487a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161175
Tested-by: Jenkins
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
|
|
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>
|
|
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>
|
|
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>
|
|
(*) 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>
|
|
`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>
|
|
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>
|
|
`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>
|
|
...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>
|
|
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>
|
|
...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>
|
|
Change-Id: Ic21ff7bf48f07f7277979d52e99d2c5c268de83f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157825
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
|