fix(web): popovers over the desktop header respond to the pointer#31794

merged2
main
issue-watch/31783
opened4d agobySshivam
View on GitHubTwo-way sync enabledPR last imported 1d ago

Problem

The model picker loses hover feedback where it overlaps the desktop header because Electron intercepts native pointer events in the window drag region.

Change

The shared popover popup now uses no-drag, matching menus and dialogs.

Scope and approval

Closes https://github.com/pingdotgg/t3code/issues/31783.

This qualifies for the small, focused fix exception in CONTRIBUTING.md. It fixes an independently reproduced hit-testing defect by applying the same popup exclusion already used by menus and dialogs.

Verification

Before, at bfb388415e8d3d39e5a7b3844fa7bc299c64f725, the Favorites button's center at window coordinates (372, 28) lies inside the 40-pixel header and gets no native hover. Its lower edge at (372, 44) gets a highlight and tooltip. After rebuilding the renderer at 2360902acf3a0ed6aaed5d2cc346647dba374216, both points work, and clicking the center opens Favorites.

Verified in the real Linux desktop app on physical corex, Electron 44.10.1, using a private X11 display with Openbox and a 1000×620 window. Cua moved that display's native pointer; CDP was used for setup and DOM readback only. The normal GNOME Wayland session was unavailable to Cua window discovery. All app data is isolated test data.

Before: the native pointer is inside the header strip, with no highlight or tooltip.

After: the same point highlights Favorites and shows its tooltip.

Before recording, at 2× speed: upper center fails, lower edge works, upper center fails again.

https://github.com/user-attachments/assets/538a4ee9-fb9e-42a5-a303-8e4c1b2ac9ec

After recording, at 3× speed: upper center and lower edge both work, and a center click opens Favorites.

https://github.com/user-attachments/assets/83c3a44f-c386-417d-a739-56736ed08b3d

Validation at the head above:

  • vp run --filter @t3tools/web build passed.
  • Browser pass through T3's Browser panel: open the picker, hover Favorites, see the tooltip, select Favorites, and dismiss with Escape. The popup's computed app region is no-drag.
  • device-route apps/web/src/components/ui/popover.tsx --json adds the web client. The issue requires the Linux desktop app; both were exercised.
  • fleet-job check 31794 passed on Boat at 2360902acf3a0ed6aaed5d2cc346647dba374216, job 6muzy6i3esjw376e, exit 0: format, lint, both knip passes, affected typechecks, and React compiler coverage.
  • Independent Codex review found no issues. A second round was unnecessary.
  • CI passed, including web tests, build, and typecheck.
  • fleet-job ui 31794 passed at the same head. I inspected its root-page captures at desktop and phone widths; they match before and after. This was a rendering check; native pointer proof is in the recordings above.

Not shown: KDE Wayland, macOS, or Windows runtime behavior. Shared desktop code was verified on Linux.

Implemented by Claude Opus 5.5 through Claude Code. Reproduced and verified by GPT-6.1-Sol through Codex in T3 Code.

Checks

22 successful · 16 skipped
All checks passed
20ee85c

Added 1 commit

  • fix(web): popovers over the window drag region respond to the pointer2360902
Synced from GitHub

Approvability

Verdict: Approved at 2360902

Macroscope's review found this PR approvable — Popovers now opt out of Electron window dragging so they remain interactive over the desktop header. This follows the existing menu and dialog pattern and has limited UI-only impact.

No code changes detected at 20ee85c. Prior analysis still applies.

You can add or adjust custom eligibility rules. Learn more.

Synced from GitHub

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

PopoverPopup now includes the [-webkit-app-region:no-drag] class. This change prevents Electron from treating the popup as a draggable region.

Changes: Popover interaction

Layer / File(s)Summary
Set popover popup to no-drag
apps/web/src/components/ui/popover.tsx
PopoverPopup adds the [-webkit-app-region:no-drag] class.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Change: Bug fix · Severity of issue fixed: Medium

Possibly related issues

  • pingdotgg/t3code#31551 — Both reports involve Electron drag-region hit testing intercepting pointer input, but this change does not address the hidden chat header regions.

Possibly related PRs

  • pingdotgg/t3code#31813 — This PR adds the same no-drag class to PopoverPopup to address pointer input over the desktop title bar.

Suggested reviewers: maria-rcks

Merge Risk: External image Minimal · up to 20ee8

The popover change is ready to merge, with no actionable risk identified.

Pre-merge checks: Passed 4

