fix(desktop): keep modal dialogs out of the window drag region - #2210

Merged
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region
Aug 5, 2026
Merged

fix(desktop): keep modal dialogs out of the window drag region#2210
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region

Conversation

@Astro-Han

Copy link
Copy Markdown
Contributor

Summary

Clicking the lightbox close button only worked on its left half: the button sits in the window's top-right corner, inside .maka-window-titlebar, the app's only -webkit-app-region: drag surface. Chromium builds drag regions from element rects and that pass never sees the top layer, so a showModal() dialog paints over the titlebar while its controls inside the titlebar rect still reach the OS as window drags. The half that did respond was the part overlapping a no-drag titlebar cluster's rect.

The fix subtracts every modal dialog's own rect from the drag surface (dialog:modal { -webkit-app-region: no-drag }) rather than patching one third-party button: a modal owns everything it covers, and the titlebar beneath it is already inert. This also covers Astryx Dialog, which uses the same showModal() path.

Verification

  • apps/desktop Playwright suite: 65 passed. The attachment journey now asserts both halves of the contract — the open lightbox really overlaps the titlebar rect (so the check guards something) and it computes -webkit-app-region: no-drag. Without the CSS rule that assertion fails with none.
  • npm run lint, npm run format:check: clean.
  • Not run: OS-level hit testing cannot be exercised from Playwright, so the drag-region contract is asserted through computed style rather than a real window-manager click.

The titlebar is the app's only `-webkit-app-region: drag` surface, and
Chromium hit-tests drag regions from element rects without ever seeing the
top layer. A `showModal()` dialog therefore paints over the titlebar while
its controls inside that rect are still swallowed by the window manager.
The lightbox close button sits in the top-right corner and was only half
clickable for exactly this reason: the part of it overlapping a `no-drag`
titlebar cluster took clicks, the rest reached the OS as a window drag.
Subtract every modal dialog's own rect from the drag surface instead of
patching one button — a modal owns what it covers and the titlebar beneath
it is already inert. The attachment E2E now asserts the overlap is real and
that the open lightbox computes `no-drag`.
@Astro-Han
Astro-Han marked this pull request as ready for review August 5, 2026 06:54
@Astro-Han
Astro-Han merged commit 00206e8 into mainAug 5, 2026
12 checks passed
Sign up for freeto 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.

1 participant

@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(desktop): keep modal dialogs out of the window drag region - #2210

Merged
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region
Aug 5, 2026
Merged

fix(desktop): keep modal dialogs out of the window drag region#2210
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region

Conversation

@Astro-Han

Copy link
Copy Markdown
Contributor

Summary

Clicking the lightbox close button only worked on its left half: the button sits in the window's top-right corner, inside .maka-window-titlebar, the app's only -webkit-app-region: drag surface. Chromium builds drag regions from element rects and that pass never sees the top layer, so a showModal() dialog paints over the titlebar while its controls inside the titlebar rect still reach the OS as window drags. The half that did respond was the part overlapping a no-drag titlebar cluster's rect.

The fix subtracts every modal dialog's own rect from the drag surface (dialog:modal { -webkit-app-region: no-drag }) rather than patching one third-party button: a modal owns everything it covers, and the titlebar beneath it is already inert. This also covers Astryx Dialog, which uses the same showModal() path.

Verification

  • apps/desktop Playwright suite: 65 passed. The attachment journey now asserts both halves of the contract — the open lightbox really overlaps the titlebar rect (so the check guards something) and it computes -webkit-app-region: no-drag. Without the CSS rule that assertion fails with none.
  • npm run lint, npm run format:check: clean.
  • Not run: OS-level hit testing cannot be exercised from Playwright, so the drag-region contract is asserted through computed style rather than a real window-manager click.

The titlebar is the app's only `-webkit-app-region: drag` surface, and
Chromium hit-tests drag regions from element rects without ever seeing the
top layer. A `showModal()` dialog therefore paints over the titlebar while
its controls inside that rect are still swallowed by the window manager.
The lightbox close button sits in the top-right corner and was only half
clickable for exactly this reason: the part of it overlapping a `no-drag`
titlebar cluster took clicks, the rest reached the OS as a window drag.
Subtract every modal dialog's own rect from the drag surface instead of
patching one button — a modal owns what it covers and the titlebar beneath
it is already inert. The attachment E2E now asserts the overlap is real and
that the open lightbox computes `no-drag`.
@Astro-Han
Astro-Han marked this pull request as ready for review August 5, 2026 06:54
@Astro-Han
Astro-Han merged commit 00206e8 into mainAug 5, 2026
12 checks passed
Sign up for freeto 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.

1 participant

@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(desktop): keep modal dialogs out of the window drag region - #2210

Merged
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region
Aug 5, 2026
Merged

fix(desktop): keep modal dialogs out of the window drag region#2210
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region

Conversation

@Astro-Han

Copy link
Copy Markdown
Contributor

Summary

Clicking the lightbox close button only worked on its left half: the button sits in the window's top-right corner, inside .maka-window-titlebar, the app's only -webkit-app-region: drag surface. Chromium builds drag regions from element rects and that pass never sees the top layer, so a showModal() dialog paints over the titlebar while its controls inside the titlebar rect still reach the OS as window drags. The half that did respond was the part overlapping a no-drag titlebar cluster's rect.

The fix subtracts every modal dialog's own rect from the drag surface (dialog:modal { -webkit-app-region: no-drag }) rather than patching one third-party button: a modal owns everything it covers, and the titlebar beneath it is already inert. This also covers Astryx Dialog, which uses the same showModal() path.

Verification

  • apps/desktop Playwright suite: 65 passed. The attachment journey now asserts both halves of the contract — the open lightbox really overlaps the titlebar rect (so the check guards something) and it computes -webkit-app-region: no-drag. Without the CSS rule that assertion fails with none.
  • npm run lint, npm run format:check: clean.
  • Not run: OS-level hit testing cannot be exercised from Playwright, so the drag-region contract is asserted through computed style rather than a real window-manager click.

The titlebar is the app's only `-webkit-app-region: drag` surface, and
Chromium hit-tests drag regions from element rects without ever seeing the
top layer. A `showModal()` dialog therefore paints over the titlebar while
its controls inside that rect are still swallowed by the window manager.
The lightbox close button sits in the top-right corner and was only half
clickable for exactly this reason: the part of it overlapping a `no-drag`
titlebar cluster took clicks, the rest reached the OS as a window drag.
Subtract every modal dialog's own rect from the drag surface instead of
patching one button — a modal owns what it covers and the titlebar beneath
it is already inert. The attachment E2E now asserts the overlap is real and
that the open lightbox computes `no-drag`.
@Astro-Han
Astro-Han marked this pull request as ready for review August 5, 2026 06:54
@Astro-Han
Astro-Han merged commit 00206e8 into mainAug 5, 2026
12 checks passed
Sign up for freeto 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.

1 participant

@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(desktop): keep modal dialogs out of the window drag region - #2210

Merged
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region
Aug 5, 2026
Merged

fix(desktop): keep modal dialogs out of the window drag region#2210
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region

Conversation

@Astro-Han

Copy link
Copy Markdown
Contributor

Summary

Clicking the lightbox close button only worked on its left half: the button sits in the window's top-right corner, inside .maka-window-titlebar, the app's only -webkit-app-region: drag surface. Chromium builds drag regions from element rects and that pass never sees the top layer, so a showModal() dialog paints over the titlebar while its controls inside the titlebar rect still reach the OS as window drags. The half that did respond was the part overlapping a no-drag titlebar cluster's rect.

The fix subtracts every modal dialog's own rect from the drag surface (dialog:modal { -webkit-app-region: no-drag }) rather than patching one third-party button: a modal owns everything it covers, and the titlebar beneath it is already inert. This also covers Astryx Dialog, which uses the same showModal() path.

Verification

  • apps/desktop Playwright suite: 65 passed. The attachment journey now asserts both halves of the contract — the open lightbox really overlaps the titlebar rect (so the check guards something) and it computes -webkit-app-region: no-drag. Without the CSS rule that assertion fails with none.
  • npm run lint, npm run format:check: clean.
  • Not run: OS-level hit testing cannot be exercised from Playwright, so the drag-region contract is asserted through computed style rather than a real window-manager click.

The titlebar is the app's only `-webkit-app-region: drag` surface, and
Chromium hit-tests drag regions from element rects without ever seeing the
top layer. A `showModal()` dialog therefore paints over the titlebar while
its controls inside that rect are still swallowed by the window manager.
The lightbox close button sits in the top-right corner and was only half
clickable for exactly this reason: the part of it overlapping a `no-drag`
titlebar cluster took clicks, the rest reached the OS as a window drag.
Subtract every modal dialog's own rect from the drag surface instead of
patching one button — a modal owns what it covers and the titlebar beneath
it is already inert. The attachment E2E now asserts the overlap is real and
that the open lightbox computes `no-drag`.
@Astro-Han
Astro-Han marked this pull request as ready for review August 5, 2026 06:54
@Astro-Han
Astro-Han merged commit 00206e8 into mainAug 5, 2026
12 checks passed
Sign up for freeto 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.

1 participant

@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(desktop): keep modal dialogs out of the window drag region - #2210

