Fixed issues with gamescope not properly launching.

This commit is contained in:
2026-09-06 22:57:54 +02:00
parent f53f4d0b08
commit bea9d6fda7
9 changed files with 252 additions and 18 deletions

View File

@@ -50,7 +50,12 @@ from .launcher import (
launch_official_updater,
prepare_launcher_binary,
)
from .locking import LauncherPlayLease, launcher_operation_lock, launcher_play_lock
from .locking import (
LauncherPlayLease,
launcher_operation_lock,
launcher_play_lock,
managed_game_process_is_active,
)
from .login_diagnostics import inspect_login_environment
from .login_trace import DEFAULT_TRACE_TIMEOUT_SECONDS, LOGIN_TRACE_DISABLED_REASON
from .overlay import cache_compatibility_binaries, prepare_runtime_view
@@ -855,6 +860,7 @@ def _play(
realm=realm,
reuse_prepared=not play_lease.preparation_allowed,
before_game=play_lease.allow_shared_clients,
game_lease_fds=play_lease.inherited_fds,
)
@@ -869,6 +875,7 @@ def _play_locked(
realm: str | None = None,
reuse_prepared: bool = False,
before_game: Callable[[], None] | None = None,
game_lease_fds: Sequence[int] = (),
) -> int:
if game_dir is None and game_import_requires_verification(paths):
raise LauncherError(
@@ -980,6 +987,7 @@ def _play_locked(
use_gamebox=not no_box,
concurrent_prefix_launch=reuse_prepared,
check=False,
pass_fds=game_lease_fds,
)
except KeyboardInterrupt:
current_game_log = _current_game_log(
@@ -1505,7 +1513,10 @@ def _play_guard(
) -> AbstractContextManager[LauncherPlayLease]:
if dry_run:
return nullcontext(LauncherPlayLease.dry_run())
return launcher_play_lock(paths.launcher_operation_lock)
return launcher_play_lock(
paths.launcher_operation_lock,
active_game_probe=lambda: _managed_game_process_is_active(paths),
)
def _operation_guard(
@@ -1515,7 +1526,18 @@ def _operation_guard(
) -> AbstractContextManager[None]:
if dry_run:
return nullcontext()
return launcher_operation_lock(paths.launcher_operation_lock, operation)
return launcher_operation_lock(
paths.launcher_operation_lock,
operation,
active_game_probe=lambda: _managed_game_process_is_active(paths),
)
def _managed_game_process_is_active(paths: AppPaths) -> bool:
return managed_game_process_is_active(
paths.runtime_view,
(paths.proton_prefix, paths.umu_prefix),
)
def _emit(value: object, as_json: bool) -> None: