Repository navigation
fix(desktop-gpui): keep the camera bubble above the picker overlays - #3441
Merged
Merged
Conversation
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…e Windows probe on an interactive desktop
Member
Author
|
hey @greptileai, please re-review the PR |
…st overlay activation
Member
Author
|
hey @greptileai, please re-review the PR |
…t any nested pass
Member
Author
|
hey @greptileai, please re-review the PR |
1 similar comment
Member
Author
|
hey @greptileai, please re-review the PR |
richiemcilroy
marked this pull request as ready for review
October 27, 2026 08:54
| - "apps/desktop-gpui/src/platform.rs" | ||
| - "apps/desktop-gpui/src/platform/**" | ||
| - "scripts/picker-smoke/**" | ||
| - ".github/workflows/picker-smoke.yml" |
There was a problem hiding this comment.
P2: Fork pull requests can queue three full-platform app builds by editing only the new smoke workflow
Self-referencing paths lets a fork queue 3 full app builds (60-min timeout) by editing only CI/harness files.
Gate workflow/harness-only triggers to same-repo PRs (as perf-budget.yml does) or drop those paths from the fork-triggerable filters.
AI prompt
Check if this security scanner issue is valid. If so, understand the root cause and fix it. If appropriate, update or add tests. Keep the change focused and preserve intended behavior.
<file name=".github/workflows/picker-smoke.yml">
<violation number="1" location=".github/workflows/picker-smoke.yml:14">
<priority>P2</priority>
<title>Fork pull requests can queue three full-platform app builds by editing only the new smoke workflow</title>
<evidence>The new workflow runs on pull_request (opened, synchronize, reopened, ready_for_review) and lists both its own file (`.github/workflows/picker-smoke.yml`, added line 14) and `scripts/picker-smoke/**` (line 13) in its paths filters. A fork contributor can therefore trigger the `smoke` matrix by editing only CI/harness files, without touching product code. That matrix builds the whole `cap-gpui` app on `blacksmith-6vcpu-macos-15`, `windows-2022`, and `blacksmith-8vcpu-ubuntu-2404` with `timeout-minutes: 60` (added lines 27-43). `concurrency.cancel-in-progress: true` only cancels overlapping runs, so successive `synchronize` pushes each get a fresh three-platform job. The repository already fixed this exact pattern in `perf-budget.yml` by gating self-file-triggered work on same-repository PRs, and an equivalent finding on `instant-reliability.yml` was accepted for fixing. This adds a new, cheap, repeatable route for untrusted forks to consume shared macOS/Windows/Linux runner capacity.</evidence>
<recommendation>Do not let a PR that changes only the smoke workflow or `scripts/picker-smoke/**` queue the full three-platform matrix for forks. Mirror the `perf-budget.yml` same-repo guard (e.g. `github.event.pull_request.head.repo.full_name == github.repository`) for workflow/harness-only changes, or remove the workflow's own path and the harness path from the fork-triggerable filters. Optionally lower the 60-minute timeout and keep full validation for internal PRs or `workflow_dispatch`.</recommendation>
</violation>
</file>
This branch was successfully deployed
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.
Problem
When the target picker opens, the camera bubble can end up behind the picker overlays. The new picker probe reproduces it on every desktop.
recording_controls_level) and the overlays at 7.apply_panel_behaviorandplace_overlay_panelset that level, then callapply_fullscreen_overlay_behavior, whosesetFloatingPanel:YESresets anNSPaneltoNSFloatingWindowLevel. So the camera, the overlays, the recording bar and the teleprompter all ran at level 3, and whichever was ordered front last won. The probe on main read the camera at layer 3 behind an overlay at layer 3 in all three modes.HWND_TOPMOSTwindows, and each overlay is placed at the top of that band after the camera exists. The camera's re-raise was a postedHWND_TOP(SWP_ASYNCWINDOWPOS), and gpui'sactivate()runs on a later executor turn, so the overlay's activation landed last and won. Every later click on an overlay activated it again.platform::window_is_visiblereported visible. That helper always returnsfalseoff macOS and Windows, so the raise never ran. The probe on main caught the overlay above the camera in Display mode.Change
NSFloatingWindowLevelexplicitly and is unchanged.raise_camera_above_overlaysreplaces the visibility-filtered raise. Windows and X11 no longer requirewindow_is_visible, because neither raise path shows a hidden window. macOS keeps the filter, becauseorderFrontRegardlesswould show a hidden bubble.SetWindowPos(HWND_TOPMOST, SWP_NOACTIVATE)(platform::raise_panel_native). On macOS the same call first restores the panel level if anything lowered it.cx.update, and the native raise runs after it returns.orderFrontRegardlesscalls straight back into gpui, which would drop those callbacks while the app is borrowed.Test
CAP_PICKER_PROBE_OUTPUT(debug builds only) does the following, and the newPicker smoke (real app)workflow runs it on macOS, Windows, and Linux under Xvfb with openbox:CGWindowListCopyWindowInfowith each window's layer,EnumWindows, or the X11 window tree, since the override-redirect camera and overlays are not in the window manager's client list).The workflow fails unless the camera is above every overlay in every mode. The probe writes its verdict as the report's first key, and
run.shchecks only that key: nested checks havepassedkeys of their own.ffmpeg-sysbindgen)

Confidence Score: 5/5
The PR appears safe to merge; no new actionable issue was found.Summary
Keeps the camera bubble above target-picker overlays on macOS, Windows, and X11.
Reviews (5) · Last reviewed commit: "fix(desktop-gpui): the picker smoke read..." · Reviewed by Greptile