Commit graph

125 commits

Author SHA1 Message Date
e8626b11c1 Apply env overrides to bootstrap process in monitored launch 2026-03-24 11:36:07 +01:00
56ab147a85 Replace blocking waitForStarted with async started/errorOccurred handlers 2026-03-24 11:36:07 +01:00
90bb30416c Convert all blocking D-Bus calls in launcher to async 2026-03-24 11:36:07 +01:00
8a9e5a80b4 Reduce runner service start to a single attempt 2026-03-24 11:36:07 +01:00
c7110f62a2 Fix session state tracking on Exited, duplicate sessions, and Unknown state 2026-03-24 11:36:07 +01:00
e216acc3df Remove stale static cache from Proton discovery 2026-03-24 11:36:07 +01:00
40a7b823ba Trigger per-source import when import source is re-enabled 2026-03-24 11:36:07 +01:00
834b3a2ab6 Remove all existing cover files for a game before writing a new one 2026-03-24 11:36:07 +01:00
24400ca5e1 Cap removed games cache at 200 entries 2026-03-24 11:36:07 +01:00
8e2fedccfb Skip heroic games and unquotable paths in removeMissingGames 2026-03-24 11:36:07 +01:00
66d80b0eea Quote app name in Heroic launch command 2026-03-24 11:36:07 +01:00
fdc57c457c Scope VDF key lookup to top-level fields and update Steam CDN URL 2026-03-24 11:36:07 +01:00
03059af424 Preserve constructor dateAdded when JSON field is absent 2026-03-24 11:36:07 +01:00
9936374d4c feat: add DesktopMain.qml; make Main.qml mode-aware
Main.qml reads App.config.uiMode at startup:
- Config.Desktop: load DesktopMain.qml via Loader, normal window,
  save/restore window geometry from Config
- anything else (Couch/Auto): existing full-screen couch UI

DesktopMain.qml: SidebarView + LibraryView + GameDetailsSheet +
GameEditDialog + settings overlay.
2026-03-24 11:36:07 +01:00
a1e9ce73cd feat: add --couch-mode and --desktop-mode CLI flags
Config::setCliUiMode() stores a session-only override in a static
before the QML engine creates App/Config. uiMode() checks the static
first; save() always writes m_uiMode so the override never persists.
2026-03-24 11:36:07 +01:00
f360ebe278 fix: update focused game when proxy model count changes
Covers async model load: if count goes 0→N after QML init and currentIndex stays 0, onCurrentIndexChanged never fires. onCountChanged ensures backdrop updates on first population.
2026-03-24 11:36:07 +01:00
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