Skip to content

Clips: "Open desktop app" button#2179

Merged
shomix merged 5 commits into
mainfrom
shomix-p-open-desktop
Jul 17, 2026
Merged

Clips: "Open desktop app" button#2179
shomix merged 5 commits into
mainfrom
shomix-p-open-desktop

Conversation

@shomix

@shomix shomix commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

The "Download desktop app" button now says "Open desktop app" once a user has the app installed, and clicking it launches the app directly instead of taking them to the download page.

Button behavior: After downloading, the button skips the Chrome/desktop installer picker and goes straight to launching the app. If the app isn't found (e.g. on an older version that doesn't support the new URL scheme), it falls back to the download page so the user can update.

Existing users: Users who previously dismissed the download promo will also see "Open desktop app" right away, without needing to click through anything first.

Desktop app: The Tauri app now registers the clips:// URL scheme, so clicking "Open desktop app" in the browser can launch the running app directly.

@netlify

This comment has been minimized.

@netlify

This comment has been minimized.

@netlify

This comment has been minimized.

@netlify

This comment has been minimized.

@netlify

This comment has been minimized.

@netlify

This comment has been minimized.

@netlify

This comment has been minimized.

@netlify

This comment has been minimized.

@netlify

This comment has been minimized.

@netlify

This comment has been minimized.

@netlify

This comment has been minimized.

@netlify

This comment has been minimized.

@github-actions

github-actions Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Here's a visual recap of what changed:

Visual recap

Open the full interactive recap

builder-io-integration[bot]

This comment was marked as outdated.

Milos Petrovic added 2 commits July 16, 2026 17:36

@builder-io-integration builder-io-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Builder reviewed your changes and found 1 potential issue 🟡

Review Details

Incremental Code Review Summary

The latest commit adds a reactive downloaded-state subscription using useSyncExternalStore and handles cold-start deep links with get_current(). Those changes address the previously reported same-tab CTA staleness and native cold-start concerns. The previously reported dismissed-promo/download conflation remains present and was intentionally not reposted because its existing review thread is still open.

New Finding

  • 🟡 MEDIUM — The deep-link path uses a partial present_popover helper that only focuses and repositions the window. During an active recording, Clips intentionally parks the popover at 2×2 pixels; opening clips:// then leaves that parked size intact, so “Open desktop app” can appear to do nothing. The deep-link path should reuse the canonical Clips popover presentation helper that restores the window and clears relevant parked/voice-wake state.

The subscription and cold-start implementations otherwise look appropriate, and the dev server is healthy. 🧪 Browser testing: Will run after this review (PR touches UI code).

let urls: Vec<String> =
event.urls().iter().map(|u| u.to_string()).collect();
dlog!("[clips-tray] deep link opened: {:?}", urls);
present_popover(&dl_handle);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Restore parked popover before presenting it from a deep link

This deep-link callback calls the new lightweight present_popover, which does not restore the popover from its deliberate 2×2 parked size during an active recording. A clips:// click can therefore focus an effectively invisible window; reuse the canonical Clips presentation path (for example clips::force_show_popover) that restores the parked window and clears the related state.

Fix in Builder

Milos Petrovic added 2 commits July 16, 2026 18:14
@netlify

This comment has been minimized.

@builder-io-integration builder-io-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Builder reviewed your changes and found 1 potential issue 🟡

Review Details

Incremental Code Review Summary

The latest head is unchanged in the affected implementation from the prior incremental pass. The previously reported native deep-link presentation issue remains present and was intentionally not reposted because its review thread is still open; developer agreement is noted. The latest review confirms the browser-side state subscription is structurally sound, but found additional protocol-launch edge cases.

New Findings

  • 🟡 MEDIUM — Any generic browser blur/visibility loss during the protocol-launch window is treated as proof that the app opened, which can suppress the fallback and persist an incorrect downloaded state when focus was lost for an unrelated reason.
  • LOW — Promo dismissal does not notify the downloaded-state subscribers, leaving mounted CTAs stale in the same session.
  • LOW — The 800 ms timeout can redirect while a browser’s external-protocol confirmation dialog is still awaiting user input.

A separate missed promo-bar label update was identified, but its call site is outside the current PR diff hunk and therefore cannot be safely annotated in this review. The useSyncExternalStore subscription and cold-start get_current() handling otherwise look correct. 🧪 Browser testing: Will run after this review (PR touches UI code).

Comment on lines +82 to +85
const onLeave = () => {
if (launched) return;
launched = true;
markDesktopAppDownloaded();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Do not treat every browser blur as a successful app launch

onLeave marks the app as downloaded for any window.blur or visibility loss during the 800 ms window. Switching tabs/apps or an external-protocol confirmation dialog can cause the same signal without a successful handoff, suppressing the fallback and leaving users with an incorrect “Open desktop app” state.

Fix in Builder

@shomix
shomix merged commit 8d4afd3 into main Jul 17, 2026
92 checks passed
@shomix
shomix deleted the shomix-p-open-desktop branch July 17, 2026 08:12
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.

2 participants