[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