<feed xmlns='http://www.w3.org/2005/Atom'>
<title>qt/qtdeclarative.git/src/quick/accessible/qquickaccessiblefactory.cpp, branch dev</title>
<subtitle>Qt Declarative (Quick 2)
</subtitle>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/'/>
<entry>
<title>TableView: follow the current cell with accessibility focus</title>
<updated>2026-09-30T00:35:17+00:00</updated>
<author>
<name>Lorn Potter</name>
<email>lorn.potter@qt.io</email>
</author>
<published>2026-09-15T02:54:08+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=317d2e1bbba8eeb88b8a4bfdc3c5d368f015336e'/>
<id>317d2e1bbba8eeb88b8a4bfdc3c5d368f015336e</id>
<content type='text'>
Keyboard navigation moves the current cell of a TableView, but screen
readers did not follow it. TableView is not an accessible item, and its
cell delegates do not take focus while navigating (only the edit
delegate does, while editing), so assistive technology never saw a
focus event.

Send a focus event for the delegate of the current cell while the view
has active focus, also when that delegate is only loaded after the
current index changed, and again when an edit ends and focus returns to
the view. Add QAccessibleQuickTableView, whose focusChild()
returns that same delegate, for platforms such as macOS that ask the
window for the focused element rather than act on the event.

Name the Basic TableViewDelegate after the display role and ignore its
Label, so a cell is read neither as empty text nor twice.

This patch and its commit message were developed together with Claude

Change-Id: Id42e994ad470abe8d4b0af4a7cc8e4c5611677e7
Reviewed-by: Richard Moe Gustavsen &lt;richard.gustavsen@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Keyboard navigation moves the current cell of a TableView, but screen
readers did not follow it. TableView is not an accessible item, and its
cell delegates do not take focus while navigating (only the edit
delegate does, while editing), so assistive technology never saw a
focus event.

Send a focus event for the delegate of the current cell while the view
has active focus, also when that delegate is only loaded after the
current index changed, and again when an edit ends and focus returns to
the view. Add QAccessibleQuickTableView, whose focusChild()
returns that same delegate, for platforms such as macOS that ask the
window for the focused element rather than act on the event.

Name the Basic TableViewDelegate after the display role and ignore its
Label, so a cell is read neither as empty text nor twice.

This patch and its commit message were developed together with Claude

Change-Id: Id42e994ad470abe8d4b0af4a7cc8e4c5611677e7
Reviewed-by: Richard Moe Gustavsen &lt;richard.gustavsen@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>a11y: Reflect the hosted window's hierarchy in Quick's WindowContainer</title>
<updated>2026-08-27T05:38:37+00:00</updated>
<author>
<name>Tor Arne Vestbø</name>
<email>tor.arne.vestbo@qt.io</email>
</author>
<published>2026-08-07T11:23:29+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=581daf9f40140f43a790cd62b0389d5ee830d6f6'/>
<id>581daf9f40140f43a790cd62b0389d5ee830d6f6</id>
<content type='text'>
Quick's WindowContainer had no accessibility implementation at all. It
is a plain QQuickItem, so it only got a QAccessibleQuickItem if the
Accessible attached properties were set on it, and even then it would
not recurse into the window it hosts. Nothing of the contained window
reached the accessibility tree.

QtWidgets has had QAccessibleWindowContainer for this all along, and
it is the model here, with one difference: we resolve the child via
QWindow::accessibleRoot(), rather than querying an interface for the
window itself. The latter is driven by the window's class name, and
not all QWindow subclasses have a dedicated a11y interface, including
QWidgetWindow, so hosting a widget window would then give a null child.
Going via the root is also the entry point the platform bridges use.

That in turn makes indexOfChild() compare interfaces rather than the
window, as the root of a hosted widget window is the interface of the
widget, not of the window.

The container also has to be accessible in its own right, so that
unignoredChildren() doesn't skip straight past it when the parent item
collects its accessible children.

[ChangeLog][QtQuick][WindowContainer] The accessibility hierarchy of
the contained window is now reflected in the accessibility tree, as a
child of the window container.

Change-Id: I5323294f8e6302e939b8ff327e2994cd79f5f035
Reviewed-by: Morten Johan Sørvig &lt;morten.sorvig@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Quick's WindowContainer had no accessibility implementation at all. It
is a plain QQuickItem, so it only got a QAccessibleQuickItem if the
Accessible attached properties were set on it, and even then it would
not recurse into the window it hosts. Nothing of the contained window
reached the accessibility tree.

