Age | Commit message (Collapse) | Author |
|
...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>
|
|
(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>
|
|
Inspired by
<https://gcc.gnu.org/pipermail/gcc-patches/2022-November/607102.html> "[PATCH]
doc: -Wdelete-non-virtual-dtor supersedes -Wnon-virtual-dtor", drop explicitly
enabling -Wnon-virtual-dtor in favor of -Wdelete-non-virtual-dtor, which is
already enabled by -Wall.
(-Wdelete-non-virtual-dtor first appeared in Clang 3.0,
<https://github.com/llvm/llvm-project/commit/8bd428574c717e68a8274739d2ba0f6dc16fd0fb>
"Add new warning that warns when invoking 'delete' on a polymorphic, non-final,
class without a virtual destructor", and GCC 4.7,
<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=014ab419efc12a59efebd2720d79e1c055675c85>
"invoke.texi: Document -Wdelete-non-virtual-dtor. [...]")
Dropping the explicit setting of -Wnon-virtual-dtor (and nowhere setting it
implicitly via -Weffc++) means we can get rid of lots of places that either set
-Wno-non-virtual-dtor or use some pragma to ignore -Wnon-virtual-dtor.
(In various places across extensions/source/activex/ and winaccessibility/, the
commits f26996bd3398afa789a5491968244563ccf70908 "Silence
-Werror,-Wnon-virtual-dtor in generated so_activex.h (clang-cl)" and
c6086ca6535692496fbd718d174d8eb5a5dea7c7 "Silence -Werror,-Wnon-virtual-dtor in
generated UAccCOM.h (clang-cl)" had singled out some includes to wrap them in
pragmas. Now that those pragmas are gone again, move those includes back to
where they had been prior to being singled out. And the -Wno-non-virtual-dtor
in external/firebird/macos-arm64.patch.0 appeared first in
ccd0e5f445d4a7d0e7aca6c23c02c61bf14510b2 "Make firebird build for macOS on
arm64", which, though it doesn't state it explicitly, apparently created that
patch's builds/posix/prefix.darwin_arm64 as a copy of firebird's already
existing builds/posix/prefix.* files, which routinely include that warning
option too, so keep it there too even if it is probably irrelevant throughout.)
Change-Id: I7e4fa9f2c07e267b2ed15607905027f6b78142f3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143182
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
|
|
Together with
Change-Id Ifcf9304883e2e824ea1b7998d7767e474b87c8b6
("tdf#119788 tdf#117173 add accessibility NOTIFICATION role")
and Change-Id Id62b3942dc17c3a1ed6a08d23438406e5a19c39d
("tdf#117173 a11y: Send SHOWING state change event on
Window{Show,Hide}"), this makes NVDA announce the notification
in the Search and Replace dialog as an alert, similar
to what browsers do e.g. in the alert on empty input
for the input validation example at
https://www.w3.org/WAI/tutorials/forms/validation/ .
Change-Id: I3263df4711f84a6dd9e178aaaaad340b128aa074
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140091
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
and use it to make screen readers announce notifications from the
'Find and Replace' dialog
Change-Id: Ifcf9304883e2e824ea1b7998d7767e474b87c8b6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139709
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: I8925e28d46f1ed983581b539cfbe6a01c034e0ce
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140098
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
|
|
Their doc says that they are for the
`accSelect` implementation, but that one doesn't
actually make use of them.
Change-Id: I9185a905d00484fcb950a1bdb6013e07a089bb22
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140069
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
The previous way of reporting "Hannover" as app name, "3.0" as
version and no toolkit name and version looks rather arbitrary.
Can be queried e.g. from NVDA's Python console as follows after
pressing Keypad_Insert+Ctrl+Z with any LibreOffice UI element focused:
>>> focus.IAccessibleObject.QueryInterface(IA2.IAccessibleApplication).appName
'Hannover'
>>> focus.IAccessibleObject.QueryInterface(IA2.IAccessibleApplication).appVersion
'3.0'
>>> focus.IAccessibleObject.QueryInterface(IA2.IAccessibleApplication).toolkitName
' '
>>> focus.IAccessibleObject.QueryInterface(IA2.IAccessibleApplication).toolkitVersion
' '
Report the actual app name and version. For the toolkit use "VCL"
as name and the same version that LibreOffice has:
>>> focus.IAccessibleObject.QueryInterface(IA2.IAccessibleApplication).appName
'LibreOfficeDev'
>>> focus.IAccessibleObject.QueryInterface(IA2.IAccessibleApplication).appVersion
'7.5'
>>> focus.IAccessibleObject.QueryInterface(IA2.IAccessibleApplication).toolkitName
'VCL'
>>> focus.IAccessibleObject.QueryInterface(IA2.IAccessibleApplication).toolkitVersion
'7.5'
Change-Id: I3c6bdb79e6b945c0f9707bfa7bada0fb456d6e05
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139743
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: I68c895033d26c81c76e680d2042aac941d56d213
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139707
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
|
|
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>
|
|
... and doesn't increase readability.
Change-Id: I62f3b37e8b8b948600e4d5e721c67a575628f1d3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139217
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Those were only used by
`AccObjectWinManager::UpdateAccSelection`,
which has been dropped in
Change-Id I49bfddb636721d9142a88b7ce1eb3ee3a2f9c695
("wina11y: Drop unused AccObjectWinManager::UpdateAccSelection").
Change-Id: I11d1ad3f01929a68e341f910ec6382f91227e3c4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139124
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
It was already unused when it was added in
commit a18bdb3bc05e761704cc345a66a9d642bc4f4a0a
Date: Thu Nov 14 08:18:05 2013 +0000
Integrate branch of IAccessible2
`CMAccessible::get_accSelection` already queries
information on demand.
The dropped method looks like another one of the methods that
could be used for manual bookkeeping of information
instead of querying them from the underlying UNO
interfaces on demand. But retrieving them on demand
seems preferable, s.a. the commit message in
commit fcf4a26275d7503835f9aa23cb94938809840300
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Wed Jan 5 13:41:53 2022 +0000
tdf#146306 wina11y: Retrieve accessible desc on demand
> Querying up-to-date values from the underlying
> UNO interfaces on demand instead of doing extra
> manual bookkeeping in the winaccessibility code
> may be possible for more a11y attributes in addition
> to the accessible description handled in this commit,
> but each one will have to be looked at separately.
Change-Id: I49bfddb636721d9142a88b7ce1eb3ee3a2f9c695
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139123
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: I354805dc54769cfa4564b0c1fd3be15f6c060b1d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138188
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
|
|
The only include of the generated header file
`AccessibleKeyBinding.h` was in `AccActionBase.cxx`,
but that doesn't make any use of what's defined in
the header, so just drop the include and the unused
IDL files altogether. (The IDL files are part of the
winaccessibility-specific UAccCOMIDL, unrelated to
the IDL files for the UNO API.)
`CMAccessible::get_accKeyboardShortcut` directly operates
on the `XAccessibleKeyBinding` UNO interface ever since
commit a18bdb3bc05e761704cc345a66a9d642bc4f4a0a
Date: Thu Nov 14 08:18:05 2013 +0000
Integrate branch of IAccessible2
Just the winaccessibility directory initially.
(the commit also adding those 2 IDL files), so it's
unclear to me what might have been the intended use.
Change-Id: I1a08e8ea789ca92e52640a0006f20fac219f6733
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137866
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
This is one of the LO- and winaccessibility-specific
(i.e. not part of the UNO API and not from upstream
IAccessible2) IDL files and it's unused, so drop it.
Change-Id: I8802934da174dda3c8b35c39c2196a0ac14a7c1e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137865
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: I5b2344c90315aec974e27bba5e3a44e201ffc283
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137860
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: Ia725d6655512632b78abfa4f3791406724ca29ad
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137859
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
The location is already retrieved on demand from the
underlying `XAccessible` in `CMAccessible::accLocation`
and the separately remembered location was just used
as fallback in case `m_xAccessible` was not (no more)
set.
However, when there is no valid associated `XAccessible`,
there is probably no value in returning any location
anyway, so just return `S_FALSE` for that case, as
other `CMAccessible` methods also do.
Whether the separately remembered `m_sLocation`
was up to date is also questionable, s.a.
Change-Id I04d0230d3599466aaa92082caba54da22a3b1a28,
"wina11y: Drop AccObjectManagerAgent::UpdateLocation".
This is also in line with what's mentioned in
commit fcf4a26275d7503835f9aa23cb94938809840300
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Wed Jan 5 13:41:53 2022 +0000
tdf#146306 wina11y: Retrieve accessible desc on demand
> Querying up-to-date values from the underlying
> UNO interfaces on demand instead of doing extra
> manual bookkeeping in the winaccessibility code
> may be possible for more a11y attributes in addition
> to the accessible description handled in this commit,
> but each one will have to be looked at separately.
Change-Id: I2fc51939a5db1896e02efacb1cf5fbc90ce87c04
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137858
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
That static method doesn't do anything.
`_IMPL_WIN` is not defined, so the
#ifdef _IMPL_WIN
if( pWinManager )
pWinManager->SetLocation( pXAcc, top, left, width, height );
#endif
in the method is unused.
Since `CMAccessible::accLocation` already retrieves the
current location from the underlying `XAccessible` on demand,
I don't see a need to update the location manually
in the first place, so there should be no need to enable that,
code, just drop it.
Also drop `AccObjectWinManager::SetLocation` which was
unused since `AccObjectManagerAgent::UpdateLocation`
(s. above) would have been the only call site.
Change-Id: I04d0230d3599466aaa92082caba54da22a3b1a28
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137857
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
This is essentially the Windows version of
commit 12f96c3d0f61018cfa83c940765311aa9015f60a
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Thu Aug 4 13:27:32 2022 +0200
qt a11y: implement QtAccessibleWidget::{row,column}HeaderCells
Tested using NVDA's Python Console as follows:
1) start LO Writer, "Table" -> "Insert Table"
2) select to create table with 2 rows, 2 columns
3) make sure "Heading" is checked, "Heading rows": 1
4) "Insert"
5) in the first row, type "First heading" into first column,
"Second heading" into second column
5) start NVDA
6) move cursor to the table cell in second row first column
(i.e. the cell below "Heading 1")
7) press KP_Insert+Ctrl+Z to start NVDA's Python console
8) Use NVDA's Python console to call corresponding IAccessible2
methods and check the result:
>>> from IAccessibleHandler import IA2
>>> cell = focus.parent.IAccessibleObject.QueryInterface(IA2.IAccessibleTableCell)
>>> cell.columnHeaderCells
(<comtypes.LP_POINTER(IUnknown) object at 0x010528A0>, 2)
>>> header_cell = cell.columnHeaderCells[0].contents
>>> header_cell.QueryInterface(IA2.IAccessibleTableCell).columnIndex
0
>>> header_cell.QueryInterface(IA2.IAccessibleTableCell).rowIndex
0
9) Repeat steps 6-8, but now with the cursor in cell in
second row, second column (i.e. the cell below "Heading 2") instead,
which correctly returns the cell with row index 0 and column index 1 as header cell:
>>> from IAccessibleHandler import IA2
>>> cell = focus.parent.IAccessibleObject.QueryInterface(IA2.IAccessibleTableCell)
>>> cell.columnHeaderCells
(<comtypes.LP_POINTER(IUnknown) object at 0x01024B70>, 2)
>>> header_cell = cell.columnHeaderCells[0].contents
>>> header_cell.QueryInterface(IA2.IAccessibleTableCell).columnIndex
1
>>> header_cell.QueryInterface(IA2.IAccessibleTableCell).rowIndex
0
Without this commit, this would fail like this:
>>> from IAccessibleHandler import IA2
>>> cell = focus.parent.IAccessibleObject.QueryInterface(IA2.IAccessibleTableCell)
>>> cell.columnHeaderCells
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "monkeyPatches\comtypesMonkeyPatches.pyc", line 32, in __call__
_ctypes.COMError: (-2147467259, 'Unspecified error', (None, None, None, 0, None))
Change-Id: I8de495ad28b2bece971fe4462e539bcc242ed440
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137847
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Tested using NVDA's Python Console as follows:
1) start LO Writer, "Table" -> "Insert Table"
2) select to create table with 2 rows, 2 columns
3) make sure "Heading" is checked, "Heading rows": 1
4) "Insert"
5) in the first row, type "First heading" into first column, "Second heading" into second column
5) start NVDA
6) make sure cursor is in the first table cell ("Heading 1")
7) press KP_Insert+Ctrl+Z to start NVDA's Python console
8) Use NVDA's Python console to call the corresponding IAccessible2
methods and check the result:
>>> from IAccessibleHandler import IA2
>>> cell = focus.parent.IAccessibleObject.QueryInterface(IA2.IAccessibleTableCell)
>>> cell.table
<POINTER(IUnknown) ptr=0x7cc5b24 at 13f3850>
>>> cell.table.QueryInterface(IA2.IAccessibleTable)
<POINTER(IAccessibleTable) ptr=0x378d47c at 13f38f0>
>>> cell.table.QueryInterface(IA2.IAccessibleTable).nRows
2
>>> cell.table.QueryInterface(IA2.IAccessibleTable).nColumns
2
Without this commit in place, this would fail as follows:
>>> from IAccessibleHandler import IA2
>>> cell = focus.parent.IAccessibleObject.QueryInterface(IA2.IAccessibleTableCell)
>>> cell.table
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "monkeyPatches\comtypesMonkeyPatches.pyc", line 32, in __call__
_ctypes.COMError: (-2147467259, 'Unspecified error', (None, None, None, 0, None))
Change-Id: I67b84f1fd9d397a3aa40b5336c3baafad35eec29
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137846
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
The doc says [1]:
> Gets the row and column indexes and extents of this cell accessible and
> whether or not it is selected.
>
> This is a convenience function. It is not mandatory to implement it.
Just use the existing methods to retrieve the information.
[1] https://accessibility.linuxfoundation.org/a11yspecs/ia2/docs/html/interface_i_accessible_table_cell.html#a686348f0b7ecae19d4be5d7ef37ff201
Change-Id: If009c3913e6e837317255266251bd7696d423118
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137845
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
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>
|
|
Just return `E_NOTIMPL`, as the
`IAccessible::put_accName` doc now says [1]:
> The IAccessible::put_accName method is no longer supported. Client
> applications should use a control-specific workaround, such as the
> SetWindowText function. Servers should return E_NOTIMPL.
[1] https://docs.microsoft.com/en-us/windows/win32/api/oleacc/nf-oleacc-iaccessible-put_accname
Change-Id: I4b36b6a4c4215f237ba7e7583d2f130e8d80f200
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135903
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: I402a77499daaa1a08beca8165199f266733aa1d6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133712
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
|
|
Change-Id: If67d685eb930a299587a711eb5f77cbe9fd0ca09
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132020
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
|
|
... that created some local language dialect.
Mostly an automatic rewrite, with clang-format applied where
it is unavoidable.
Change-Id: Ibc24d00f6e80000320fa9bfb35ee16add0f714cc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131961
Tested-by: Mike Kaganski <mike.kaganski@collabora.com>
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
|
|
It is simply useless, and in vast majority of cases, it simply
nullified variables immediately before assigning them new values.
Change-Id: Ibdad31229069d3cc7000624d5fca372472e8b59c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131955
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
|
|
Changes:
* drop the optional `maxNum` param for the
constructor, it's never set to anything
different than the default value
* store negative number in member (renamed
from `max` to `m_nMin`) instead of storing
positive number and inverting that when returning
it in `ResIDGenerator::GenerateNewResID`
* Use -1 as the first resource ID instead of -2.
Also, add a comment that negative child IDs
are used because it's common to use such ones
to indicate unique resource IDs in
IAccessible2.
Quoting James Teh's comment on an NVDA
pull request of mine [1]:
> The use of negative child ids doesn't fit well into the IAccessible
> spec, but it has been done by IAccessible2 for a very long time and
> should be considered standard for all intents and purposes. A negative
> child id should be treated as a unique id, while a positive child id
> should be treated as a child index.
>
> That said, as noted in #13277 (comment), IAccessible2 elements are
> always full IAccessible objects, not "simple elements". Thus, anything
> that returns an accessible (including accSelection) really should return
> an object pointer. In the case of accSelection, this means VT_DISPATCH
> for a single selection or VT_UNKNOWN and iEnumVARIANT (with VT_DISPATCH
> elements) for multiple selection.
>
> In short, NVDA supporting negative child ids returned from accSelection
> isn't necessarily "wrong", but ideally, LibreOffice would be fixed to
> return full objects.
The latter (returning full objects) has already been addressed in
commit 00c0ee8cf0fac0c933c5ae600e99a64b1c7d4397
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Mon Jan 31 07:41:14 2022 +0000
tdf#147083 wina11y: Return a11y object instead of child ID
but a unique ID is still relevant, s. e.g. the documentation
of `IAccessible2::uniqueID` [2], which also mentions potential
ways to implement unique IDs:
> One means of implementing this would be to create a factory with a 32
> bit number generator and a reuse pool. The number generator would emit
> numbers starting at 1. Each time an object's life cycle ended, its
> number would be saved into a reuse pool. The number generator would be
> used whenever the reuse pool was empty.
>
> Another way to create a unique ID is to generate it from a pointer
> value, e.g. an object's address. That would be unique because no two
> active objects can use the same allocated memory space.
The first approach is what the LO implementation currently does,
except that negative numbers are used.
[1] https://github.com/nvaccess/nvda/pull/13277#issuecomment-1024622871
[2] https://accessibility.linuxfoundation.org/a11yspecs/ia2/docs/html/interface_i_accessible2.html#aac1342376cf195a6a6e9ee3b7e30ae3b
Change-Id: I6c0a6c4a4e3a69396205fe2d69cd66af6525a273
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131927
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Use a range-based for loop, `OUString::isEmpty`
instead of checking the length and
combine the two conditions into one.
Change-Id: Iddc75369b1600f2f540f7ec4a6f8ed0b8462fd93
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130841
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: Ie03126205d45ad2fcae14af53ab7a499f3c445f9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130759
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
And use const reference to css::style::TabStop instead of
creating a copy.
Change-Id: I4092cbefcfbdaa6a6697974b7f40242e26cc6aad
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130758
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: Icc365bad285d99abc2a1c9f26997e28701823262
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130757
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: Icf2a4cb3a4baf0c7aaeb627d05ba355f238b4d04
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130756
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: I9502432260287ae0e6d17231c60f34b4ae2e3729
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130722
Tested-by: Julien Nabet <serval2412@yahoo.fr>
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
|
|
This is similar to
Change-Id: If4b295548468067c65afcd1a216d29cad9e0c213
("wina11y: Unify how AccessibleRole is referred to here"),
just for `AccessibleStateType`.
Change-Id: I5e99fad42dab87e0e303e5a08c610f6af77641ed
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130700
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Using
using namespace com::sun::star::accessibility::AccessibleRole;
and then
case /*AccessibleRole::*/DIALOG
looks a bit odd. Drop the `using` directive and
consistently use `AccessibleRole::<ROLE>` across
this source file when referring to `AccessibleRole`s.
Change-Id: If4b295548468067c65afcd1a216d29cad9e0c213
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130699
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: I972a65783fcb481e91db68e6e58124d46f78ee66
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130698
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Also drop the previous comments for the constants that add
little value and are partially outdated.
See the actual implementation to see how values are mapped
to send out actual MSAA events, e.g. the previous comment
// CARET_CHANGED --> EVENT_OBJECT_LOCATIONCHANGED
was no longer correct by now, since that is by now mapped to
`IA2_EVENT_TEXT_CARET_MOVED` in `AccObjectWinManager::NotifyAccEvent`.
Change-Id: I38111ccb60c06f73ce53b18a6ca32e13dbd629b8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130697
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
`ACC_DEBUG` isn't defined anywhere and the
`pFile` variable/member used inside of the `ifedf`ed block
doesn't exist either.
Change-Id: I0d04ca71dbc9a731a6673fad9b69c1229c472d16
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130696
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: I134ca6b0e69124739b734dfb49763da4284f7412
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129652
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
|
|
Quoting MSAA doc about implementing child IDs [1]:
> # How Servers Implement Child IDs
>
> Server developers can assign child IDs to both simple elements and
> accessible objects. However, the recommended approach is to support the
> standard Component Object Model (COM) interface IEnumVARIANT in every
> accessible object that has children.
>
> If you implement IEnumVARIANT, you must:
>
> * Enumerate all children, both simple elements and accessible objects.
> Provide child IDs for all simple elements and provide the IDispatch to
> each accessible object.
> * For accessible objects, set the vt member of the VARIANT to
> VT_DISPATCH. The pdispVal member must contain a pointer to the IDispatch
> interface. Note that the VARIANT is allocated and freed by the client.
> * For simple elements, the child ID is any 32-bit positive integer.
> Note that zero and negative integers are reserved by Microsoft Active
> Accessibility. Set the VARIANT structure vt member to VT_I4 and the lVal
> member to the child ID.
>
> If you do not support IEnumVARIANT, you must assign child IDs and
> number the children in each object sequentially starting with one.
So far, LibreOffice was returning negative "child IDs" instead of pointers
to accessible objects, which were not conformant to the MSAA
specification and not accepted by NVDA as valid child IDs
(s.a. discussion on the first version of my related NVDA pull request
to fix the announcement of a single selected cell in Calc, [2]).
Adapt that to return pointers to accessible objects and
drop the now unused 'CMAccessible::Get_XAccChildID'.
[1] https://docs.microsoft.com/en-us/windows/win32/winauto/how-servers-implement-child-ids
[2] https://github.com/nvaccess/nvda/pull/13277
Change-Id: I52a6f637adf334dee66627e6992451e6d81a7c9a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129201
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
'IMAccessible' derives from 'IAccessible2', which in turn
derives from 'IAccessible', so there's no need for any
explicit cast from 'IMAccessible*' to 'IAccessible*'.
Change-Id: Id5ad2d778f040364a1a056916a0ad1fe306707e8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129200
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
...since fcf4a26275d7503835f9aa23cb94938809840300 "tdf#146306 wina11y: Retrieve
accessible desc on demand"
Change-Id: I8acdca5fac481ca7b970fb9c3660470c5febdf99
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128307
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
|
|
While 'MyClass:: MyMethod' (with a space in it) is valid in C++,
it's unusual and may break a naive plain-text search for
a specific class member definition.
Change-Id: I8c9779865715a0b4f1a66d3e35b874f2cec19193
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128016
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: I29793e63ddc040ccbae99012090e975bd80cafc3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128011
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: I3bd4f26861d46f6a43a4b0edda3dbf628e2da2cd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128010
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: I04db43ac49d7bc6ff42157cdd0c94087c454c981
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128009
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|
|
Change-Id: Ic2d470a137e4d0c907f28e24c58ba19a937a8b4b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128008
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
|