import QtQuick import qs.Commons import qs.Ui BarWidget { id: root moduleName: "omarchy.weather" function injectPanel() { var target = panelLoader.item if (!target) return if ("bar" in target) target.bar = root.bar if ("settings" in target) target.settings = root.settings if ("anchorItem" in target) target.anchorItem = button if ("hostWidget" in target) target.hostWidget = root } function refresh() { if (panelLoader.item && panelLoader.item.refresh) panelLoader.item.refresh() } function togglePanel() { if (panelLoader.item && panelLoader.item.toggle) panelLoader.item.toggle() } // Shape contract for shell.summon/hide/toggle routing (Bar.findPanelWidget // requires open/close/opened on the bar-widget root). Open maps to the // panel's hotkey path so summoning suppresses the center hover reveal, // matching what the old per-plugin IpcHandler did. readonly property bool opened: panelLoader.item ? panelLoader.item.opened === true : false function open() { if (panelLoader.item && panelLoader.item.openFromHotkey) panelLoader.item.openFromHotkey() } function close() { if (panelLoader.item && panelLoader.item.close) panelLoader.item.close() } // Forwarded so this widget can stand in for the panel as the bar's popout // identity: Bar.requestPopout prefers closeForPopoutSwitch over close, and // KeyboardPanel reads popoutSwitchClosing back off its owner. readonly property bool popoutSwitchClosing: panelLoader.item ? panelLoader.item.popoutSwitchClosing === true : false function closeForPopoutSwitch() { if (panelLoader.item) panelLoader.item.closeForPopoutSwitch() } visible: panelLoader.item && panelLoader.item.label !== "" implicitWidth: button.implicitWidth implicitHeight: button.implicitHeight onBarChanged: injectPanel() onSettingsChanged: injectPanel() Loader { id: panelLoader active: true source: Qt.resolvedUrl("Panel.qml") visible: false onLoaded: { root.injectPanel() Qt.callLater(root.injectPanel) } } BarIconButton { id: button anchors.fill: parent bar: root.bar text: panelLoader.item ? panelLoader.item.label : "" slotSize: Style.bar.statusSlot // Tooltip suppressed because the panel is the detail view. tooltipText: "" onPressed: function(b) { if (!root.bar) return if (b === Qt.RightButton) root.bar.run("omarchy-notification-send \"$(omarchy-weather-status)\"") else if (b === Qt.MiddleButton) root.refresh() else root.togglePanel() } } }