import QtQuick import Quickshell.Io // Base item for plugin popup widgets. Many first-party plugins expose a bar // button plus a popup from one QML entry point; this base owns the shared // IPC-backed open/close lifecycle while implementations own button behavior, // keyboard navigation, and content. Item { id: root property QtObject bar: null property string moduleName: "" property var settings: ({}) property string ipcTarget: "" property bool manageIpc: true property alias controller: panelController property bool popoutSwitching: false property bool popoutSwitchClosing: false readonly property bool opened: panelController.open function open() { panelController.show() } function close() { panelController.hide() } function closeForPopoutSwitch() { popoutSwitchClosing = true close() Qt.callLater(function() { popoutSwitchClosing = false }) } function toggle() { opened ? close() : open() } // Read a single value from this panel's inline shell.json entry, with a // fallback for missing/null values. Matches BarWidget.setting(). function setting(name, fallback) { var value = settings ? settings[name] : undefined return value === undefined || value === null ? fallback : value } PanelController { id: panelController } property IpcHandler _ipc: manageIpc ? ipcComponent.createObject(root) : null property Component ipcComponent: Component { IpcHandler { target: root.ipcTarget function open(): void { root.open() } function close(): void { root.close() } function show(): void { root.open() } function hide(): void { root.close() } function toggle(): void { root.toggle() } } } }