From 1ab5634d9ea8226335fdf98274c392809be7984f Mon Sep 17 00:00:00 2001 From: Ly-sec Date: Thu, 7 May 2026 21:08:18 +0200 Subject: [PATCH] config(service): defer initial parse error notification to first main loop tick for reliable startup display --- src/config/config_service.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/config/config_service.cpp b/src/config/config_service.cpp index ad5e02c3c..9eba0ec8b 100644 --- a/src/config/config_service.cpp +++ b/src/config/config_service.cpp @@ -1,6 +1,7 @@ #include "config/config_service.h" #include "core/build_info.h" +#include "core/deferred_call.h" #include "core/log.h" #include "ipc/ipc_service.h" #include "notification/notification_manager.h" @@ -314,9 +315,19 @@ void ConfigService::addReloadCallback(ReloadCallback callback) { m_reloadCallbac void ConfigService::setNotificationManager(NotificationManager* manager) { m_notificationManager = manager; if (m_notificationManager != nullptr && !m_pendingError.empty()) { - m_configErrorNotificationId = - m_notificationManager->addInternal("Noctalia", "Config parse error", m_pendingError, Urgency::Critical, 0); + const std::string pendingError = std::move(m_pendingError); m_pendingError.clear(); + DeferredCall::callLater([this, pendingError]() { + if (m_notificationManager == nullptr) { + m_pendingError = pendingError; + return; + } + if (m_configErrorNotificationId != 0) { + m_notificationManager->close(m_configErrorNotificationId); + } + m_configErrorNotificationId = + m_notificationManager->addInternal("Noctalia", "Config parse error", pendingError, Urgency::Critical, 0); + }); } }