From 18066426b49b0bcf5bd836aaaba68300758256a6 Mon Sep 17 00:00:00 2001 From: yaozichen2025 Date: Fri, 7 Aug 2026 22:07:35 +0800 Subject: [PATCH] fix(platform): emit icon changes only for new values Resolve the icon before publishing the appId change so observers see a consistent property snapshot. Avoid redundant iconChanged emissions when different unknown app IDs both resolve to the same empty icon. --- .../autotest/test-application-icon-proxy.cpp | 10 +++++----- platform/ukui/application-icon-proxy.cpp | 17 ++++++++++++----- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/platform/autotest/test-application-icon-proxy.cpp b/platform/autotest/test-application-icon-proxy.cpp index d80013c..9f26e58 100644 --- a/platform/autotest/test-application-icon-proxy.cpp +++ b/platform/autotest/test-application-icon-proxy.cpp @@ -61,27 +61,27 @@ void application_icon_proxy_test::setAppIdUpdatesStateAndSignalsOnlyOnChange() QCOMPARE(proxy.appId(), firstAppId); QCOMPARE(proxy.icon(), QString()); QCOMPARE(appIdSpy.count(), 1); - QCOMPARE(iconSpy.count(), 1); + QCOMPARE(iconSpy.count(), 0); proxy.setAppId(firstAppId); QCOMPARE(appIdSpy.count(), 1); - QCOMPARE(iconSpy.count(), 1); + QCOMPARE(iconSpy.count(), 0); proxy.setAppId(secondAppId); QCOMPARE(proxy.appId(), secondAppId); QCOMPARE(proxy.icon(), QString()); QCOMPARE(appIdSpy.count(), 2); - QCOMPARE(iconSpy.count(), 2); + QCOMPARE(iconSpy.count(), 0); proxy.setAppId(QString()); QCOMPARE(proxy.appId(), QString()); QCOMPARE(proxy.icon(), QString()); QCOMPARE(appIdSpy.count(), 3); - QCOMPARE(iconSpy.count(), 3); + QCOMPARE(iconSpy.count(), 0); proxy.setAppId(QString()); QCOMPARE(appIdSpy.count(), 3); - QCOMPARE(iconSpy.count(), 3); + QCOMPARE(iconSpy.count(), 0); } QTEST_GUILESS_MAIN(application_icon_proxy_test) diff --git a/platform/ukui/application-icon-proxy.cpp b/platform/ukui/application-icon-proxy.cpp index 061b9d4..e61a871 100644 --- a/platform/ukui/application-icon-proxy.cpp +++ b/platform/ukui/application-icon-proxy.cpp @@ -126,10 +126,17 @@ QString ApplicationIconProxy::appId() const void ApplicationIconProxy::setAppId(const QString &appId) { - if (d->appId != appId) { - d->appId = appId; - Q_EMIT appIdChanged(); - d->icon = ApplicationIconConfig::instance()->getIcon(appId); + if (d->appId == appId) { + return; + } + + const QString icon = ApplicationIconConfig::instance()->getIcon(appId); + const bool iconChanged = d->icon != icon; + d->appId = appId; + d->icon = icon; + + Q_EMIT appIdChanged(); + if (iconChanged) { Q_EMIT iconChanged(); } } @@ -139,4 +146,4 @@ QString ApplicationIconProxy::icon() const return d->icon; } } -#include "application-icon-proxy.moc" \ No newline at end of file +#include "application-icon-proxy.moc" -- Gitee