mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-20 23:54:26 +08:00
feat.动画优化与更新界面
This commit is contained in:
42
.trae/specs/main-window-desktop-layer/design.md
Normal file
42
.trae/specs/main-window-desktop-layer/design.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# Main Window Desktop Layer Design
|
||||
|
||||
## Window Roles
|
||||
|
||||
Lan Mountain Desktop now has three separate window-layer roles:
|
||||
|
||||
- `MainDesktopWindow`: the normal desktop host window. With `EnableMainWindowDesktopLayer`, this window is moved to the desktop layer so it does not cover ordinary apps.
|
||||
- `FusedDesktopSurface`: fused desktop component windows such as `DesktopWidgetWindow` and `TransparentOverlayWindow`. These continue to use `IWindowBottomMostService` and their existing click-through region service.
|
||||
- `AirApp`: independent Air APP windows. These are ordinary app windows and do not use desktop-layer services or global `Topmost` promotion.
|
||||
|
||||
## Service Boundary
|
||||
|
||||
`IMainWindowDesktopLayerService` is dedicated to the main window only. It does not reuse fused desktop passthrough services because the main window must stay interactive.
|
||||
|
||||
Windows behavior:
|
||||
|
||||
- Save original parent, style, and extended style before enabling.
|
||||
- Try to attach the main window to the desktop icon host.
|
||||
- If that host is not found, use `HWND_BOTTOM`.
|
||||
- On disable, restore the saved parent and styles as best effort.
|
||||
|
||||
Non-Windows behavior:
|
||||
|
||||
- Keep a null implementation.
|
||||
- Log that the platform is unsupported.
|
||||
|
||||
## Settings Flow
|
||||
|
||||
The developer settings page owns confirmation UX for conflicts:
|
||||
|
||||
- Fused desktop toggle and main-window desktop-layer toggle are one-way bound.
|
||||
- Toggle click handlers ask for confirmation before saving conflicting states.
|
||||
- The view model writes both keys together so runtime listeners receive a coherent change set.
|
||||
|
||||
## Runtime Flow
|
||||
|
||||
Main-window restore paths call `ActivateOrRefreshMainWindowLayer`.
|
||||
|
||||
- If `EnableMainWindowDesktopLayer` is enabled, the app refreshes the desktop-layer attachment and hides the taskbar entry.
|
||||
- If disabled, the app restores ordinary activation behavior, including the existing temporary foreground promotion.
|
||||
|
||||
Settings changes call both fused desktop and main-window desktop-layer runtime application paths so switching modes is immediate.
|
||||
20
.trae/specs/main-window-desktop-layer/requirements.md
Normal file
20
.trae/specs/main-window-desktop-layer/requirements.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# Main Window Desktop Layer
|
||||
|
||||
## Requirements
|
||||
|
||||
- Add a developer option named `EnableMainWindowDesktopLayer`.
|
||||
- When enabled, the main Lan Mountain desktop window behaves like a desktop-surface window: ordinary application windows can stay above it.
|
||||
- The feature is implemented as desktop-layer or bottom placement, not as `Topmost`.
|
||||
- The option is mutually exclusive with `EnableFusedDesktop`.
|
||||
- Enabling main-window desktop layer while fused desktop is enabled must ask for confirmation, then disable fused desktop on confirm or roll back on cancel.
|
||||
- Enabling fused desktop while main-window desktop layer is enabled must ask for confirmation, then disable main-window desktop layer on confirm or roll back on cancel.
|
||||
- Air APP windows remain ordinary application windows and must not be attached to the desktop layer.
|
||||
- On Windows, the main window should attach to the desktop icon host when available and fall back to `HWND_BOTTOM` when unavailable.
|
||||
- On non-Windows platforms, the setting may exist but the layer service is a no-op and must not throw.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Opening another app above Lan Mountain Desktop keeps that app visible when main-window desktop layer is enabled.
|
||||
- Restoring the main window from tray keeps the desktop-layer behavior and does not perform a temporary `Topmost` promotion.
|
||||
- Turning the option off restores normal main-window behavior as far as possible.
|
||||
- Fused desktop component windows keep their existing bottom-most behavior and remain isolated from the main-window service.
|
||||
10
.trae/specs/main-window-desktop-layer/tasks.md
Normal file
10
.trae/specs/main-window-desktop-layer/tasks.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# Main Window Desktop Layer Tasks
|
||||
|
||||
- [x] Add `EnableMainWindowDesktopLayer` to app settings with a disabled default.
|
||||
- [x] Add developer settings UI and localization strings.
|
||||
- [x] Add confirmation flow for mutual exclusion with fused desktop.
|
||||
- [x] Add a dedicated main-window desktop-layer service.
|
||||
- [x] Wire main-window creation, restore, tray fallback, settings changes, and shutdown cleanup to the service.
|
||||
- [x] Keep Air APP windows outside this layer service.
|
||||
- [x] Add static regression tests for settings, restore paths, and service boundaries.
|
||||
- [ ] Perform manual Windows z-order validation with real apps.
|
||||
25
.trae/specs/update-settings-fluent-controls/spec.md
Normal file
25
.trae/specs/update-settings-fluent-controls/spec.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Update Settings Fluent Controls
|
||||
|
||||
## Goal
|
||||
|
||||
Make the Settings > Update page the single user-facing control surface for the host update flow.
|
||||
|
||||
## Requirements
|
||||
|
||||
- The page uses Fluent Avalonia settings controls for update status, release facts, update behavior, and transfer controls.
|
||||
- Users can choose update channel, download source, update mode, and download thread count.
|
||||
- Update mode options are:
|
||||
- Manual: do not automatically download or install.
|
||||
- Silent Download: check and download in the background, then wait for user installation confirmation.
|
||||
- Silent Install: check and download in the background, then apply when the app exits.
|
||||
- Users can opt into forced reinstall. When enabled, the update check targets the current version manifest where available and the UI labels the next payload as reinstall.
|
||||
- The page displays whether the current payload is an incremental update or reinstall/full installer.
|
||||
- The page exposes pause, resume, and cancel actions for resumable downloads and install recovery.
|
||||
- Existing PloNDS/FileMap incremental update and Launcher rollback ownership remain unchanged.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- `UpdateSettingsPage` shows Fluent Avalonia controls for channel, mode, thread count, forced reinstall, pause/resume, and cancel.
|
||||
- `UpdateSettingsState` persists forced reinstall alongside other update preferences.
|
||||
- Automatic startup checks skip manual mode, download in silent download/silent install modes, and leave installation to explicit user action or exit-time apply.
|
||||
- Build succeeds for `LanMountainDesktop.slnx`.
|
||||
Reference in New Issue
Block a user