Commit Graph
2719 Commits
Author SHA1 Message Date
anish.deshpande 7d384d6310 tdf#114441 change use of sal_uLong to better integer types in toolkit
nPageID is referenced as sal_uInt16 in TabControl::SelectTabPage.

Change-Id: I11e518a0c9be5eecb9e8b2472f4df356da5a93e3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164330
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-03-22 11:12:35 +01:00
RMZeroFour db3b31c433 tdf#145614 Convert GCM_PROPERTY_ID #defines to enum
As part of the efforts in #145614 to replace older parts of the
codebase using #defined constants with enums, this turns the
GCM_PROPERTY_ID_* values into an unscoped enum.

Change-Id: Iafb9960b87fcd12f6596578866856fabed8ecd04
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164942
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-03-18 09:52:28 +01:00
Noel Grandin 1af510e951 Create an UNO service to do the symbol lookup in toolkit::AccessibilityClient
which means I can remove one usage of gb_Library_set_plugin_for, which is blocking linking the accessibility module into --enable-mergelibs=more

Change-Id: I8664ae1d2da4526cc7eab79b36e1589eb391d7c4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163680
Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-02-29 14:41:48 +01:00
Michael Weghorn 9c64ae31a7 tdf#159735 a11y: Dispose win accessible with VCLXWindow
`Window::dispose` takes care of disposing its
accessible as well.

However, `VCLXWindow::dispose` was explicitly unsetting
the accessible before disposing its `vcl::Window`, resulting
in it not getting disposed, in turn resulting in a crash on exit
for the tdf#159735 case.

Potentially related:

    commit 5aa60be574
    Date:   Wed May 12 11:33:06 2021 +0200

        fix leak in VCLXWindow

        which is a little tricky because dispose() can be called from either
        side (vcl::Window or VCLXWindow)

Before that commit, setting a nullptr accessible happened
in the `VCLXWindow` dtor, which is meant to get called after
the `vcl::Window` got disposed in `VCLXWindow::dispose`.
(In the Linux bibisect repo, the commit before that one is fine
and at that commit, the tdf#159735 comment 5 scenario even
crashes in step 3 already.)

Don't unset the `vcl::Window`'s accessible any more in
`VCLXWindow::dispose`, but do that after disposing it in
`vcl::Window::dispose` instead, which seems to be the
natural place to do that anyway.

