@@ -103,7 +103,7 @@ void LauncherModel::setAlerting(const QString &appId, bool alerting) {
103 LauncherItem *item = m_list.at(index);
103 LauncherItem *item = m_list.at(index);
104 if (!item->focused()) {
104 if (!item->focused()) {
105 item->setAlerting(alerting);
105 item->setAlerting(alerting);
106− Q_EMIT dataChanged(modelIndex, modelIndex, QVector<int>() << RoleAlerting);
106+ Q_EMIT dataChanged(modelIndex, modelIndex, {RoleAlerting});
@@ -414,10 +414,19 @@ void LauncherModel::refresh()
415 int idx = m_list.indexOf(item);
415 int idx = m_list.indexOf(item);
416 item->setName(desktopFile.displayName());
416 item->setName(desktopFile.displayName());
417− item->setIcon(desktopFile.icon());
418 item->setPinned(item->pinned()); // update pinned text if needed
417 item->setPinned(item->pinned()); // update pinned text if needed
419 item->setRunning(item->running());
418 item->setRunning(item->running());
420− Q_EMIT dataChanged(index(idx), index(idx), {RoleName, RoleIcon, RoleRunning});
419+ Q_EMIT dataChanged(index(idx), index(idx), {RoleName, RoleRunning});
421+ const QString oldIcon = item->icon();
422+ if (oldIcon == desktopFile.icon()) { // same icon file, perhaps different contents, simulate changing the icon name to force reload
423+ item->setIcon(QString());
424+ Q_EMIT dataChanged(index(idx), index(idx), {RoleIcon});
427+ // now set the icon for real
428+ item->setIcon(desktopFile.icon());
429+ Q_EMIT dataChanged(index(idx), index(idx), {RoleIcon});
@@ -489,7 +498,7 @@ void LauncherModel::alert(const QString &appId)
489 if (idx >= 0) {
498 if (idx >= 0) {
490 LauncherItem *item = m_list.at(idx);
499 LauncherItem *item = m_list.at(idx);
491 setAlerting(item->appId(), true);
500 setAlerting(item->appId(), true);
492− Q_EMIT dataChanged(index(idx), index(idx), QVector<int>() << RoleAlerting);
501+ Q_EMIT dataChanged(index(idx), index(idx), {RoleAlerting});