Commit graph

84 commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
e9071c2b86 gamecenter: add KAuth helper for power profiles 2026-02-12 14:51:20 +01:00
9dbff6fdb8 settings: input service + compatibility UI 2026-02-12 14:48:39 +01:00
1e5a86fda8 input: add input service daemon + client 2026-02-12 14:47:50 +01:00
7724205354 runner: add game profile API 2026-02-12 14:44:20 +01:00
27a385e3c3 ui: enforce daemon-only launches 2026-02-12 14:42:22 +01:00
8e77a35f7f krunner: remove unscoped launch fallbacks 2026-02-12 14:36:19 +01:00
fbd9311384 gamecenter: systemd scopes + Stop reliability 2026-02-12 14:34:56 +01:00
c7956eed8b QML: runner inventory, prefix actions, and runner error notifications 2026-02-09 14:03:38 +01:00