Select the explicitly configured Android render node for nested KWin 6.8, apply OpenGL settings before Plasma starts, and pin the original signed Mesa 26.2.4 package that passed Thor rendering. Remove build-directory runtime search paths and fail closed on ELF inspection errors.
Native ARM64 build passed. Thor validated a visible nested Wayland terminal, active OpenGL ES/Zink on Turnip, 1280x720 output, and keyboard input. Mesa pin regression tests, launcher and ELF failure controls, shell syntax, and human authorship checks passed. Published desktop pin remains r2; full latest-head CI is pending and maintainer authorized this merge after device validation.
Match the native builder and desktop package override to Arch Linux ARM KWin 6.8.0, pin the official source hash, and port the nested-scaling patch. Check package/source version consistency in both build jobs.
Official source checksum, patch application, live package closure, and shell syntax verified. The published desktop remains pinned to r2; candidate 6.8 device/rendering validation remains pending before any package publication.
Combine trusted source and squash-metadata validation with the exact-head APK compilation result. Preserve automatic trailer cleanup in the installed hooks.
Validated with 10 authorship/hook tests and 9 combined-gate tests.
Install commit and push hooks that remove bot co-author trailers, preserve human credits, and reject bot primary authors. Add a trusted default-branch CI checker and publish its required status on the exact proposed commit. Validate main pushes as well. Ten regression tests pass, including real Git hook tests and the --no-verify case.
* feat: tools/device-smoke.sh checks a build on a real device over plain adb
Installs and launches the app, changes the density and the window size, cycles a foldable's device state, then reads the newest debug session (first frame, last frame rate, memory page size, process exits). It restores the display and the device state it changed. No python needed; complements tools/droiddeck-scenario, which drives games.
* fix: device-smoke.sh restores only what it changed and checks more carefully
Restore the device state by cancelling the override the script made, or
by putting back the override that was already pinned (a test lab pins
one), instead of pinning the committed state. Restore density and size
only after the script changed them. Keep adb's exit status, count only
crashes of the tested app and fail when the crash buffer cannot be read,
compare the top activity after the density change, and exit 2 when an
option value is missing.
* fix: check wm density/size exit statuses and keep restore flags on failure
* fix: verify smoke-test display changes and restoration
* fix: reject false smoke-test launches and quote remote paths
* Run final display cleanup before reporting smoke results
---------
Co-authored-by: ovurrsl <ovurrsl@users.noreply.github.com>
Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
On foldables the unfolded-screen controls panel hides whenever a
controller is connected (#829). Phones held in a telescopic controller
still want its trackpads and back grips, so a new setting under
"Controls on the unfolded screen" keeps the panel with a controller.
It is off by default and appears in the launcher settings and the
in-session menu while unfolded controls are on.
The visibility decision moves into SessionDisplay.unfoldedControlsWanted
with unit tests.
Closes#861
Co-authored-by: ovurrsl <ovurrsl@users.noreply.github.com>
Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
Track visibility on the activity display
Separate activity visibility from the compositor display so a powered external screen keeps the session visible when the handset is locked. Notify the service as the activity moves between displays and avoid reporting a removed host display before Android moves the activity.
The == STEP lines in session.log now read HH:MM:SS.mmm, so the setup
steps before Steam starts can be timed; with whole seconds most of them
showed the same time.
Co-authored-by: ovurrsl <ovurrsl@users.noreply.github.com>
Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
* fix(gamescope): avoid retaining pointer cursor SHM commits
* test(gamescope): verify cursor release and pending window control
* test(gamescope): keep live probe inert during test discovery
* test: match Gamescope process name in cursor probe
* test: clarify cursor-role probe serial behavior
---------
Co-authored-by: siyuan.qsy <siyuan.qsy@alibaba-inc.com>
Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
* a11y: give the button-like clickables a Button role for screen readers
33 clickable / combinedClickable modifiers on buttons, tiles, list rows and
rail items had no semantic role, so TalkBack could not announce them as
buttons. Pass role = Role.Button on those. Scrims and pointer-consuming
backdrops are left alone. No visual or focus change.
* a11y: expose selection state for the drawer tabs, driver rows and suggested icons
The three selectable items (drawer page tabs, driver radio rows, suggested app icons) were given a plain Button role. Use selectable with Role.Tab or Role.RadioButton and the selected value so a screen reader announces which one is chosen.
* a11y: the rail's top tabs expose selection to screen readers
The tab cells were plain buttons, so a screen reader could not tell which
section was open. Tabs use selectable with Role.Tab; the link cells keep
the Button role.
* fix: expose selected store header tabs
* Group selectable accessibility controls
---------
Co-authored-by: ovurrsl <ovurrsl@users.noreply.github.com>
Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
* feat: itch.io store, library and installs for DRM-free Windows builds (#1064)
* feat: add experimental SDK-free VITURE Pro 2 tracking
* docs: record full-app Pro 2 hardware validation
* docs: record successful Pro 2 user game test
* fix: translate Pro 2 tracking notice for all supported locales
* fix: respect model capabilities for glasses controls
* fix: handle fold configuration during glasses probe
---------
Co-authored-by: kingokksa <47888451+kingokksa@users.noreply.github.com>
Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
* feat: a custom Gradient theme with a primary and a secondary colour, picked with a wheel, sliders and a hex box
* Gradient theme: OK waits for a valid hex, deep blues are made paler, button text suits the worse gradient colour
* Gradient theme: nudge only the gradient colour that button text cannot read on
* fix: meet readable contrast across gradient themes
* fix: preserve contrast through gradient interpolation
---------
Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
fix: a third-party GitHub mirror can only serve downloads that carry a trusted digest
Downloads without an expected SHA-256 were still sent through gh-proxy,
ghfast and other mirrors, and the first answer was accepted, so a mirror
could swap an AppImage or a Windows component. Downloader.downloadFile
now tries only the original URL when there is no digest. UserApps passes
GitHub's own asset digest, and WinComponents passes the snapshot's
archive digest, so those large files keep their mirror fallback.
Co-authored-by: ovurrsl <ovurrsl@users.noreply.github.com>
Co-authored-by: Kurt Himebauch <136133082+xXJSONDeruloXx@users.noreply.github.com>
* Run FEX-tool games on the chosen game cores
Performance > Game cores reached only the Proton launchers: games started
through "Linux x86 (FEX)" ran on every core, including the slowest cluster.
* Test that SteamVR FEX launches keep the game cores
l10n(tr): translate the Storage page, GPU driver mode and other missing strings
Adds 213 strings and 9 plurals that were missing from values-tr, so the
new Storage page, GPU driver mode UI, SteamGridDB art, downloads source,
VR and latency toggles no longer fall back to English on Turkish devices.
Co-authored-by: ovurrsl <ovurrsl@users.noreply.github.com>
The component catalog also reads the linux-nightly release of
Droid-Deck/DroidDeck-Components (hourly builds of DXVK, VKD3D-Proton and
FEX for glibc Protons). That release holds all three components, so each
file goes to its list by name: DD-dxvk-, DD-vkd3d-proton-, DD-FEXCore-.
A nightly that matches a stable build (same flavor and version, e.g.
DD-dxvk-3.1.1+153-nightly and dxvk-3.1.1-linux) has no row of its own;
if two nightlies match, the newer one is used. On the components page
the stable row gets a Stable | Nightly switch before Get, styled like
the Get button, one focus stop that flips with A or a tap and reports
its state as a switch. In the in-session drawer's download menus the
row gets Stable and Nightly tabs beside it (the existing TabStrip, now
with optional bumpers/compact), each its own focus stop. Get or A on the
row downloads whichever channel is selected. A nightly without a stable
counterpart keeps its own row, listed below the stable ones.
Downloads are allowed from that repository's releases too. A failed
nightly download says the file may have been replaced and asks for a
refresh. Strings in all locales.
* perf: FEX's in-root path lookups go through the fast path instead of proot
Android has no openat2, so libblsession walks RESOLVE_IN_ROOT lookups for
FEX one component at a time. Every fstatat, readlinkat and openat in that
walk was a raw syscall that stopped in proot. When libblfastpath is loaded,
the walk now calls its fstatat, readlinkat and openat, which answer without
proot and fall back to the raw syscall themselves. Without it the walk uses
the raw syscalls as before.
One lookup drops from 250-940 us to 26-86 us. A Graveyard Keeper launch
makes 37.5k proot stops instead of 54.0k and reaches its first scene
0.31 s sooner.
* test: count fstatat64 where the preload asks for it
* perf: FEX's own file opens go through the fast path instead of proot
FEX opens host files for the game with syscall(SYS_openat), so every one
stopped in proot even when the fast path could answer it. libblsession's
syscall() now sends SYS_openat to the fast path's openat as well, the same
way the in-root walk does, and makes the raw syscall when the fast path is
not loaded.
A Graveyard Keeper launch makes 28.0k proot stops instead of 37.5k; FEX's
openat stops go from 6,739 to none.
* fix: the fast path's start-up reads don't come back through syscall()
libblsession's syscall() now sends SYS_openat to the fast path. A process
named FEX starts the fast path by reading /proc/self/cmdline with
syscall(SYS_openat), which came straight back into the fast path and
waited on its own pthread_once. Its start-up reads now call libc's
syscall directly.
A process's status read for another process is served read-only, so
Chromium's ReadOnlyFile check no longer kills the browser. Chromium-based
AppImages without chrome-sandbox get --no-sandbox, and Flathub Chromium and
Electron apps skip zypak's spawn portal, which cannot work here.
* perf: performance overlay updates ride the next game frame instead of an extra composite
* gamescope: a held overlay repaint is only cleared once an output was painted
* gamescope: release.env points at p12