Skip to content

Desktop Browser: page CSS -webkit-app-region: drag turns page content into a bb window drag handle (Linear issue pages unclickable) #5862

Open

Description

@brzvsk

Summary

In the desktop app's built-in Browser, any page element styled with CSS -webkit-app-region: drag (or app-region: drag) becomes a drag handle for the whole bb window. Clicks and scrolling never reach the page there; pressing and moving the mouse moves the bb window instead. Regular browsers ignore this property, so sites that also ship an Electron desktop app (they use it for their own title bars) break in bb. Linear is a concrete case: on an issue page the issue body cannot be clicked or scrolled.

Versions and environment

  • bb 0.46.1 (desktop app), macOS 27.0.1, Apple Silicon
  • main at 9e5c8a9 pins Electron 44.3.0
  • Not agent-related: reproduces with no Browser Automation lease on the tab (bb browser tabs reports "control": null)

Steps to reproduce

  1. Open a desktop Browser tab in any thread and sign in to https://linear.app.
  2. Open any issue page, for example https://linear.app/<workspace>/issue/<KEY>-<n>/....
  3. Click into the issue description or the comment box, or scroll the issue body.

Minimal repro, not tested separately; it follows from the cause below. Any page with a drag region should behave the same:

<div style="-webkit-app-region: drag; height: 300px; background: #eee">
  <button>can't click me</button>
  <input placeholder="can't focus me">
</div>

Expected vs actual

Expected: the page receives clicks, focus and scroll, as it does in Chrome or Safari.
Actual:   in the drag region nothing is clickable or scrollable; press-and-move drags the bb window.
          Elements Linear explicitly marks `no-drag` (top bar buttons, the right-hand context menu) keep working.
          The left sidebar and issue lists work because their drag regions are small or absent.

Evidence

Elements with a computed drag region on a Linear issue page (top-level ones only, viewport 946×867), collected with getComputedStyle(el).getPropertyValue('-webkit-app-region'):

DIV._draggableRegion_…   [x 0,   y 0, w 246, h 52]   workspace header in the sidebar
DIV (issue view)          [x 247, y 9, w 691, h 822]  "Creators CRM › Issues › CRE-54 …", the entire issue pane

That page had 1204 elements with a non-none app region in total. Every no-drag descendant matches a control that still works.

Verified workaround: injecting this into the live page immediately restored clicking and scrolling, with no reload:

* { -webkit-app-region: no-drag !important; app-region: no-drag !important; }

Likely cause, inferred and not traced in Chromium: each Browser tab is a native WebContentsView added to the host window's contentView (

const view = new WebContentsView({
), and Electron honors draggable regions declared by a WebContentsView's own content. For comparison, the Codex desktop app embeds pages with a <webview> guest and has no app-region handling in its main process or page preload. My guess is that <webview> guests don't forward their draggable regions to the window, but I have not tested Linear in Codex.

Possible fix: force no-drag for untrusted Browser content, e.g. webContents.insertCSS('* { -webkit-app-region: no-drag !important; app-region: no-drag !important; }', { cssOrigin: 'user' }) on every main-frame load (dom-ready) in desktop-browser-view.ts. A web page should never be able to drag the bb window, so this has no legitimate downside. Same-process subframes may need the same treatment.

What you ruled out

Suggested priority and effort

Medium. It makes Linear issue pages unusable in the built-in Browser, and probably other sites with a desktop Electron app (Slack, Notion, Figma, Discord, ...). The workaround needs DevTools or script injection. Effort probably low: one insertCSS call plus a regression test.

Found in bb thread thr_dtj7t5fs86.

AGENT GENERATED

Activity

  1. added theissue type on Oct 20, 2026
  2. added a commit that references this issue on Oct 20, 2026
  3. brzvsk commented on Oct 20, 2026

    @brzvsk
    Author

    A working stopgap built as a plugin, in case it helps as reference code for the fix: brzvsk/bb-plugins/plugins/browser-no-drag.

    It uses only the existing Plugin SDK. A hidden experimental_browserToolbarAction calls experimental_page.evaluate every 500 ms and re-adds this style when it's missing (the page loses it on navigation):

    @layer bb-browser-no-drag {
      *, *::before, *::after {
        -webkit-app-region: no-drag !important;
        app-region: no-drag !important;
      }
    }

    The late cascade layer plus !important beats every normal page rule and every unlayered !important rule, whatever the selector specificity.

    Verified on bb 0.46.1: after reloading a Linear issue page, the page has 0 elements with a computed drag region, and the issue body can be clicked, typed into and scrolled again. evaluate takes no CDP lease, so no control banner appears.

    A core fix would avoid the polling and the up-to-500 ms gap after navigation: for example webContents.insertCSS(..., { cssOrigin: "user" }) on each main-frame load in desktop-browser-view.ts. Same-process subframes may need the same treatment.

    AGENT GENERATED

  4. added
    no-reproCould not reproduce as reported (or already fixed); see linked report
    on Oct 20, 2026
  5. bb-slop-cop commented on Oct 20, 2026

    @bb-slop-cop
    Contributor

    🚨 SLOP COP 🚨 · new-issue-autopilot

    • Classification: Bug · Priority: Medium · Effort: Low · Area: desktop.
    • Report: https://get-bb.github.io/reports/issues/5862.html
    • Verdict: NOT REPRODUCED — environment-blocked, not disproved. Root-cause confidence: low. Applied no-repro.
    • Root cause: unconfirmed. Trusted main embeds native child views without app-region normalization; native drag-region propagation is plausible but untested.
    • Evidence: two clean checkouts at 9e5c8a945 both exit before Electron startup because libglib-2.0.so.0 is unavailable. The report includes the local native-input probe and exact outputs. Existing manager tests pass in both checkouts: 107/107 each; they mock Electron and cannot verify native dragging.
    • No PR: native reproduction and a failing-before/passing-after regression could not be established safely.

    AGENT GENERATED

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

    desktopDesktop app, install, update, packagingno-reproCould not reproduce as reported (or already fixed); see linked report

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions