From a04836809b7a2782a23b4aa7d0b3db1eb09c6dd4 Mon Sep 17 00:00:00 2001 From: hotime Date: Thu, 13 Aug 2026 14:44:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20SNI=20=E6=87=92?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=89=98=E7=9B=98=E5=9B=BE=E6=A0=87=E5=8F=B3?= =?UTF-8?q?=E9=94=AE=E8=8F=9C=E5=8D=95=E6=97=A0=E6=B3=95=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 部分 SNI 应用(如 Snipaste)的 DBusMenu 菜单采用懒加载:右键菜单先以空状态(无菜单项、surface 极小/空白)创建并显示,AboutToShow 调用返回后内容才异步到达、surface 尺寸随之变化,但弹窗不会重新布局/绘制,内容始终无法显示。 修复:在 TrayItemSurfacePopup(常规托盘区)、SurfacePopup(stashed收纳托盘区)和 SurfaceSubPopup(子菜单)中监听菜单 surface 的宽高变化,内容异步到达、尺寸变化时重新请求几何更新,使弹窗按新内容重新布局与绘制。 本修复需配合 dde-tray-loader 的对应修复(右击托盘图标时主动触发 DBus AboutToShow 拉取懒加载菜单内容),确保菜单内容能被拉取到。 --- panels/dock/tray/SurfacePopup.qml | 12 ++++++++++++ panels/dock/tray/SurfaceSubPopup.qml | 12 ++++++++++++ panels/dock/tray/TrayItemSurfacePopup.qml | 12 ++++++++++++ 3 files changed, 36 insertions(+) diff --git a/panels/dock/tray/SurfacePopup.qml b/panels/dock/tray/SurfacePopup.qml index c3a0027b2..a5aab015d 100644 --- a/panels/dock/tray/SurfacePopup.qml +++ b/panels/dock/tray/SurfacePopup.qml @@ -104,6 +104,18 @@ Item { sizeFollowsWindow: false } + // 监听菜单 surface 尺寸变化,内容异步到达后重新请求几何更新。 + Connections { + target: menuSurfaceLayer + enabled: menu.readyBinding && menu.menuVisible + function onWidthChanged() { + menu.menuWindow.requestUpdateGeometry() + } + function onHeightChanged() { + menu.menuWindow.requestUpdateGeometry() + } + } + Connections { target: DockCompositor function onPopupCreated(popupSurface) { diff --git a/panels/dock/tray/SurfaceSubPopup.qml b/panels/dock/tray/SurfaceSubPopup.qml index 6f5b5bb7d..f76cb928c 100644 --- a/panels/dock/tray/SurfaceSubPopup.qml +++ b/panels/dock/tray/SurfaceSubPopup.qml @@ -65,6 +65,18 @@ Item { } } + // 监听子菜单 surface 尺寸变化,内容异步到达后重新请求几何更新。 + Connections { + target: popupSurfaceLayer + enabled: popup.readyBinding && popup.menuVisible + function onWidthChanged() { + popup.menuWindow.requestUpdateGeometry() + } + function onHeightChanged() { + popup.menuWindow.requestUpdateGeometry() + } + } + Connections { target: DockCompositor function onPopupCreated(popupSurface) { diff --git a/panels/dock/tray/TrayItemSurfacePopup.qml b/panels/dock/tray/TrayItemSurfacePopup.qml index c3cfbcdc2..63504b6c4 100644 --- a/panels/dock/tray/TrayItemSurfacePopup.qml +++ b/panels/dock/tray/TrayItemSurfacePopup.qml @@ -109,6 +109,18 @@ Item { popupMenu.shellSurface.updatePluginGeometry(Qt.rect(popupMenu.menuWindow.x, popupMenu.menuWindow.y, 0, 0)) } } + + // 监听菜单 surface 尺寸变化,内容异步到达后重新请求几何更新。 + Connections { + target: popupMenuContent + enabled: popupMenu.readyBinding && popupMenu.menuVisible + function onWidthChanged() { + popupMenu.menuWindow.requestUpdateGeometry() + } + function onHeightChanged() { + popupMenu.menuWindow.requestUpdateGeometry() + } + } } }