Backtrace of crash:

    Thread 1 received signal SIGSEGV, Segmentation fault.
    0x00007fd754ae6fe9 in comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>::disposeAndClear (this=0x7ffccdc2b5b8, rGuard=..., rEvt=...) at include/comphelper/interfacecontainer4.hxx:397
    397                     aIt.next()->disposing(rEvt);
    (gdb) bt
    #0  0x00007fd754ae6fe9 in comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>::disposeAndClear(std::unique_lock<std::mutex>&, com::sun::star::lang::EventObject const&)
        (this=0x7ffccdc2b5b8, rGuard=..., rEvt=...) at include/comphelper/interfacecontainer4.hxx:397
    #1  0x00007fd754ae6014 in comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing(unsigned int, com::sun::star::uno::Reference<com::sun::star::uno::XInterface> const&)
        (_nClient=28, _rxEventSource=uno::Reference to (accessibility::AccessibleListBox *) 0x55bf49c0ad00) at .../libreoffice/comphelper/source/misc/accessibleeventnotifier.cxx:204
    #2  0x00007fd754ae1424 in comphelper::OCommonAccessibleComponent::disposing() (this=0x55bf49c0ad00) at .../libreoffice/comphelper/source/misc/accessiblecomponenthelper.cxx:61
    #3  0x00007fd74e884512 in VCLXAccessibleComponent::disposing() (this=0x55bf49c0ad00) at .../libreoffice/toolkit/source/awt/vclxaccessiblecomponent.cxx:376
    #4  0x00007fd6a3d506b7 in accessibility::AccessibleListBox::disposing() (this=0x55bf49c0ad00) at .../libreoffice/accessibility/source/extended/accessiblelistbox.cxx:246
    #5  0x00007fd75453f544 in cppu::WeakComponentImplHelperBase::dispose() (this=0x55bf49c0ad00) at .../libreoffice/cppuhelper/source/implbase.cxx:104
    #6  0x00007fd6a3d45fd5 in cppu::PartialWeakComponentImplHelper<com::sun::star::accessibility::XAccessibleContext2, com::sun::star::accessibility::XAccessibleEventBroadcaster>::dispose() (this=0x55bf49c0ad00)
        at include/cppuhelper/compbase.hxx:90
    #7  0x00007fd75453f1fe in cppu::WeakComponentImplHelperBase::release() (this=0x55bf49c0ad00) at .../libreoffice/cppuhelper/source/implbase.cxx:79
    #8  0x00007fd6a3d47d85 in cppu::PartialWeakComponentImplHelper<com::sun::star::accessibility::XAccessibleContext2, com::sun::star::accessibility::XAccessibleEventBroadcaster>::release() (this=0x55bf49c0ad00)
        at include/cppuhelper/compbase.hxx:86
    #9  0x00007fd6a3d47ca5 in cppu::ImplInheritanceHelper<comphelper::OCommonAccessibleComponent, com::sun::star::accessibility::XAccessibleExtendedComponent>::release() (this=0x55bf49c0ad00) at include/cppuhelper/implbase.hxx:171
    #10 0x00007fd6a3d47c85 in cppu::ImplInheritanceHelper<comphelper::OAccessibleExtendedComponentHelper, com::sun::star::lang::XServiceInfo>::release() (this=0x55bf49c0ad00) at include/cppuhelper/implbase.hxx:171
    #11 0x00007fd6a3d45f55 in cppu::ImplInheritanceHelper<VCLXAccessibleComponent, com::sun::star::accessibility::XAccessible, com::sun::star::accessibility::XAccessibleSelection>::release() (this=0x55bf49c0ad00)
        at include/cppuhelper/implbase.hxx:171
    #12 0x00007fd74282e13e in com::sun::star::uno::Reference<com::sun::star::uno::XInterface>::~Reference() (this=0x55bf49c0e860) at include/com/sun/star/uno/Reference.hxx:114
    #13 0x00007fd7428524c5 in std::destroy_at<com::sun::star::uno::Reference<com::sun::star::uno::XInterface> >(com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*) (__location=0x55bf49c0e860)
        at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:88
    #14 0x00007fd7428524a5 in std::_Destroy<com::sun::star::uno::Reference<com::sun::star::uno::XInterface> >(com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*) (__pointer=0x55bf49c0e860)
        at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:149
    #15 0x00007fd742852477 in std::_Destroy_aux<false>::__destroy<com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*>(com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*, com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*) (__first=0x55bf49c0e860, __last=0x55bf49c0e868) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:163
    #16 0x00007fd74285243d in std::_Destroy<com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*>(com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*, com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*) (__first=0x55bf49c0e860, __last=0x55bf49c0e868) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:195
    #17 0x00007fd742852379 in std::_Destroy<com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*, com::sun::star::uno::Reference<com::sun::star::uno::XInterface> >(com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*, com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*, std::allocator<com::sun::star::uno::Reference<com::sun::star::uno::XInterface> >&) (__first=0x55bf49c0e860, __last=0x55bf49c0e868)
        at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/alloc_traits.h:948
    #18 std::__cxx1998::vector<com::sun::star::uno::Reference<com::sun::star::uno::XInterface>, std::allocator<com::sun::star::uno::Reference<com::sun::star::uno::XInterface> > >::~vector() (this=0x55bf4d1120f8)
        at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_vector.h:732
    #19 0x00007fd74285231d in std::__debug::vector<com::sun::star::uno::Reference<com::sun::star::uno::XInterface>, std::allocator<com::sun::star::uno::Reference<com::sun::star::uno::XInterface> > >::~vector() (this=0x55bf4d1120e0)
        at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/debug/vector:230
    #20 0x00007fd7428522f5 in o3tl::sorted_vector<com::sun::star::uno::Reference<com::sun::star::uno::XInterface>, std::less<com::sun::star::uno::Reference<com::sun::star::uno::XInterface> >, o3tl::find_unique>::~sorted_vector()
        (this=0x55bf4d1120e0) at include/o3tl/sorted_vector.hxx:47
    #21 0x00007fd74284f83d in DocumentFocusListener::~DocumentFocusListener() (this=0x55bf4d1120b0) at vcl/inc/unx/gtk/gtkdata.hxx:221
    #22 0x00007fd74284f869 in DocumentFocusListener::~DocumentFocusListener() (this=0x55bf4d1120b0) at vcl/inc/unx/gtk/gtkdata.hxx:221
    #23 0x00007fd7546453a0 in cppu::OWeakObject::release() (this=0x55bf4d1120b0) at .../libreoffice/cppuhelper/source/weak.cxx:230
    #24 0x00007fd742834415 in cppu::WeakImplHelper<com::sun::star::accessibility::XAccessibleEventListener>::release() (this=0x55bf4d1120b0) at include/cppuhelper/implbase.hxx:115
    #25 0x00007fd754aec91e in com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>::~Reference() (this=0x55bf4896c088) at include/com/sun/star/uno/Reference.hxx:114
    #26 0x00007fd754aec8e5 in std::destroy_at<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener> >(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*)
        (__location=0x55bf4896c088) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:88
    #27 0x00007fd754aec8c5 in std::_Destroy<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener> >(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*)
        (__pointer=0x55bf4896c088) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:149
    #28 0x00007fd754aec897 in std::_Destroy_aux<false>::__destroy<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*>(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*, com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*) (__first=0x55bf4896c088, __last=0x55bf4896c090)
        at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:163
    #29 0x00007fd754aec85d in std::_Destroy<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*>(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*, com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*) (__first=0x55bf4896c080, __last=0x55bf4896c090) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:195
    #30 0x00007fd754aec799 in std::_Destroy<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*, com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener> >(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*, com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*, std::allocator<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener> >&) (__first=0x55bf4896c080, __last=0x55bf4896c090) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/alloc_traits.h:948
    --Type <RET> for more, q to quit, c to continue without paging--
    #31 std::__cxx1998::vector<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>, std::allocator<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener> > >::~vector()
        (this=0x55bf49866bc8) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_vector.h:732
    #32 0x00007fd754aec73d in std::__debug::vector<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>, std::allocator<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener> > >::~vector() (this=0x55bf49866bb0) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/debug/vector:230
    #33 0x00007fd754aec715 in o3tl::cow_wrapper<std::__debug::vector<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>, std::allocator<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener> > >, o3tl::ThreadSafeRefCountingPolicy>::impl_t::~impl_t() (this=0x55bf49866bb0) at include/o3tl/cow_wrapper.hxx:176
    #34 0x00007fd754aec6e4 in o3tl::cow_wrapper<std::__debug::vector<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>, std::allocator<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener> > >, o3tl::ThreadSafeRefCountingPolicy>::release() (this=0x55bf49b28380) at include/o3tl/cow_wrapper.hxx:207
    #35 0x00007fd754aec675 in o3tl::cow_wrapper<std::__debug::vector<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>, std::allocator<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener> > >, o3tl::ThreadSafeRefCountingPolicy>::~cow_wrapper() (this=0x55bf49b28380) at include/o3tl/cow_wrapper.hxx:271
    #36 0x00007fd754ae6ae5 in comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>::~OInterfaceContainerHelper4() (this=0x55bf49b28380) at include/comphelper/interfacecontainer4.hxx:126
    #37 0x00007fd754ae7c49 in std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> >::~pair() (this=0x55bf49b28378)
        at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_pair.h:187
    #38 0x00007fd754ae7c25 in std::destroy_at<std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> > >(std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> >*) (__location=0x55bf49b28378) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:88
    #39 0x00007fd754ae7b4b in std::allocator_traits<std::allocator<std::__detail::_Hash_node<std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> >, false> > >::destroy<std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> > >(std::allocator<std::__detail::_Hash_node<std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> >, false> >&, std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> >*)
        (__a=..., __p=0x55bf49b28378) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/alloc_traits.h:560
    #40 std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> >, false> > >::_M_deallocate_node(std::__detail::_Hash_node<std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> >, false>*)
        (this=0x7fd754d2aaa8 <(anonymous namespace)::gaClients+40>, __n=0x55bf49b28370) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/hashtable_policy.h:2011
    #41 0x00007fd754ae7ab5 in std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> >, false> > >::_M_deallocate_nodes(std::__detail::_Hash_node<std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> >, false>*)
        (this=0x7fd754d2aaa8 <(anonymous namespace)::gaClients+40>, __n=0x0) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/hashtable_policy.h:2033
    #42 0x00007fd754ae79df in std::_Hashtable<unsigned int, std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> >, std::allocator<std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> > >, std::__detail::_Select1st, std::equal_to<unsigned int>, std::hash<unsigned int>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::clear() (this=0x7fd754d2aaa8 <(anonymous namespace)::gaClients+40>)
        at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/hashtable.h:2524
    #43 0x00007fd754af6415 in std::__cxx1998::unordered_map<unsigned int, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> > > >::clear() (this=0x7fd754d2aaa8 <(anonymous namespace)::gaClients+40>)
        at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/unordered_map.h:798
    #44 0x00007fd754ae778d in std::__debug::unordered_map<unsigned int, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> > > >::clear() (this=0x7fd754d2aa80 <(anonymous namespace)::gaClients>)
        at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/debug/unordered_map:234
    #45 0x00007fd754ae6640 in comphelper::AccessibleEventNotifier::shutdown() () at .../libreoffice/comphelper/source/misc/accessibleeventnotifier.cxx:268
    #46 0x00007fd74d3c5e41 in DeInitVCL() () at .../libreoffice/vcl/source/app/svmain.cxx:619
    #47 0x00007fd74d3c4031 in ImplSVMain() () at .../libreoffice/vcl/source/app/svmain.cxx:254
    #48 0x00007fd74d3c5f79 in SVMain() () at .../libreoffice/vcl/source/app/svmain.cxx:261
    #49 0x00007fd7565a4ba3 in soffice_main() () at .../libreoffice/desktop/source/app/sofficemain.cxx:94
    #50 0x000055bf472e7a5d in sal_main () at .../libreoffice/desktop/source/app/main.c:51
    #51 0x000055bf472e7a37 in main (argc=3, argv=0x7ffccdc2c9a8) at .../libreoffice/desktop/source/app/main.c:49

