Files
mangotune/PROJECT_MAP.md
44r0n7 fc840e9e98 refactor: split dashboard modules and share UI sync helpers
Break the oversized overview page into focused dashboard submodules and
centralize the repeated validation/save-button refresh flows used by page
widgets. This keeps the UI behavior stable while making future edits less
fragile and easier to reason about.
2026-03-31 18:51:16 -04:00

35 KiB
Raw Permalink Blame History

PROJECT_MAP.md

Auto-generated project index. Update this file whenever you add, remove, or significantly change a file or feature.

Last updated: 2026-03-31 - preview update behavior is now documented and centralized around shared page-level config-sync/live-apply helpers (docs/PREVIEW_UPDATE_MAP.md, src/ui/pages/mod.rs), the top config strip uses an inline target picker instead of the old switch-config dialog, per-app config creation now supports a searchable bundled game-config database (data/game_config_db.toml) with documented maintenance workflow, the HUD Order page still reorders real HUD groups with live preview sync but currently uses explicit up/down controls after drag-and-drop proved unstable, MangoTune profiles are now framed as real MangoHud .conf files applied into the active target, the shell/menu/popup surfaces have been tightened and moved onto app-owned compact popover/layout hooks instead of relying on stock roomy menu chrome, and the oversized dashboard monolith has been split into src/ui/pages/overview/ submodules so preview runtime controls, presets, profiles, and dashboard cards now have clearer ownership boundaries


🗺️ Project Overview

MangoTune is a Rust GTK4/libadwaita desktop app for Linux gamers who want to configure MangoHud safely without editing .conf files by hand. It combines schema-aware validation, config-layer awareness, quick launch/testing, and desktop integrations in a native Linux GUI.


🏗️ Architecture Summary

src/main.rs starts the libadwaita app in src/app.rs, which creates the main window in src/window.rs. The window builds page widgets from src/ui/pages/, while config parsing/validation/resolution lives under src/config/, managed live-preview state now lives in src/preview/, system detection under src/system/, launcher/test-process logic under src/launcher/, and launcher-string/platform helpers under src/integrations/.

Representative flow: startup detection/config load -> window.rs builds navigation + shared state -> page/widget edits mutate in-memory AnnotatedConfig -> validator updates inline state/save availability -> parser writes MangoHud config to disk when saved.

Dashboard preview flow: dashboard control change -> in-memory config updates -> src/preview/mod.rs writes a temporary preview-only config -> MangoHud Studio preview reparses the temp file in place for ordinary edits, while true preview-window changes still relaunch without touching the users saved config.


📁 File & Folder Map