QtWidgets has had QAccessibleWindowContainer for this all along, and
it is the model here, with one difference: we resolve the child via
QWindow::accessibleRoot(), rather than querying an interface for the
window itself. The latter is driven by the window's class name, and
not all QWindow subclasses have a dedicated a11y interface, including
QWidgetWindow, so hosting a widget window would then give a null child.
Going via the root is also the entry point the platform bridges use.

That in turn makes indexOfChild() compare interfaces rather than the
window, as the root of a hosted widget window is the interface of the
widget, not of the window.

The container also has to be accessible in its own right, so that
unignoredChildren() doesn't skip straight past it when the parent item
collects its accessible children.

[ChangeLog][QtQuick][WindowContainer] The accessibility hierarchy of
the contained window is now reflected in the accessibility tree, as a
child of the window container.

Change-Id: I5323294f8e6302e939b8ff327e2994cd79f5f035
Reviewed-by: Morten Johan Sørvig &lt;morten.sorvig@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>a11y: Implement QAccessibleViewportInterface for QQuickListView</title>
<updated>2026-07-02T16:25:00+00:00</updated>
<author>
<name>Jan Moeller</name>
<email>Jan.Moeller@governikus.de</email>
</author>
<published>2026-06-04T06:11:54+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=8dd86364e6c17187830c72679ccf085cc17aff1c'/>
<id>8dd86364e6c17187830c72679ccf085cc17aff1c</id>
<content type='text'>
This will allow the a11y layer to inform the screen reader
about the currently visible item range and total item count
of a QML ListView.

[ChangeLog][Qt Quick][Accessibility] QML ListView now exposes its
visible item range and total item count to screen readers via
QAccessibleViewportInterface.

Task-number: QTBUG-139833
Pick-to: 6.12
Change-Id: I24f3f36ddda637024382f126accb749529694be4
Reviewed-by: MohammadHossein Qanbari &lt;mohammad.qanbari@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This will allow the a11y layer to inform the screen reader
about the currently visible item range and total item count
of a QML ListView.

[ChangeLog][Qt Quick][Accessibility] QML ListView now exposes its
visible item range and total item count to screen readers via
QAccessibleViewportInterface.

Task-number: QTBUG-139833
Pick-to: 6.12
Change-Id: I24f3f36ddda637024382f126accb749529694be4
Reviewed-by: MohammadHossein Qanbari &lt;mohammad.qanbari@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>a11y: Implement QAccessibleViewportInterface for QQuickFlickable</title>
<updated>2026-06-19T12:01:36+00:00</updated>
<author>
<name>Jan Moeller</name>
<email>Jan.Moeller@governikus.de</email>
</author>
<published>2026-06-02T06:04:29+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=928ed01d21cbde95f6931f2d2701d1f99ca88c67'/>
<id>928ed01d21cbde95f6931f2d2701d1f99ca88c67</id>
<content type='text'>
This will allow the a11y layer to inform the screen reader
about the currently visible portion of a scrollable view.

Task-number: QTBUG-139833
Pick-to: 6.12
Change-Id: I2b81a930d22e198b5438affc126c85c9383b7b46
Reviewed-by: MohammadHossein Qanbari &lt;mohammad.qanbari@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This will allow the a11y layer to inform the screen reader
about the currently visible portion of a scrollable view.

Task-number: QTBUG-139833
Pick-to: 6.12
Change-Id: I2b81a930d22e198b5438affc126c85c9383b7b46
Reviewed-by: MohammadHossein Qanbari &lt;mohammad.qanbari@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>QQuickTextInput a11y: Allow modifying text selection via a11y API</title>
<updated>2025-10-30T22:35:25+00:00</updated>
<author>
<name>Michael Weghorn</name>
<email>m.weghorn@posteo.de</email>
</author>
<published>2025-09-22T12:46:12+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=1b0e5474c0297e8151029952c379ad94cb91dd76'/>
<id>1b0e5474c0297e8151029952c379ad94cb91dd76</id>
<content type='text'>
Similar to the previous commit that introduced
QAccessibleQuickTextEdit, introduce QAccessibleQuickTextInput
and implement the logic to modify selection.

This allows changing the selection for QQuickTextInput
and its QQuickTextField subclass via the platform
accessibility API, e.g. the AT-SPI Text interface's
SetSelection method.

Extend the existing TextInput autotest accordingly.

Task-number: QTBUG-139943
Task-number: QTBUG-140441
Change-Id: Ie05c6b0cf3431aabb4b337dbfa07c40c56660e2b
Reviewed-by: Timon Sassor &lt;timon.sassor@governikus.de&gt;
Reviewed-by: Morten Johan Sørvig &lt;morten.sorvig@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Similar to the previous commit that introduced
QAccessibleQuickTextEdit, introduce QAccessibleQuickTextInput
and implement the logic to modify selection.

This allows changing the selection for QQuickTextInput
and its QQuickTextField subclass via the platform
accessibility API, e.g. the AT-SPI Text interface's
SetSelection method.

Extend the existing TextInput autotest accordingly.

Task-number: QTBUG-139943
Task-number: QTBUG-140441
Change-Id: Ie05c6b0cf3431aabb4b337dbfa07c40c56660e2b
Reviewed-by: Timon Sassor &lt;timon.sassor@governikus.de&gt;
Reviewed-by: Morten Johan Sørvig &lt;morten.sorvig@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>QQuickTextEdit a11y: Allow modifying text selection via a11y API</title>
<updated>2025-10-30T22:35:18+00:00</updated>
<author>
<name>Michael Weghorn</name>
<email>m.weghorn@posteo.de</email>
</author>
<published>2025-09-17T10:39:04+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=1227db3adf91a92cf7e5f048dbeca2b9a3663c84'/>
<id>1227db3adf91a92cf7e5f048dbeca2b9a3663c84</id>
<content type='text'>
Introduce new QAccessibleQuickTextEdit as a11y implementation
for QQuickTextEdit.

Subclass the existing QAccessibleQuickItem and override the
methods to modify text selection.
(For retrieving the existing selection, the logic in
the base class is fine, but the TextEdit properties selectionStart
and selectionEnd are read-only, so cannot be set directly there.)

Implement the QAccessibleTextInterface::addSelection logic
in the base class, so it can also be reused by the
QAccessibleQuickTextInput class that will be added
in an upcoming commit to implement similar logic
for QQuickTextInput and QQuickTextField.

Extend the existing unit test to also test text selection.

Task-number: QTBUG-139943
Pick-to: 6.10 6.9 6.8
Change-Id: Ibd6aa3e1bc9a24352c9bef4fcf4a452252d6689c
Reviewed-by: Timon Sassor &lt;timon.sassor@governikus.de&gt;
Reviewed-by: Morten Johan Sørvig &lt;morten.sorvig@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Introduce new QAccessibleQuickTextEdit as a11y implementation
for QQuickTextEdit.

Subclass the existing QAccessibleQuickItem and override the
methods to modify text selection.
(For retrieving the existing selection, the logic in
the base class is fine, but the TextEdit properties selectionStart
and selectionEnd are read-only, so cannot be set directly there.)

Implement the QAccessibleTextInterface::addSelection logic
in the base class, so it can also be reused by the
QAccessibleQuickTextInput class that will be added
in an upcoming commit to implement similar logic
for QQuickTextInput and QQuickTextField.

Extend the existing unit test to also test text selection.

Task-number: QTBUG-139943
Pick-to: 6.10 6.9 6.8
Change-Id: Ibd6aa3e1bc9a24352c9bef4fcf4a452252d6689c
Reviewed-by: Timon Sassor &lt;timon.sassor@governikus.de&gt;
Reviewed-by: Morten Johan Sørvig &lt;morten.sorvig@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Set explicit default security level of all files with default security</title>
<updated>2025-09-17T13:31:14+00:00</updated>
<author>
<name>Jan Arve Sæther</name>
<email>jan-arve.saether@qt.io</email>
</author>
<published>2025-09-16T13:35:55+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=01cd43d30e3ca2c4dd94a4a4711604adb9417517'/>
<id>01cd43d30e3ca2c4dd94a4a4711604adb9417517</id>
<content type='text'>
The files (folders) already processed are listed in each issue in epic
QTBUG-134547

These files were processed half a year ago. In order to make it clear
that all of these files are already processed, mark them with an
explicit default security header.

For the record, this was generated with this script:

find -E . -regex ".*\.(cpp|h|hpp|mm|qml|js)$" | xargs python3 ~/bin/add-cra-header.py