Change-Id: I251b2f97184e0492f02eb772e5906847f9249506
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164090
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-02-28 13:42:28 +01:00
AhmedHamed e6ecd5a32c tdf#114441 Convert sal_uLong to sal_uInt32 in TreeControlPeer
We are talking about a tree list in a gui which logically will not exceed sal_uInt32
They also must be unsigned integers because they represent counts & positions

changes are done to these variables:
- nPos (node position)
In all base classes you will found that all functions deal with and return sal_int32 concerning it
- nChild (node child)
It is assigned to TREELIST_APPEND which is MAX for sal_uInt32 and it is considered like that in all other functions
- nSelectionCount
all functions that deal with it (like GetSelectionCount()) returns sal_uInt32

Change-Id: I1771b9aa52c351063d007d7014484861d4b3e02a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164067
Tested-by: Jenkins
Tested-by: Ilmari Lauhakangas <ilmari.lauhakangas@libreoffice.org>
Reviewed-by: Ilmari Lauhakangas <ilmari.lauhakangas@libreoffice.org>
2024-02-28 08:16:19 +01:00
Noel Grandin ce6f91863f remove dummy accessibility factory
because when the dynamic symbol lookup fails, the dummy factory
returns nullptrs to code expecting valid pointers, and end up with
a much harder bug to diagnose, instead of failing at the actual
problem site.

Change-Id: I8e4885dc192b7089e1b1716567b41420309e8984
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163853
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-02-24 07:41:26 +01:00
Mike Kaganski 0fa827dbb2 Drop std::as_const from css::uno::Sequence iterations
Obsoleted by commit 2484de6728 (Remove
non-const Sequence::begin()/end() in internal code, 2021-10-15) and
commit fb3c04bd19 (Drop non-const
Sequence::operator[] in internal code, 2021-11-05).

Change-Id: Idbafef5d34c0d4771cbbf75b9db9712e504164cd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162640
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2024-01-27 12:43:48 +01:00
Jim Raykowski 1ac7350a70 tdf#158101 Make non-gtk backends context popup menu item
visibility behavior like gtk

For context popup menus, gtk's native popup menu hides disabled menu
items. This patch makes this the behavior for non-gtk backends while
preserving the intent of commit
a095531790 to make VCL PopupMenu respect
the officecfg::Office::Common::View::Menu::DontHideDisabledEntry setting.

Change-Id: Ice59f2b5ec20dac9d1b0891ccbd83dbbcd308078
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159192
Tested-by: Jenkins
Reviewed-by: Jim Raykowski <raykowj@gmail.com>
2024-01-25 09:10:40 +01:00
Caolán McNamara 6342aa6c66 cid#1545370 COPY_INSTEAD_OF_MOVE
and

cid#1545364 COPY_INSTEAD_OF_MOVE
cid#1545363 COPY_INSTEAD_OF_MOVE
cid#1545344 COPY_INSTEAD_OF_MOVE
cid#1545299 COPY_INSTEAD_OF_MOVE
cid#1545287 COPY_INSTEAD_OF_MOVE
cid#1545267 COPY_INSTEAD_OF_MOVE
cid#1545256 COPY_INSTEAD_OF_MOVE
cid#1545226 COPY_INSTEAD_OF_MOVE
cid#1545500 COPY_INSTEAD_OF_MOVE
cid#1545538 COPY_INSTEAD_OF_MOVE
cid#1545618 COPY_INSTEAD_OF_MOVE
cid#1545681 COPY_INSTEAD_OF_MOVE
cid#1545750 COPY_INSTEAD_OF_MOVE
cid#1545778 COPY_INSTEAD_OF_MOVE
cid#1545785 COPY_INSTEAD_OF_MOVE
cid#1545799 COPY_INSTEAD_OF_MOVE
cid#1545847 COPY_INSTEAD_OF_MOVE
cid#1545958 COPY_INSTEAD_OF_MOVE
cid#1545963 COPY_INSTEAD_OF_MOVE
cid#1545990 COPY_INSTEAD_OF_MOVE
cid#1546013 COPY_INSTEAD_OF_MOVE
cid#1546029 COPY_INSTEAD_OF_MOVE
cid#1546079 COPY_INSTEAD_OF_MOVE
cid#1546104 COPY_INSTEAD_OF_MOVE
cid#1546127 COPY_INSTEAD_OF_MOVE
cid#1546133 COPY_INSTEAD_OF_MOVE
cid#1546155 COPY_INSTEAD_OF_MOVE
cid#1546190 COPY_INSTEAD_OF_MOVE
cid#1546216 COPY_INSTEAD_OF_MOVE
cid#1546273 COPY_INSTEAD_OF_MOVE
cid#1546315 COPY_INSTEAD_OF_MOVE
cid#1546326 COPY_INSTEAD_OF_MOVE
cid#1546387 COPY_INSTEAD_OF_MOVE

accept some reasonable suggestions

Change-Id: I7b004086d490c7618d8fe7a21a53cfa8ac1f8408
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161748
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-01-08 13:09:02 +01:00
Caolán McNamara 5096d072be cid#1545965 COPY_INSTEAD_OF_MOVE
and