Path Role Notes
Cargo.toml Rust manifest App metadata, GTK/libadwaita/runtime dependencies
Cargo.lock Dependency lockfile Pinned crate graph
build.rs Build helper Compiles GSettings schema/assets
README.md User-facing intro Install, rationale, launcher/config-layer behavior
LICENSE Project license MIT
THIRD_PARTY_LICENSES.md Dependency licensing Third-party notice bundle
Makefile Install/build convenience Release install helpers for both mangotune and mangotune-preview
ROADMAP.md Tactical roadmap Tracks current UX direction, near-term milestones, and preview-renderer follow-up
docs/MANGOHUD_OPTION_BEHAVIOR.md Verified MangoHud reference Cross-checked against a local upstream source snapshot plus upstream README.md and data/MangoHud.conf; covers parsing/defaults/positioning rules, special-case options like preset, and the full currently documented option surface MangoTune now represents
docs/MANGOHUD_POSITION_LAB.md Direct MangoHud test notes Documents the native MangoHud position lab, expected semantics, isolated-Xorg workflow on arch.lan, and the right-alignment test matrix
docs/PREVIEW_UPDATE_MAP.md Preview update contract Maps which UI paths use debounced live apply, immediate live apply, restart, or preview-runtime-only updates, and records the current consistency rules
data/ Desktop app assets Desktop entry, metainfo, schema, icon, CSS
data/com.mangotune.MangoTune.gschema.xml GSettings schema Window/app preferences, launcher defaults, remembered profile selection, and studio renderer tuning defaults such as load/FPS/VSync
data/style.css App styling Global CSS hooks for badges, compact dashboard cards, tool-page shells, custom control-row styling, and the newer sharper redesign-inspired visual treatment across shell chrome, sidebar/search/header controls, split/content surfaces, stock-ish GTK surfaces, custom unsaved-changes dialog chrome, section headers, chips, cards, rows, inputs, and callouts, now with a tighter shared mono badge system plus less rounding and denser spacing across the main shells, darker themed container seams between header/sidebar/content areas, plus a distinct active-conflict tint in the layer-stack strip
docs/plan/ Planning/spec docs Architecture, design system, schema, phase plans
src/main.rs Binary entry point Runs MangoTuneApp
src/bin/mangotune-preview/ Companion preview renderer Socket-driven Studio preview app split into main.rs/renderer.rs/scene.rs/socket_api.rs/workload.rs, with direct runtime controls for FPS cap, VSync, VRAM pressure, particle count, particle size, repeated surface passes (gpu_passes), pause state, and CPU interaction steps; the renderer still uses the heavier volumetric particle path and parallel CPU interaction work, but MangoTune now exposes the real knobs directly instead of deriving them from a synthetic load slider
src/bin/preview_probe.rs Dev preview harness Loads a saved profile, launches a controlled preview session, and makes local screenshot-based alignment debugging reproducible
scripts/mangohud-position-lab.sh Direct MangoHud launcher Runs MangoHud directly against glxgears/vkcube, records logs, captures window geometry, saves both app-window and full-root screenshots, and crops the root capture back to the app bounds when overlays are composited separately
scripts/mangohud-position-matrix.sh Direct matrix runner Generates margin-on/off variants from the standard sparse/full right-alignment profiles and captures them through MangoHud directly
src/lib.rs Library root Re-exports core modules for app/tests
src/debug_log.rs In-app diagnostics buffer Shared recent-log ring buffer used by the app shell and config parser, with copy/clear support for the Debug page
src/app.rs Application bootstrap GTK/libadwaita app setup, CSS load, startup detection
src/window.rs Main shell App state, header/actions, sidebar, accordion-style section navigation, async config-bar layer discovery, visible-page rebuilds with scroll-position preservation, a top config strip that now acts as an inline active-target picker plus read-only layer-stack summary, periodic layer-summary refresh with real detected-conflict counts, narrower default sizing and a slimmer sidebar so the app fits better on typical 16:9 desktops, dashboard-first startup without restoring the last visited page, a clearer header-led save/reload/revert/close flow, reset-to-defaults and restore-latest-safety-backup menu actions alongside safety backups, real target switching between writable global/per-app XDG configs with save/discard guarding, a sane MangoTune baseline for reset instead of an empty config, selective app-preference reset for preview/backup defaults, a save-menu Auto backup on save toggle instead of a mostly-empty Preferences screen, explicit shell styling hooks for the header/sidebar/config strip, app-owned compact popovers for the top-bar menus, an Adwaita in-app unsaved-changes alert sheet instead of a standalone popup window, and shared helpers for “config replaced” window refresh flows so reload/revert/reset/restore paths stay consistent
src/preview/ Managed live preview Preview-session state, temp preview config writing, start/reload/restart/stop flow
src/preview/mod.rs Preview controller Uses a temporary preview config and launches the actual preview/test process directly, including persisted studio load/FPS/VSync settings, live socket-driven Studio runtime updates for load/FPS/VSync/VRAM/particle/pause controls, temp-config live-apply for ordinary Studio edits without signaling/restarting the process, safer studio restart behavior for window-size changes, legacy flag normalization before preview writes, explicit horizontal_stretch=0 serialization for stretch-off sessions, effective HUD-width-based preview sizing, preview-only bounded widths for horizontal auto-layout sessions, per-metric auto-width estimation with separate sparse compact/non-compact tuning, preview-only right-anchor emulation for horizontal right-aligned layouts, and Studio-only post-launch window-size calibration so fractional desktop scaling does not throw off width-sensitive preview placement
src/config/normalize.rs Legacy option cleanup Shared normalization for old flag/bool encodings like key=0/key=1, normalization of old negative offsets back to unsigned values, plus cleanup for the mistaken standalone gpu_load / cpu_load keys; reused by save/load/profile/preview flows
src/config/ MangoHud config domain Parser, schema, validation, resolver, help/types
src/config/parser.rs Config I/O Comment-preserving parse/write, duplicate-key collapse on parse, whitespace-normalized values, safer stale-backup handling, in-memory mutation, and explicit zero serialization for MangoHud flags that default on upstream (horizontal_stretch, frametime, frame_timing, fps, gpu_stats, cpu_stats, legacy_layout, text_outline)
src/config/schema.rs Schema catalog Typed definitions for MangoHud options and categories, now aligned more closely with upstream semantics including unsigned edge offsets, list-valued preset, and most practical upstream options that were previously missing
src/config/validator.rs Validation rules Value validation, dependency/conflict checks, flexible xkb-style keybind parsing, and warning-level handling for legacy benchmark_percentiles
src/config/resolver.rs Layer discovery Finds config sources and effective priority order, with user-facing layer labels tuned for clearer “built-in defaults” vs “saved global config” wording, backup-style helper .conf files filtered out of the detected per-app list, and reusable layer-conflict detection used by both the inspector page and the top shell summary
src/config/types.rs Shared config types AnnotatedConfig, ConfigValue, categories, validation types
src/config/help.rs Help text map UI summaries/default/tooltips plus friendly display titles and polished summaries per key, now loaded from docs/MANGOHUD_OPTION_BEHAVIOR.md instead of the older planning doc
src/system/ Environment detection MangoHud/tool/display/GPU detection and XDG paths
src/system/detect.rs Runtime detection Checks MangoHud/tools/display server/GPU vendor
src/system/paths.rs XDG path logic Resolves MangoHud config locations
src/launcher/ Test launch flow Spawns/stops/reloads MangoHud test processes
src/launcher/runner.rs Process management Launch, stop, reload, and retained X11 window-management helpers from the preview-lab/docking experiments
src/integrations/ External launchers/tools Steam/Lutris/Heroic/GameMode helpers
src/profiles/ Profile storage Save/list/load/delete real MangoHud .conf profile files under MangoTune's XDG config directory, including normalization of legacy values when applying one into the active target
src/ui/ UI layer Page builders and reusable widgets
src/ui/toast.rs Toast helper Shared short-lived toast helper that dismisses older queued messages and gives errors/warnings a slightly longer lifetime
src/ui/widgets/tool_page.rs Shared page/window scaffolds Owns the shared page frame/header, section shells, callouts, and now the reusable utility-window shell used by raw editor and small modal-style utility windows so spacing/frame rules stay consistent
src/ui/pages/mod.rs Page registry Sidebar structure, navigation-page factory, current-config snapshots, search-result routing, shared preview-update helpers defining the two main MangoHud config refresh modes (debounced live apply and immediate live apply), and shared page-level config-sync helpers used by widgets/pages after in-memory config edits
src/ui/pages/overview/mod.rs Dashboard page shell Dashboard entry point and tests; wires together the split dashboard submodules while keeping the public overview::build_page / overview::build_preview_panel / overview::build_presets_panel surface stable
src/ui/pages/overview/cards.rs Dashboard cards/helpers Owns the dashboards layout/appearance/metrics/workspace cards plus the shared slider, color, metric-toggle, and config-mutation helpers they use
src/ui/pages/overview/preview.rs Preview runtime panel Owns the shared Studio preview panel used by both the dashboard and Live Preview, including window sizing, runtime controls, and preview restart/runtime-update helpers
src/ui/pages/overview/presets.rs Dashboard presets Owns the starter preset grid, preset mappings, and fallback profile-aware preset application logic
src/ui/pages/overview/profiles.rs Dashboard profiles Owns the dashboard profile strip, picker persistence, save/apply/delete flows, and active-config naming helper used in the dashboard header chips
src/ui/pages/live_preview.rs Live Preview page Dedicated Start page for Studio preview launch/apply/restart/stop, preview window size, scene selection, and direct runtime tuning controls without touching the saved MangoHud config, using the same flat page-header scaffold and spacing rules as the rest of the app
src/ui/pages/presets_page.rs Presets page Dedicated Start page for loading the practical starter presets/profile-backed overlay shapes without mixing them into the preview workflow, using the same flat page-header scaffold and spacing rules as the rest of the app
src/ui/pages/debug.rs Debug page Tool-page style diagnostics surface with a live recent-log view, current in-memory config snapshot, and clipboard actions for support/debugging
src/ui/pages/conflicts.rs Layer conflict view Inline cascade/conflict inspection with filter toggles, explicit empty states, and a built-in explanation/repro recipe clarifying that this page only shows layer-on-layer overrides, not validator-style logical conflicts inside a single file
src/ui/pages/appearance.rs Layout page Appearance-layout schema rows
src/ui/pages/colors.rs Color page Appearance-color schema rows regrouped into clearer palette sections, plus moved-in FPS/GPU/CPU signal palettes and friendlier color titles/subtitles sourced from schema help
src/ui/pages/typography.rs Typography page Appearance-typography schema rows, including secondary-size controls for supporting text
src/ui/pages/performance.rs Display config page FPS/frametime/general display options, plus runtime/render-stack details and Gamescope/FSR/HDR controls, with styling controls moved out to Colors and Theme
src/ui/pages/gpu.rs GPU config page GPU-specific metrics options, with signal/load colors moved out to Colors and Theme
src/ui/pages/cpu.rs CPU config page CPU metrics options, with signal/load colors moved out to Colors and Theme
src/ui/pages/memory.rs Memory config page RAM/VRAM swap display options
src/ui/pages/io_network.rs IO/network page Disk/network display options
src/ui/pages/media_player.rs Media player page Media integration metrics
src/ui/pages/battery.rs Battery page Battery-related overlay options
src/ui/pages/keybindings.rs Keybinding page Toggle/shortcut options
src/ui/pages/fps_limits.rs FPS limits page MangoHud frame cap/list options
src/ui/pages/logging.rs Logging page Logging and dump options
src/ui/pages/blacklist.rs Blacklist page Injection/config-exclusion options plus an advanced special-directives section for help and inherit
src/ui/pages/opengl_quirks.rs OpenGL page OpenGL-specific workarounds
src/ui/pages/raw_editor.rs Raw editor Tool-page style raw-config launcher with workspace stats, lighter-use guidance, and a richer editor pop-out now using the shared utility-window shell instead of hand-rolled framing
src/ui/pages/integrations.rs Integrations page Tool-page style Steam/Lutris/Heroic/GameMode helpers with live Steam command generation
src/ui/widgets/toggle_row.rs Schema row factory Builds switch/combo/entry rows plus explicit compact spin-button suffix controls for numeric schema fields, applies verified friendly titles/help text, surfaces inline validation, refreshes live preview after edits, routes palette-style comma-separated color fields to richer swatch controls, treats free-text entries as commit-based preview updates that only fire after an actual edit, filters typed/pasted junk out of numeric controls at both the key and editable layers instead of only validating later, and now leans on shared page-level config-sync helpers instead of open-coding validation/save-button refreshes
src/ui/widgets/hotkey_row.rs Hotkey row widget Keybinding editor rows with a modal edit dialog now using the shared utility-window shell instead of a one-off padded box
src/ui/widgets/tool_page.rs Tool-page shell builder Shared custom page hero/section/callout helpers used to move deep pages away from stock preferences layouts, including top-aligned section badges, explicit section-header wrappers, and chip rows that follow the redesign-inspired shell language
src/ui/widgets/color_row.rs Color control widget Hex + color-dialog row with shared live-preview refresh, plus palette-list swatches for comma-separated color fields like fps_color, gpu_load_color, and cpu_load_color; text editing now validates live but only refreshes preview on commit/focus-leave after a real edit, unset swatches now render in a neutral placeholder state, palette entry fields live in a fixed editor cluster instead of resizing around current content, and the widget now uses the shared page-level config-sync helpers for validation/save-state refresh
src/ui/widgets/hotkey_row.rs Hotkey widget Keybinding capture/edit UI with shared live-preview refresh
src/ui/widgets/cascade_view.rs Conflict widget Cascade/layer visualization plus filter-aware visibility helpers
src/ui/widgets/validation_label.rs Validation helper Inline row error presentation
src/ui/widgets/color_utils.rs Shared color helpers Hex/RGBA conversion utilities shared by dashboard and color rows

