Commit Graph
1990 Commits
Author SHA1 Message Date
KeegantheVeganat0r b563b8d1eb fix(hud): translate low FPS toggles in all supported locales 2026-11-05 12:38:55 -05:00
KeegantheVeganat0r 6b887c42af feat(hud): add independent 1% and 0.1% low toggles 2026-11-05 12:38:55 -05:00
Omar Al Taki 3d1f0f63b9 fix(input): release a held mouse Back only when its own device disconnects 2026-11-05 12:13:51 -05:00
Omar Al Taki aad60fef5b fix(input): keep the right button down until every overlapping mouse Back is released 2026-11-05 12:13:51 -05:00
Omar Al Taki db8c66b107 fix(input): keep mouse Back routed to screen-key text fields while editing them 2026-11-05 12:13:51 -05:00
Omar Al Taki abb28792e8 fix(input): release a mouse Back right click on focus loss and pass nav Back through
Address review: a navigation-bar Back that arrives while an injected mouse
Back is held now stays Back instead of releasing the right button early.
A held right button is released on pause, focus loss and input-device
removal, like the other held Back handling. While the session is
suspended or still loading, Back is no longer sent to the guest.
2026-11-05 12:13:51 -05:00
Omar Al Taki 57b3623a9a fix(input): mouse right click no longer acts as Back in REDMAGIC cast mode
REDMAGIC's cast mode replaces a mouse's right button with a Back key that
names no device and lacks the virtual-hard-key flag that the navigation
bar and back gesture set. During a session, a Back from a mouse, or that
injected form while a mouse is connected, now presses the guest's right
button. The navigation bar, back gesture and controller Back still act
as Back, and so does a right click while a DroidDeck menu is open.

A mouse's Back and Forward buttons no longer also send a left click;
Android delivers them as key events.
2026-11-05 12:13:51 -05:00
Anton bae4ecd867 fix: leave run-mode apps unpinned when all cores are selected 2026-11-05 12:13:45 -05:00
Boran Miao 17fb80ad51 test: quote emulator installer paths with spaces 2026-11-05 12:09:56 -05:00
Boran Miao 5e0f5cb9cd fix: install bundled PPSSPP through the Flatpak helper 2026-11-05 12:09:56 -05:00
HCOOKIELYT 0544933abd fix(steam): show progress while applying client updates
Forward extraction and installation messages from the x64 bootstrap log and replace stale download percentages with the applying-update state. Add regression coverage for phase ordering and log forwarding.

Fixes #812
2026-11-05 11:56:42 -05:00
Kurt Himebauch fe1dd8ca72 test(battlenet): close the folder scan case 2026-11-05 11:56:37 -05:00
visail 969b7e625f fix: list Battle.net games installed under Blizzard's China uids
Blizzard's China client records some products under a CN uid, so the installs
it makes never reach the Library and their Stores card keeps offering Install:

  Diablo II: Resurrected  osic      (catalogue had osi)
  StarCraft II            s2_cn     (catalogue had s2)
  Diablo Immortal         anbs_cn   (catalogue had anbs)

title() now resolves those uids to the international title, so the Library, the
Stores "installed" state, the cover folder and the launch code all agree, while
Game.installUid keeps the uid the Agent recorded for updates and uninstalls.
TITLES and STORE are untouched.
2026-11-05 11:56:37 -05:00
sanogueralorenzo 1c24c600cd refactor: clarify adaptive stick hit testing and test setup 2026-11-05 11:43:46 -05:00
sanogueralorenzo d8c1bc6059 fix: extend left adaptive stick activation to the screen edge 2026-11-05 11:43:46 -05:00
uubooster-team e1fe6f99cf fix(network): handle gatewayless IPv4 VPN links
Provide compatible gateway metadata for IPv4 VPN links without changing
VPN routing, and keep text and JSON network snapshots consistent.

Add regression tests for gateway selection and network snapshots.
2026-11-05 11:43:30 -05:00
coffeemeist3r ef305c93cd fix(mesa): Steam's UI no longer crashes when scrolling the Home shelf fast on PowerVR
Zink's rebind_image() and zink_rebind_all_images() refreshed only a sampler
view's main image view after the resource got a new backing object. The
view's zs_view and cube_array surfaces stayed on the old object and were
freed with it, so the next descriptor update wrote a garbage VkImageView.

