Skip to content

Wayland drag lattice: the window visibly wiggles/steps while dragging — smoother than Windows is the bar #1748

Description

@dfattal

Observation on the Linux dev box (native Wayland, GNOME 50, 3840x2160 panel at 200 %) with the DisplayXR browser (browser-pvt #167) and the demos: the phase-snapped drag is 3D-stable (no shimmer) but the window itself moves jerkily — it wiggles/steps while being dragged, noticeably worse than the same drag on Windows, which is smooth.

Mechanism (per docs/specs/runtime/wayland-window-geometry.md §8 and the session memory): Windows snaps each step before the window moves (app-owned drag, per-step snap_window_rect, sub-lattice precision). Wayland cannot position its own window, so the GNOME extension corrects each compositor-applied move after mutter places it (position-changed → move_frame to the nearest table entry), and the table is a grid at kLatticeCell = 3 logical px (6 device px at 200 %). Two candidate causes, not yet separated:

  1. Quantization: the window only lands on the 3-px table grid, so a slow drag advances in visible steps.
  2. Correct-after-apply: if the raw position is painted for even one frame before move_frame lands (the spec claims the correction precedes the paint — worth measuring with DISPLAYXR_DEBUG=1's per-frame audit), the window oscillates between raw and corrected positions.

Asks: measure which it is (frame audit: how many frames paint off-table; whether corrections alternate sign); if (1), a finer table (cell 1–2 px where the lens allows, or interpolating along the drag vector) — the lattice period on this panel is what bounds it; if (2), a mutter-side hook (the Meta.ExternalConstraint path once mutter makes new_rect writable — upstream request drafted) or predicting the next position from pointer velocity so the correction is applied to the upcoming move. Windows is the reference for feel. Not a regression — filed from the 2026-09-26 panel session.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions