AnimatedVisualPlayer: Port WinUI implementation - #23889
Open
morning4coffe-dev wants to merge 246 commits into
Open
AnimatedVisualPlayer: Port WinUI implementation#23889morning4coffe-dev wants to merge 246 commits into
morning4coffe-dev wants to merge 246 commits into
Conversation
Fixes NoClickablePointException / 0x80070002 (FileNotFound) raised to out-of-proc UIA clients (FlaUI, WinAppDriver, Narrator) when calling into an element whose subtree was removed. - Port CUIAWrapper::Invalidate: providers now expose Invalidate(), which disconnects from UIA, cascades to virtual (DataGrid) children, and makes every entry point return UIA_E_ELEMENTNOTAVAILABLE via ThrowIfDisconnected, instead of the COM-callable wrapper being GC'd out from under a cached client proxy. A short-lived strong tombstone keeps the wrapper alive until UIA processes the disconnect. - Wire UIA_ClickablePointPropertyId to AutomationPeer.GetClickablePoint, matching CUIAWrapper (VT_EMPTY when (0,0), else client-to-screen). Fixes #494
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Shift + vertical mouse wheel is repurposed as horizontal scrolling, but the horizontal branch in ScrollContentPresenter.PointerWheelScroll used the raw vertical wheel delta without the sign inversion that the vertical branch applies. As a result wheel-down + Shift scrolled left instead of right (and wheel-up scrolled right instead of left). Negate the delta for the Shift case (IsHorizontalMouseWheel == false) so wheel-down scrolls right and wheel-up scrolls left, matching WinUI and standard desktop behavior. A genuine horizontal wheel already carries the correct horizontal sign and is left unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 99c2bedc-ec77-464f-9ccc-33fee5a3a211
AttachSubWindow marshalled an XWindowAttributes buffer into XChangeWindowAttributes, which expects the differently-laid-out XSetWindowAttributes. The override_redirect value actually applied came from whatever bytes were at offset 88 (map_installed), so the intended override-redirect was never reliably set. Without it, Weston's XWM (WSLg) reparents the WebView2 GTK toplevel into its own frame window and never lets it go, leaving the webview invisible. - Pass a properly-constructed XSetWindowAttributes. - Set override-redirect on the GTK window right after realization, before it is first mapped, so the WM never starts managing it (once Weston's XWM manages a window, reparenting it away is not reliably possible). - Warn when the reparent doesn't stick instead of failing silently. Validated at runtime on WSLg (Ubuntu 24.04): WebView2 samples now render embedded in the app window; previously the webview window was held under the "Weston WM" window and never displayed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
RunOnGtkThread now propagates exceptions from the GTK idle callback through the TaskCompletionSource instead of leaving the calling thread blocked forever, and the post-reparent diagnostic checks XQueryTree's status (avoiding a spurious warning and XFree on garbage when the window dies mid-attach) and names the window that kept the native element. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Use SetWindowValuemask.OverrideRedirect for XChangeWindowAttributes and GetAwaiter().GetResult() to rethrow original GTK-thread exceptions. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Ctrl+Wheel and Ctrl+Plus/Minus now keep the viewport center fixed, using the same formula as the pinch gesture. - Apply the target zoom before validating offsets in Set(), so an offset that is only reachable at the new zoom is no longer clamped against the old one. - Remove the centering offset when reading AnchorPoint back in the scroll animation callbacks. - Keep the zoom range pinned to 1 while ZoomMode is Disabled. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GKBgQoAmRmaFoXXZr93iLB
Also covers an offset that is only reachable at the target zoom factor. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GKBgQoAmRmaFoXXZr93iLB
Keep providers callable until UiaDisconnectProvider returns, check its HRESULT, and report native disconnect failures without interrupting cleanup. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7de737fe-af1e-42b9-ab99-19c5b03d8d96
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7de737fe-af1e-42b9-ab99-19c5b03d8d96
Keep root-level structure changes coarse until UIA has materialized a specific accessible ancestor, avoiding eager automation peer creation across the app. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7de737fe-af1e-42b9-ab99-19c5b03d8d96
- Forward empty-content writes (skip only the null delete sentinel) so a truncate-to-empty request is applied instead of being dropped under a Success ack. - Serialize batch finalizations on a per-updater JoinableTask chain so a later batch's Debug.ApplyCodeChanges cannot overtake an earlier batch still polling workspace readiness. - Defer the encoding-upgrade close/re-encode/reopen (and drop the redundant pre-Save) into finalization; keep an in-memory-only path when ForceSaveOnDisk is false. ApplyFileContentAsync now returns the persist step for the caller to run inline (single-file) or defer (batched).
Contributor
|
The build 224270 found UI Test snapshots differences: Details
|
…d of silently draining them
- Apply the in-memory content immediately on the encoding-change path and defer only the close/re-encode/reopen, so neither VS nor the dev-server ack observes stale content during the readiness wait. - Trigger hot reload for delete-only batches: FinalizeAsync now falls back to the base finalization (standalone ForceHotReloadIdeMessage), since no UpdateFileRequestIdeMessage carries the trigger and the NoChanges auto-retry only re-fires after an EnC attempt reports NoChanges.
- Wait for workspace readiness before the deferred persists even when the explicit hot-reload trigger is disabled: a deferred save / encoding rewrite can itself kick off "hot reload on save", which must not evaluate an intermediate snapshot when the batch created files. - Persist the hot-reload info file eagerly only for write batches; delete-only batches persist and trigger through base.FinalizeAsync, removing a double-persist and a now-inaccurate comment. - Use the vsEPReplaceTextOptions enum instead of a magic flags literal; reword the readiness log (no compilation happens there); grammar fix.
- Marshal ApplyFileContentAsync to the VS UI thread before touching DTE: the IDE-channel message pump dispatches on a background thread, so the synchronous DTE access could hit COM thread-affinity failures. - Log (instead of silently swallow) an unexpected fault on the finalization chain. - ApplyFileContentAsync is now internal (matches the internal sealed type); name the 250 ms file-system settle delay; replace the lingering TODO with the full-content contract; annotate the completed-sentinel finalization head. - Docs: base FileUpdater.ApplyEditsAsync no longer implies ordered application (it is Task.WhenAll); spec now states empty content is valid (truncate) and only null is the delete sentinel.
feat(devserver): Add Kimi Code as MCP setup client
fix: re-create unmaterialized Frame content on hr element update
fix(GLCanvasElement): blank canvas on physical iOS devices — probe GLES BGRA readback support
…age-writes fix(wasm): Stop buffering whole files in tab memory on StorageFile writes
…tefile feat(hr): batch IDE file updates and gate EnC on workspace readiness
…scope fix(hr): scope the blocked-compilation audit to the pass change-set (spec 054)
…ents/animated-visual-player-port
Contributor
|
Claude encountered an error after 0s —— View job I'll analyze this and get back to you. |
Contributor
|
The build 224644 found UI Test snapshots differences: Details
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
GitHub Issue: closes #23881
PR Type:
✨ Feature
What changed? 🚀
Ports
AnimatedVisualPlayerdirectly from Microsoft WinUI commit3cae15f0for the Skia renderer.AnimationControllerplayback-rate, progress, seeking, and commit behavior.IAnimatedVisualSource3/IAnimatedVisual2and Composition-driven rendering.This targets
feature/breakingchanges. The public Uno-only members previously added toIAnimatedVisualSourceare removed in favor of the WinUI contract.PR Checklist ✅
Screenshots Compare Test Runresults.Validation
git diff --check