← All bug reports

FS#2766Arrow keys to move selection not working

Type
Bug
Status
Closed
Resolution
Fixed
Category
QCAD (main)
Severity
Low
Priority
Low
Reported version
27.0.2
Operating system
All
Reported
2026-10-30 by andrew
Forum
Discussion

Arrow keys don’t move the selection on Linux when desktop accessibility (AT-SPI) is enabled

Affects: QCAD with Qt 6 on Linux, since commit 921dd88adf (“update accessibility”, 2026-09-18).
Some Windows configurations might also be affected

Symptom: Pressing the arrow keys with entities selected does nothing: the selection doesn’t move and the view doesn’t pan. No screen reader needs to be running.

Steps to reproduce:

Turn on the desktop’s accessibility flag, without starting a screen reader:
gdbus call --session --dest org.a11y.Bus --object-path /org/a11y/bus --method org.freedesktop.DBus.Properties.Set org.a11y.Status IsEnabled ""
On-screen keyboards, automation tools and some apps set this flag on their own.
Start QCAD, select some entities and press an arrow key.
Alternatively, start QCAD with QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1.

Expected: The selection moves by the configured step.
Actual: Nothing happens.

Cause: The key events do arrive at RMainWindowQt::event(). There, isCursorKeyReservedForScreenReader() decides the arrow keys belong to a screen reader and skips notifyKeyListeners(), so the QuickModify move listener is never called. It decides this with RSettings::isScreenReaderActive(), which is just QAccessible::isActive(). On Linux that turns true whenever org.a11y.Status IsEnabled is true, not only when a screen reader is running. The same false positive makes isKeyboardNavigationInListsEnabled() let the layer and block lists keep the arrow keys.

Workaround for existing builds: Start QCAD with AT_SPI_BUS_ADDRESS=unix:path=/nonexistent. This stops Qt’s accessibility bridge from connecting, so arrow keys work again; it’s verified with accessibility switched on. The catch is that screen readers can’t read QCAD’s interface in that process.