On PowerVR (needs_zs_shader_swizzle) every RGBX/BGRX view has a zs_view, and
Steam's web helper segfaulted in vkUpdateDescriptorSetWithTemplate within
seconds of fast Right presses on the Home shelf. The new Mesa patch rebuilds
all of the view's surfaces with init_sampler_view().
2026-11-05 11:28:51 -05:00
Systina12 f6f26d03f9 fix: quote GPU environment values before writing shell exports 2026-11-05 11:18:29 -05:00
dddms e72cddccd9 perf(steam): decode requested appinfo records only
Avoid decoding every app when Start without Steam resolves one game launch. Use wanted-app selection in the single-game helpers while keeping the existing field decoder and full-reader default for bulk callers.

Track partial coverage separately from complete results, share one immutable byte snapshot for incremental queries, and keep timestamp invalidation and warm hits. Preserve the last valid duplicate record and release the raw snapshot after a full decode.

Add format/cache/structural-budget and launch-resolution regressions, reuse the existing binary fixture encoder, and document the host-only performance scope.
2026-11-05 11:17:03 -05:00
vitamin663-sys 92a588ea16 fix(input): add radial stick dead zone setting 2026-11-05 10:53:15 -05:00
cphillamandmaxjivi05 e879375ca4 fix: upscale game buffers before native-resolution composition (#1367)
* fix: upscale game buffers before native-resolution composition

* fix: drop an added code comment from the effects source draw

* fix: effects source keeps pillarboxed games and near-full source rectangles

* fix: a larger opaque draw above keeps the full composition path

---------

Co-authored-by: maxjivi05 <maxjividen@gmail.com>
2026-11-05 10:34:19 -05:00
Kurt Himebauch 7c5bf77f17 fix: fit output after pip resize 2026-11-05 10:18:37 -05:00
visail a0a7a66470 fix: use Blizzard's China hosts for Battle.net installs and update checks
The Agent's install request pointed at http://cn.patch.battle.net:1119/<product>.
That host only 301-redirects to the country's version service today; Blizzard's
China client asks cn.patch.battlenet.com.cn:1119 directly.

The update check built <branch>.version.battle.net, so a China install (branch
cn) asked cn.version.battle.net, which does not answer; the China service is
cn.version.battlenet.com.cn.

Only region cn changes.
2026-11-05 09:56:40 -05:00
kmnkv1 26c562c174 fix(stores): moving through the side menu no longer freezes the launcher (#2105) 2026-11-05 09:44:45 -05:00
Kurt Himebauch e1c2b0e340 ci: trust ASEbrahim for signed test builds (#2124) 2026-11-05 09:38:38 -05:00
MaxsTechReview d4fe440b49 docs: README install step links the current APK (#2122) 2026-11-05 08:43:24 -05:00
MaxsTechReview 4c23092c55 fix(components): repaired components reach prefixes that already have them (#2121)
fix(components): the library sweep refreshes the catalog when it is safe to

A game job reads the cached catalog, and the installed check compares against
the cached revision, so a repaired component never reached a prefix that
already had it. The sweep now fetches the catalog first when online and not on
a metered or constrained connection.
2026-11-05 08:43:21 -05:00
MaxsTechReview a309428a2a feat(battlenet): import, list and delete World of Warcraft addons (#2111)
World of Warcraft, Classic and Forever get an Addons tab in the Library. It imports addon zips into the right Interface/AddOns folder, lists the installed addons, and deletes one after a confirmation.
2026-11-05 02:04:03 -05:00
MaxsTechReview b9dbd006be fix(storage): Windows installs on a natively mounted card no longer ask for an administrator (#2100)
* fix(storage): Windows installs on a natively mounted card no longer ask for an administrator

Cards mounted directly as FAT, exFAT or NTFS were not treated as Android
storage, so wineserver reported an Anonymous owner and refused permission
changes. Its chmod on these volumes also no longer fails the request.

* fix(storage): keep NTFS owners and the chmod error
2026-11-05 00:47:38 -05:00
Kurt Himebauch a9d2d09e64 fix: restore single-screen session menu controls (#2110) 2026-11-04 22:15:03 -05:00
Kurt Himebauch 516e3862fa fix: refresh repaired components and render Ubisoft Connect (#2090)
* fix: refresh repaired components and render Ubisoft Connect

* fix: address component repair and Wine registry review

* fix: repair manually enabled components and check registry writes

* fix: serialize component repairs and use Proton runinprefix

* fix: report queued component repair failures

* fix: preserve newer component repair waits

* Make component queue transitions atomic

* Isolate component apply failures by game

* Preserve pending repair when catalog is stale

* Restore persisted component repair revisions

* Update pending requirements atomically

* Respect disabled pending components per game

* Keep queue key state atomic while worker waits

* Pass selected game to component repairs

* Preserve pending repair when component is absent

* Preserve pending revision on catalog failure

* Test legacy pending repair revision recovery

* Isolate fake worker Steam app info lookup

* Merge queued Steam app info lookups

* Persist launch component revisions before repair

* Gate launch on component repair discovery

* Expand and refresh launch repair discovery

* Include new automatic picks in launch requirements

* Log repair persistence failures and align repair keys

* Use runtime key for Battle.net component repairs

* Retain failed component reapplications for retry

* Harden pending repairs and launch preparation

* Isolate wait-cool sleep mocking

* Allow launches without catalog when no repair is pending

* Queue launch repairs even if persistence fails

* Block launch when repair state cannot persist

* Allow launch when no component repair is needed

* Persist selected repairs when catalog is offline

* Drain offline component repair in test
2026-11-04 21:54:00 -05:00
MaxsTechReview ab92033b90 fix(desktop): Steam's own header moves and resizes its windows (#2097)
* fix(desktop): Steam's own header moves and resizes its windows

Steam never asks KWin to move or resize its windows, and its maximize
button can only maximize. Each normal Steam window now reports presses
on its header and edges, and KWin handles them natively. No extra title
bar is added and other apps are unchanged.

* fix(desktop): drag regions cover the elements inside them

* fix(desktop): find Steam's drag regions by position

The Friends window's drag region ignores pointer events, so a hit test
never finds it. The check now runs once a press moves, so plain clicks
cost nothing.
2026-11-04 17:47:00 -05:00
Kurt Himebauch d62f017bce Add session log management to setup diagnostics (#2099)
* feat: manage session logs in setup

* fix: address session log review feedback

* fix: honor device date and time settings
2026-11-04 16:05:56 -05:00
MaxsTechReview f005241549 fix(desktop): download language packs from the release that has them (#2096)
* fix(desktop): download language packs from the release that has them

The Ubuntu runtime's release has no language packs or index, so the
desktop stayed in English for every language.

* fix(desktop): reinstall language packs when their release changes
2026-11-04 15:09:30 -05:00
MaxsTechReview bba40cd69c fix(desktop): a game's window follows its own window mode (#2094)
* fix(desktop): a game's window follows its own window mode

Desktop games ran in a titled gamescope window whatever mode they asked for. gamescope now fills the desktop for a fullscreen or borderless game and matches the window size of a windowed one.

* Use the p30 gamescope test build

* fix(desktop): a windowed game too big for the desktop is maximised

* fix(desktop): a decorated game window stays a window

* Use the published gamescope p21
2026-11-04 14:59:39 -05:00
Kurt Himebauch f3d6efbcfa docs: update download badge to 0.6.9 2026-11-04 14:14:07 -05:00
MaxsTechReview f1c1ca59fe fix(battlenet): use the right artwork for each game (#2092)
* fix(battlenet): use the right artwork for each game

World of Warcraft: Forever took retail art and its logo from a loose name lookup, and only fetched its own art when the Store tab was opened. Shop pages also supplied trailer stills and seasonal promos.

Each game now has chosen Blizzard key art with the shop page as a fallback, installed games fetch their art without opening the store, and lookups by name must match exactly. Art found by the old lookup is fetched again once.

* fix(battlenet): keep cached art if the new art cannot be fetched

Classic's variants fetch through the shared title, and a failing chosen image falls back to the shop page.
2026-11-04 14:12:16 -05:00
5cf69732ef fix(input): make a hardware mouse and keyboard work like a PC (#2053)
* feat(gamescope): a three way switch for relative mouse motion

Games that confine the cursor and warp it back to read movement never
reach the nested hints rule, so their aim stays bounded by the screen.
The convar defaults to 0 and leaves that rule alone; 1 forces relative
motion for the focused game, 2 keeps the pointer absolute even when the
rule would apply.

(cherry picked from commit db3d7555e0)

* feat(input): the session carries a relative mouse mode per game

Reads the mode from the game's gesture config, hands it to gamescope as
gamescope_relative_mouse, and pushes a change to the running session
through gamescopectl.

(cherry picked from commit e350d88464)

* feat(drawer): the relative mouse switch is a three way choice

Auto leaves it to the game, on forces relative motion, off keeps the
pointer absolute. Named in all 32 locales so none of the three falls
back to English.

(cherry picked from commit e96a187e02)

* fix(input): follow the focused game's relative mouse mode

Switching to a game whose saved mode differs left the session on the
previous game's mode, since only the drawer state was refreshed. The
requests also ran on a thread per selection, so two quick picks could
reach gamescope out of order.

(cherry picked from commit 7ff8c5d568)

* fix(input): retry the relative mouse mode gamescope did not take

The drawer state moved before the request ran, so a failed request left
the two out of step and the next focus change skipped the resend.

(cherry picked from commit cf0f82d8cd)

* fix(input): the relative mouse mode tracks the latest choice

The guest agent answers ok when it handled the exec, so a failing
gamescopectl was recorded as applied. Reconcile the newest desired mode
on the worker thread after each request, and only mark applied when the
command really exited zero.

(cherry picked from commit 5f5e3bd52e)

* gamescope: a hidden cursor under any pointer constraint is relative

Games that hide the cursor and confine the pointer had no lock hint, so the
nested pointer stayed absolute and the camera froze.

* Treat a hardware mouse as a real mouse in sessions

A mouse now moves the guest pointer by relative motion for the whole session
through pointer capture, so it no longer stops at screen edges or reaches
system gestures. Its cursor stays visible in every touch mode, follows the
game showing or hiding it, and clicks no longer press on-screen controls.

* gamescope: use the mouse test release

* Direct touch turns the camera while a game holds the pointer

A swipe in direct touch now sends relative motion when a game has the pointer
locked, including when the lock starts during the swipe, as when a game
hides the cursor while a button is held.

* Address review findings on mouse and touch input

Keep touchpad taps on on-screen controls, cancel a pending long press during a
locked swipe, let the three-finger gesture cancel a locked swipe, refresh
capture when the output changes, and use the menu's key for the relative
mouse setting.

* Keep locked touches inside the game picture and free the mouse in touch editors

* End touch editor ownership when the editor goes away

* Bring the mouse cursor back when a touch editor closes

* Release a pointer lock at the game's pointer

* gamescope: use the pointer position test release

* Fit the X screen to a fullscreen window larger than it

* gamescope: use the X screen fit test release

* Return the X screen when no game window has focus

* gamescope: use the X screen return test release

* ci: avoid redundant gamescope builds

* fix: hardware mouse in Desktop and pointer warping games

KWin nested on the host only reads relative motion while its own pointer lock is on, so a program that locked the pointer in Desktop (Blender orbit and pan) stopped receiving motion. A captured hardware mouse now turns that lock on, and a real Right Ctrl no longer toggles it.

Gamescope follows a game's pointer warps instead of overriding them, and absolute motion also sends raw motion. Also retries relative mouse requests, tidies the unplug path, passes side buttons and fits a second oversized window correctly.

* chore: use the gamescope build with patch 0131

* fix: Desktop mouse lock keeps retrying after early attempts fail

* fix: hold the key that turns on the Desktop mouse lock

KWin ignores a press and release delivered together.

* fix: gamescope enters warp following sooner and keeps steady motion

* chore: use gamescope p26

* Capture system keys in a focused session and keep the first Desktop mouse motion in place

* Use the p27 gamescope build

* Update the system keys row test

* Recognise a captured mouse so the Desktop grab can start

* Keep touch warps out of relative motion

* Send Esc from keyboards that report it as Back

* Use the p28 gamescope build

* Release captured keys on pause, forward motion during a grab and wait for a pending screen fit

* Use the p29 gamescope build

* fix(input): keep held system keys consumed until they are released

Copy each captured key event, since the service owns the original only for the callback, and consume the physical release of a key already released to the guest.

Use the published gamescope p20.

* fix(input): capture a system key only from its first press

---------

Co-authored-by: kingokksa <kingokksa@qq.com>
Co-authored-by: maxjivi05 <6025299+maxjivi05@users.noreply.github.com>
2026-11-04 13:27:08 -05:00
Kurt Himebauch eed9edaa1c feat: consistent bottom screen bar and menu-first navigation in sessions (#2084) 2026-11-04 13:26:35 -05:00
MaxsTechReviewandmaxjivi05 940efdab3a Reduce DXVK render-path pacing stalls on Adreno 722 (#2066)
Co-authored-by: maxjivi05 <6025299+maxjivi05@users.noreply.github.com>
2026-11-04 12:44:26 -05:00
MaxsTechReviewandAlbert b7878d2841 fix(battlenet): keep games installed inside Battle.net's folder running (#2087)
fix(battlenet): keep games installed inside Battle.net's folder running

A game installed under C:\Program Files (x86)\Battle.net\ (for example
World of Warcraft: Forever in "Battle.net\World of Warcraft\_forever_")
was counted as part of Battle.net itself. Launched from DroidDeck, the
launch never saw a game, said "Battle.net closed before a game started",
stopped everything left in the prefix, game included, and exited 1.

Battle.net's own files are now only those directly in its folder, in its
Battle.net.<build> folders and under ProgramData\Battle.net.

Co-authored-by: Albert <alb.carreras@gmail.com>
2026-11-04 12:13:34 -05:00
Kurt Himebauch 430af5e22d feat: desktop and scrolling wall live wallpapers (#2012)
* feat: desktop and scrolling wall live wallpapers selectable from Android settings

* fix: render the wall wallpaper off the main thread and give it its own thumbnail

* fix: serialize wall wallpaper visibility and wait out in-flight draws on surface destroy

* fix: restart the wall loop on surface recreation and keep queued visibility changes

* fix: keep the wall loop alive across a failed canvas lock and finish redraws before returning

* fix: post the wall redraw asynchronously on surface change

* fix: redraw the desktop wallpaper logo from the real mark and show game covers on the wall

* chore: mount the git dir in build containers and seed new worktrees from the main checkout

* fix: decode wall covers as RGB_565 and seed worktree assets only into empty dirs

* feat: drop the desktop wallpaper and add frame rate and speed settings to the wall

* feat: wall settings over the live wallpaper with a match-screen rate, and drop the center vignette

* perf: pace the wall on vsync and draw it on a hardware canvas

* fix: stage worktree seed copies and publish them only after they succeed

* fix: point the wall settings link at the activity class so the picker shows the gear

* fix: dedupe wall covers by app and space repeats like the in-app wall, keep the frame loop alive across surface gaps

* fix: show the picker preview behind wall settings and drop the display-rate lookup

* fix: stop wall frame callbacks when the surface goes and only replace an empty seed destination

* fix: skip a seed when the destination reappears before the staged copy is moved in
2026-11-04 11:38:54 -05:00
Moroni Granja 0110dc3c0f fix: a GOG install launches the game, not its config tool (#1644)
Blood Omen ships dxconfig.exe beside kain.exe and the shortcut pointed at
the config tool: pickExe kept the first .exe the folder listing returned
when no title match was found. Read the game's play task from GOG's own
goggame-<id>.info manifest first - a primary game task, or a primary
launcher task for launcher games, and the product's manifest ahead of any
other goggame-*.info - then the product's temp_executable; without either,
rank the folder's exes so a word of the title wins, config and tool names
lose, and depth then size break the remaining ties.

GOG's galaxy_*.exe support installer is not the game either. The Witcher:
Enhanced Edition ships galaxy_the_witcher_enhanced_edition_2.1.0.15.exe
beside launcher.exe, and its build metadata names that file as the
product's temp executable, so launching it starts a 32-bit installer that
stops at "Path not found" under ARM64 FEX - the same dialog as the setup
stub #1174 removed. Play tasks, the hint and the name search skip it.

Fixes #680
Fixes #694

Only a primary launcher task counts as a launch task: GOG files the
configuration tool beside a game as a non-primary launcher, so it now falls
through to the executable search instead of becoming the game.

The temp_executable hint is matched by basename with either separator and
must resolve inside the install folder, so a nested galaxy_*.exe is skipped
too and a hint cannot point outside the game.

GOG runs a task from the working directory it declares, and from the install
root when it declares none. That directory now reaches the sidecar and the
shortcut's Start In: a game in a subfolder (System/witcher.exe) starts where
GOG starts it instead of in System/, where it cannot find its Data folder.
2026-11-04 11:38:02 -05:00
MaxsTechReview d849e6ae0a fix: Home screen setting keeps DroidDeck in RedMagic Game Space (#2083) 2026-11-04 09:06:37 -05:00
MaxsTechReviewandmaxjivi05 26274114a3 ci: avoid redundant gamescope builds (#2070)
Co-authored-by: maxjivi05 <6025299+maxjivi05@users.noreply.github.com>
2026-11-04 00:38:17 -05:00
Kurt Himebauch 45fb017496 perf(steam): batch compatibility mapping updates (#1755) 2026-11-03 22:01:41 -05:00
Kurt Himebauch a2a05ebc5b fix: preserve the runtime PATH when overriding guest binaries (#1826) 2026-11-03 22:00:41 -05:00
Kurt Himebauch ad0d39f457 fix(quest): gamescope no longer aborts at start with vk.WaitSemaphores -13 (#1938) 2026-11-03 21:58:49 -05:00
Kurt Himebauch 1915e16fe1 fix: controller focus moves into an opened folder (#1962) 2026-11-03 21:56:57 -05:00
Kurt Himebauch c1b8f4c706 fix(hud): show the GPU clock in the Steam overlay on Adreno without root (#2059) 2026-11-03 21:54:55 -05:00