Merged
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region
Aug 5, 2026
Merged

fix(desktop): keep modal dialogs out of the window drag region#2210
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region

Conversation

@Astro-Han

Copy link
Copy Markdown
Contributor

Summary

Clicking the lightbox close button only worked on its left half: the button sits in the window's top-right corner, inside .maka-window-titlebar, the app's only -webkit-app-region: drag surface. Chromium builds drag regions from element rects and that pass never sees the top layer, so a showModal() dialog paints over the titlebar while its controls inside the titlebar rect still reach the OS as window drags. The half that did respond was the part overlapping a no-drag titlebar cluster's rect.

The fix subtracts every modal dialog's own rect from the drag surface (dialog:modal { -webkit-app-region: no-drag }) rather than patching one third-party button: a modal owns everything it covers, and the titlebar beneath it is already inert. This also covers Astryx Dialog, which uses the same showModal() path.

Verification

  • apps/desktop Playwright suite: 65 passed. The attachment journey now asserts both halves of the contract — the open lightbox really overlaps the titlebar rect (so the check guards something) and it computes -webkit-app-region: no-drag. Without the CSS rule that assertion fails with none.
  • npm run lint, npm run format:check: clean.
  • Not run: OS-level hit testing cannot be exercised from Playwright, so the drag-region contract is asserted through computed style rather than a real window-manager click.

The titlebar is the app's only `-webkit-app-region: drag` surface, and
Chromium hit-tests drag regions from element rects without ever seeing the
top layer. A `showModal()` dialog therefore paints over the titlebar while
its controls inside that rect are still swallowed by the window manager.
The lightbox close button sits in the top-right corner and was only half
clickable for exactly this reason: the part of it overlapping a `no-drag`
titlebar cluster took clicks, the rest reached the OS as a window drag.
Subtract every modal dialog's own rect from the drag surface instead of
patching one button — a modal owns what it covers and the titlebar beneath
it is already inert. The attachment E2E now asserts the overlap is real and
that the open lightbox computes `no-drag`.
@Astro-Han
Astro-Han marked this pull request as ready for review August 5, 2026 06:54
@Astro-Han
Astro-Han merged commit 00206e8 into mainAug 5, 2026
12 checks passed
Sign up for freeto 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.

1 participant

@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(desktop): keep modal dialogs out of the window drag region - #2210

Merged
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region
Aug 5, 2026
Merged

fix(desktop): keep modal dialogs out of the window drag region#2210
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region

Conversation

@Astro-Han

Copy link
Copy Markdown
Contributor

Summary

Clicking the lightbox close button only worked on its left half: the button sits in the window's top-right corner, inside .maka-window-titlebar, the app's only -webkit-app-region: drag surface. Chromium builds drag regions from element rects and that pass never sees the top layer, so a showModal() dialog paints over the titlebar while its controls inside the titlebar rect still reach the OS as window drags. The half that did respond was the part overlapping a no-drag titlebar cluster's rect.

The fix subtracts every modal dialog's own rect from the drag surface (dialog:modal { -webkit-app-region: no-drag }) rather than patching one third-party button: a modal owns everything it covers, and the titlebar beneath it is already inert. This also covers Astryx Dialog, which uses the same showModal() path.

Verification

  • apps/desktop Playwright suite: 65 passed. The attachment journey now asserts both halves of the contract — the open lightbox really overlaps the titlebar rect (so the check guards something) and it computes -webkit-app-region: no-drag. Without the CSS rule that assertion fails with none.
  • npm run lint, npm run format:check: clean.
  • Not run: OS-level hit testing cannot be exercised from Playwright, so the drag-region contract is asserted through computed style rather than a real window-manager click.

The titlebar is the app's only `-webkit-app-region: drag` surface, and
Chromium hit-tests drag regions from element rects without ever seeing the
top layer. A `showModal()` dialog therefore paints over the titlebar while
its controls inside that rect are still swallowed by the window manager.
The lightbox close button sits in the top-right corner and was only half
clickable for exactly this reason: the part of it overlapping a `no-drag`
titlebar cluster took clicks, the rest reached the OS as a window drag.
Subtract every modal dialog's own rect from the drag surface instead of
patching one button — a modal owns what it covers and the titlebar beneath
it is already inert. The attachment E2E now asserts the overlap is real and
that the open lightbox computes `no-drag`.
@Astro-Han
Astro-Han marked this pull request as ready for review August 5, 2026 06:54
@Astro-Han
Astro-Han merged commit 00206e8 into mainAug 5, 2026
12 checks passed
Sign up for freeto 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.

1 participant

@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(desktop): keep modal dialogs out of the window drag region - #2210