cid#1545849 COPY_INSTEAD_OF_MOVE
cid#1545814 COPY_INSTEAD_OF_MOVE
cid#1545685 COPY_INSTEAD_OF_MOVE
cid#1545583 COPY_INSTEAD_OF_MOVE
cid#1545575 COPY_INSTEAD_OF_MOVE
cid#1545517 COPY_INSTEAD_OF_MOVE
cid#1545474 COPY_INSTEAD_OF_MOVE

Change-Id: I79a47ee34dace3a4664bfece26c59e719f469cab
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161448
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2023-12-30 19:58:54 +01:00
Caolán McNamara 88987316ed cid#1545470 COPY_INSTEAD_OF_MOVE
and

cid#1545468 COPY_INSTEAD_OF_MOVE
cid#1545446 COPY_INSTEAD_OF_MOVE
cid#1545435 COPY_INSTEAD_OF_MOVE
cid#1545419 COPY_INSTEAD_OF_MOVE
cid#1545415 COPY_INSTEAD_OF_MOVE
cid#1545410 COPY_INSTEAD_OF_MOVE
cid#1545390 COPY_INSTEAD_OF_MOVE
cid#1545384 COPY_INSTEAD_OF_MOVE
cid#1545374 COPY_INSTEAD_OF_MOVE
cid#1545371 COPY_INSTEAD_OF_MOVE
cid#1545368 COPY_INSTEAD_OF_MOVE
cid#1545366 COPY_INSTEAD_OF_MOVE
cid#1545335 COPY_INSTEAD_OF_MOVE
cid#1545331 COPY_INSTEAD_OF_MOVE
cid#1545327 COPY_INSTEAD_OF_MOVE
cid#1545308 COPY_INSTEAD_OF_MOVE
cid#1545280 COPY_INSTEAD_OF_MOVE
cid#1545199 COPY_INSTEAD_OF_MOVE

Change-Id: If05a13125b05ccd93d34d0eced566e7b3b58aaef
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161256
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2023-12-24 13:23:45 +01:00
Caolán McNamara 9a6298aedb cid#1546006 COPY_INSTEAD_OF_MOVE
and

cid#1545999 COPY_INSTEAD_OF_MOVE
cid#1545995 COPY_INSTEAD_OF_MOVE
cid#1545994 COPY_INSTEAD_OF_MOVE
cid#1545989 COPY_INSTEAD_OF_MOVE
cid#1545982 COPY_INSTEAD_OF_MOVE
cid#1545977 COPY_INSTEAD_OF_MOVE
cid#1545970 COPY_INSTEAD_OF_MOVE
cid#1545856 COPY_INSTEAD_OF_MOVE
cid#1545845 COPY_INSTEAD_OF_MOVE
cid#1545838 COPY_INSTEAD_OF_MOVE
cid#1545776 COPY_INSTEAD_OF_MOVE
cid#1545774 COPY_INSTEAD_OF_MOVE
cid#1545744 COPY_INSTEAD_OF_MOVE
cid#1545719 COPY_INSTEAD_OF_MOVE
cid#1545716 COPY_INSTEAD_OF_MOVE
cid#1545687 COPY_INSTEAD_OF_MOVE
cid#1545648 COPY_INSTEAD_OF_MOVE
cid#1545643 COPY_INSTEAD_OF_MOVE
cid#1545641 COPY_INSTEAD_OF_MOVE
cid#1545604 COPY_INSTEAD_OF_MOVE
cid#1545531 COPY_INSTEAD_OF_MOVE
cid#1545530 COPY_INSTEAD_OF_MOVE
cid#1545524 COPY_INSTEAD_OF_MOVE
cid#1545516 COPY_INSTEAD_OF_MOVE
cid#1545501 COPY_INSTEAD_OF_MOVE
cid#1545486 COPY_INSTEAD_OF_MOVE

Change-Id: Idcf3e27bb9e81b6a77d5ef75c9376eb1d6aff8c9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161245
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2023-12-23 19:52:50 +01:00
Michael Weghorn 8bc6119812 tdf#123864 a11y: Handle new CHECKABLE state in misc places
Add reporting/handling of the CHECKABLE a11y state
added in

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

        tdf#123864 a11y: Add new AccessibleStateType::CHECKABLE

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-19 09:30:15 +01:00
Julien Nabet fdc87dd565 tdf#151456: AnimatedImages in Basic Dialog : StepTime is ignored
2 problems here
1) Regression on test of "pThrobber" since 51e97b2ffd
toolkit: first cut at switching to VclPtr.

2) as the author of the bug "Jurassik Pork" indicated,
"mnStepTime" wasn't used after having been used in ctr of Throbber
Thank you to him for the suggestion!

Change-Id: I0d1a53738035c3e822ea84d5972363dd9d0b5d8d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160771
Tested-by: Jenkins
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2023-12-14 22:58:52 +01:00
Caolán McNamara ae117fe829 cid#1546444 COPY_INSTEAD_OF_MOVE
and

cid#1546389 COPY_INSTEAD_OF_MOVE
cid#1546388 COPY_INSTEAD_OF_MOVE
cid#1546360 COPY_INSTEAD_OF_MOVE
cid#1546158 COPY_INSTEAD_OF_MOVE

Change-Id: I3707d55b88674dfb5ae786fc2cc45000862340de
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160611
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2023-12-12 17:11:48 +01:00
Caolán McNamara 27a24fc1eb cid#1545577 COPY_INSTEAD_OF_MOVE
and

cid#1545679 COPY_INSTEAD_OF_MOVE
cid#1545691 COPY_INSTEAD_OF_MOVE
cid#1545697 COPY_INSTEAD_OF_MOVE
cid#1545711 COPY_INSTEAD_OF_MOVE
cid#1545730 COPY_INSTEAD_OF_MOVE

Change-Id: Ic0777a8ba532b00b021ffed81243505fbb7250f6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160568
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2023-12-11 14:06:54 +01:00
Caolán McNamara 283aa103b9 cid#1545177 COPY_INSTEAD_OF_MOVE
and

cid#1545179 COPY_INSTEAD_OF_MOVE
cid#1545187 COPY_INSTEAD_OF_MOVE
cid#1545188 COPY_INSTEAD_OF_MOVE
cid#1545189 COPY_INSTEAD_OF_MOVE
cid#1545196 COPY_INSTEAD_OF_MOVE
cid#1545197 COPY_INSTEAD_OF_MOVE
cid#1545204 COPY_INSTEAD_OF_MOVE
cid#1545223 COPY_INSTEAD_OF_MOVE
cid#1545236 COPY_INSTEAD_OF_MOVE
cid#1545239 COPY_INSTEAD_OF_MOVE
cid#1545253 COPY_INSTEAD_OF_MOVE
cid#1545274 COPY_INSTEAD_OF_MOVE
cid#1545286 COPY_INSTEAD_OF_MOVE
cid#1545309 COPY_INSTEAD_OF_MOVE
cid#1545311 COPY_INSTEAD_OF_MOVE
cid#1545345 COPY_INSTEAD_OF_MOVE
cid#1545358 COPY_INSTEAD_OF_MOVE
cid#1545361 COPY_INSTEAD_OF_MOVE
cid#1545365 COPY_INSTEAD_OF_MOVE
cid#1545367 COPY_INSTEAD_OF_MOVE
cid#1545372 COPY_INSTEAD_OF_MOVE
cid#1545373 COPY_INSTEAD_OF_MOVE
cid#1545377 COPY_INSTEAD_OF_MOVE
cid#1545392 COPY_INSTEAD_OF_MOVE
cid#1545399 COPY_INSTEAD_OF_MOVE
cid#1545404 COPY_INSTEAD_OF_MOVE
cid#1545408 COPY_INSTEAD_OF_MOVE
cid#1545430 COPY_INSTEAD_OF_MOVE
cid#1545439 COPY_INSTEAD_OF_MOVE
cid#1545449 COPY_INSTEAD_OF_MOVE

Change-Id: I3afe836a0bbc8bd70937035e60eb020435e413d2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160539
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2023-12-10 17:41:18 +01:00
Caolán McNamara 9c2c815d85 cid#1545987 std::swap COPY_INSTEAD_OF_MOVE
Change-Id: I34413f941aa5eded457ad5a3a5ffb4c9e1104590
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160521
Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2023-12-10 11:57:27 +01:00
Caolán McNamara a58c0d4cef cid#1556778 COPY_INSTEAD_OF_MOVE
and

cid#1546474 COPY_INSTEAD_OF_MOVE
cid#1546473 COPY_INSTEAD_OF_MOVE
cid#1546469 COPY_INSTEAD_OF_MOVE
cid#1546467 COPY_INSTEAD_OF_MOVE
cid#1546458 COPY_INSTEAD_OF_MOVE
cid#1546448 COPY_INSTEAD_OF_MOVE
cid#1546446 COPY_INSTEAD_OF_MOVE
cid#1546441 COPY_INSTEAD_OF_MOVE
cid#1546424 COPY_INSTEAD_OF_MOVE
cid#1546377 COPY_INSTEAD_OF_MOVE
cid#1546374 COPY_INSTEAD_OF_MOVE
cid#1546352 COPY_INSTEAD_OF_MOVE
cid#1546334 COPY_INSTEAD_OF_MOVE
cid#1546328 COPY_INSTEAD_OF_MOVE
cid#1546310 COPY_INSTEAD_OF_MOVE
cid#1546303 COPY_INSTEAD_OF_MOVE

Change-Id: I8a43fdd574857ba1d3ec416f23c8269a9a08e12f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160515
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2023-12-09 22:38:50 +01:00
Julien Nabet 67c2a47861 cid#1545597 Using invalid iterator
and :

cid#1545537 Using invalid iterator
cid#1545508 Using invalid iterator
cid#1545494 Using invalid iterator
cid#1545478 Using invalid iterator
cid#1545427 Using invalid iterator
cid#1545420 Using invalid iterator
cid#1545400 Using invalid iterator
cid#1545300 Using invalid iterator
cid#1545258 Using invalid iterator
cid#1545257 Using invalid iterator
cid#1545200 Using invalid iterator
cid#1545183 Using invalid iterator

Change-Id: Ibf3a41902f34286967195c5c3b22e337a4b06809
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160322
Tested-by: Jenkins
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2023-12-04 22:10:20 +01:00
Julien Nabet 042fb18fbc c++20: use std::erase(_if) instead of std::remove(_if)+erase (toolkit)
Change-Id: Ied5fc25f959e938fdd80532375486c167c370e35
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159705
Tested-by: Jenkins
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2023-11-20 07:40:15 +01:00
Noel Grandin d0e848dab0 avoid double map lookup
Change-Id: I02018eaaf220c7835756eba6215425bac9cbc6f3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159432
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-11-15 12:04:31 +01:00
Noel Grandin e87937d1fa loplugin:fieldcast in VCLXWindowImpl
Change-Id: I9a0181e87653e1bf62245e8ddf381518a59f841b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159116
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-11-08 19:55:16 +01:00
Noel Grandin 1914124c6a loplugin:fieldcast in MutableTreeDataModel
Change-Id: I713db74dac43a61fe98ab18834e0dd6e24117caa
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159097
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-11-08 09:22:40 +01:00
Sarper Akdemir df79eedf69 tdf#157518: vcl: Introduce vcl control LevelBar
Introduces LevelBar that shares implementation with
Progress(Bar).

LevelBar is to be as a level indicator, e.g. password strength
level. Currently with native backends for gtk and Windows.

Currently, except on gtk - the colors of the bar at different
levels are hardcoded and not dependent on any kind of themeing.

On Windows it follows the styling of progress bar of type "Meter"
according to the uxguide:
https://learn.microsoft.com/en-us/windows/win32/uxguide/progress-bars#meters

Change-Id: Id772cda23615e9582463bf589e4674fd4588c864
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157826
Tested-by: Jenkins
Reviewed-by: Sarper Akdemir <sarper.akdemir.extern@allotropia.de>
2023-10-30 08:17:18 +01:00
Noel Grandin 0446f73d27 tdf#153519 use new IdleTask::waitUntilIdleDispatched
to wait until the Idle inside sw/ has done populating the navigator
tree.

Which required
(*) moving the code down from test/ to vcl/ to avoid circular dependency
issues.
(*) adding a call SolarMutexGuard before Application::Yield inside
IdleTask::waitUntilIdleDispatched
(*) exposing the function to python by adding a method to the
XToolkitExperimental UNO API

Change-Id: Iee418f7a0beb1f5b53addb7fe25823d61720eb3a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158495
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-10-26 16:10:29 +02:00
Stephan Bergmann 711e01c787 Extended loplugin:ostr: Automatic rewrite O[U]StringLiteral: toolkit
Change-Id: I67ba7b0f4d99f080b343a9b26a242cf4008b820c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158244
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-10-20 19:54:29 +02:00
Mike Kaganski 367891c40e Use getXWeak in toolkit
Change-Id: I44a0ddd386ea6d262d6102b40f3e9837655068ed
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150877
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2023-10-20 12:22:18 +02:00
Stephan Bergmann b4844c310b Repurpose loplugin:stringstatic for O[U]String vars that can be constexpr
...now that warning about O[U]String vars that could be O[U]StringLiteral is no
longer useful

Change-Id: I389e72038171f28482049b41f6224257dd11f452
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157992
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-10-15 21:15:49 +02:00
Mike Kaganski 176e8cf09a Use exception ctors, instead of setting members later
Avoids overwriting source location in message

Change-Id: Ia0290c7dd1ab3ea1357712a27ecab75c7b583dd4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157893
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2023-10-14 15:37:17 +02:00
Julien Nabet b20d44d301 Replace getTabIndexPropertyName and getStepPropertyName (toolkit)
by constrexp or by using the string directly since used once.
Change-Id: I0d232d5856551bd5dde22ed5075807d20f6f6624

Change-Id: I07d50845ec21998813f3fecb7fb183eaf234f7ca
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157591
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-10-05 16:09:32 +02:00
Julien Nabet 3c162a7a31 Replace 2 other lcl_throw* by throwing the right exception directly (toolkit)
Change-Id: Ib0347db6ad5690e0cba9326d7ec3fd85c2f93984
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157588
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
Tested-by: Jenkins
2023-10-05 13:57:11 +02:00
Julien Nabet c47038d124 Replace 3 lcl_throw* by throwing the right exception directly (toolkit)
Change-Id: Ia351741e46faa6463fac2124262da0153ebe19dc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157585
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Tested-by: Jenkins
2023-10-05 12:16:52 +02:00
Noel Grandin d9ecb98b30 MutableTreeDataModel does not need to implement XAggreggation
Checked on jenkins using 'make check' and

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

Change-Id: I81b0c46be19bfafb220f0ae908eedfd9c5b20b71
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156726
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-09-10 16:11:09 +02:00
Noel Grandin c29d86fc92 no need to take a lock and do nothing
It has been this way since initial commit in

    commit 5eb0040d01
    Author: Mihaela Kedikova <misheto@openoffice.org>
    Date:   Thu Aug 12 17:44:19 2010 +0200
    tabcontrol: new source code for tabcontrol added

Change-Id: I0e9730525249a3da8857e5c19070a6aad05ad768
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156652
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-09-07 14:44:03 +02:00
Noel Grandin 3c7a35dd28 no need to use UNO_QUERY_THROW here
Change-Id: I01b4e401fec1792829fc2efaad5a74a035a418f2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156476
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-09-02 22:49:12 +02:00
Michael Weghorn a766f7555c tdf#104833 a11y: Use VCLXAccessibleEdit for VCLXMultiLineEdit
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-01 16:13:31 +02:00
Noel Grandin 3c58ea89f4 make IAccessibleTableControl extend cppu::WeakImplHelper
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-30 17:49:26 +02:00
Noel Grandin 87db52ab1e Revert "use more Reference::query instead of UNO_QUERY_THROW"
This reverts commit 7fc6063914.

sberg noticed that there is a difference now:

there's a subtle difference now, in that if  y  was null originally, it would have thrown a (caught) exception, whereas now it will crash in the  y.query<X>()  call.

Change-Id: Idbb5a08d635d15b5ca63f4822eddf05fb0a5afa0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156002
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-08-25 14:15:56 +02:00
Michael Weghorn cd00bc50a7 tdf#156473 a11y: Keep a reference to table's a11y object
Keep a Reference to the a11y object in `TableControl_Impl`,
to prevent the object from getting deleted while it's still
needed.

