Based on the discussion on logging style in the
Gerrit change for commit
5145d3899d
("a11y atspi: Support AT-SPI table cell interface"),
clean up the logging in AtSpiAdaptor a bit:
* convert uses of qCDebug to qCWarning where the
log message contained "WARNING"/"warning"
or it seems worth that severity.
* drop extra prefixes of "Qt AtSpiAdaptor:"
in the log messages, since the logging
category is already named "qt.accessibility.atspi"
and only used here
* more consistently start log messages with
uppercase letter and drop unnecessary extra spaces
The switch to qCWarning implies that these log
messages are output by default.
Change-Id: I1665a8ee8d64e4eab33a3b15906a7cb7357fd73c
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This introduces a new helper function accessibleIdForAccessible
(inspired by Windows' automationIdForAccessible) to synthesize an id out
of the objectNames of the accessible parent chain. The id is then
exposed via the GetAccessibleId D-Bus function for consumption in a11y
tools.
Change-Id: If72b86c5864c43f4ca842aa11423dd8aea0dde4a
Reviewed-by: Aleix Pol Gonzalez <aleixpol@kde.org>
Orca only accepts string or list type for
object:property-change:accessible-name and
object:property-change:accessible-description events. This fixes
NameChanged and DescriptionChanged not being announced by Orca.
This also adds check for accessible interface and will ignore events
from invalid interfaces on name/description changed.
See also: https://gitlab.gnome.org/GNOME/orca/-/issues/255
Pick-to: 6.4 6.2
Change-Id: Iaaa50678e7223951e0f3af99c5e04aa7458e4d0d
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Orca only accepts string or list type for
object:property-change:accessible-name events. This fixes
NameChanged not being announced by Orca.
Pick-to: 6.4 6.2
Change-Id: Ib30fed94aad70b98400deec5e31630b4f8c22e26
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit addresses a comment from the review of QTBUG-98434.
Use isEmpty() to check whether the string is empty or not.
Task-number: QTBUG-103100
Change-Id: Ia7c298bc4436d974b0369e178a370764c1dbe051
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
This commit addresses some comments from the review of QTBUG-98434.
Some strings were initialized with incorrect literal types - fix the
mismatches between the string types and string literals.
Task-number: QTBUG-103100
Change-Id: I5f9f8a2c1583c21711f7b9ff177917f20690b5a3
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Move the comment about setting the
ATSPI_STATE_MANAGES_DESCENDANTS state to the
place where the state is actually set.
Change-Id: Ia6956d36db86e935b4fab03b1892cf4e8a709c0f
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Just like the GetColumnHeader case already does, check
that the cell isn't nullptr before trying to retrieve
the table cell interface from it.
(Not doing so e.g. resulted in a crash with WIP branches
of LibreOffice and Orca to make selected cells with a
child index not fitting into 32 bit work, s.a.
https://bugs.documentfoundation.org/show_bug.cgi?id=150683 )
Pick-to: 6.4 6.3
Change-Id: Idd55fd1f0c49b616c732ddb683814605a46ff319
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Since qVersion() might be called also from C code, disable the parts of
qlibraryinfo.h that are relevant only for C++ code if __cplusplus is not
defined.
[ChangeLog][Potentially Source-Incompatible Changes] qVersion() is
moved from qglobal.h to qlibraryinfo.h, '#include <QtCore/QLibraryInfo>'
needs to be added where it's used.
Task-number: QTBUG-99313
Change-Id: I3363ef3fa4073114e5151cb3a2a1e8282ad42a4d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
When using QAccessibleEvents of types QAccessible::Selection,
QAccessible::SelectionAdd and QAccessible::SelectionRemove,
Qt (internally) also always uses QAccessbibleEvent::setChild to
set the child that has been (un)selected.
As a consequence, the interface retrieved using
QAccessibleEvent::accessibleInterface here is not the
a11y object in which the selection has changed, but
the child, so notifying about a change to its selected
state (as happens here in the AT-SPI adapter) is in line
with that.
For AT-SPI, assistive technology (like the Orca screen reader)
often reacts to the SelectionChanged event on the object
managing the selection, so send a corresponding event
for the parent of the (un)selected child as well.
(Besides the lack of support for the AT-SPI Selection
interface - s. QTBUG-105909 - the fact that this event
wasn't sent previously e.g. turned out to be one reason
for the Orca screen reader not announcing selected cells in
the Qt 6 based UI variant of LibreOffice Calc.)
Change-Id: Icc8b9a7ecc77bc5394fd1ab4f8163caed951ba86
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
QAccessible::SelectionWithin is meant to be used
when several changes to a selection have occurred
(instead of using multiple QAccessible::SelectionAdd
and QAccessible::SelectionRemoved events).
So far, that event was simply ignored by the AT-SPI
adapter.
Forward that as a SelectionChanged event to AT-SPI.
Change-Id: Ia8187f82b9b96b7ca5b52bf0a0923bbf4c777ad1
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
The reply *is* needed.
Otherwise, e.g. running
examples/widgets/widgets/spinboxes/spinboxes
and clicking on the a11y objects for the spinboxes
in Accerciser's [1] treeview of the app's a11y
hierarchy makes Accerciser output this and crash:
> $ accerciser
> dbus[67434]: arguments to dbus_message_unref() were incorrect, assertion "message != NULL" failed in file ../../../dbus/dbus-message.c line 1727.
> This is normally a bug in some application using the D-Bus library.
>
> D-Bus not built with -rdynamic so unable to print a backtrace
> Aborted (core dumped)
[1] https://gitlab.gnome.org/GNOME/accerciser
diff --git a/src/gui/accessible/linux/atspiadaptor.cpp b/src/gui/accessible/linux/atspiadaptor.cpp
index cdc27132c9..6b8a9fcaac 100644
Change-Id: I442d3130623ccae096a6b79577874a6fd95c8aa2
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
The GetStringAtOffset method was added to the
AT-SPI Text interface in at-spi2-core commmit [1]:
commit 56220f05bc8b7683911658e1a8aff4a1ab3cab8d
Author: Mike Gorse <mgorse@suse.com>
Date: Mon Aug 19 16:43:02 2013 -0500
Add atspi_text_get_string_at_offset
As compared to GetTextAtOffset, which is very similar and
already supported in Qt's AT-SPI adapter, the new method
uses a new enum, AtspiTextGranularity, to specify the region
of text that should be returned.
Other than AtspiTextBoundaryType (that is used by
GetTextAtOffset), AtspiTextGranularity now also has
a value for the paragraph granularity
(ATSPI_TEXT_GRANULARITY_PARAGRAPH).
While AtspiTextBoundaryType has two enum values for the
word/sentence/line boundaries (ATSPI_TEXT_BOUNDARY_WORD_START and
ATSPI_TEXT_BOUNDARY_WORD_END, etc.), AtspiTextGranularity
doesn't have this any more, but ATSPI_TEXT_GRANULARITY_WORD
etc. seem to correspond to what the variants ending on "_START"
do when used with GetTextAtOffset, since the documentation says that
the range is "defined by the boundaries of a word
starting at the beginning of the current word and finishing
at the beginning of the following one, if present." (and likewise
for ATSPI_TEXT_GRANULARITY_SENTENCE, ATSPI_TEXT_GRANULARITY_LINE,
ATSPI_TEXT_GRANULARITY_PARAGRAPH).
In order to support GetStringAtOffset, this
adds a new mapping from the AtspiTextGranularity enum values
to the corresponding QAccessible::TextBoundaryType, similar
to what's done for the AtspiTextBoundaryType in the
handling of the GetTextAtOffset method.
The existing AtSpiAdaptor::qAccessibleBoundaryType
method is renamed to
AtSpiAdaptor::qAccessibleBoundaryTypeFromAtspiBoundaryType
to clearer distinguish it from the newly introduced
AtSpiAdaptor::qAccessibleBoundaryTypeFromAtspiTextGranularity.
No similar new alternatives have been added
to AT-SPI for GetTextBeforeOffset and GetTextAfterOffset.
[1] 56220f05bc
Fixes: QTBUG-105811
Change-Id: I674a760e80c349baea89dcb4ac7aecdef9b2b45f
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This implements handling for the ScrollSubstringTo
method from the AT-SPI Text interface by calling
QAccessibleTextInterface::scrollToSubstring with
the given text offsets.
While the AT-SPI method has an additional parameter
for the scroll type that specifies where on screen
to place the given substring (s. doc at [1]), there
is no equivalent in
QAccessibleTextInterface::scrollToSubstring,
so ignore that parameter.
[1] https://lazka.github.io/pgi-docs/Atspi-2.0/classes/Text.html#Atspi.Text.scroll_substring_to
Fixes: QTBUG-105854
Change-Id: I390e1316c5c55cb646a299499a5f87c9c6945a44
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This looks like a remnant of previous WIP code and was
added in commit 8e1ff45e74
("Add Linux Accessibility Bridge").
Change-Id: I8fab2c3554af101ed134715a4d4a494bdb01fc98
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Only return a string for the attribute value
(an empty string if the attribute is not set).
The previous implementation was based on the incorrect
signature in the XML spec for the AT-SPI Text interface from
before the AT-SPI commit that removed the extra out params [1]:
commit 8786849ce6e9914383aa766ff9ce7e00f5b2178d
Author: Patryk Kaczmarek <patryk.k@samsung.com>
Date: Mon Sep 28 14:23:15 2015 +0200
Fixed atspi_text_ functions
* atspi_text_get_text_attribute_value
Fixed dbus signature in _atspi_dbus_call function
and add missing argument for string.
* atspi_text_get_default_attributes
Receiving return value by reference from hash table
https://bugzilla.gnome.org/show_bug.cgi?id=755731
[1] 8786849ce6
Fixes: QTBUG-105752
Pick-to: 6.4
Change-Id: I66d3c484ecc4b469684635723242c915e4365e6a
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
QAccessibleTableCellInterface provides everything
needed to support the AT-SPI TableCell interface [1].
Therefore, expose that AT-SPI interface and implement
handling of the corresponding methods.
[1] https://gitlab.gnome.org/GNOME/at-spi2-core/-/blob/master/xml/TableCell.xml
Fixes: QTBUG-104793
Change-Id: Ie7068c029eaf911186daf3956f11cfd4eb2800a6
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
The focused state exists in both, Qt
(QAccessible::State::focused) and AT-SPI, so forwarding
changes to that state is straightforward.
However, so far, changes to the focused state in a
QAccessible::StateChanged event were just ignored
and not forwarded to the AT-SPI layer.
While announcing focus changes to Qt's own widgets works
without that because it uses events of type QAccessible::Focus
instead of QAccessibleStateChangeEvent with the focused
state set, this is not exactly the same and just ignoring the
focused state in QAccessible::StateChanged events e.g. turned out to
be one cause for the Orca screen reader not announcing UI elements
when they received focus in the Qt-based UI variant of LibreOffice,
which uses QAccessible::StateChanged with the focused flag
set (s.a. LibreOffice commit [1]).
[1] https://git.libreoffice.org/core/commit/8c3e8af0e60865ec6d38e2117efdb4ed2f10a20c
Change-Id: If226af28960048c56af32979477605d6860e30e9
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Just like for the "GetSummary" case, the argument in the
reply for this AT-SPI table method needs to
be wrapped in a variant.
Fixes this warning from the output of the client side
using libatspi:
> (accerciser:181933): dbind-WARNING **: 11:50:36.394: atspi_dbus_get_property:
> expected a variant when fetching Caption from interface org.a11y.atspi.Table; got (so)
Fixes: QTBUG-105520
Pick-to: 6.4 6.3 6.2
Change-Id: I18167359e4cd3bb14a94289ac7481f9e39a18ad0
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
So far, only screen coordinates (`ATSPI_COORD_TYPE_SCREEN`)
and coordinates relative to the widget's top-level window
(`ATSPI_COORD_TYPE_WINDOW`) were supported.
In at-spi 2.30, a third coordinate type, describing
coordinates relative to the widget's immediate parent,
was added: `ATSPI_COORD_TYPE_PARENT` (commit: [1])
This commit adds the handling to convert to and
from that coord type as well and unifies the
existing handling to convert to/from screen coordinates
by introducing two static helper methods
(`AtSpiAdaptor::translateToScreenCoordinates` and
`AtSpiAdaptor::translateFromScreenCoordinates`) and
making use of those wherever conversion needs to
be done.
In addition, also add a check to only handle
requests using a coordinate type that is one of those
that is actually supported instead of returning
incorrect values (for the case that new coord types
should be introduced in AT-SPI in the future).
[1] 737c9853b6
Fixes: QTBUG-105313
Change-Id: Ia8752bd6a35328cc2de33ecad08f2964735f41ae
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
The coordinate type for "GetOffsetAtPoint" describes the
coordinate type of the input coordinates and
`QAccessibleTextInterface::offsetAtPoint` expects the
coordinates in screen coordinates.
Therefore, if window-relative coordinates are given,
the screen coordinates of the window need to be added
(not subtracted) to the window-relative coordinates of the point
in order to calculate the screen coordinates of the point.
Fixes: QTBUG-105281
Pick-to: 6.4 6.3 6.2
Change-Id: I5517335c0c0d6a47b8c45c7e4f8f8b5a91f0fcd7
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Since a dialog is also a top-level window, it should be taken
into account when trying to find the accessible's top-level
window, relative to which the position will be calulated for
`ATSPI_COORD_TYPE_WINDOW`.
Fixes: QTBUG-105042
Pick-to: 6.4 6.3 6.2
Change-Id: I74fae096fd886bab04187c122f268c26c91b86ab
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Replace the current license disclaimer in files by
a SPDX-License-Identifier.
Files that have to be modified by hand are modified.
License files are organized under LICENSES directory.
Task-number: QTBUG-67283
Change-Id: Id880c92784c40f3bbde861c0d93f58151c18b9f1
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
Including moc files directly into their classes' TU tends to improve
codegen and enables extended compiler warnings, e.g. about unused
private functions or fields.
Pick-to: 6.3 6.2 5.15
Task-number: QTBUG-102886
Change-Id: I1945741794c25679a9d94c0d68c8642e2c823502
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Required for porting away from QLatin1Char/QLatin1String in scope of
QTBUG-98434.
Change-Id: I308d86cefcbfd126929b68f9a853d420840c965f
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Better to provide the correct meta type to convert to.
Change-Id: I8e0d46e4ba482186201c157e302c03874bd38e7b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
fix The window has been quickly activated or disabled will cause a crash .
Fixes: QTBUG-84643
Pick-to: 5.15
Change-Id: I0fd0918a3fc1898ddffd97009a4e92702ecd9ed4
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This is required to remove the ; from the macro with Qt 6.
Task-number: QTBUG-82978
Change-Id: I3f0b6717956ca8fa486bed9817b89dfa19f5e0e1
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Change it into a member variable of QSpiAccessibleBridge.
Task-number: QTBUG-83255
Change-Id: Ia781a7c86723e343680bf804be6393640f83a516
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Change some too-generic file names.
Task-number: QTBUG-83255
Change-Id: I4497ee2508bc323566f4061d4547707b7bda7a77
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>