Repository navigation
Conversation
|
Status: The matching Panel hunk (same as in the PR description): - readonly property var svc: bar && bar.shell ? bar.shell.serviceFor("whoiscalebbrown.mic-effects") : null
+ readonly property var hostedSvc: bar && bar.shell && typeof bar.shell.serviceFor === "function"
+ ? bar.shell.serviceFor("whoiscalebbrown.mic-effects") : null
+ readonly property var svc: hostedSvc || bridge
+ DaemonBridge {
+ id: bridge
+ bridgeActive: !root.hostedSvc
+ }I will push that commit onto |
Third-party bars such as Islands receive a service-less shell facade, so bar.shell.serviceFor() is always null and the rack stuck on STARTING even though the keepLoaded Service and daemon are running. Prefer the hosted service when present; otherwise talk to ctl.sock through DaemonBridge. Workaround for omacom/omarchy#13289 until the host can inject own-service into bar-entry widgets without widening the bar's security boundary.
|
Correction: a botched Contents API upload briefly replaced Current intended tip (local, ready to force-push once credentials allow):
Until that force-push lands, do not merge — - readonly property var svc: bar && bar.shell ? bar.shell.serviceFor("whoiscalebbrown.mic-effects") : null
+ readonly property var hostedSvc: bar && bar.shell && typeof bar.shell.serviceFor === "function"
+ ? bar.shell.serviceFor("whoiscalebbrown.mic-effects") : null
+ readonly property var svc: hostedSvc || bridge
+ DaemonBridge {
+ id: bridge
+ bridgeActive: !root.hostedSvc
+ }I will replace the bad tip shortly. |
|
Closing this PR — the branch tip was corrupted while uploading the large The proposal is written up cleanly in #11, with the |
Summary
On Omarchy, a third-party bar (Islands,
omarchy plugin clone omarchy.bar, …) gets a service-less entry facade.bar.shell.serviceFor("whoiscalebbrown.mic-effects")is alwaysnull, so the rack stays on STARTING even though the keepLoadedServiceandmic-effects-serverare running andMicrophone Effectsexists in PipeWire.This is omacom/omarchy#13289 (same root cause as Islands #1). The durable fix belongs in Omarchy (inject own-service into the widget without handing raw services to the bar). Until that lands, this plugin can keep working by talking to
ctl.sockdirectly whenserviceForis unavailable.Approach
plugin/DaemonBridge.qml: socket client mirroring the panel-facing API ofService.qml(no install/lifecycle ownership — the keepLoaded service still owns that; the bridge only reconnects / nudgesmic-effects-server runif the socket is down).plugin/Panel.qml: preferhostedSvc = serviceFor(...), else fall back to the bridge.Stock bar path is unchanged (
hostedSvcwins, bridge stays inactive).Panel.qml hunk (included in this PR once the second commit is pushed; also pasted here for review)
Test plan
Service(bridge inactive)Microphone Effectspresent in PipeWireHappy to adjust naming/structure if you would rather wait purely on Omarchy, or fold the socket client differently.