Check nameStatusExplanation
Title checkPassedThe title names the fix that the change makes: popovers over the desktop header now receive pointer events. The raw summary shows PopoverPopup gains a no-drag app-region style, which stops Electron fr…
Description checkPassedThe description covers the problem, the change, scope and approval, and verification. The Problem section explains that the model picker loses hover feedback where it overlaps the desktop header. The …
Linked Issues checkPassed[#31783] Requirement: restore hover feedback and the Favorites tooltip in the header-height strip where the model picker overlaps the desktop header. The whole-PR diff (base 23bdb9ef to head 20ee85ca)…
Out of Scope Changes checkPassed[#31783] The whole-PR diff contains one code change: a two-line hunk in PopoverPopup in apps/web/src/components/ui/popover.tsx. It adds a comment and the [-webkit-app-region:no-drag] class. The ch…
Full details: Title check

Explanation

The title names the fix that the change makes: popovers over the desktop header now receive pointer events. The raw summary shows PopoverPopup gains a no-drag app-region style, which stops Electron from treating the popup as a drag region. The title is specific and matches the main change. It follows the conventional commit format from the repository template.

Full details: Description check

Explanation

The description covers the problem, the change, scope and approval, and verification. The Problem section explains that the model picker loses hover feedback where it overlaps the desktop header. The Change section states the popover popup now uses no-drag. The Scope and approval section links issue #31783 and explains why the small-fix exception applies. The Verification section gives before and after pointer results, platform details, build and CI results, and lists what was not tested (KDE Wayland, macOS, Windows). Screenshots and recordings are embedded, as the template requires for UI changes. The description is complete and meets the template's requirements. It does not state a maintainer approval comment, but the author argues the small-fix exception applies, which the template allows.

Full details: Linked Issues check

Explanation

[#31783] Requirement: restore hover feedback and the Favorites tooltip in the header-height strip where the model picker overlaps the desktop header. The whole-PR diff (base 23bdb9ef to head 20ee85ca) adds [-webkit-app-region:no-drag] to the PopoverPopup class list in apps/web/src/components/ui/popover.tsx. This targets the diagnosed cause: Electron drag hit-testing over the popup. ProviderModelPicker.tsx imports PopoverPopup from ../ui/popover, which matches the issue's diagnosis. The PR reports before and after native-pointer recordings in the Linux Electron desktop app (Electron 44.10.1, X11 with Openbox). The upper header point failed before and works after. The lower edge worked in both cases. A center click opens Favorites. Limits: the reported runtime checks name head 2360902a, not the current head 20ee85ca. The incremental diff between those heads could not be read, so the runtime evidence is not confirmed for the exact current head. The whole-PR diff shows the same single-line change the PR describes. KDE Wayland, the issue's reported environment, was not exercised. The issue does not require an automated regression test. The change is a CSS class with no added test, which is consistent with the issue scope.

Full details: Out of Scope Changes check

Explanation

[#31783] The whole-PR diff contains one code change: a two-line hunk in PopoverPopup in apps/web/src/components/ui/popover.tsx. It adds a comment and the [-webkit-app-region:no-drag] class. The change connects directly to the linked issue, because the shared popover popup hosts the model picker. No unrelated files, refactors, or documentation changes appear in the whole-PR diff. The incremental diff from 2360902a to 20ee85ca could not be read, so changes between those heads are not checked by diff. The whole-PR diff at the current head contains no unrelated changes.

Finishing Touches

Generate docstrings

  • Commit to this branch
  • Create a new PR
Generate unit tests (beta)

  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
External image Recent review info

External image Run configuration

External image Commits

Reviewing files that changed from the base of the PR and between 2360902acf3a0ed6aaed5d2cc346647dba374216 and 20ee85ca6f92c42ad7dbcb4ef9c4c91ec230134b.

External image Files selected for processing: 1

  • apps/web/src/components/ui/popover.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

WWladefantapproved these changes4d ago
Synced from GitHub

Worker16 separate nonauthor review for setup HL-SB-20261102; receiving task 6ae9048924888191ba619eb5249ca846, invocation b4ab9a30-8a55-4d65-9e58-73c92e9e92d7.

Reviewed the exact one-file PR delta at 2360902acf3a0ed6aaed5d2cc346647dba374216 against main at 3d78e915e3998eed664469486527b596af8f2f3e. The added [-webkit-app-region:no-drag] on the shared PopoverPopup matches the established MenuPopup/Dialog no-drag treatment and addresses the reported Electron titlebar drag-region hit-testing issue. I found no P1/P2 in the scoped source delta.

Normal PR CI #42160058111 checked out synthetic merge commit 026a819 (exact candidate plus target). Test Web passed 525 files / 5,577 tests; Test passed 35 files / 246 tests; Build and Typecheck, Lint, Aggregate Check, Agent Context Budget and Mobile Fingerprint Check succeeded. Mobile EAS Preview, Release Smoke, Rust and Mobile Native Static Analysis were skipped, not passed.

The PR supplies before/after screenshots and native-pointer recordings, plus author-reported Linux desktop verification on an isolated X11/Openbox session. The issue's original KDE Wayland environment, macOS and Windows were not manually exercised in the supplied evidence; I did not independently operate a packaged desktop or physical host. This is a source review of the exact CSS delta, not a claim of cross-platform live acceptance. Author retains branch custody; landing remains with the designated steward.

Added 1 commit

  • Merge branch 'main' into issue-watch/3178320ee85c