🧭 Hot Paths

  • Add or change a major window/workflow: src/window.rs, src/ui/pages/mod.rs, affected page module(s), data/style.css
  • Change a MangoHud options validation/type/category: src/config/schema.rs, src/config/help.rs, src/config/validator.rs, affected page in src/ui/pages/
  • Change config parsing or write behavior: src/config/parser.rs, src/config/types.rs, parser tests
  • Change launcher/test-preview behavior: src/preview/mod.rs, src/bin/mangotune-preview.rs, src/launcher/runner.rs, src/ui/pages/overview/preview.rs, src/ui/pages/live_preview.rs, data/com.mangotune.MangoTune.gschema.xml, Makefile
  • Change direct MangoHud validation flow: scripts/mangohud-position-lab.sh, scripts/mangohud-position-matrix.sh, docs/MANGOHUD_POSITION_LAB.md
  • Change profile behavior: src/profiles/mod.rs, src/ui/pages/overview/profiles.rs, src/ui/pages/overview/presets.rs
  • Change config-layer/conflict behavior: src/config/resolver.rs, src/ui/pages/conflicts.rs, src/window.rs
  • Change desktop app settings/preferences: data/com.mangotune.MangoTune.gschema.xml, build.rs, src/window.rs
  • Change integration strings/behavior: src/integrations/*.rs, src/ui/pages/integrations.rs

🔑 Key Concepts & Domain Terms

  • AnnotatedConfig: in-memory MangoHud config preserving file lines plus indexed option state
  • Config layer/cascade: MangoHud config priority stack (env > app-local > per-app > global > defaults)
  • SchemaEntry: typed definition for one MangoHud option, including category/dependencies/conflicts
  • Validation state: per-key result map used to block invalid saves and surface inline errors
  • Managed live preview: a preview-only MangoHud config generated from unsaved in-memory edits and applied to a real preview process
  • Companion renderer: mangotune-preview, a dedicated animated preview executable for MangoHud tuning
  • Test launcher: helper flow that launches a real process with MangoHud enabled for verification
  • Profile: a saved real MangoHud .conf file stored under MangoTunes XDG config dir and applied into the active config target on demand

🔗 Persistence / Data Contracts

  • MangoHud global config default: ~/.config/MangoHud/MangoHud.conf (resolved via src/system/paths.rs)
  • Profile storage: ~/.config/mangotune/profiles/*.conf unless MANGOTUNE_PROFILES_DIR overrides it
  • GSettings schema: com.mangotune.MangoTune
  • Preferred preview scene setting: GSettings key preview-scene now defaults to studio
  • Studio preview tuning settings: GSettings keys preview-studio-scene, preview-fps-cap, preview-vsync, preview-vram-pressure, preview-particle-count, preview-particle-size, preview-gpu-passes, and preview-interaction-steps (preview-load remains only as a legacy compatibility key)
  • Companion renderer binary: mangotune-preview is discovered via env override, sibling binary, or PATH
  • Launcher environment contract: MangoTune sets MANGOHUD=1 and MANGOHUD_CONFIGFILE=<config path> for launched preview/test processes
  • Preview temp config contract: live preview writes a temporary MangoHud config under the system temp dir instead of modifying the users saved config, and forces no_display off for preview visibility
  • Config file format contract: MangoHud .conf syntax with comment preservation and “last duplicate wins” behavior
  • Game config hint DB: bundled at data/game_config_db.toml, generated/maintained via scripts/build_game_config_db.py, documented in docs/GAME_CONFIG_DB.md, and used by the per-app config creation flow to search games and suggest likely executable/config names

🖥️ User-Facing Command / Feature Surface

  • Main dashboard with live preview, workspace status, visual position picking, smarter edge-gap controls, quick appearance controls, starter presets, common metrics, profile save/restore/delete, page-jump shortcuts, preview window size controls, and a denser compact layout that uses less vertical space
  • Header-led save flow with Save Config as the single primary save surface, plus secondary actions for saving a copy, discarding unsaved changes, and creating a safety backup
  • Sidebar navigation with search plus accordion-style section expansion, calmer section naming/order, and a less heavy “config layer” top bar
  • Startup now always opens on the dashboard instead of restoring the last visited page
  • Deep settings pages with a custom control-deck shell instead of plain stock preferences groups for the main appearance/display/behavior surfaces
  • Config layer selector + conflict visibility
  • Appearance controls: layout, colors, typography
  • Metrics controls: performance, GPU, CPU, memory, I/O/network, media, battery
  • Behavior controls: keybindings, FPS limits, logging, blacklist
  • Advanced tools: OpenGL quirks, raw editor
  • Live preview/testing: managed Studio-only preview from unsaved edits using mangotune-preview, with dashboard-level defaults, auto-refreshing status, dashboard window-size controls, preview-only no_display override, explicit horizontal_stretch=0 writes when stretch is disabled, effective-HUD-width window sizing for horizontal auto-layout, preview-only right-offset compensation for right-aligned horizontal layouts, Studio-specific post-launch width calibration for scaled desktops, temp-config live-apply for ordinary Studio config edits, debounced live preview writes for high-frequency controls, safer studio restart behavior for true window-size changes, wheel-safe dashboard controls, live runtime updates for Studio load/FPS/VSync, advanced Studio runtime controls for particle density/VRAM pressure/pause, and an in-window control strip plus visible key hints for the studio renderer
  • Integrations: Steam, Lutris, Heroic, GameMode
  • Profiles: save the active config target as a profile, then apply a profile back into the active target

🧪 Test Coverage Map

  • Unit tests live inline in Rust modules such as src/config/parser.rs, src/launcher/runner.rs, src/profiles/mod.rs, src/integrations/steam.rs, and src/ui/pages/overview/mod.rs
  • Parser/schema/validator/resolver changes should get module tests updated where the logic lives
  • Launcher/preview behavior changes usually require tests in src/launcher/runner.rs, src/preview/mod.rs, src/bin/mangotune-preview.rs when practical, and any overview helpers that drive preview state
  • UI shell/page layout currently has light automated coverage; visual/interaction changes need manual GTK testing in addition to cargo test

🧩 Feature Areas & Ownership Map

  • App shell and navigation: src/app.rs, src/window.rs, src/ui/pages/mod.rs, data/style.css
  • MangoHud config engine: src/config/
  • Runtime/system detection: src/system/
  • Preview/test launching: src/preview/, src/bin/mangotune-preview.rs, src/launcher/, src/ui/pages/overview/preview.rs, src/ui/pages/live_preview.rs
  • Profiles: src/profiles/, src/ui/pages/overview/profiles.rs, src/ui/pages/overview/presets.rs
  • Desktop integrations: src/integrations/, src/ui/pages/integrations.rs
  • Page-specific UI: src/ui/pages/
  • Reusable controls: src/ui/widgets/

⚠️ Known Issues / Tech Debt

  • Right-side horizontal HUD placement still needs one more deliberate real-user validation pass for the remaining edge cases
  • Main-window geometry drift on XFCE/X11 is only mitigated, not root-caused yet; see docs/WINDOW_GEOMETRY_INVESTIGATION.md
  • UI test coverage is still light, so larger GTK interaction changes continue to rely heavily on manual validation

🔄 Update Triggers

Update this file when:

  • a command, route, page, or feature area is added/removed/renamed
  • a meaningful source file/module is added/removed/renamed
  • a persistence format, config location rule, or launcher contract changes
  • architecture changes materially
  • a major known issue is discovered or resolved

Do not update this file for:

  • tiny wording tweaks
  • purely local refactors with no ownership/structure impact
  • dependency bumps with no workflow impact

📝 Change Log (agent session)

  • 2026-03-22 Initial map created
  • 2026-03-22 Added src/preview/mod.rs, replaced Overview with a dashboard-first live-preview workflow, and removed the old launch-bar widget
  • 2026-03-22 Added ROADMAP.md, persisted the preferred preview scene, and expanded the dashboard with common metric toggles
  • 2026-03-22 Added searchable sidebar navigation, dashboard page-jump actions, and the mangotune-preview companion renderer
  • 2026-03-22 Added dashboard-level controls for the studio preview renderer's scene, load factor, and FPS cap
  • 2026-03-22 Switched preview launching to direct-process tracking and added in-window studio controls with more distinct scene rendering
  • 2026-03-22 Added automatic preview-state refresh in the dashboard plus safer reload fallback behavior
  • 2026-03-22 Added one-click starter presets to the dashboard for common overlay setups
  • 2026-03-22 Collapsed deeper sidebar sections by default while keeping search fully discoverable
  • 2026-03-22 Added a dashboard workspace-status card with validation summary, save state, runtime details, and quick actions
  • 2026-03-22 Made studio preview reload restart safely and changed the sidebar to auto-collapse other sections when opening a new one
  • 2026-03-22 Forced preview visibility when saved configs use no_display and stopped pinning the scene selector after previews stop
  • 2026-03-22 Added screen-clamped preview docking, dashboard controls for preview window size, and a shared custom shell for the main deep settings pages
  • 2026-03-22 Fixed the validation-save deadlock, moved layer conflicts inline, added profile deletion, and made dashboard preview controls safer to scroll/use
  • 2026-03-22 Moved raw editor and integrations onto the custom shell and fixed Steam launch-option generation to follow the selected method
  • 2026-03-23 Gave right-aligned previews extra width and stopped side-docking them to reduce off-screen HUD placement failures
  • 2026-03-23 Added explicit empty states for filtered conflicts/integration detection and surfaced profile-folder open failures instead of failing silently
  • 2026-03-23 Extracted shared color conversion helpers and deduplicated the saved-snapshot restore path in window actions
  • 2026-03-23 Moved config-layer discovery off the synchronous shell path and hardened parser round-trips against duplicate keys and accidental value whitespace
  • 2026-03-23 Rebuilt visible pages from shared state on navigation, refreshed live preview from non-dashboard editors, widened right-aligned horizontal preview safety margins, narrowed default shell sizing, and made stale .mangotune.bak paths non-fatal during save
  • 2026-03-23 Normalized legacy flag values across preview/profile/reload paths and refreshed the visible page + preview after revert/reload/profile restore so stale horizontal_stretch=0-style states dont linger
  • 2026-03-23 Added a preview-only bounded width fallback for horizontal auto-layout previews, renamed/moved the sidebar layer viewer section, softened config-bar labels, narrowed the default shell width again, and simplified raw-editor guidance
  • 2026-03-23 Preserved scroll position during visible-page rebuilds, removed the extra dashboard guidance card, tightened dashboard spacing, and narrowed sidebar/window defaults further
  • 2026-03-23 Fixed disabled horizontal_stretch serialization, made preview reload use the current computed width, reset horizontal_stretch in dashboard presets, and stopped dashboard polling timers from leaking across page rebuilds
  • 2026-03-24 Corrected the MangoHud behavior references against the deep-research report and local upstream source, including preset, benchmark_percentiles, inherit, and keybind/default caveats
  • 2026-03-24 Aligned MangoTune's live schema and validation with the corrected MangoHud reference by making offsets unsigned, broadening keybind parsing, warning on legacy benchmark_percentiles, treating preset as a list-valued upstream option, and adding the missing practical upstream options that belong in the GUI
  • 2026-03-24 Surfaced the last documented upstream options in the UI too, including runtime/Gamescope sections on the Performance page, secondary typography sizing, and an advanced Blacklist subsection for special directives like help and inherit
  • 2026-03-24 Stopped text-entry fields from reloading the preview on every keystroke, added a saveable-config gate before preview reloads, and tightened threshold-color dependencies so incomplete threshold setups do not immediately destabilize the preview
  • 2026-03-23 Added preview-only right-offset compensation for horizontal right-aligned layouts after stretch-off was confirmed fixed but right alignment still failed
  • 2026-03-23 Added Studio-only post-launch preview-size calibration so right-aligned horizontal HUD placement can use the actual scaled Studio window width instead of only the requested logical width
  • 2026-03-24 Expanded the MangoHud source-truth docs with explicit full exclusions, offset parsing quirks, and isolated-X capture limitations after direct-lab verification on arch.lan
  • 2026-03-24 Switched shared control rows, colors, and keybindings to friendly display titles sourced from the verified MangoHud reference instead of raw key-shaped labels
  • 2026-03-24 Added polished UI-facing summaries for common MangoHud options so shared rows and keybinding descriptions read like product copy instead of schema text
  • 2026-03-24 Simplified the shell save flow by making the header the single primary save surface, softening layer-bar wording, and always starting the app on the dashboard
  • 2026-03-24 Moved FPS/GPU/CPU color editors out of the telemetry pages and consolidated them under Colors and Theme so metric pages focus on what is shown while appearance pages own styling
  • 2026-03-24 Regrouped Colors and Theme into clearer sections for core palette, hardware labels, signal thresholds, and extra integrations/status colors
  • 2026-03-25 Replaced the placeholder hotkey toggler with a real modal keybind editor, guarded color-entry/swatch synchronization to avoid recursive GTK edit loops, and corrected GPU/CPU threshold-color dependencies to point at gpu_stats / cpu_stats
  • 2026-03-25 Switched ordinary Studio preview edits from restart-driven reloads to debounced temp-config rewrites so MangoHud can reparse changes in place without relaunching the window
  • 2026-03-25 Changed dashboard profile restore and presets to use the same Studio live-apply path instead of forcing a preview restart, removed the redundant preview-renderer label from the dashboard card, and added save-menu actions for reset-to-defaults and restore-latest-safety-backup
  • 2026-03-26 Removed the unreliable preview-docking preference from the UI, switched dashboard offset controls back to MangoHuds real unsigned offset semantics, normalized legacy negative offsets on load, and started writing explicit =0 for upstream default-on flags like frametime and frame_timing
  • 2026-03-24 Simplified preview-only right-anchor emulation by dropping fake vertical offsets and adding a small no-margin right-edge safety for horizontal right-aligned layouts
  • 2026-03-24 Tried preserving native MangoHud right-side positions directly, but reverted that change after it made horizontal previews disappear again; preview-side right-anchor emulation remains the last usable path while MangoHud-native behavior is being investigated separately
  • 2026-03-24 Added a direct MangoHud position lab and matrix runner so margin/compact/right-anchor behavior can be validated outside MangoTune on a real X11 session, including an isolated-Xorg workflow for arch.lan
  • 2026-03-31 Split the oversized dashboard module into src/ui/pages/overview/{cards,preview,presets,profiles}.rs while keeping the public overview page surface and tests intact
  • 2026-03-31 Added shared page-level config-sync helpers plus shared window-level “config replaced” refresh helpers, and used them to deduplicate repeated validation/save/preview refresh logic across overview widgets, shared control rows, color rows, typography/raw-editor/hud-order pages, and top-level reload/revert/reset flows