Commit graph

109 commits

Author SHA1 Message Date
53c098d54c fix: fadeOut starts from current opacity, not hardcoded 1.0
Removes 'from: 1' so if Back is pressed while fadeIn is mid-play the fade-out starts from the actual current opacity instead of jumping to 1.
2026-03-24 11:36:07 +01:00
aa0b5ca799 fix: correct library hint labels and wire Y/Enter to direct launch
A/Space (confirm) opens the detail view, not launches → label was 'Play', now 'Details'.
Y/Enter (details) was unhandled → wire onDetailsPressed + Keys.onReturnPressed/EnterPressed to launchFocused(), label was 'Details', now 'Play'.
Matches SteamOS/Kodi pattern: primary button = info, secondary = launch.
2026-03-24 11:36:07 +01:00
44f87d6f14 fix: backdrop never renders on startup when currentIndex stays at 0
onCurrentIndexChanged does not fire if the index was already 0 when the model populated. Use Component.onCompleted + callLater to emit gameFocused for the initial item.
2026-03-24 11:36:07 +01:00
09cdba516b fix: closeBtn in detail view now uses startClose() for fade-out consistency 2026-03-24 11:36:07 +01:00
fd5c75b03c polish: animate game title opacity transition on hover/current 2026-03-24 11:36:07 +01:00
a74f2a0211 polish: add fade-out exit animation to ConsoleGameDetail
Add startClose() which plays a 160ms InCubic fade-out before emitting close(). Back/Escape triggers now call startClose() instead of close() directly. visible keeps the item rendered during the exit animation via isClosing flag. Launch path bypasses animation (immediate).
2026-03-24 11:36:07 +01:00
5e88cc4f41 polish: add 1px separator below header bar 2026-03-24 11:36:07 +01:00
383857669b polish: add Left/Right key navigation to category rail tab delegates
When a tab delegate has focus, Left/Right now navigates to the adjacent tab and selects it via _applyIndex, mirroring the gamepad LB/RB behavior.
2026-03-24 11:36:07 +01:00
e5f3e2113e polish: backdrop blur crossfades on game navigation
Bind MultiEffect opacity to backdropImg.status so blur fades out when source changes (Image.Loading) and fades in when new image is ready (Image.Ready). Previously opacity was static at 0.38 so the Behavior was never triggered.
2026-03-24 11:36:07 +01:00
f63edc3e55 fix: Hidden tab shows no games; BottomHintBar missing Layout.fillWidth
- showHidden was hardcoded false; GameSortFilterModel uses it as 'show ONLY hidden' so Hidden tab always returned empty
- filterSource also passed 'hidden' as a platform string, filtering everything out; now returns empty string for hidden
- Add Layout.fillWidth to BottomHintBar in ConsoleGameDetail so it lays out correctly in ColumnLayout
2026-03-24 11:36:07 +01:00
c4b9321c64 polish: card hover overlay, reduce cover art shadow bleed
- Add subtle white overlay (4-6% opacity) to GameCard on hover/highlight for clearer feedback
- Reduce ConsoleGameDetail coverArt shadow blur from 0.7 to 0.25 and offset from 12 to 8 to prevent bleeding
2026-03-24 11:36:07 +01:00
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