Fixes a crash with this backtrace on Windows when closing
the macro dialog from tdf#156473 with the NVDA screen reader
active:

    1 cppu::WeakComponentImplHelperBase::release implbase.cxx 70 0x7ff97c1f0f72
    2 cppu::PartialWeakComponentImplHelper<com::sun::star::accessibility::XAccessibleContext,com::sun::star::accessibility::XAccessibleComponent,com::sun::star::accessibility::XAccessibleEventBroadcaster,com::sun::star::lang::XServiceInfo>::release compbase.hxx 86 0x7ff9200cc5a4
    3 rtl::Reference<accessibility::AccessibleGridControl>::clear ref.hxx 198 0x7ff9200cc25b
    4 accessibility::AccessibleGridControlAccess::DisposeAccessImpl AccessibleGridControl.cxx 335 0x7ff9200cc17a
    5 svt::table::TableControl_Impl::disposeAccessible tablecontrol_impl.cxx 2397 0x7ff955829173
    6 svt::table::TableControl::dispose tablecontrol.cxx 74 0x7ff9558190e4
    7 VclReferenceBase::disposeOnce vclreferencebase.cxx 39 0x7ff9494f4fda
    8 VclPtr<vcl::Window>::disposeAndClear vclptr.hxx 207 0x7ff9556b0fbe
    9 VCLXWindow::dispose vclxwindow.cxx 927 0x7ff9556b0c9c
    10 SVTXGridControl::dispose svtxgridcontrol.cxx 766 0x7ff9557e2577
    11 UnoControl::dispose unocontrol.cxx 362 0x7ff95585bc3c
    12 toolkit::UnoGridControl::dispose gridcontrol.cxx 292 0x7ff9557c9667
    13 UnoControlContainer::dispose unocontrolcontainer.cxx 413 0x7ff955874606
    14 ControlContainerBase::dispose controlmodelcontainerbase.cxx 1387 0x7ff95573f480
    15 UnoDialogControl::dispose dialogcontrol.cxx 336 0x7ff95576aca1
    16 UnoControl::disposing unocontrol.cxx 670 0x7ff95585ee37
    17 UnoControlContainer::disposing unocontrolcontainer.cxx 432 0x7ff95587487c
    18 ControlContainerBase::disposing controlmodelcontainerbase.cxx 1394 0x7ff95573f555
    19 UnoDialogControl::disposing dialogcontrol.cxx 343 0x7ff95576ad45
    20 comphelper::OInterfaceContainerHelper4<com::sun::star::container::XContainerListener>::disposeAndClear interfacecontainer4.hxx 397 0x7ff955748752
    21 ListenerMultiplexerBase<com::sun::star::container::XContainerListener>::disposeAndClear listenermultiplexer.hxx 106 0x7ff95572da7b
    22 ControlModelContainerBase::dispose controlmodelcontainerbase.cxx 223 0x7ff95572d855
    23 OGeometryControlModel_Base::disposing geometrycontrolmodel.cxx 429 0x7ff9557930f9
    24 cppu::WeakAggComponentImplHelperBase::dispose implbase.cxx 230 0x7ff97c1f1dca
    25 SbiInstance::~SbiInstance runtime.cxx 360 0x7ff975dfdd1b
    26 SbModule::Run sbxmod.cxx 1189 0x7ff975d532e7
    27 SbModule::Notify sbxmod.cxx 776 0x7ff975d525d3
    28 SfxBroadcaster::Broadcast SfxBroadcaster.cxx 41 0x7ff96c5366ab
    29 SbMethod::Broadcast sbxmod.cxx 2121 0x7ff975d59c07
    30 SbxValue::Get sbxvalue.cxx 290 0x7ff975e7a6be
    31 SbMethod::Call sbxmod.cxx 2077 0x7ff975d5988d
    32 basprov::BasicScriptImpl::invoke basscript.cxx 255 0x7ff8bb962d8f
    33 SfxObjectShell::CallXScript objmisc.cxx 1439 0x7ff96dfe53a0
    34 SfxObjectShell::CallXScript objmisc.cxx 1468 0x7ff96dfe60c2
    35 SwDoc::ExecMacro docbasic.cxx 122 0x7ff8c8b30c33
    36 SwWrtShell::ExecMacro wrtsh3.cxx 326 0x7ff8c9ee2a45
    37 SwWrtShell::ClickToField wrtsh2.cxx 396 0x7ff8c9ede8ce
    38 SwEditWin::MouseButtonUp edtwin.cxx 4969 0x7ff8c9abbeae
    39 ImplHandleMouseEvent winproc.cxx 720 0x7ff949306165
    40 ImplHandleSalMouseButtonUp winproc.cxx 2353 0x7ff94930b0e7
    41 ImplWindowFrameProc winproc.cxx 2702 0x7ff949309b92
    42 SalFrame::CallCallback salframe.hxx 310 0x7ff9240b2c89
    43 ImplHandleMouseMsg salframe.cxx 3292 0x7ff9240d48c1
    44 SalFrameWndProc salframe.cxx 5688 0x7ff9240bbf9c
    45 SalFrameWndProcW salframe.cxx 6043 0x7ff9240bb6f4
    46 CallWindowProcW USER32 0x7ff9c395e858
    47 DispatchMessageW USER32 0x7ff9c395e299
    48 ImplSalDispatchMessage salinst.cxx 474 0x7ff924008e03
    49 ImplSalYield salinst.cxx 546 0x7ff924008cad
    50 WinSalInstance::DoYield salinst.cxx 580 0x7ff9240090f5
    51 ImplYield svapp.cxx 352 0x7ff9499a3f3b
    52 Application::Yield svapp.cxx 437 0x7ff9499a3923
    53 Application::Execute svapp.cxx 329 0x7ff9499a372b
    54 desktop::Desktop::Main app.cxx 1601 0x7ff97ef6caf3
    55 ImplSVMain svmain.cxx 204 0x7ff9499be0a0
    56 SVMain svmain.cxx 236 0x7ff9499bfce9
    57 soffice_main sofficemain.cxx 94 0x7ff97efdb1d8
    58 sal_main main.c 51 0x7ff7e580104a
    59 main main.c 49 0x7ff7e5801029
    60 invoke_main exe_common.inl 79 0x7ff7e5801269
    61 __scrt_common_main_seh exe_common.inl 288 0x7ff7e580139e
    62 __scrt_common_main exe_common.inl 331 0x7ff7e580141e
    63 mainCRTStartup exe_main.cpp 17 0x7ff7e580143e
    64 BaseThreadInitThunk KERNEL32 0x7ff9c2eb7614
    65 RtlUserThreadStart ntdll 0x7ff9c4bc26b1

Change-Id: I10e44024f88465950953229e695e0cfe4c4a69c0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155953
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-08-22 22:27:11 +02:00
Noel Grandin 7fc6063914 use more Reference::query instead of UNO_QUERY_THROW
since querying with exceptions is consideably more expensive

Change-Id: I968a9a40766b2abb0d3058549b0ed44011fd5716
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155791
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-08-18 11:03:02 +02:00
Michael Weghorn 2cd1408dd7 tdf#156561 a11y: Create VCLXTopWindow peer for border win frame
If a border window is a "native frame", i.e. a top level
window, then also create a `VCLXTopWindow` for it instead
of just a simple `VCLXWindow`.

This also addresses another cause why the Calc autofilter
popup would not be announced by the NVDA screen reader
before

    commit dc0706cabfe39ddb6ea23d60ccfb756f2b9e6efb
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Wed Mar 15 17:00:27 2023 +0100

        tdf#140762 tdf#152671 Make dock win visible before showing popup

For winaccessibility, an accessible event listener
is registered for an object when either
`AccTopWindowListener::windowOpened` gets an event
with the top level window set or the parent of
the window sends an `AccessibleEventId::CHILD` event
for the child object.

In case of the autofilter popup in Calc, the top-level
border window of the work window (created and set in
`WorkWindow::ImplInit` and retrieved via `Window::GetFrameWeld`
in `ScGridWindow::LaunchAutoFilterMenu`) is set as the
parent window of the popup, but since it is a top-level
window and was so far not considered as such due to its
peer/component interface not implementing `XTopWindow`
(s. `Window::IsTopWindow` and the corresponding check
in `VCLXToolkit::callTopWindowListeners`), it would
not have any accessible listener set, and thus no
child event for its new popup child would be sent
to the winaccessibility layer. Therefore, no
accessible events would be sent for the popup
and it's children either, resulting in NVDA not
announcing any focus changes, etc.

With this change in place, NVDA announces focused
items in the auto filter popup even with a revert
of the above-mentioned commit (and follow-up commits),
except for submenu entries (which still suffer from
another problem that will be addressed separately).

Change-Id: I69c6066127c8b853a27cc1f692f139572541f8eb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155800
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-08-18 06:05:23 +02:00
Michael Weghorn 4d27d2c5f9 tdf#141101 tdf#156561 a11y: Handle a11y child events in win parent
`VCLXAccessibleComponent::ProcessWindowChildEvent` was only
processing `WindowShow` and `WindowHide` events when the
`vcl::Window::GetAccessibleParent()` for the window sent in
the event would return the window that the `VCLXAccessibleComponent`
refers to.

This generally seems reasonable, but when the child events
are sent for the corresponding window, the window's hierarchy
is iterated over using `vcl::Window::GetParent()`, so if the
accessible window is not in that hierarchy, no window would
take care of the child events.
(Note e.g. how `Window::GetParent` uses `mpWindowImpl->mpRealParent`
while `Window::getAccessibleParentWindow` uses `mpWindowImpl->mpParent`
and has some special handling.)

Due to the way that `ImplDockingWindowWrapper::ImplPreparePopupMode`
reparents the windows, this is at least the case for the auto
filter popup in Calc and the font color popup in Writer's "Character"
dialog, so the `VclEventId::WindowShow` event would not be forwarded
to the a11y layer as an `AccessibleEventId::CHILD` event, and thus no
listener would be registered for the children. As a result, the NVDA
screen reader would not announce these objects when they receive
focus.

Make sure that the child event gets handled by making
`VCLXAccessibleComponent::GetChildAccessible` also take
into account the `vcl::Window::GetParent()`.

This addresses one of the underlying issues why the Calc autofilter
was not announced by NVDA before

    commit dc0706cabfe39ddb6ea23d60ccfb756f2b9e6efb
    Author: Michael Weghorn
    Date:   Wed Mar 15 17:00:27 2023 +0100

        tdf#140762 tdf#152671 Make dock win visible before showing popup

It might make sense to reconsider the way of
reparenting in `ImplDockingWindowWrapper` and general
a11y parent handling at some point, but that will need
further analysis and would presumably require more
fundamental changes elsewhere, too.

Change-Id: I83cf5732bfc9d4886e4f7fa75d4ff462e4d4af6d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155799
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-08-18 06:05:14 +02:00
Michael Weghorn 8c330cd741 toolkit: Use range-based for, drop invalidTableControlAction
The `invalidTableControlAction` enum value was apparently
only used to detect when to stop the iteration and is
no longer, so drop it.

Change-Id: Idec6572a9f328b246445191f0a3e6a131bb0f688
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155229
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-08-03 16:54:23 +02:00
Noel Grandin b6b26421a1 split Point/Size/Rectangle into AbsoluteScreenPixel* types
to attempt to make it obvious in code what kind of coordinate
system we are dealing with.

The idea is that by doing this, the compile-time type checking
will flush out inconsistencies between different code.

I started with vcl::Window::OutputToAbsoluteScreenPixel
and worked outwards from there.

Change-Id: Ia967d7a0bb38886695f3a761b85c8b9340ddb1c0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154676
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-08-02 08:13:15 +02:00
Michael Weghorn 3b1da48e8c a11y: Don't always append window type to a11y name in debug builds
Appending " (Type = <number>)" to the accessible name is probably
meant for debugging purposes to see what type of window is
involved, but doing that by default in debug builds has disadvantages,
e.g.:

1) It affects how assistive tooling, like screen readers, handles
the accessible objects, therefore the behaviour with a debug build
(what a developer working on something experiences) does not
necessarily match what happens in non-debug builds (what end
users will experience).

For instance, when Orca announces the "Update styles" push button
in Writer's formatting toolbar, it not only announces the extra
type information for the objects in the hierarchy it announces
anyway, but announces the panel in addition, since it has a non-empty
name due to the appended type information.

Announcement without this change in place (from Orca log):

    INFO:speech:SPEECH OUTPUT: ' (Type = 371) panel.'
    INFO:speech:SPEECH OUTPUT: 'Formatting (Type = 356) tool bar'
    INFO:speech:SPEECH OUTPUT: 'Update push button.'

Announcement with this change in place:

    INFO:speech:SPEECH OUTPUT: 'Formatting tool bar'
    INFO:speech:SPEECH OUTPUT: 'Update push button.'

2) It breaks selecting the object under the mouse cursor in
Accerciser at least with the qt6 VCL plugin when the object is in
a dialog, because the window name retrieved via the accessibility
APIs (with the appended type information) does not match the one
retrieved via Wnck [1].

Therefore, don't append the type information by default,
but only if environment variable
`LIBO_APPEND_WINDOW_TYPE_TO_ACCESSIBLE_NAME` ist set
(typically `LIBO_APPEND_WINDOW_TYPE_TO_ACCESSIBLE_NAME=1`,
but any value other than "0" will do),
so that can still be used for cases where having the type as
part of the accessible name is useful.

[1] https://gitlab.gnome.org/GNOME/accerciser/-/blob/5af3fdbfb8a7832e434ad6fc7d2ecaad18f2e32e/plugins/quick_select.py#L109

Change-Id: Ie33b14fbdf9731b02c8c620d7a5ac718ef99367d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155094
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-08-02 05:10:18 +02:00
Michael Weghorn e4ec702df1 a11y: Convert AccessibleTableControlObjType to enum class
Change-Id: I227ca242ae8fa22940b1bf302541f8d9b7b40eb7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155199
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-08-02 05:09:54 +02:00
Michael Weghorn ce0a48a1eb tdf#155625 a11y: Notify about menu item role change
Send a `AccessibleEventId::ROLE_CHANGED` event
when the accessible role of a menu item changes
(s. how `VCLXAccessibleMenuItem::getAccessibleRole`
takes into account `MenuItemBits::RADIOCHECK` and
`MenuItemBits::CHECKABLE` to determine the accessible
role for the underlying menu entry).

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

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

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

Change-Id: I0d88a7eda592f5ee9abf368ce1d5feb6611b9971
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154947
Reviewed-by: Colomban Wendling <cwendling@hypra.fr>
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-07-27 16:58:22 +02:00
Noel Grandin 81994cb2b8 Convert internal vcl bitmap formats transparency->alpha (II)
(Second attempt at landing this)

Image formats and graphics APIs use alpha, not transparency,
so change our internal formats and data structures to work directly
with alpha, so we don't need to modify data before we push it to
graphics APIs.

Add a couple of new Color constants to make the intention
of the vcl code clearer.

Notes
(*) On macOS, tweaking the logic in CreateWithSalBitmapAndMask
to more accurately reflect the requirements of the
CGImageCreateWithMask function seems to fix some
tests.

(*) The vcl code does not properly support gradients
with transparency. So the previous code was wrong, and this
change is going to result in slightly different wrongness.

Change-Id: I9e21c2e98d88ecfdc5f75db13bd1ffff7c38db98
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114168
Tested-by: Jenkins
Reviewed-by: Patrick Luby <plubius@neooffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-07-25 08:38:12 +02:00
Noel Grandin 1f2ff4a0a3 loplugin:redundantcast small improvement
Change-Id: I2c96b367138b94d6178a3c4a0f83049f13a04f82
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154679
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-07-21 11:05:05 +02:00