From 3499c7beccc5bab7af3fdc6cc189e856b99ce5a2 Mon Sep 17 00:00:00 2001 From: Geyan Date: Tue, 1 Sep 2026 00:02:56 +1000 Subject: [PATCH 1/2] fix(bar): guard visualTokens null in drag ghost panel Bar.qml exposes visualTokens as null until styleReady, and every other component already guards it, but DragGhostPanel.qml didn't -- causing a TypeError during drag before the style is ready. shibumi-health's managed-plugins check also flagged the deployed copy as modified/stale because a prior hotfix patched two of the four call sites directly on the installed plugin instead of here. --- hancore.shibumi.bar/core/DragGhostPanel.qml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/hancore.shibumi.bar/core/DragGhostPanel.qml b/hancore.shibumi.bar/core/DragGhostPanel.qml index b14d495..7a3355e 100644 --- a/hancore.shibumi.bar/core/DragGhostPanel.qml +++ b/hancore.shibumi.bar/core/DragGhostPanel.qml @@ -51,7 +51,7 @@ PanelWindow { Behavior on x { enabled: root.layoutSession.returning NumberAnimation { - duration: root.bar.visualTokens.invalidDropDuration + duration: root.bar.visualTokens ? root.bar.visualTokens.invalidDropDuration : 0 easing.type: Easing.OutCubic } } @@ -59,7 +59,7 @@ PanelWindow { Behavior on y { enabled: root.layoutSession.returning NumberAnimation { - duration: root.bar.visualTokens.invalidDropDuration + duration: root.bar.visualTokens ? root.bar.visualTokens.invalidDropDuration : 0 easing.type: Easing.OutCubic } } @@ -67,7 +67,8 @@ PanelWindow { Rectangle { anchors.fill: parent anchors.margins: -Commons.Style.space(1) - radius: Math.min(height / 2, root.bar.visualTokens.pillRadius) + radius: root.bar.visualTokens + ? Math.min(height / 2, root.bar.visualTokens.pillRadius) : 0 color: root.layoutSession.targetGroupId !== "" ? Qt.rgba(root.bar.urgent.r, root.bar.urgent.g, root.bar.urgent.b, 0.2) : Qt.rgba(root.bar.foreground.r, root.bar.foreground.g, @@ -92,7 +93,7 @@ PanelWindow { } Timer { - interval: root.bar.visualTokens.returnCleanupDuration + interval: root.bar.visualTokens ? root.bar.visualTokens.returnCleanupDuration : 0 running: root.layoutSession.returning repeat: false onTriggered: { From a979a1bd147bc3e06b29275f21112e6bce3dfb2b Mon Sep 17 00:00:00 2001 From: Geyan Date: Tue, 1 Sep 2026 00:02:56 +1000 Subject: [PATCH 2/2] fix(suite): don't wait on an inactive omarchy.menu during refresh refresh_menu() retried the omarchy.menu refresh IPC call for 8s expecting "ok", but shell.qml's callIfLoaded() can only ever return "unknown" for a plugin that isn't loaded -- which omarchy.menu always is while Shibumi's own menu is active. This made shibumi-suite repair/install fail unconditionally on a Shibumi-active system. Skip the call when omarchy.menu isn't active; there's nothing to refresh. --- scripts/shibumi_suite/runtime.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/scripts/shibumi_suite/runtime.py b/scripts/shibumi_suite/runtime.py index 7d0e172..e98c01f 100644 --- a/scripts/shibumi_suite/runtime.py +++ b/scripts/shibumi_suite/runtime.py @@ -553,6 +553,16 @@ def reload_payload(self, *, timeout: float = 8) -> None: ) def refresh_menu(self, *, timeout: float = 8) -> None: + try: + plugins = self.list_plugins() + except RuntimeFailure: + plugins = {} + if not plugins.get("omarchy.menu", {}).get("active"): + # omarchy.menu is unloaded whenever Shibumi's own menu is the + # active bar/menu; callIfLoaded() then always answers "unknown" + # (shell.qml never returns anything else for an unloaded plugin), + # so there is no running instance left to refresh. + return command = [ self.command("omarchy-shell"), "shell",