diff --git a/panels/dock/tray/SurfacePopup.qml b/panels/dock/tray/SurfacePopup.qml index 1cdf1f581..7832eb8b1 100644 --- a/panels/dock/tray/SurfacePopup.qml +++ b/panels/dock/tray/SurfacePopup.qml @@ -72,8 +72,18 @@ Item { menu.close() } } + + onMenuVisibleChanged: { + if (menuVisible) { + subMenuLoader.active = true + } else { + subMenuLoaderDelayTimer.start() + } + } + Loader { - active: menu.menuVisible + id: subMenuLoader + active: false sourceComponent: SurfaceSubPopup { objectName: "stashed's subPopup" transientParent: menuWindow @@ -83,6 +93,17 @@ Item { return true } } + + // Avoid protocol errors caused by d + Timer { + id: subMenuLoaderDelayTimer + interval: 1000 + repeat: false + running: false + onTriggered: function () { + subMenuLoader.active = false + } + } } } diff --git a/panels/dock/tray/TrayItemSurfacePopup.qml b/panels/dock/tray/TrayItemSurfacePopup.qml index 6bcd8b19e..781b7b0a6 100644 --- a/panels/dock/tray/TrayItemSurfacePopup.qml +++ b/panels/dock/tray/TrayItemSurfacePopup.qml @@ -55,6 +55,14 @@ Item { menuX: DockPositioner.x menuY: DockPositioner.y + onMenuVisibleChanged: { + if (menuVisible) { + subMenuLoader.active = true + } else { + subMenuLoaderDelayTimer.start() + } + } + Item { anchors.fill: parent ShellSurfaceItemProxy { @@ -65,8 +73,20 @@ Item { popupMenu.close() } } + + // Avoid protocol errors caused by frequent creation and destruction of WaylandOutput. + Timer { + id: subMenuLoaderDelayTimer + interval: 1000 + repeat: false + running: false + onTriggered: function () { + subMenuLoader.active = false + } + } Loader { - active: popupMenu.menuVisible + id: subMenuLoader + active: false sourceComponent: SurfaceSubPopup { objectName: "tray's subPopup" transientParent: popupMenu.menuWindow