Repository navigation
Replies: 1 comment
进展:应用内实测把根因从「窗口层」改判为「页面层」在原帖基础上补一组从真实窗口内部读到的证据。结论要修正我自己原帖里的首要怀疑方向:原生窗口完全正常,问题出在页面的 no-drag 覆盖。 实测数据DSH Desktop drag 行存在,但它的像素被挖掉了按项目自己的合成模型(
html[data-platform='darwin'] :is(
button, a, input, select, textarea, summary, [contenteditable='true'], [tabindex],
[role='dialog'], … , [role='textbox']
) { -webkit-app-region: no-drag; }决定性对照:原生窗口层是好的往 结论修正
建议
|
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
[Bug][Desktop][macOS] 窗口完全无法拖动:连标记了 data-window-drag 的 chrome 行也拖不动
环境
0.2.0-rc.2(CFBundleVersion0.2.0-rc.2)44.0.027.0.1(26A434),Apple Silicon现象
窗口无法用鼠标拖到任何位置:在窗口内按下并拖动,窗口几乎不动(极限情况下只位移 1px),既不能换位置也不能拖到另一块屏幕。
本条与 #7937 的第 3 条同源,但实测比那条更严重。#7937 的描述是「只有少数几行 chrome 标了拖拽(侧栏 topStrip / logoRow、会话 header 等),最顶部约 48px 那条空白带没标,所以用户凭直觉拖那里拖不动」;在本机 0.2.0-rc.2 上,连这些已经标记了
data-window-drag的行也拖不动。实测(同一台机器、同一注入方式,起点为窗口内 CSS px)
data-window-drag行内)data-window-drag行内)对照与排除项:
BrowserWindow.setBounds程序化移动同一窗口:成功 —— 窗口没有被禁止移动(不是movable: false)。代码定位
macOS 窗口本来就没有原生标题栏:
apps/desktop/src/main.ts在 darwin 分支用titleBarStyle: 'hiddenInset'+trafficLightPosition+vibrancy: 'sidebar'。于是窗口拖动只能来自页面里的
-webkit-app-region盒子。全树唯一的 darwin drag 规则在
packages/client/web/src/base.css:[data-window-drag]只出现在ui-theme门禁清单CHROME_ROWS列出的那几行:ui-sidebar 的 topStrip / logoRow、ui-conversation 的 header、ui-dockkit 的 tabStrip、插件页的 pageHead / detailTop、PlatformOverlay 的 header、OnboardingSurface 的 dragBand。no-drag 侧有三处:body 上的
data-window-drag-recall、body > :not(#root)、以及 interactive 选择器:is(button, a, …, [tabindex], [role=…])。packages/client/web/src/window-drag/recall.ts在 chrome 行几何变化时把data-window-drag-recall设到 body 上(设计意图是借一次 computed app-region 值变化让 Electron 重新收集拖拽矩形,electron#32341)。合成规则核对(三条都指向「设计本身是自洽的」)
ui/gfx/draggable_region.h:drag 矩形相加、no-drag 矩形相减,按列表顺序、后面的胜出 —— 与packages/client/web/src/window-drag/regions.ts里写的模型一致,所以 body 上的 recall 盒子(DOM 顺序早于#root内的行标记)理论上不会抹掉行标记。drag盖住no-drag的行为开始生效。shell/browser/api/electron_api_web_contents.cc:无条件调用SetSupportsDraggableRegions(true)(Draggable regions in subframes/child windows not respected electron/electron#49256),所以不是「这种窗口类型没启用拖拽区收集」。也就是说:按代码和合成规则推演,这些行应该是可拖的;但实测不可拖。 这一点是本帖要报的核心。
建议的下一步
用官方调试开关启动桌面端,看 Electron 实际认到哪些拖拽区域:
ELECTRON_DEBUG_DRAGGABLE_REGIONS=1 "/Applications/DeepSeek Harness.app/Contents/MacOS/DeepSeek Harness"画出来为空 → 问题在「页面 → 原生」的收集环节;画出来了但拖动仍无效 → 问题在窗口层(
hiddenInset+vibrancy的组合)。在窗口 DevTools(
webPreferences.devTools: true,但本机 ⌘⌥I 未打开,可能被快捷键系统截获)里跑:最后一条用来排除「有常驻的、覆盖全窗口的 body 直接子元素把整个拖拽面减掉」(
body > :not(#root)规则会把它变成 no-drag)。临时规避
在拖拽恢复之前,可以在 DevTools Console 里插一条临时拖拽带:
内联
app-region优先于 ui-web 的body > :not(#root)规则;刷新或重启后失效。All reactions