Commit Graph
526 Commits
Author SHA1 Message Date
lucannez64 82bc150d30 Merge remote-tracking branch 'origin/main' into pr-fix-129 2026-10-25 19:28:43 +01:00
Kalah ea74dfff65 Merge pull request #60 from lucannez64/fix/proc-fdinfo-permissions
fix(launcher): prevent inherited MangoHud fdinfo aborts
2026-10-25 19:28:41 +01:00
lucannez64 9d247575f2 Merge remote-tracking branch 'origin/main' into pr-fix-60 2026-10-25 19:27:59 +01:00
Kalah 51ded1c6a6 Merge pull request #121 from Lowell137/fix/consistent-mac-gpu-report
Report the profile GPU consistently in system_profiler
2026-10-25 19:27:01 +01:00
lucannez64 dec3699332 Merge remote-tracking branch 'origin/main' into pr-fix-129 2026-10-25 19:14:54 +01:00
lucannez64 860718cb28 Merge remote-tracking branch 'origin/main' into pr-fix-60 2026-10-25 19:14:54 +01:00
lucannez64 75fd6830b9 Merge remote-tracking branch 'origin/main' into pr-fix-121 2026-10-25 19:14:54 +01:00
Kalah 33c5a66f70 Merge pull request #136 from Lowell137/fix/appkit-unimplemented-methods
Implement AppKit methods the League client calls as unimplemented
2026-10-25 19:14:46 +01:00
lucannez64 4c6e233928 Merge remote-tracking branch 'origin/main' into pr-fix-136 2026-10-25 19:13:12 +01:00
Kalah 00786aa404 Merge pull request #90 from lucannez64/fix/post-match-cpu
Extend idle select() backoff to LeagueClientUx (refs #82, #84)
2026-10-25 19:12:30 +01:00
lucannez64 65d4354667 Merge remote-tracking branch 'origin/main' into pr-fix-121
# Conflicts:
#	.github/workflows/source-check.yml
#	NOTICE.md
#	README.md
#	docs/COMPLIANCE.md
#	docs/PLATFORM_IDENTITY.md
#	docs/SETUP.md
#	docs/TROUBLESHOOTING.md
#	patches/cocotron.patch
#	patches/metal--deps--indium.patch
#	tools/exec-guest.py
#	tools/run-riot-client.sh
2026-10-25 19:11:54 +01:00
lucannez64 097604533f Merge remote-tracking branch 'origin/main' into pr-fix-129
# Conflicts:
#	NOTICE.md
#	README.md
#	docs/COMPLIANCE.md
#	docs/PLATFORM_IDENTITY.md
#	docs/TROUBLESHOOTING.md
2026-10-25 19:11:02 +01:00
lucannez64 a31753c548 Merge remote-tracking branch 'origin/main' into pr-fix-60
# Conflicts:
#	docs/TROUBLESHOOTING.md
#	tools/riot-launcher-offline-check.py
2026-10-25 19:11:01 +01:00
lucannez64 ae97f5f83b Merge remote-tracking branch 'origin/main' into pr-fix-136 2026-10-25 19:10:17 +01:00
lucannez64 76073e6a45 Merge remote-tracking branch 'origin/main' into pr-fix-90 2026-10-25 19:09:59 +01:00
Kalah 501fae30b0 Merge pull request #130 from 3AvisD/docs/interoperability-wording
docs: clarify interoperability and compliance wording
2026-10-25 19:09:37 +01:00
lowellandClaude Opus 5.5 bddd12dc7d Implement AppKit methods the League client calls as unimplemented
Each of these hit NSUnimplementedMethod and either dropped the value
or returned zero.

- NSWindow: store and return collectionBehavior; setContentMinSize and
  setShowsResizeIndicator keep their value without the warning;
  isOnActiveSpace and keyViewSelectionDirection answer.
- NSApplication activateIgnoringOtherApps: activates through the
  display backend, as NSRunningApplication activateWithOptions: does.
  With NO it does nothing, since the window server cannot tell whether
  another app is active and NO must not take focus from one.
- NSSpellChecker dismissCorrectionIndicatorForView is a no-op, as there
  is no correction indicator to dismiss.

The X11 backend's activateProcessIdentifier: now looks the process up
in the root's _NET_CLIENT_LIST before falling back to the root's
children: under a reparenting window manager those children are frames
without _NET_WM_PID, so activation found no window.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 12:28:35 +03:00
3AvisD adae1b8bed docs: clarify the source-audit scope
State that scripts/validate.py checks revision format, patch existence and
patch parsing but does not verify applicability to pinned revisions. Point
patch changes at the separate prepare.py --check-only workflow.

Signed-off-by: 3AvisD <[email protected]>
2026-10-23 14:13:18 -06:00
3AvisD 2fcf44eaaf docs: apply review wording corrections
Distinguish the opt-in hide helper (local window management) from the
opt-in close helper (terminates eligible League client UI processes), and
list the tracked project artwork in the distribution scope.

Scope the platform-identity statement to repository-owned code: the
repository does not pass the identifiers as Riot authentication data, but
the values are guest-visible through IOKit and the official client's later
handling is outside the repository's scope. Use US spelling for licence
consistently.

Signed-off-by: 3AvisD <[email protected]>
2026-10-23 14:03:59 -06:00
3AvisD 56285686e8 docs: add the project repository URL
Link the project repository in the interoperability scope so readers can
distinguish it from the upstream Darling repository.

Signed-off-by: 3AvisD <[email protected]>
2026-10-23 14:03:59 -06:00
3AvisD c48272aa8f docs: clarify interoperability and compliance wording
Add docs/INTEROPERABILITY.md, an English scope document that describes
the project's interoperability and responsible-use practices: what it
distributes, how it handles local platform metadata and the MAC/AMFI
probe, how it keeps copyright and licence notices, how it avoids
access/authentication/integrity shortcuts, how it presents trademarks
and handles notices, and the user's responsibility for Riot's terms.

Update README, NOTICE, COMPLIANCE and PLATFORM_IDENTITY to link the
document and to state the opt-in window-helper and synthetic-identity
behaviour accurately. Add CONTRIBUTING with DCO sign-off and a scope
checklist.

Documentation-only change: no launcher, patch, build or test behaviour
changes.

Signed-off-by: 3AvisD <[email protected]>
2026-10-23 14:03:59 -06:00
3AvisD a53dd00ff9 docs: document Vulkan ICD selection for multiple GPUs 2026-10-23 11:24:24 -06:00
Kalah 24276b91c6 Merge pull request #123 from 3AvisD/fix/recover-stale-client
fix(launcher): recover a stale client tree without restarting Darling
2026-10-23 14:19:34 +02:00
Kalah 92484938b8 Merge pull request #123 from 3AvisD/fix/recover-stale-client
fix(launcher): recover a stale client tree without restarting Darling
2026-10-23 14:19:34 +02:00
lucannez64andClaude Opus 5.5 a11a144767 Merge main into fix/recover-stale-client
Resolve conflicts with #122: keep both feature docs and CI steps, and drop
this branch's copy of the close-helper block, which main now starts after
the installed-client check.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 14:18:33 +02:00
lucannez64andClaude Opus 5.5 143f0228d4 Merge main into fix/recover-stale-client
Resolve conflicts with #122: keep both feature docs and CI steps, and drop
this branch's copy of the close-helper block, which main now starts after
the installed-client check.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 14:18:33 +02:00
Kalah 4889b99533 Merge pull request #122 from 3AvisD/feat/hide-client-in-game
feat(launcher): select close/hide client handling from League preferences
2026-10-23 14:17:39 +02:00
Kalah 560872b796 Merge pull request #122 from 3AvisD/feat/hide-client-in-game
feat(launcher): select close/hide client handling from League preferences
2026-10-23 14:17:39 +02:00
Kalah 6bf8d63f55 Merge branch 'main' into feat/hide-client-in-game 2026-10-23 14:16:58 +02:00
Kalah 19b7a708c6 Merge branch 'main' into feat/hide-client-in-game 2026-10-23 14:16:58 +02:00
3AvisD 9194beef2f fix(launcher): harden stale-client recovery
- fail closed when X11 omits _NET_CLIENT_LIST or WM_CLASS, and recognize the
  RiotClientServices window class;
- require stale client processes to be at least 60 seconds old;
- recheck process identity before SIGTERM and SIGKILL and recheck the window
  before signalling;
- document the age and window-detection guards.
2026-10-23 06:08:45 -06:00
3AvisD 308fb3f3ce fix(launcher): harden stale-client recovery
- fail closed when X11 omits _NET_CLIENT_LIST or WM_CLASS, and recognize the
  RiotClientServices window class;
- require stale client processes to be at least 60 seconds old;
- recheck process identity before SIGTERM and SIGKILL and recheck the window
  before signalling;
- document the age and window-detection guards.
2026-10-23 06:08:45 -06:00
3AvisD f8bb14624e fix(launcher): address in-game helper review
- restore hidden windows even when the launcher output pipe is closed;
- exit the hide watcher after ten idle minutes and start it only after the
  installed-client check;
- reject missing, malformed or invalid close-during-game preferences instead
  of silently selecting hide;
- document the preference contract and idle behavior.
2026-10-23 06:08:45 -06:00
3AvisD 604073448c fix(launcher): address in-game helper review
- restore hidden windows even when the launcher output pipe is closed;
- exit the hide watcher after ten idle minutes and start it only after the
  installed-client check;
- reject missing, malformed or invalid close-during-game preferences instead
  of silently selecting hide;
- document the preference contract and idle behavior.
2026-10-23 06:08:45 -06:00
Kalah 97fcdce089 Merge pull request #115 from ekisu/perf/indium-cpu-shadow
perf(indium): cache buffer address-table keys in CPU memory
2026-10-23 13:42:26 +02:00
Kalah 9a7c1d9933 Merge pull request #115 from ekisu/perf/indium-cpu-shadow
perf(indium): cache buffer address-table keys in CPU memory
2026-10-23 13:42:26 +02:00
Kalah a0b152f53c Merge branch 'main' into perf/indium-cpu-shadow 2026-10-23 13:35:33 +02:00
Kalah 036b4604ee Merge branch 'main' into perf/indium-cpu-shadow 2026-10-23 13:35:33 +02:00
3AvisD 0a04d4e16c fix(launcher): remove orphaned client-in-game helpers
A launcher can exit while its long-lived close/hide helper remains. The next
run then starts another watcher, so several copies watch the same prefix.

Add an opt-in RCLOL_CLEAN_STALE_HELPERS=1 preflight that removes only helper
processes of this prefix reparented to init/systemd. Helpers of a live
launcher, other prefixes, the game, Riot/League/CEF, darlingserver and the
runtime are preserved. Unreadable or relative process data leaves a process
alone.

Validated across repeated launcher starts: the cleanup removed four, then one,
then one orphaned watcher; a subsequent dry run reported no orphaned helpers.
Zombie reaping after partial recovery is tracked separately in #124.
2026-10-22 15:50:38 -06:00
3AvisD c12ab84559 fix(launcher): remove orphaned client-in-game helpers
A launcher can exit while its long-lived close/hide helper remains. The next
run then starts another watcher, so several copies watch the same prefix.

Add an opt-in RCLOL_CLEAN_STALE_HELPERS=1 preflight that removes only helper
processes of this prefix reparented to init/systemd. Helpers of a live
launcher, other prefixes, the game, Riot/League/CEF, darlingserver and the
runtime are preserved. Unreadable or relative process data leaves a process
alone.

Validated across repeated launcher starts: the cleanup removed four, then one,
then one orphaned watcher; a subsequent dry run reported no orphaned helpers.
Zombie reaping after partial recovery is tracked separately in #124.
2026-10-22 15:50:38 -06:00
3AvisD 732e9c8881 fix(launcher): handle YAML comments and log failures
- strip inline YAML comments from preference values, including quoted values;
- keep a successfully unmapped window tracked when the success log raises
  BrokenPipeError, while still discarding a window whose unmap failed;
- cover both cases with tests.
2026-10-22 15:30:45 -06:00
3AvisD 9172bb6c3d fix(launcher): handle YAML comments and log failures
- strip inline YAML comments from preference values, including quoted values;
- keep a successfully unmapped window tracked when the success log raises
  BrokenPipeError, while still discarding a window whose unmap failed;
- cover both cases with tests.
2026-10-22 15:30:45 -06:00
3AvisD c8dd3886fc fix(launcher): recover a stale client tree without restarting Darling
Darlingserver normally stays alive after the Riot Client or game is closed.
If the client window disappears but Riot/League/CEF processes remain,
restarting via run.sh reuses a half-dead runtime and can fail to open a
window.

Add an opt-in RCLOL_RECOVER_STALE_CLIENT=1 preflight. When a darlingserver is
alive, no game is running, no managed client window is visible and stale
client processes belong to this prefix, stop only that client/CEF tree.
Preserve darlingserver, launchd/mldr, sockets and .init.pid, then continue
with the normal product launch.

The helper fails closed when X11 is unavailable, never touches a running game
or a visible client window, and does not patch client binaries, CEF or assets.
It saves the Darling bootstrap, but not Riot Client/CEF startup; a full runtime
restart remains the fallback if no window appears.
2026-10-22 15:27:33 -06:00
3AvisD 4ef09cb92a fix(launcher): recover a stale client tree without restarting Darling
Darlingserver normally stays alive after the Riot Client or game is closed.
If the client window disappears but Riot/League/CEF processes remain,
restarting via run.sh reuses a half-dead runtime and can fail to open a
window.

Add an opt-in RCLOL_RECOVER_STALE_CLIENT=1 preflight. When a darlingserver is
alive, no game is running, no managed client window is visible and stale
client processes belong to this prefix, stop only that client/CEF tree.
Preserve darlingserver, launchd/mldr, sockets and .init.pid, then continue
with the normal product launch.

The helper fails closed when X11 is unavailable, never touches a running game
or a visible client window, and does not patch client binaries, CEF or assets.
It saves the Darling bootstrap, but not Riot Client/CEF startup; a full runtime
restart remains the fallback if no window appears.
2026-10-22 15:27:33 -06:00
3AvisD 5a06f34725 fix(launcher): fail closed on automatic mode edge cases
- restrict preference reads to the lol-user-experience section;
- distinguish a failed close-preference read from a missing key;
- reject xprop's 'not found' text as a WM_CLASS value;
- track a window before unmap so an interrupting signal still restores it;
- report the tricks-mode opt-out in the hide helper's startup message;
- cover the new cases with preference, window and interruption tests.
2026-10-22 15:07:47 -06:00
3AvisD 9bcd41e12f fix(launcher): fail closed on automatic mode edge cases
- restrict preference reads to the lol-user-experience section;
- distinguish a failed close-preference read from a missing key;
- reject xprop's 'not found' text as a WM_CLASS value;
- track a window before unmap so an interrupting signal still restores it;
- report the tricks-mode opt-out in the hide helper's startup message;
- cover the new cases with preference, window and interruption tests.
2026-10-22 15:07:47 -06:00
3AvisD 4faa622336 feat(launcher): select client-in-game mode from preferences
Add RCLOL_CLIENT_IN_GAME_TRICKS=1 as the practical launcher switch. It reads
lol-user-experience from LCULocalPreferences.yaml:

- potatoModeEnabled false or unreadable: no action;
- closeLeagueClientDuringGame true: close the client UI;
- closeLeagueClientDuringGame false: hide the client windows.

The existing close and hide switches remain low-level options when the
automatic switch is not set. The hide helper accepts the master switch, and
the resolver plus preference cases are covered by tests and documentation.

The local .desktop entry was validated with the master switch; the installed
preferences select hide on this machine.
2026-10-22 14:56:03 -06:00
3AvisD 8de6bceeae feat(launcher): select client-in-game mode from preferences
Add RCLOL_CLIENT_IN_GAME_TRICKS=1 as the practical launcher switch. It reads
lol-user-experience from LCULocalPreferences.yaml:

- potatoModeEnabled false or unreadable: no action;
- closeLeagueClientDuringGame true: close the client UI;
- closeLeagueClientDuringGame false: hide the client windows.

The existing close and hide switches remain low-level options when the
automatic switch is not set. The hide helper accepts the master switch, and
the resolver plus preference cases are covered by tests and documentation.

The local .desktop entry was validated with the master switch; the installed
preferences select hide on this machine.
2026-10-22 14:56:03 -06:00
3AvisD 3c046252a7 fix(launcher): address hide-client review findings
- associate target windows with the selected prefix through the guest PID,
  X11 _NET_WM_PID, NSpid and the loader socket; fail closed when ownership is
  unknown;
- let --once run without either opt-in gate, matching the documented
  diagnostic;
- route SIGHUP through the restore handler;
- cache non-empty WM_CLASS results per window and prune stale entries;
- cover unreadable /proc, host PID mapping and prefix ownership in tests.
2026-10-22 12:32:03 -06:00
3AvisD 521527eb21 fix(launcher): address hide-client review findings
- associate target windows with the selected prefix through the guest PID,
  X11 _NET_WM_PID, NSpid and the loader socket; fail closed when ownership is
  unknown;
- let --once run without either opt-in gate, matching the documented
  diagnostic;
- route SIGHUP through the restore handler;
- cache non-empty WM_CLASS results per window and prune stale entries;
- cover unreadable /proc, host PID mapping and prefix ownership in tests.
2026-10-22 12:32:03 -06:00