in the folders listed in each subtask of QTBUG-134547

(add-cra-header.py only exist at my desktop, but it simply adds the
default security header if it doesn't already have any existing security
header)

QUIP: 23
Fixes: QTBUG-134547
Pick-to: 6.10 6.9 6.8
Change-Id: Ieb8c78ea6561fdbdd27c7b13185ece853eedf80f
Reviewed-by: Oliver Eftevaag &lt;oliver.eftevaag@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The files (folders) already processed are listed in each issue in epic
QTBUG-134547

These files were processed half a year ago. In order to make it clear
that all of these files are already processed, mark them with an
explicit default security header.

For the record, this was generated with this script:

find -E . -regex ".*\.(cpp|h|hpp|mm|qml|js)$" | xargs python3 ~/bin/add-cra-header.py

in the folders listed in each subtask of QTBUG-134547

(add-cra-header.py only exist at my desktop, but it simply adds the
default security header if it doesn't already have any existing security
header)

QUIP: 23
Fixes: QTBUG-134547
Pick-to: 6.10 6.9 6.8
Change-Id: Ieb8c78ea6561fdbdd27c7b13185ece853eedf80f
Reviewed-by: Oliver Eftevaag &lt;oliver.eftevaag@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Use SPDX license identifiers</title>
<updated>2022-06-11T06:05:15+00:00</updated>
<author>
<name>Lucie Gérard</name>
<email>lucie.gerard@qt.io</email>
</author>
<published>2022-05-13T13:12:05+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=0dc4fd240a2897c5c443a0ef6d84c416843e4938'/>
<id>0dc4fd240a2897c5c443a0ef6d84c416843e4938</id>
<content type='text'>
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.

Pick-to: 6.4
Task-number: QTBUG-67283
Change-Id: I63563bbeb6f60f89d2c99660400dca7fab78a294
Reviewed-by: Shawn Rutledge &lt;shawn.rutledge@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.

Pick-to: 6.4
Task-number: QTBUG-67283
Change-Id: I63563bbeb6f60f89d2c99660400dca7fab78a294
Reviewed-by: Shawn Rutledge &lt;shawn.rutledge@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>use nullptr consistently (clang-tidy)</title>
<updated>2018-02-26T07:13:18+00:00</updated>
<author>
<name>Shawn Rutledge</name>
<email>shawn.rutledge@qt.io</email>
</author>
<published>2018-02-21T09:41:54+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=499ec43937e926e4f2fa57a9baa455fcb3862262'/>
<id>499ec43937e926e4f2fa57a9baa455fcb3862262</id>
<content type='text'>
From now on we prefer nullptr instead of 0 to clarify cases where
we are assigning or testing a pointer rather than a numeric zero.

Also, replaced cases where 0 was passed as Qt::KeyboardModifiers
with Qt::NoModifier (clang-tidy replaced them with nullptr, which
waas wrong, so it was just as well to make the tests more readable
rather than to revert those lines).

Change-Id: I4735d35e4d9f42db5216862ce091429eadc6e65d
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
From now on we prefer nullptr instead of 0 to clarify cases where
we are assigning or testing a pointer rather than a numeric zero.

Also, replaced cases where 0 was passed as Qt::KeyboardModifiers
with Qt::NoModifier (clang-tidy replaced them with nullptr, which
waas wrong, so it was just as well to make the tests more readable
rather than to revert those lines).

Change-Id: I4735d35e4d9f42db5216862ce091429eadc6e65d
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Get rid of most QT_NO_FOO usages</title>
<updated>2016-11-29T10:10:27+00:00</updated>
<author>
<name>Lars Knoll</name>
<email>lars.knoll@qt.io</email>
</author>
<published>2016-11-16T13:22:36+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=e579076bb36e6594003b2ade7f3d062944ef6f47'/>
<id>e579076bb36e6594003b2ade7f3d062944ef6f47</id>
<content type='text'>
Instead use QT_CONFIG(foo). This change actually detected a few
mis-spelled macros and invalid usages.

Change-Id: I06ac327098dd1a458e6bc379d637b8e2dac52f85
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Instead use QT_CONFIG(foo). This change actually detected a few
mis-spelled macros and invalid usages.

Change-Id: I06ac327098dd1a458e6bc379d637b8e2dac52f85
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</pre>
</div>
</content>
</entry>
</feed>