Merged
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region
Aug 5, 2026
Merged

fix(desktop): keep modal dialogs out of the window drag region#2210
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region

Conversation

@Astro-Han

Copy link
Copy Markdown
Contributor

Summary

Clicking the lightbox close button only worked on its left half: the button sits in the window's top-right corner, inside .maka-window-titlebar, the app's only -webkit-app-region: drag surface. Chromium builds drag regions from element rects and that pass never sees the top layer, so a showModal() dialog paints over the titlebar while its controls inside the titlebar rect still reach the OS as window drags. The half that did respond was the part overlapping a no-drag titlebar cluster's rect.

The fix subtracts every modal dialog's own rect from the drag surface (dialog:modal { -webkit-app-region: no-drag }) rather than patching one third-party button: a modal owns everything it covers, and the titlebar beneath it is already inert. This also covers Astryx Dialog, which uses the same showModal() path.

Verification

  • apps/desktop Playwright suite: 65 passed. The attachment journey now asserts both halves of the contract — the open lightbox really overlaps the titlebar rect (so the check guards something) and it computes -webkit-app-region: no-drag. Without the CSS rule that assertion fails with none.
  • npm run lint, npm run format:check: clean.
  • Not run: OS-level hit testing cannot be exercised from Playwright, so the drag-region contract is asserted through computed style rather than a real window-manager click.

The titlebar is the app's only `-webkit-app-region: drag` surface, and
Chromium hit-tests drag regions from element rects without ever seeing the
top layer. A `showModal()` dialog therefore paints over the titlebar while
its controls inside that rect are still swallowed by the window manager.
The lightbox close button sits in the top-right corner and was only half
clickable for exactly this reason: the part of it overlapping a `no-drag`
titlebar cluster took clicks, the rest reached the OS as a window drag.
Subtract every modal dialog's own rect from the drag surface instead of
patching one button — a modal owns what it covers and the titlebar beneath
it is already inert. The attachment E2E now asserts the overlap is real and
that the open lightbox computes `no-drag`.
@Astro-Han
Astro-Han marked this pull request as ready for review August 5, 2026 06:54
@Astro-Han
Astro-Han merged commit 00206e8 into mainAug 5, 2026
12 checks passed
Sign up for freeto 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.

1 participant

@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(desktop): keep modal dialogs out of the window drag region - #2210

Merged
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region
Aug 5, 2026
Merged

fix(desktop): keep modal dialogs out of the window drag region#2210
Astro-Han merged 2 commits into
mainfrom
fix/desktop-lightbox-close-drag-region

Conversation

@Astro-Han

Copy link
Copy Markdown
Contributor

Summary

Clicking the lightbox close button only worked on its left half: the button sits in the window's top-right corner, inside .maka-window-titlebar, the app's only -webkit-app-region: drag surface. Chromium builds drag regions from element rects and that pass never sees the top layer, so a showModal() dialog paints over the titlebar while its controls inside the titlebar rect still reach the OS as window drags. The half that did respond was the part overlapping a no-drag titlebar cluster's rect.

The fix subtracts every modal dialog's own rect from the drag surface (dialog:modal { -webkit-app-region: no-drag }) rather than patching one third-party button: a modal owns everything it covers, and the titlebar beneath it is already inert. This also covers Astryx Dialog, which uses the same showModal() path.

Verification

  • apps/desktop Playwright suite: 65 passed. The attachment journey now asserts both halves of the contract — the open lightbox really overlaps the titlebar rect (so the check guards something) and it computes -webkit-app-region: no-drag. Without the CSS rule that assertion fails with none.
  • npm run lint, npm run format:check: clean.
  • Not run: OS-level hit testing cannot be exercised from Playwright, so the drag-region contract is asserted through computed style rather than a real window-manager click.

The titlebar is the app's only `-webkit-app-region: drag` surface, and
Chromium hit-tests drag regions from element rects without ever seeing the
top layer. A `showModal()` dialog therefore paints over the titlebar while
its controls inside that rect are still swallowed by the window manager.
The lightbox close button sits in the top-right corner and was only half
clickable for exactly this reason: the part of it overlapping a `no-drag`
titlebar cluster took clicks, the rest reached the OS as a window drag.
Subtract every modal dialog's own rect from the drag surface instead of
patching one button — a modal owns what it covers and the titlebar beneath
it is already inert. The attachment E2E now asserts the overlap is real and
that the open lightbox computes `no-drag`.
@Astro-Han
Astro-Han marked this pull request as ready for review August 5, 2026 06:54
@Astro-Han
Astro-Han merged commit 00206e8 into mainAug 5, 2026
12 checks passed
Sign up for freeto 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.

1 participant

@Astro-Han