Skip to content

fix(linux): CSS keyframe animations, mouse enter/leave/move and ActivityIndicator spin - #11623

Merged
triniwiz merged 3 commits into
feat/linuxfrom
fix/linux-keyframes-pointer-spinner
Nov 8, 2026
Merged

triniwiz merged 3 commits into
feat/linuxfrom
fix/linux-keyframes-pointer-spinner

Conversation

@triniwiz

@triniwiz triniwiz commented Nov 8, 2026

Copy link
Copy Markdown
Member

Linux fixes found running the shadcn desktop template on MasonKit.

CSS keyframe animations (ui/animation/index.linux.ts). KeyframeAnimation sets the style's keyframe values when it starts, and they win over local values. The Linux Animation wrote local values every frame, so nothing visible changed until the animation ended (animate-pulse never pulsed). Like iOS and Android, an animation with valueSource: 'keyframe' now writes the keyframe values.

mouseEnter, mouseLeave, mouseMove (ui/core/view/index.linux.ts). Linux raised none of them. While any has a listener, a GtkEventControllerMotion on the view's widget raises them (mouseMove with getX/getY in the view's coordinates) and keeps the hover visual state, as Windows does. MasonKit's :hover and onMouseLeave depend on these.

ActivityIndicator (ui/activity-indicator/index.linux.ts). When busy was set before the spinner was on screen, GTK left its CSS animation still until a theme change restyled it. Starting it from inside the map signal had the same result. It now starts on the turn after the spinner is mapped.

Tested on Ubuntu 22.04 (GTK 4.6, Pop!_OS): the skeleton pulses, chart hover and :hover styles work, and the spinner turns without a theme change.

KeyframeAnimation sets the style's keyframe values when it starts, and they win
over local values, so the Linux Animation's local writes didn't show until the
animation ended (animate-pulse never pulsed). Like iOS and Android, an animation
with valueSource 'keyframe' now writes the keyframe values.
A GtkEventControllerMotion, attached while any of them has a listener, raises
the events (mouseMove with getX/getY) and keeps the hover visual state, as
Windows does. MasonKit's :hover and onMouseLeave relied on them.
GTK left the spinner's CSS animation still when gtk_spinner_start ran before
the widget was on screen (or inside its map signal), until a theme change
restyled it. It now starts on the turn after the spinner is mapped.
@nx-cloud

nx-cloud Bot commented Nov 8, 2026 •

Copy link
Copy Markdown

View your CI Pipeline Execution ↗ for commit 61d876d

Command Status Duration Result
nx run-many -t build -p core,webpack5,vite ✅ Succeeded 21s View ↗

💡 Verify your cache is correct by running tasks in a sandbox. Read docs ↗


☁️ Nx Cloud last updated this comment at 2026-11-08 10:14:10 UTC

@pkg-pr-new

pkg-pr-new Bot commented Nov 8, 2026

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/@nativescript/core@11623
npm i https://pkg.pr.new/@nativescript/vite@11623
npm i https://pkg.pr.new/@nativescript/webpack@11623

commit: 61d876d

@triniwiz
triniwiz merged commit 9f94e72 into feat/linux Nov 8, 2026
5 of 7 checks passed
@triniwiz
triniwiz deleted the fix/linux-keyframes-pointer-spinner branch November 8, 2026 10:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant