diff --git a/frame/qml/PanelMenu.qml b/frame/qml/PanelMenu.qml index c6a06efaa..2cede622a 100644 --- a/frame/qml/PanelMenu.qml +++ b/frame/qml/PanelMenu.qml @@ -44,8 +44,14 @@ Item { function open() { + // Keep open() pure-open semantics: when already visible, do nothing + // instead of toggling closed. The redundant toggle-close here caused + // BUG-353435: during the async window between open() setting + // menu.visible=true and finalizeOpen() calling grabMouse(), a second + // right-click could reach PluginItem, trigger another open(), and hit + // this branch, closing the menu. Left-click toggle is already handled + // in the C++ layer (itemPopupApplet). See PanelPopup.open() too. if (menu.visible) { - close() return } diff --git a/frame/qml/PanelPopup.qml b/frame/qml/PanelPopup.qml index 33b132533..bc3a1ce11 100644 --- a/frame/qml/PanelPopup.qml +++ b/frame/qml/PanelPopup.qml @@ -50,8 +50,14 @@ Item { function open() { + // Keep open() pure-open semantics: when already visible, do nothing + // instead of toggling closed. The redundant toggle-close here caused + // BUG-353435: during the async window between open() setting + // popup.visible=true and finalizeOpen() showing the window, a second + // right-click could reach PluginItem, trigger another open(), and hit + // this branch, closing the popup. Left-click toggle is already handled + // in the C++ layer (itemPopupApplet). See PanelMenu.open() too. if (popup.visible) { - close() return }