summaryrefslogtreecommitdiff
path: root/accessibility
AgeCommit message (Collapse)Author
2023-01-25Use ImplInheritanceHelper in VCLXAccessibleComponentStephan Bergmann
Change-Id: I300f033054bddc2c0ee1973dbafc108c477bf09a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146103 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-19Base AccessibleGridControlBase on WeakComponentImplHelperStephan Bergmann
...rather than on the deprecated WeakAggComponentImplHelper4. It was found that e.g. GridControlAccessibleElement, deriving from AccessibleGridControlBase, was implementing queryInterface in a way that is incompatible with the XAggregation protocol inherited via WeakAggComponentImplHelper4. It looks like no code actually made use of the XAggregation offered by this class hierarchy, so the easiest fix for that queryInterface implementation appears to switch from WeakAggComponentImplHelper4 to WeakComponentImplHelper (thereby dropping XAggregation, and thus rendering the existing queryInterface implementation OK). Change-Id: Ia7f033d0a93e78a48573cb489dc5542603c35b8c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145793 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-16XUnoTunnel->dynamic_cast in OToolBoxWindowItemNoel Grandin
Change-Id: I65e535d9f9a81a3712b14b50cc4906b534533e86 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145536 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2023-01-14AccessibleBrowseBoxBase's XAggregation is apparently unusedStephan Bergmann
It had been using WeakAggComponentImplHelper5 ever since at least f5d6acb1aa368ce50045b949bc12deb4d4bc0c41 "INTEGRATION: CWS a11ysep (1.1.2); FILE ADDED", but e.g. AccessibleTabListBoxTable deriving from it implements queryInterface in a way that is incompatible with XAggregation (it should only have forwarded to AccessibleBrowseBoxTable::queryInterface, and rather implemented its logic in an AccessibleTabListBoxTable::queryAggregation override). Also, without this commit but instead with a local > diff --git a/accessibility/inc/extended/AccessibleBrowseBoxBase.hxx b/accessibility/inc/extended/AccessibleBrowseBoxBase.hxx > index d8bcd169ac2e..45797b838167 100644 > --- a/accessibility/inc/extended/AccessibleBrowseBoxBase.hxx > +++ b/accessibility/inc/extended/AccessibleBrowseBoxBase.hxx > @@ -63,6 +63,7 @@ class AccessibleBrowseBoxBase : > public ::cppu::BaseMutex, > public AccessibleBrowseBoxImplHelper > { > + void SAL_CALL setDelegator(css::uno::Reference<css::uno::XInterface> const &) final { assert(false); } > public: > /** Constructor sets specified name and description. If the constant of a > text is BBTEXT_NONE, the derived class has to set the text via on all of Linux, macOS, and Windows `make check` still succeeded, and running the resulting LibreOffice on macOS with the system's VoiceOver enabled, and doing "LibreOffice - Preferences... - LibreOffice - Advanced" and clicking around in the "Java runtime environments (JRE) already installed:" table (which actually uses AccessibleBrowseBoxBase via SvHeaderTabListBox::CreateAccessible in vcl/source/treelist/svtabbx.cxx) also still succeeded and produced audio, all without hitting that injected assert that should have fired if the XAggregation mechanism had been used after all. Change-Id: Ic213a03adf31bb1754443c1951b9b267f805115b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145477 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-10OAccessibleImplementationAccess was apparently effectively unused by nowStephan Bergmann
...as there were no calls to its OAccessibleImplementationAccess::getUnoTunnelId so no code apparently made use of that XUnoTunnel Change-Id: I35d392999f1c28e81f7ff4bf395f63642eb17bce Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145250 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-06Merge comphelper::OAccessibleContextHelper into ↵Stephan Bergmann
comphelper::OCommonAccessibleComponent Change-Id: I586ae8fe2842fd879ae2ae506c659d06dda16843 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145160 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-05Revert all the recent loplugin:unocast changesStephan Bergmann
...as obsoleted by ef533553559fe09b4afab651fc692885d1acf4ed "Rudimentary support for dynamic_cast on UNO proxy objects". This reverts all of: 4cfcc9ac37b90ce64c8402a41eb4638adb185b5c "loplugin:unocast (framework::Desktop)" 03efbf72f4ddf7a84aa8aabef348331bd4b75e8a "loplugin:unocast (vclcanvas::TextLayout)" 80099fdd51a69eaa6c36ca88ef772810e4a777fa "loplugin:unocast (SalGtkXWindow)" cc147f576d8687fb79c77d47d41dc4ba1678a469 "loplugin:unocast (sdext::presenter::CachablePresenterView)" 40db42be1d8fd0f9c6c8c5ba3767ddb9ee2034c2 "loplugin:unocast (vclcanvas::CanvasFont)" 2d1e7995eae29e2826449eb5179f5fae181794a5 "loplugin:unocast (CairoColorSpace)" 4c0bbe4bd97636207cf71a6aa120c67698891da9 "loplugin:unocast (canvas::ParametricPolyPolygon)" 89803666621c07d1b1ac9d3bd883f0ca192a91a0 "loplugin:unocast (vclcanas::CanvasBitmap)" d5e0c2c8db71878d21c2a7255af08cf5f9a6dd04 "loplugin:unocast (sfx2::DigitalSignatures)" c0c4519e0d5b555f59bbc04cc616454edfd1f4ce "loplugin:unocast (VCLXAccessibleComponent)" feb8b833a6245d42400f42a0bc789dc84594ee6f "loplugin:unocast (VCLXDialog)" 1fa58cc6cc9c3849753342a5d9a6ddfa461b5e66 "loplugin:unocast (VCLXMultiPage)" f481f036deb1b1b46f3038074c4659f3a91b9c6c "loplugin:unocast (DocumentSettingsSerializer)" 73df933f5fa5932f94e5a1b338a3eda00a9ce354 "loplugin:unocast (css::embed::EmbeddedUpdate)" 420165ab0ef03c0467f9d17f504de2d2fc78f0e6 "loplugin:unocast (canvas::tools' StandardColorSpace, StandardNoAlphaColorSpace)" 9abe8ee067e6c00f19d8a13346d53c4641c27166 "loplugin:unocast (MutableTreeNode)" 9f3022ceb036f23b4b0994c3e2fbd1001bff225a "loplugin:unocast (VCLXTabPage)" 1be70dda02c12a60778b7607cff2520ae1aa611e "loplugin:unocast (vcl::unotools::VclCanvasBitmap)" d6a70bb641b96e8e5616448c2378131ed62658b4 "loplugin:unocast (basegfx::unotools::UnoPolyPolygon)" 5a14f009e6782c077463c8cbb8e9cea3d7950107 "loplugin:unocast (xmlsecurity::Certificate)" 99009c9535dfa3e0d838989ccc7d84bfa2320ff4 "loplugin:unocast (sd::Annotation)" 0c7585c5fa78887e5459885ed744e8044fd76137 "loplugin:unocast (sd::TextApiObject)" 24e14afd1bfcaed6c200ab081973fba7e47267ca "loplugin:unocast (SignatureVerifierImpl)" 1a7ad0c10d286ce9ae2700ceb2fd50eed1fb43a4 "loplugin:unocast (pcr::PropertyEventTranslation)" a97e2d2702d9a6f37775ccee2c08c4f3b2479c4b "loplugin:unocast (RangePageBreaks)" 19dfdf86ad1f5b08041d8b7a9f196caf881231ab "iloplugin:unocast (pcr::OFormattedNumericControl)" f9785ea595fd8e911f6370e836fa579225b9e571 "loplugin:unocast (frm::OInterfaceContainer)" 5e5f40a4a92a31b0932c690219d002fcf18598cf "loplugin:unocast (ScVbaShapes)" 27b35b2c215b4832d4378ec3a7ecbba926552d06 "loplugin:unocast (ScVbaShapeRange)" cb3108f860065928552a86cf8acc4b3a95718ecf "cid#1517812 Dereference null return value" feba0ddb1521d1142560fe54b7d7696ee910237f "loplugin:unocast (weld::TransportAsXWindow)" 4d6c23216559eb48f9943bb49d6e475a6d64ba15 "loplugin:unocast (oox::ForumlaImExportBase)" 4844c096a8ab6a9a620c410a0949d4499f12a504 "loplugin:unocast (cairocanvas::SurfaceProvider)" 9a0b523e0a84d403b9092176ccec4b3e3efe42d0 "loplugin:unocast (cairocanvas::CanvasBitmap)" 8a5648d8e59b4b007dbbf3824777c19a21efc61e "loplugin:unocast (cairocanvas::TextLayout)" 28c27a0623bc78a0590858f97d03b620985bc84c "loplugin:unocast (cairocanvas::CanvasFont)" 53bc223cb3288e32a417696ee61c29e5f01f209d "loplugin:unocast (cairocanvas::RepaintTarget)" 5f70b0b9f6bc4ab145ddbd9155590ed4a3b1b9ec "loplugin:unocast (SvXMLImport)" 068187a898cdd2e26e9b16c348ecc1ed2dee3f29 "loplugin:unocast (VCLXWindow)" 88b4f966202717cd4ad38a30a8eda22c3e69ed35 "loplugin:unocast (sfx2::sidebar::SidebarController)" f1b7a69b280aefe2f1b3b0f32193494fd765f2bd "loplugin:unocast (SvxLineStyleToolBoxControl)" ba76f0ba7e8de4d2953739c952004b7d9af47197 "loplugin:unocast (i18npool::Calendar_gregorian)" 840154daf934d8df52ead1cb7acd798c4d30f007 "loplugin:unocast (framework::AddonsToolBarWrapper)" b0e9c4c5f063cefa9557810e3349bdb9c7493091 "loplugin:unocast (GrammarCheckingIterator)" 8ee6cfc9655ce9de4617cea1a0d9cb9d7a4fbfac "loplugin:unocast (ucb::ucp::ext::Content)" 5b8cd77c112bc8c0e92b8fec215c3c8e802bbc0a "loplugin:unocast (basic::SfxScriptLibraryContainer)" 9e73ff9fce12e102bb3c3cea8d8bb96c88f2c9ad "loplugin:unocast (sdext::presenter::PresenterNotesView)" a98acca8fbc38d3fd5600ae5056a8e42b6d8a40d "loplugin:unocast (SelectionChangeHandler)" c0b59ad6e35b0cb0dea0821e95f95569739078c1 "Consistently use comphelper::getSomethingImpl<I>(aIdentifier, this)" 276e3ccbdd3259ec3daf8a1a98fa7f406b14e21c "loplugin:unocast (vclcanvas::RepaintTarget)" Change-Id: I37c73e3422a5154bf6cb647640d2d3f23db8bc34 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145063 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2022-12-23loplugin:unocast (VCLXAccessibleComponent)Stephan Bergmann
(See the upcoming commit introducing that loplugin:unocast on why such dynamic_casts from UNO types are dangerous.) Change-Id: I11496cc1d37e89ce8f11991f86c7b60bb1b93106 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144748 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2022-11-23loplugin:unusedfields make some fields privateNoel Grandin
this is one of the secondary analyses this plugin performs Change-Id: Iaa4424c2396470c6f1df85b0290fbffdda35fa08 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143177 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-09-27use more string_view in accessibility..configmgrNoel Grandin
Change-Id: Ie16d36faac7d06e275348ed68e6c6b2518534fd6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140636 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-09-25a11y: Use FontSlant for "CharPosture"Michael Weghorn
The platform a11y integration code expects a `FontSlant` in the "CharPosture" `Any` (s. e.g. `get_style_value`/`FontSlant2Style` in `vcl/unx/gtk3/a11y/atktextattributes.cxx` or `QtAccessibleWidget::attributes`) and that's also what e.g. Writer sets for that attribute for text in the document, so do the same in `CharacterAttributesHelper::CharacterAttributesHelper`. After handling for "CharPosture" was added for the Qt-based VCL plugins in commit 99841da686625428b8ad2e219dd19e5fbfb145f5 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Tue Jul 20 13:23:21 2021 +0200 qt a11y: Report font style text attribute (e.g. italic) , clicking through the a11y hierarchy of e.g. Writer's "Page Style" dialog in Accerciser's treeview of the LO a11y hierarchy would otherwise crash LO when used with the qt6 VCL plugin. With this in place, the style is reported correctly there. (Tested by temporarily setting "oblique" style using glade for the "Next style" label in the "Organizer" tab in that dialog's UI file.) Change-Id: Ibea42db067e0cdb3b85c80dbcca5939b3dfe5570 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140527 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-09-19OSL_ENSURE->assert where we would crash if not trueMike Kaganski
Change-Id: Ib6c2806070ae11b5542fcbba284f2640400bf984 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140131 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2022-09-15tdf#42982 improve UNO API error reportingPoonamShokeen
Change-Id: Ibaf4bb0a9c9a8f613fd63ccd53a0e29d840fb21a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137904 Tested-by: Jenkins Reviewed-by: Hossein <hossein@libreoffice.org>
2022-09-14move ErrCode to comphelper and improve debug output stringNoel Grandin
need to move it, because modules "below" vcl want to use the debug output method Change-Id: Ibcaf4089a1e0b3fcc0b5189c7ebf1aae90f50b48 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139791 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-09-02[API CHANGE] tdf#150683 a11y: Switch a11y child index to 64 bitMichael Weghorn
With 16k column support in Calc enabled by default in commit 4c5f8ccf0a2320432b8fe91add1dcadf54d9fd58 Date: Tue Mar 8 12:44:49 2022 +0100 change default Calc number of columns to 16384 (tdf#50916) , the number of Calc cells in a spreadsheet is larger than SAL_MAX_INT32, meaning that a 32-bit a11y child index is no more enough and using it resulted in integer overflows in methods handling corresponding Calc cells in the a11y layer. This e.g. had the effect of the Orca and NVDA screen readers not announcing focused or selected cells properly when their a11y child index was out of the 32-bit integer range. Switch the internal a11y child indices to 64 bit to be able to handle this properly internally. Since the platform APIs (at least AT-SPI on Linux and IAccessible2 on Windows; from what I can see LO's macOS a11y bridge doesn't directly expose the child index) are still restricted to 32 bit, larger child indices still cannot be exposed via the platform APIs. As a consequence, use of the the IAccessible2 and AT-SPI methods that use the child index remains problematic in those cases where the child index is larger. However, as an alternative to using the AT-SPI Table interface and the IAccessibleTable/ IAccessibleTable2 interfaces with the child index to retrieve information about a specific cell, both AT-SPI and IAccessible2 also provide interfaces to retrieve that information directly from the cell object (TableCell interface for AT-SPI, IAccessibleTableCell for IAccessible2). Those interfaces are already implemented/exposed for winaccessibility (s. `CAccTable`) and the qt5/qt6/kf5 VCL plugins (s. the `QAccessibleTableCellInterface` methods implemented in `QtAccessibleInterface`). With the switch to 64-bit internal a11y child indices, these now behave correctly for cells with a child index that doesn't fit into 32 bit as well. NVDA on Windows already uses the IAccessibleTableCell interface and thus announcing focused cells works fine with this change in place. Orca on Linux currently doesn't make use of the AT-SPI TableCell interface yet, but with a suggested change to do so [1], announcement of selected cells works with the qt6 VCL plugin with a current qtbase dev branch as well - when combined with the suggested changes to implement support for the AT-SPI TableCell interface in Qt [2] [3] and the LO change based on that [4] and a fix for a nullptr dereference [5]. The gtk3 VCL plugin doesn't expose the AT-SPI TableCell interface yet, but once it does so (via `AtkTableCell`), it also works with the suggested Orca change [1] in place. (Adding that is planned for an upcoming change, works with a local WIP patch.) For handling return values that are larger than what platform APIs support, the following approach has been chosen for now: 1) When the return value is for the count of (selected) children, the maximum value N supported by the platform API is returned. (This is what `ScAccessibleTableBase::getAccessibleChildCount` did previously.) The first N elements can be accessed by their actual (selection) indices. 2) When the return value is the child/cell index, -2 is returned for objects whose index is greater than the maximum value supported by the platform API. Using a non-negative value would mean that the index would refer to *another* actually existing child. A child index of -1 on the other hand tends to be interpreted as "child is invalid" or "object isn't actually a child of its (previous) parent any more)". For the Orca case, this would result in objects with a child index of -1 not being announced, as they are considered "zombies" [6]. What's still somewhat problematic is the case where more than 2^31 children are *selected*, since access to those children still happens by the index into the selection in the platform APIs, and not all selected items are accessible this way. (Screen readers usually just retrieve the first and last element from the selection and announce those.) Orca already seems to apply different handling for the case for fully selected rows and columns, so "All cells selected" or "Columns ... to ... selected" is announced just fine even if more than 2^31 cells are selected. (Side note: While Microsoft User Interface Automation - UIA - also uses 32-bit indices, it also has specific methods in the ISelectionProvider2 interface that allow to explicitly retrieve the first and last selected item, `ISelectionProvider2::get_FirstSelectedItem` and `ISelectionProvider2::get_LastSelectedItem`, but we currently don't support UIA on Windows.) Bound checks at the beginning of the methods from the `XAccessibleContext`, `XAccessibleSelection` and `XAccessibleTable` interfaces that take a child index (or in helper methods called by those) should generally already prevent too large indices from being passed to the methods in the lower layer code that take smaller integer types. Such bound checking has been been added in various places where it wasn't present yet. If there any remaining issues of this kind that show after this commit, they can probably be solved in a similar way (s.e.g. the change to `AccessibleBrowseBox::getAccessibleChild` in this commit). A few asserts were also added at places where my understanding is that values shouldn't be larger than what is supported by a called method anyway. A test case will be added in a following change. [1] https://gitlab.gnome.org/GNOME/orca/-/merge_requests/131 [2] https://codereview.qt-project.org/c/qt/qtbase/+/428566 [3] https://codereview.qt-project.org/c/qt/qtbase/+/428567 [4] https://gerrit.libreoffice.org/c/core/+/138750 [5] https://codereview.qt-project.org/c/qt/qtbase/+/430157 [6] https://gitlab.gnome.org/GNOME/orca/-/blob/82c8542002e36e0d3d918088d583162d25136143/src/orca/script_utilities.py#L5155 Change-Id: I3af590c988b0e6754fc72545918412f39e8fea07 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139258 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-08-25vcl: rename GetNonMnemonicString() and make it standalone functionChris Sherlock
Renamed GetNonMnemonicString() to removeMnemonicFromString() Change-Id: I272714f97bb6d9174360631c18c4fd9bb485698e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138103 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2022-08-18Move tools/diagnose_ex.h to comphelper/diagnose_ex.hxxStephan Bergmann
...so that its TOOLS_WARN_EXCEPTION can be used in comphelper/source/misc/logging.cxx in a follow-up commit. (And while at it, rename from diangose_ex.h to the more appropriate diagnose_ex.hxx. The comphelper module is sufficiently low-level for this immediate use case, so use that at least for now; o3tl might be even more suitable but doesn't have a Library until now. Also, for the immediate use case it would have sufficed to only break DbgGetCaughtException, exceptionToString, TOOLS_WARN_EXCEPTION, TOOLS_WARN_EXCEPTION_IF, and TOOLS_INFO_EXCEPTION out of include/tools/diagnose_ex.h into an additional new include/comphelper/diagnose_ex.hxx, but its probably easier overall to just move the complete include file as is.) Change-Id: I9f3222d4ccf1a9ac29d7eb9ba1530d53e2affaee Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138451 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2022-08-09move scrbar.hxx to vcl/toolkitCaolán McNamara
Change-Id: I77038cbf500976703ad41365da9a675a698863a2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137979 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
2022-07-20move wintypes.hxx from tools to vclChris Sherlock
Change-Id: Ief9949fd4252de9e33df172af07aa7ed097b5520 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136560 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2022-07-11tools: rename getHeight/Width() to GetOpenHeight/Width()Chris Sherlock
By default Rectangle uses closed interval, if we really want to use half open intervals then we should specifically say as such in the name. Change-Id: Id7a91120ba1a1a4bc330014216b73a692dbf03a2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136575 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2022-07-08[API CHANGE] Drop css::accessibility::XAccessibleStateSetNoel Grandin
which is internal API, unused (as far as I can tell) by external users. This state is purely a bitset (as implemented by utl::AccessibleStateSetHelper) so we can just return it as a 64-bit value. This shaves significant time off the performance profiles of code that loads very complex shapes, because this state is frequently used, and we no longer need to allocate a return value on the heap for every call. Change-Id: Icf1b3bd367c256646ae9015f9127025f59459c2c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136786 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-06-09Accessibility for IconViewMike Kaganski
Change-Id: I65ca9d43f70a50e2e95aabfc3b8ba1b15f9ff8be Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135226 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2022-06-06clang-tidy modernize-pass-by-value in accessibilityNoel Grandin
Change-Id: Ib0658b5a0bb33e5f990b8ce4bf25b2d9cef32505 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135445 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-24Use o3tl::make_unsigned in some placesStephan Bergmann
...where a signed and an unsigned value are compared, and the signed value has just been proven to be non-negative here Change-Id: I20600d61a5d59d739bc1bee838c0038e4611aec2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134875 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2022-05-20new loplugin:unnecessary lockingNoel Grandin
off by default, since each warning needs careful inspection Change-Id: I805c1d1cdde531a1afdc76e87b22f879fc3c9753 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134641 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-05Just use Any ctor instead of makeAny in accessibilityStephan Bergmann
Change-Id: I7860a176bfd44d8f5071ece03229bc7f768d9d52 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133851 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2022-04-20loplugin:passstuffbyrefNoel Grandin
Change-Id: I336fd329b577b6fa141265d8bc7ce67784bd7306 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133210 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-03-29a11y: Use new table model change types for row/col ins/delMichael Weghorn
This ports most existing uses of the now deprecated `AccessibleTableModelChangeType::INSERT` and `AccessibleTableModelChangeType::DELETE` to emit events of the the four new table model change types added in Change-Id I30821a5acafa4f3d1dafdfc219f3b4568d9a6e89, "a11y: Add new table model change types for row/col insertion/del" instead, which among others fixes the a11y events that are sent on the platform level for gtk3 and macOS, s. commit message of the mentioned change for more details. From all I can see, `AccessibleGridControlTable::commitEvent` is just meant to handle removal of rows, not columns, so add a corresponding assert there. (See how only row-related a11y events are emitted in `svtools/source/table/tablecontrol_impl.cxx`, and the "columns aren't selectable" comment for `AccessibleGridControlTable::isAccessibleColumnSelected`. Given that the full range of rows would previously have been sent in the `AccessibleTableModelChangeType::DELETE` event for column removal, this should still have worked in practice, since this would have cleared the whole vector, and elements would have been inserted on demand as needed again later. However, if that should ever be needed in the future, it should be handled more explicitly.) The handling of sending events when rows or columns are inserted or deleted in a Calc spreadsheet is more fundamentally broken and will be handled in a separate commit. Change-Id: Icfd5e326143e8e90cc513e430bfabbba39e7bdc6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132218 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-03-09a11y: Leave cell vector handling to AccessibleGridControlTableMichael Weghorn
Use `AccessibleGridControlTable::getAccessibleCellAt` and cast to `AccessibleGridControlTableCell*` instead of directly accessing the cell vector in `AccessibleGridControl::commitCellEvent`. `AccessibleGridControlTable::getAccessibleCellAt` just needs row and column index as parameters, and already takes care of everything else that's needed. This includes creating an accessible object for the given indices on demand. Therefore, limiting this to only already existing a11y objects, which was done to avoid crashes in commit 4fc7deb7b0528010ebf644654bf4a36594e03f8c Date: Thu Oct 3 23:16:34 2013 +0200 fix STL assert in accessibility::AccessibleGridControl::commitTableEvent is no longer needed. With this change in place, details of how cells are organized in the vector only need to be known inside of the `AccessibleGridControlTable` class itself, so drop the now unused method `AccessibleGridControlTable::getCellVector`. (This code path is e.g. used when using the macro from tdf#147742.) Change-Id: I21027f0edc2904475ad6cc5fb136316f387499dc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131248 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-03-09Related: tdf#147742 a11y: Dispose table cells as wellMichael Weghorn
When disposing `AccessibleGridControlTable` (which is done in `AccessibleGridControl::disposing`), also dispose its cells and clear the references. Without this in place, a crash sometimes occured when running the macro in the sample doc from tdf#147742 several times and clicking around in the table, with the Orca screen reader active. This was because a reference to one of the `AccessibleGridControlTableCell`s was still around after the `AccessibleGridControlTable` had already been disposed, and when trying to get its accessible name, the call to `IAccessibleTable::GetAccessibleObjectName` in `AccessibleGridControlCell::getAccessibleName` would fail because the object that the `m_aTable` reference was referring to had already been deleted. With the cell being disposed as well, the `ensureIsAlive()` check at the beginning of `AccessibleGridControlCell::getAccessibleName` will throw a `DisposedException`, that is then handled properly in the calling code. Backtrace (with master as of commit 2598c35dbac8dc4492ad1fc79925c5347e683af0): #0 0x00007fffd9152ed3 in accessibility::AccessibleGridControlCell::getAccessibleName() (this=0x55555bbcdb70) at /home/michi/development/git/libreoffice/accessibility/source/extended/AccessibleGridControlTableCell.cxx:79 #1 0x00007fffe45e864a in wrapper_get_name(AtkObject*) (atk_obj=0x55555bbcef60) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/a11y/atkwrapper.cxx:369 #2 0x00007fffe3a87e5c in () at /lib/x86_64-linux-gnu/libatk-bridge-2.0.so.0 #3 0x00007fffe3a947de in () at /lib/x86_64-linux-gnu/libatk-bridge-2.0.so.0 #4 0x00007fffe3a94caf in () at /lib/x86_64-linux-gnu/libatk-bridge-2.0.so.0 #5 0x00007ffff75feff0 in () at /lib/x86_64-linux-gnu/libdbus-1.so.3 #6 0x00007ffff75eea1c in dbus_connection_dispatch () at /lib/x86_64-linux-gnu/libdbus-1.so.3 #7 0x00007fffe36d74a5 in () at /lib/x86_64-linux-gnu/libatspi.so.0 #8 0x00007fffe9ab8cdb in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #9 0x00007fffe9ab8f88 in () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #10 0x00007fffe9ab903f in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #11 0x00007fffe460f546 in GtkSalData::Yield(bool, bool) (this=0x55555567c750, bWait=true, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkdata.cxx:405 #12 0x00007fffe461402a in GtkInstance::DoYield(bool, bool) (this=0x55555567c5d0, bWait=true, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/unx/gtk3/gtkinst.cxx:427 #13 0x00007fffef7ab4be in ImplYield(bool, bool) (i_bWait=true, i_bAllEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:474 #14 0x00007fffef7ac0b0 in Application::Yield() () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:558 #15 0x00007fffef7ab18e in Application::Execute() () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:452 #16 0x00007ffff7c309af in desktop::Desktop::Main() (this=0x7fffffffd780) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1604 #17 0x00007fffef7c9d75 in ImplSVMain() () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:202 #18 0x00007fffef7c9e96 in SVMain() () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:234 #19 0x00007ffff7c947c9 in soffice_main() () at /home/michi/development/git/libreoffice/desktop/source/app/sofficemain.cxx:98 #20 0x00005555555549f4 in sal_main () at /home/michi/development/git/libreoffice/desktop/source/app/main.c:51 #21 0x00005555555549da in main (argc=4, argv=0x7fffffffdaf8) at /home/michi/development/git/libreoffice/desktop/source/app/main.c:49 Change-Id: Idffa76809cbfad746f27d18191fdfc905b64ee0e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131247 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-03-09a11y: Drop AccessibleGridControl::m_xCellMichael Weghorn
It's only used in one place and I see no need to keep a Reference in this class, so use a local variable instead of a class member. Instead of disposing this single cell in `AccessibleGridControl::disposing`, `AccessibleGridControlTable` should take care of disposing all of its cells, which will be added in a following commit (Change-Id Idffa76809cbfad746f27d18191fdfc905b64ee0e, "Related: tdf#147742 a11y: Dispose table cells as well"). Change-Id: Ia7c84c65b45dde28850f48b12ab9558f2dc7d47c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131246 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-03-09a11y: Let AccessibleGridControlTable calculate child indexMichael Weghorn
Just call `AccessibleGridControlTable::getAccessibleCellAt`, which already takes care of calculating the proper child index from row and column index. Change-Id: Id463c14108158c5833231f95cf16847764f5b646 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131245 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-03-09a11y: Move TABLE_MODEL_CHANGED handling to tableMichael Weghorn
Move the handling for the `AccessibleEventId::TABLE_MODEL_CHANGED` event of type `AccessibleTableModelChangeType::DELETE` from `AccessibleGridControl` into `AccessibleGridControlTable`. To do so, make `AccessibleGridControlBase::commitEvent` virtual and override it in `AccessibleGridControlTable`. The method already gets called from `AccessibleGridControl::commitTableEvent` where the event was handled previously. Handling the details of how cells are internally organized in a vector only in the class itself rather than in different places seems to make sense. There are currently more cases where `AccessibleGridControl` deals with the cell vector directly that will be addressed in following commits. Change-Id: I26a7737432ecb198eac00279a8242d22e3c661d9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131244 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-03-07tdf#42982: improve UNO API error reportingDeep17
Change-Id: I82adf31db09d2157ee8f1c776f33e8a0107c3b51 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131090 Tested-by: Jenkins Reviewed-by: Ilmari Lauhakangas <ilmari.lauhakangas@libreoffice.org>
2022-03-04tdf#147742 a11y: AccessibleGridControlBase: get accessible desc on demandMichael Weghorn
Previously, the accessible description was retrieved in the `AccessibleGridControlBase` ctor and stored in a class member. Change that to fetch the description on demand. `TableControl::GetAccessibleObjectDescription` is used to get the description, which currently uses the row and column index of the currently active cell. When using the macro from the sample document in tdf#147742 with the Orca screen reader active, no cell was active at the point that the ctor was called, so `ROW_INVALID`/`COL_INVALID` were used, resulting in a crash later (s. backtrace in tdf#147742). If necessary, `TableControl::GetAccessibleObjectDescription` could be extended to allow passing an explicit row/column index, as is the case for `TableControl::GetAccessibleName`, then override `AccessibleGridControlBase::getAccessibleDescription` in `AccessibleGridControlCell`, similar to how it is done for the accessible name in Change-Id I87eabb2ce3c99d4a622d919ab0fb8d7fb3beed6b ("tdf#147742 a11y: AccessibleGridControl...: get accessible name on demand"). Change-Id: I58f3a2b0c83e2cdbae103811505d7d0a4f8bfc52 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130934 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-03-04tdf#147742 a11y: AccessibleGridControl...: get accessible name on demandMichael Weghorn
Base class `AccessibleGridControlBase` was retrieving an accessible name and storing it in class member 'm_aName'. For the classes representing cells, derived from `AccessibleGridControlCell`, the index is needed to get a meaningful name, so the name retrieved in the `AccessibleGridControlBase` ctor with hard-coded row/column indices of 0 was replaced again in the `AccessibleGridControlCell` ctor. Replace that logic to just retrieve the name on demand, and override 'getAccessibleName' in `AccessibleGridControlCell` using the logic used in its ctor previously. (No functional change intended here, but a somewhat similar handling for the accessible description was causing a crash when the Orca screen reader was active. This will be handled in a following commit.) Change-Id: I87eabb2ce3c99d4a622d919ab0fb8d7fb3beed6b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130933 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-03-04tdf#147742 a11y: AccessibleGridControlTable needs SolarMutexMichael Weghorn
... in `AccessibleGridControlTable::getAccessibleIndexInParent`, just like in the implementation of the other a11y UNO API methods. Change-Id: I4ab7a2626db09398c79fe53d85c9802136decbf7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130925 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-03-04tdf#147742 a11y: AccessibleGridControlHeader needs SolarMutexMichael Weghorn
... in `AccessibleGridControlHeader::getAccessibleIndexInParent`, just like in the implementation of the other a11y UNO API methods. Change-Id: Ib3bd44e73ae54bb1df05dc2714ce1f793f7222db Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130924 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-03-04a11y: Use more conventional indentation of 4 spacesMichael Weghorn
I hadn't even noticed that 5 spaces were used until the Jenkins CI build for my change adding a single line only indented by 4 spaces failed [1] due to our clang indentation plugin... [1] https://gerrit.libreoffice.org/c/core/+/130924/1#message-7a5209670085f69e53fd592ba41c2bd4b74a360a Change-Id: I859e8de4c02ff33c6a9fee957d868cf6e4ddd907 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130932 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-02-24a11y: Simplify AccessibleGridControlTable::getAccessibleCellAtMichael Weghorn
Call 'AccessibleGridControlTable::getAccessibleChild' with the calculated child index instead of duplicating the handling to retrieve/create the proper accessible object. Change-Id: I8135f379f304d0e8ac61806eba9b3bd6c644f3a0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130443 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2022-02-06We know the length hereMike Kaganski
Change-Id: I630b7fbda7c9ebf578e74260a0d67eea32e9e429 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129549 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2022-01-13Recheck modules [a-c]* with IWYUGabor Kelemen
See tdf#42949 for motivation Change-Id: I74a3c3a67c3639376e2251c3eb917fa4139dfbd0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127808 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
2021-12-25pass unique_lock as param in WeakComponentImplHelperBase::disposingNoel Grandin
so that subclasses can drop the lock while calling listeners Change-Id: I6105438110af08f10b0ed50057b28172c3442b95 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127434 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2021-12-24use comphelper::WeakComponentImplHelper in EditBrowseBoxTableCellAccessNoel Grandin
Change-Id: I36a1dd4fa488517a1e69d3a1c4b03c850d1a933e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127404 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2021-12-21loplugin:flatten in accessibility..basicNoel Grandin
Change-Id: If2cc282c2b135d634daf393a082c29049b10a677 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127223 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2021-12-19osl::Mutex->std::mutex in AccessibleBrowseBoxAccessNoel Grandin
Change-Id: Idc6e32b81190b3940a42ddb4bb30f1eff35b59fe Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127070 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2021-12-03Fix --disable-scripting for DESKTOP buildJan-Marek Glogowski
Unfortunatly we cannot add --disable-scripting to sub_conf_defaults, because Java currently has no equivalent to the PYTHON_FOR_BUILD setting. Change-Id: I89938a17307a363f5de808200914940503312829 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126186 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
2021-12-01gbuild: introduce plugin + loader conceptsJan-Marek Glogowski
This introduces two concepts: a plugin and its loader (library) LO currrently has dependency cycles for some libraries. There is scui, which depends on sc, while sc dlopen's scui. There are the various vclplug_*, i18npool plugins, filters/gie, acc, etc. Usually these plugins link to their loader library, because they use its symbols. But as a result there is no sensible way to express the runtime dependency of loaders on the plugins. In GNU libtool plugins are called modules and they are implemented in an IMHO more sensible way by allowing missing symbols at link time. This way you can have a dependency from the loader library to its plugins, as the plugins don't depend on the loader, but you lose the link time detection of missing symbols. While this is in theory possible in LO too, LO currently has plugins, like acc (accessibility), loaded by tk (toolkit), which depends on svt (svtools), which itself depends on tk, so dropping the tk dependency for acc on its own doesn't help :-( And while the dependency of the plugins on their loader is fine for the shared / DYNLOADING build, for the "static" builds you must (somehow) link the plugins into the executables. I also codeified a few rules into the build system along with it: * just plugins are allowed to depend / link other plugins * plugins aren't allowed to be linked into the merge lib * plugin loaders are "limited" to libraries At the high level, this is implemented via new gbuild calls: * gb_Library_set_plugin_for,lib,loader: declare a library to be a plugin of a loader library and add a dependeny from the plugin library to the loader library * gb_Library_set_plugin_for_nodep,lib,loader: ^^^^ without adding the library dependeny * gb_Helper_register_plugins_for_install: "plugin" replacement for gb_Helper_register_libraries_for_install to implement some additional checks in the build system In the end this patch just adds a bit syntactic sugar and nothing changes for any build. Change-Id: I7b01d9c384cbc5838bd2cc93aff18e4868939d6e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126163 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
2021-11-29move PopupMenu::IsInExecute out of vcl/include/menu.hxxCaolán McNamara
Change-Id: I01af38dd57a645ea0afeaff033ce6d07dfe09535 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126026 Tested-by: Caolán McNamara <caolanm@redhat.com> Reviewed-by: Caolán McNamara <caolanm@redhat.com>
2021-11-19loplugin:stringliteraldefine in accessibilityNoel Grandin
Change-Id: Ie27c32ea51ebcc9ad0d0d5a1d160d55c23727cd5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125274 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>