status bar
git clone https://git.lucas.co/cce-status-interface.git
fix: the status bar waits for the next compositor instead of exiting
It is a systemd user service the compositor does not restore. Rebuilt
against cce-ui 2724002, its modules exited at every logout; the
launcher's backoff grew while nobody was logged in, so the tray module,
which owns the StatusNotifierWatcher, came back seconds after the next
login and Dropbox, starting into the gap, reported no tray. It now opts
into cce-ui's outlives_compositor and rejoins the successor in-process,
the watcher staying on the bus throughout.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
src/main.rs | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/src/main.rs b/src/main.rs
index 5aad13b..e88968e 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1451,6 +1451,15 @@ pub(crate) fn draw_label(prims: &mut Vec<TextPrim>, label: cce_ui::widget::Style
impl cce_ui::engine::Application for StatusApp {
type Message = CustomEvent;
+ /// The status bar is a systemd user service the compositor does not
+ /// restore, so it waits for the next compositor instead of exiting with
+ /// this one. Exiting took the tray module's StatusNotifierWatcher off the
+ /// bus at every logout, and Dropbox, starting into the gap before the
+ /// launcher's backoff restarted the module, found no tray.
+ fn outlives_compositor(&self) -> bool {
+ true
+ }
+
fn new(_qh: &wayland_client::QueueHandle<cce_ui::engine::EngineState<Self>>, sender: calloop::channel::Sender<Self::Message>) -> Self {
let selected_module = parse_selected_module_from_args();