Commit graph

98 commits

Author SHA1 Message Date
2df35e9b81 fix: restore console UI icon visibility, selection highlight, focus transfer
- Force isMask on header Kirigami.Icon contentItems (Search/Import/Settings) so white color is applied regardless of icon theme
- Remove MultiEffect shadow from GameCard (was bleeding far outside card bounds)
- Add gridActive prop to GameCard so selection highlight depends on actual flickable focus, not wrapper focus
- Two-tier selection: full highlight when grid focused, dim border when grid unfocused (card stays visible)
- Focus transfer: gamepad Up from top row emits headerFocusRequested; Down from rail/buttons calls libraryView.restoreFocus()
- Gate gamepad navigation guards on grid.flickable.activeFocus (Maui.GridBrowser internal GridView)
2026-03-24 11:36:07 +01:00
b5e03fe856 Fix hint bar input switching (bind to InputManager.activeInput) 2026-03-24 11:36:07 +01:00
e1daf1834b Update MauiKit4/MauiMan4 submodule pointers to v4.0.2 2026-03-24 11:36:07 +01:00
cb69f801bf Fix console UI regressions: icons, hint bar, category rail, dialog
- ConsoleCategoryRail: port from CouchSidebar using Kirigami.Icon +
  IconWithResourceFallback, radius: smallSpacing (not pill), Hidden
  source, Import+Settings buttons with tooltips, App.gameModel.gameAt()
- Main.qml: use BottomHintBar component, wire sourceSelected/
  settingsRequested/importRequested signals, flat ToolButton for search,
  declare GameEditDialog as proper child, remove Maui.ContextualMenu
- GameCard: Maui.Icon -> Kirigami.Icon, Maui.Theme -> Kirigami.Theme
- ConsoleGameDetail: Maui.Icon -> Kirigami.Icon, Maui.Theme ->
  Kirigami.Theme, replace broken inline hint rows with BottomHintBar
2026-03-24 11:36:07 +01:00
84c6795fd6 Ensure MauiKit4plugin builds with alakarte; fix app icon resource path 2026-03-24 11:36:07 +01:00
a0b9ea1832 Integrate MauiKit4/MauiMan4 as submodules, rewrite UI to MAUIkit console shell
- Add MauiMan4 + MauiKit4 submodules pinned at v4.0.2
- Wire both into CMake via CMAKE_FIND_PACKAGE_REDIRECTS_DIR build-tree stub
- Create MauiMan4 header shim for build-tree include layout
- Undefine QT_NO_CAST/QT_NO_FOREACH/QT_NO_KEYWORDS for MauiKit4 targets
- Link alakarte against MauiKit4
- Rewrite Main.qml: Maui.ApplicationWindow, dark console shell, blurred
  game backdrop, category rail, search bar, bottom gamepad hint bar
- Rewrite GameCard.qml: cover-art card with scale+glow focus effects
- Rewrite LibraryView.qml: Maui.GridBrowser with gamepad D-pad navigation
- New ConsoleCategoryRail.qml: horizontal pill category nav with L1/R1
- New ConsoleGameDetail.qml: cinematic full-screen game detail overlay
  with cover art, action buttons, fade-in animation, gamepad hints
2026-03-24 11:35:59 +01:00
e592e7b093 Add Plasma tray, notification inhibition, session control, and flatpak runner
Expand TrayController with daemon health polling every 10 seconds via
D-Bus Ping calls to org.kde.GameCenter1, org.kde.ALaKarte.Runner1, and
org.kde.ALaKarte.Input1. Add menu actions to toggle console behaviors,
notification mirroring, and to restart each daemon via systemctl --user.

Add NotificationInhibitor, owned by App, which calls
org.freedesktop.Notifications Inhibit/UnInhibit on the session bus
whenever the consoleBehaviors config setting changes. The cookie is
released on application quit.

Add consoleBehaviors and mirrorNotifications properties to Config with
KConfig persistence under the [Console] group.

Ship org.kde.alakarte.notifyrc defining GameLaunched, GameExited, and
LaunchFailed notification events so Plasma attributes them correctly in
the notification history.

Extend RunnerManagerDaemon::ResolveLaunch with a flatpak runner branch
that constructs a flatpak run command, translates environment overrides
to --env= arguments, and respects flatpakAppId, flatpakBranch,
flatpakArch, and flatpakArgs from the launch spec.

Add activate_session, switch_to_vt, and terminate_session actions to
the gamecenter KAuth helper and its polkit policy. Each action calls
the corresponding method on org.freedesktop.login1 over the system bus.

Add CouchSidebar.qml, a horizontal source tab bar shown in couch mode
above the library view, exposing the same sourceSelected, settingsRequested,
importRequested, and aboutRequested signals as SidebarView.

Fix duplicate adaptiveFocusRingWidth property in GameCard.qml.
2026-03-22 16:53:09 +01:00
0b10b01cc4 tests: cover Runner1 ResolveLaunch wine missing prefix/gameId 2026-02-15 15:48:11 +01:00
09026ca26a tests: cover Runner1 ResolveLaunch unknown runnerId contract 2026-02-15 15:42:42 +01:00
b24417df69 tests: cover Runner1 ResolveLaunch failure contract 2026-02-15 15:21:15 +01:00
13b65135f1 tests: cover Input1 version and capabilities 2026-02-15 15:16:09 +01:00
d254b272fe src: migrate InputServiceClient to generated Input1 proxy 2026-02-15 15:11:08 +01:00
a893d4fd71 cmake: generate Input1 proxy for main app 2026-02-15 15:11:01 +01:00
cd23253386 tests: use generated Input1 proxy and cover profile CRUD 2026-02-15 14:47:03 +01:00
47cab1cbe5 inputd: export Input1 via generated adaptor 2026-02-15 14:46:51 +01:00
c58801828c cmake: enable Input1 DBusTools codegen 2026-02-15 14:46:39 +01:00
1d61f3f84f dbus: add authoritative XML for Input1 2026-02-15 14:46:06 +01:00
7c9a0c4a89 tests: cover Runner1 version and runner list shape 2026-02-15 14:33:12 +01:00
fe253d89bc tests: cover GameCenter launch failure contract 2026-02-15 14:22:41 +01:00
239e3a9071 tests: cover GameCenter policy and capabilities 2026-02-15 14:17:11 +01:00
16d4129ede runnermanagerclient: use generated Runner1 proxy 2026-02-15 13:57:42 +01:00
4676b1d9a6 gamelauncher: use generated DBus proxies 2026-02-15 13:57:23 +01:00
d93dbc9ecc tests: use generated DBus proxies 2026-02-15 13:56:49 +01:00
d94029fbc4 dbus: export daemons via generated adaptors 2026-02-15 13:55:50 +01:00
ed0e6ae181 cmake: enable Qt DBusTools codegen 2026-02-15 13:55:09 +01:00
c0938aa62a dbus: add authoritative XML for GameCenter1/Runner1 2026-02-15 13:54:48 +01:00
9cda4ce476 app/daemons: set standard app metadata 2026-02-15 13:54:08 +01:00
5b26b85cc3 tests: add ProcessScanner stability test
Add a new QtTest that spawns marker processes and verifies ProcessScanner::scan() matches by env/cmdline, preferEnvironmentMatches behavior, and cancellation. Register the test with ctest.
2026-02-14 17:56:09 +01:00
f03eb95b52 gamecenter: refactor ProcessScanner for cancellable single-pass scans
Add ProcessScanner::scan(ScanOptions) for combined env/cmdline/exe matching, extend Match with match-source flags, and make pollUntilFound() cancellation-aware. Update monitored launch matchers to use the new API.
2026-02-14 17:38:28 +01:00
7200ad179c Harden systemd scope cleanup
Tighten transient unit lifecycle handling in GameCenter.

- Drop stale unit watcher mappings on PropertiesChanged for removed sessions.
- When stopping a monitored launch due to timeout or attach failure, fall back
  to terminating scope PIDs if StopUnit fails unexpectedly.

This reduces leaked scopes and improves robustness in failure paths.
2026-02-14 16:45:37 +01:00
985f6dac03 Harden transient scope lifecycle
Improve GameCenter daemon handling of systemd transient scopes.

- Watch monitored-launch scopes early and avoid dropping Launching sessions
  when the unit disappears before PIDs are attached.
- Stop leaked scopes on AttachProcessesToUnit failures.
- Make Stop() resilient for recovered sessions by falling back to TERM/KILL
  on scope PIDs when StopUnit fails unexpectedly.
- Only recover scopes that match the expected A-La-Karte description.
2026-02-14 16:16:59 +01:00
d56b91dbd0 gamecenter: harden KAuth helper power profile setting 2026-02-14 14:08:45 +01:00
f3b130008f ui: drop system-bus GameCenter fallback 2026-02-14 14:02:07 +01:00
8891e85dbc tests: recover sessions after gamecenter restart 2026-02-14 13:34:10 +01:00
57d1e6e130 tests: cover GameCenter unique DBus service behavior 2026-02-14 13:07:51 +01:00
d4e0326974 gamecenter: move DBus object path to avoid KDBusService conflict 2026-02-14 12:42:18 +01:00
cca49615d6 App: guard individual import tasks during shutdown 2026-02-13 18:55:33 +01:00
4b7655bc6b App: guard importAllGames task during shutdown 2026-02-13 18:30:00 +01:00
058fe8c8e0 gamecenter: bound waitForStarted during direct launch 2026-02-13 14:04:11 +01:00
88db54458e gamecenter: delete detached processes when they finish 2026-02-13 13:47:50 +01:00
6080962cf9 lutris: avoid lingering process on import timeout 2026-02-13 13:40:33 +01:00
2285de6b1e gamecenter: detach running processes on shutdown 2026-02-13 13:36:06 +01:00
144076675c steamgriddb: save covers atomically 2026-02-13 13:20:45 +01:00
a032bec8c4 inputd: save profiles atomically 2026-02-13 13:16:36 +01:00
9160076aa2 runnerd: save registry and profiles atomically 2026-02-13 13:11:49 +01:00
c6f3e645f4 app: save library.json atomically 2026-02-13 13:06:19 +01:00
05ca3de5f5 runner: shutdown spawned runnerd QProcess reliably 2026-02-13 12:52:40 +01:00
ca19e21661 qml: avoid StackView footer anchor conflicts 2026-02-13 12:52:39 +01:00
b1dc8afd48 qml: fix menu popup visible bool binding 2026-02-13 12:52:28 +01:00
b0d09be497 tests: add dbus smoke + stop-launching regression 2026-02-12 14:52:34 +01:00