( events: CompositorEventController, event: GestureSwipeEvent, )
| 3052 | |
| 3053 | debugSSD("runtime-evaluate-existing-clean", { |
| 3054 | windowId: snapshot.id, |
| 3055 | wasPreconfigured, |
| 3056 | updated: updated !== undefined, |
| 3057 | }); |
| 3058 | return { |
| 3059 | serialized: updated?.serialized ?? existing.cache.lastSerialized, |
| 3060 | windowEffects: evaluateWindowEffects(effectConfig, snapshot.id, existing), |
| 3061 | }; |
| 3062 | } |
| 3063 | |
| 3064 | function evaluatePreconfigure( |
| 3065 | composition: WindowCompositionFunction, |
| 3066 | events: CompositorEventController, |
| 3067 | effectConfig: RuntimeEffectConfig, |
| 3068 | snapshot: WaylandWindowSnapshot, |
| 3069 | ): { |
| 3070 | serialized: unknown; |
| 3071 | transform: WindowTransform; |
| 3072 | managedWindow: ManagedWindowState; |
| 3073 | windowEffects: WindowEffectAssignment | null; |
| 3074 | } { |
| 3075 | // Preconfigure evaluation is used before the client has committed its first real frame so |
| 3076 | // Rust can send an initial configure matching <ManagedWindow rect>. It intentionally goes |
| 3077 | // through the normal cache/onOpen path so user window state initialized in onOpen is visible |
| 3078 | // to the layout. The first real evaluate reanchors any animations started here to its own |
| 3079 | // compositor timestamp, preventing open animations from appearing halfway through. |
| 3080 | let entry = cacheByWindowId.get(snapshot.id); |
| 3081 | if (!entry) { |
| 3082 | debugSSD("runtime-preconfigure-new-cache", { |
| 3083 | snapshot: snapshotForDebug(snapshot), |
no test coverage detected