[qt/qt/qtgamepad]: Summary of bulk changes made

KDE Git Services - Bulk Change <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git repository change summary for qt/qt/qtgamepad
Pushed by mirror-service into branch 'dev'.
Changed from 57574bcf2ac6ca93cc6d6af5af0c5e9018b604f5 to ed9e1ce1888902ec4f826ca75252b6d1b824a565
Acknowledgement was received that this change introduces only existing code that has been pushed to another public open source repository.

This change contains the following new commits:

Git commit fa4cd9adcdf17ccd99acc8a2fc770421a1954cc3 by Andy Nichols on 16/08/2026 at 09:37..
Expand QActionStore test coverage

Broaden the autotest beyond a single button action to cover axis
deadzone filtering, per-direction axis matching, the Controller::All
wildcard against device-specific bindings, key and mouse button
actions, clearing multiple actions at once, and ActionBuilder
assembly. Because QUniversalInput::instance() is a process-wide
singleton, init() and cleanup() reconnect the test devices so state
does not leak between test functions.

Change-Id: I965cff1375ca745569f91fc46f6469ed16b38449
Reviewed-by: Laszlo Agocs <[email protected]>
Reviewed-by: Shawn Rutledge <[email protected]>
https://invent.kde.org/qt/qt/qtgamepad/-/commit/fa4cd9adcdf17ccd99acc8a2fc770421a1954cc3

Git commit 4964bd585dba4f1035e6f2904e2ad2308edcfce6 by Andy Nichols on 16/08/2026 at 09:37..
Fix mapping parser invert/EOF bugs and cover binding forms

A trailing '~' invert marker on an axis token was silently dropped, and
for multi-digit axis numbers such as "a10~" it also defeated the
integer parse and selected the wrong axis, so strip the marker and
propagate the inverted flag. Separately, next() checked for
end-of-stream only after reading a line, losing a valid entry that was
reached from inside the comment-skipping loop and happened to be the
file's last line. Add a fixture database and tests covering button,
full-axis, half-axis, inverted-axis and hat bindings.

Change-Id: I846c9cf77c47bd66eb37684c216f1a0b4e37a16c
Reviewed-by: Shawn Rutledge <[email protected]>
Reviewed-by: Laszlo Agocs <[email protected]>
https://invent.kde.org/qt/qt/qtgamepad/-/commit/4964bd585dba4f1035e6f2904e2ad2308edcfce6

Git commit a4ffc7bf832416998f60aeb230f941829edf5da2 by Andy Nichols on 16/08/2026 at 09:37..
Add QUniversalInput core autotest

Cover the input singleton through its public injection API, the same
surface the platform backends use, so most behaviour is testable
without hardware: the connection lifecycle, unusedJoyId() allocation
and reuse, button and axis deduplication, hat decomposition into D-pad
events, force-feedback state storage, relative mouse mode, and the
end-to-end mapping path from a database GUID to remapped buttons.
Because the singleton is process-wide, cleanup() disconnects every
device the tests use and synthetic devices use high indices.

Change-Id: Ibbf1412e305bceb3f17e37b1c4db68702cc77aaf
Reviewed-by: Shawn Rutledge <[email protected]>
Reviewed-by: Laszlo Agocs <[email protected]>
https://invent.kde.org/qt/qt/qtgamepad/-/commit/a4ffc7bf832416998f60aeb230f941829edf5da2

Git commit 021ad8740708990361019d44a1f0fdbb8460a407 by Andy Nichols on 16/08/2026 at 09:37..
Unit-test the input mapping transforms directly

mappedButtonEvent(), mappedAxisEvent() and mappedHatEvents() carry the
most intricate branching in the module, and reaching every branch
through the bundled controller database is impractical because it
depends on whatever entries the third-party database happens to
contain. Grant an autotest friend access to these private members and
feed hand-built JoyDeviceMapping values straight into the transforms.
The friend declaration is guarded by QT_BUILD_INTERNAL and the test is
only built when the private test feature is enabled, so nothing is
exposed in release builds.

Change-Id: I1b44553576c212d551d0d44c7b8faf6680573316
Reviewed-by: Laszlo Agocs <[email protected]>
https://invent.kde.org/qt/qt/qtgamepad/-/commit/021ad8740708990361019d44a1f0fdbb8460a407

Git commit fbff50bc5758a4dccb4ff7eaac77f0bf7df8b107 by Andy Nichols on 16/08/2026 at 09:38..
Add QGamepad property projection autotest

QGamepad presents a single device's state as Qt properties driven by
QUniversalInput signals. Inject synthetic input through the singleton
and verify the whole projection: every button maps to its property and
change signal, each thumbstick axis and analog trigger maps to its
value property, input from other devices is ignored, changing deviceId
re-targets which device is followed, and the connected state and name
are synced at construction and updated on disconnect.

Change-Id: If4f2cc05c426e449fbf90a8593283f56f901cc63
Reviewed-by: Laszlo Agocs <[email protected]>
https://invent.kde.org/qt/qt/qtgamepad/-/commit/fbff50bc5758a4dccb4ff7eaac77f0bf7df8b107

Git commit 61cc4add3c73f4178901e57773d53b32b862b4b5 by Andy Nichols on 16/08/2026 at 09:38..
Add input backend factory autotest

Cover the joystick and mouse plugin factories and the no-backend
fallback, the parts of the loading path that are platform independent
and therefore exercised in CI, where no input hardware is present. The
test checks that keys() returns a well-formed list whether or not a
platform plugin is available, that an unknown backend key yields a null
backend, and that once the singleton has finished its deferred
initialisation synthetic input still reaches the signals, even when
only the fallback no-op backend was created.

Change-Id: I9c5e537c74dc2eb9ac91f83f32798889a93136b5
Reviewed-by: Laszlo Agocs <[email protected]>
https://invent.kde.org/qt/qt/qtgamepad/-/commit/61cc4add3c73f4178901e57773d53b32b862b4b5

Git commit 74874118f5ab57aeef63032d45e912bc76e96576 by Andy Nichols on 16/08/2026 at 09:38..
Add QML layer autotest

Add a C++ driven test for the three QML modules, which keeps precise
control of the event loop and of the shared device state: input is
injected through the QUniversalInput singleton and the reaction is
observed on inline QML objects. The cases confirm that each module
imports and instantiates its element and that enum access resolves,
that a Gamepad updates its properties from injected input, that an
ActionStore assembled from declarative children emits actionEvent, and
that the QtUniversalInput injection slots forward to the singleton. The
test runs headless under the offscreen platform and is only built when
Qt Quick is available.

Change-Id: I6de9871e7adba6be277efa6084f800f156bcf10f
Reviewed-by: Laszlo Agocs <[email protected]>
Reviewed-by: Shawn Rutledge <[email protected]>
https://invent.kde.org/qt/qt/qtgamepad/-/commit/74874118f5ab57aeef63032d45e912bc76e96576

Git commit 33750eb2975c5a6e65fc01aee20d28126d10ad21 by Andy Nichols on 16/08/2026 at 09:38..
Add manual hardware validation checklist

The automated tests cover everything reachable through synthetic input
injection, but device enumeration and hot-plug, the platform backends,
force-feedback actuation and OS-level relative mouse mode can only be
verified on real hardware. Add a per-platform checklist under
tests/manual that designates the existing examples as the validation
drivers and records results in a platform matrix.

Change-Id: I4e7b86857da77ef4602f040389d0c2009dec84f9
Reviewed-by: Laszlo Agocs <[email protected]>
Reviewed-by: Shawn Rutledge <[email protected]>
https://invent.kde.org/qt/qt/qtgamepad/-/commit/33750eb2975c5a6e65fc01aee20d28126d10ad21

Git commit eb7d586fbf3a47cc004bf5d121aca66ef2674f13 by Andy Nichols on 16/08/2026 at 09:38..
Only convert full-axis triggers to the [0, 1] range

joyAxis() rescaled any mapped trigger output from [-1, 1] to [0, 1]
regardless of how the trigger was driven, so a trigger mapped from a
half axis, which is already in [0, 1], was rescaled a second time, and
on Android, where trigger axes arrive in [0, 1] to begin with, every
mapped trigger was distorted. Following current Godot behaviour, only
apply the conversion when the matched binding's input was a full axis,
and skip it entirely on Android. mappedAxisEvent() reports the matched
input range through an optional out-parameter so that joyAxis() can
make that decision.

Change-Id: I9114f9741d1de1afbbf1a893493ba7588a8fb995
Reviewed-by: Shawn Rutledge <[email protected]>
Reviewed-by: Laszlo Agocs <[email protected]>
https://invent.kde.org/qt/qt/qtgamepad/-/commit/eb7d586fbf3a47cc004bf5d121aca66ef2674f13

Git commit 058dd0e82e6e0d487b1318b570eee78be0c0fbd5 by Andy Nichols on 16/08/2026 at 09:38..
Guard against out-of-range joypad indices

joyButton() and joyAxis() only checked their index with Q_ASSERT, which
is compiled out of release builds, so a backend or a malformed mapping
reporting an index outside the supported range would read and write past
the per-device lastButtons and lastAxis arrays. Replace the assertions
with range checks that warn through the logging category and return,
mirroring the non-fatal guards the upstream Godot input code uses.
Negative indices, including the Invalid sentinel, are rejected as well.

Change-Id: I48a9b7c676b1202cd8ef9d739e1d3d01659857cc
Reviewed-by: Shawn Rutledge <[email protected]>
Reviewed-by: Laszlo Agocs <[email protected]>
https://invent.kde.org/qt/qt/qtgamepad/-/commit/058dd0e82e6e0d487b1318b570eee78be0c0fbd5

Git commit 4729a744ecaefb990356a66f6eef5ec8cbd5d257 by Andy Nichols on 16/08/2026 at 09:38..
Update the bundled SDL game controller database

Refresh the bundled SDL_GameControllerDB from the upstream mdqinc
repository, moving from commit 9055df0 to 0499a01, which adds roughly
two hundred controller mappings (2052 to 2245 entries) and is still in
the SDL 2.0.16 format the parser expects. The README and LICENSE are
refreshed from the same snapshot, and the copyright year is updated in
the bundled files, the local REUSE.toml and the attribution metadata.

[ChangeLog][Third-Party Code] Updated the bundled SDL_GameControllerDB
to upstream commit 0499a01, adding mappings for more game controllers.

Change-Id: Ida4dd1fe90baa7016b234bf6c2651aa6b7c8e8bc
Reviewed-by: Laszlo Agocs <[email protected]>
Reviewed-by: Shawn Rutledge <[email protected]>
https://invent.kde.org/qt/qt/qtgamepad/-/commit/4729a744ecaefb990356a66f6eef5ec8cbd5d257

Git commit ed9e1ce1888902ec4f826ca75252b6d1b824a565 by Andy Nichols on 16/08/2026 at 09:38..
Make the QML layer test work where the application is bundled

tst_qmlgamepad builds its QML from strings, so the QML import scanner
finds no imports for it and the modules it needs are left out on
platforms that package the test into a bundle. On Android every import
then failed, first with "module is not installed" and then, once the
qmldir was deployed, with the module's plugin not being found.

Name the modules in a QML file and point the scanner at the directory
holding it, so that they are deployed, and link the modules the test
imports. Their qmldir marks the plugin optional and names a link target,
so with the types already registered the plugin never has to be loaded,
and linking also makes the modules a dependency of the test rather than
something a deployment tool has to infer from the QML.

The test also asked for the offscreen platform plugin so that it would
run without a display, and that aborted it on Android, which ships only
its own platform plugin. Nothing the test creates is a visual item, so
run it without a GUI application instead: no platform plugin is needed on
any platform then, and the question of a display does not arise.

Change-Id: I6a49020a7deae84a3557cef38028b5bf431a3d16
Reviewed-by: Andy Nichols <[email protected]>
https://invent.kde.org/qt/qt/qtgamepad/-/commit/ed9e1ce1888902ec4f826ca75252b6d1b824a565
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.