Merge pull request #8804 from nextcloud/bugfix/folderstatusdelegate-icon-rendering

fix(folderstatusdelegate): improve rendering of status icons on HiDPI screens
This commit is contained in:
Jyrki Gadinger 2025-09-30 16:51:24 +02:00 committed by GitHub
commit 66d9e9aac7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 7 additions and 32 deletions

View File

@ -156,8 +156,6 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
auto overallPercent = qvariant_cast<int>(index.data(SyncProgressOverallPercent));
auto overallString = qvariant_cast<QString>(index.data(SyncProgressOverallString));
auto itemString = qvariant_cast<QString>(index.data(SyncProgressItemString));
auto warningCount = qvariant_cast<int>(index.data(WarningCount));
auto syncOngoing = qvariant_cast<bool>(index.data(SyncRunning));
auto syncEnabled = qvariant_cast<bool>(index.data(FolderAccountConnected));
auto syncText = qvariant_cast<QString>(index.data(FolderSyncText));
@ -190,27 +188,14 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
localPathRect.setLeft(nextToIcon);
remotePathRect.setLeft(nextToIcon);
const auto iconSize = iconRect.width();
auto optionsButtonVisualRect = optionsButtonRect(option.rect, option.direction);
const auto statusPixmap = statusIcon.pixmap(iconSize, iconSize, syncEnabled ? QIcon::Normal : QIcon::Disabled);
painter->drawPixmap(QStyle::visualRect(option.direction, option.rect, iconRect).left(), iconRect.top(), statusPixmap);
// only show the warning icon if the sync is running. Otherwise its
// encoded in the status icon.
if (warningCount > 0 && syncOngoing) {
QRect warnRect;
warnRect.setLeft(iconRect.left());
warnRect.setTop(iconRect.bottom() - 17);
warnRect.setWidth(16);
warnRect.setHeight(16);
QIcon warnIcon(":/client/theme/warning");
const auto warnPixmap = warnIcon.pixmap(16, 16, syncEnabled ? QIcon::Normal : QIcon::Disabled);
warnRect = QStyle::visualRect(option.direction, option.rect, warnRect);
painter->drawPixmap(QPoint(warnRect.left(), warnRect.top()), warnPixmap);
}
statusIcon.paint(
painter,
QStyle::visualRect(option.direction, option.rect, iconRect),
Qt::AlignCenter,
syncEnabled ? QIcon::Normal : QIcon::Disabled
);
auto palette = option.palette;

View File

@ -33,9 +33,6 @@ public:
SyncProgressOverallPercent,
SyncProgressOverallString,
SyncProgressItemString,
WarningCount,
SyncRunning,
SyncDate,
AddButton, // 1 = enabled; 2 = disabled
FolderSyncText,

View File

@ -254,10 +254,6 @@ QVariant FolderStatusModel::data(const QModelIndex &index, int role) const
return folder->virtualFilesEnabled() && folder->vfs().mode() != Vfs::Mode::WindowsCfApi
? QStringList(tr("Virtual file support is enabled."))
: QStringList();
case FolderStatusDelegate::SyncRunning:
return folder->syncResult().status() == SyncResult::SyncRunning;
case FolderStatusDelegate::SyncDate:
return folder->syncResult().syncTime();
case FolderStatusDelegate::HeaderRole:
return folder->shortGuiRemotePathOrAppName();
case FolderStatusDelegate::FolderAliasRole:
@ -306,8 +302,6 @@ QVariant FolderStatusModel::data(const QModelIndex &index, int role) const
case FolderStatusDelegate::SyncProgressItemString:
// e.g. Syncing fileName1, filename2
return progress._progressString;
case FolderStatusDelegate::WarningCount:
return progress._warningCount;
case FolderStatusDelegate::SyncProgressOverallPercent:
return progress._overallPercent;
case FolderStatusDelegate::SyncProgressOverallString:
@ -985,8 +979,7 @@ void FolderStatusModel::slotSetProgress(const ProgressInfo &progress)
_isSyncRunningForAwhile = false;
}
const QVector<int> roles{ FolderStatusDelegate::SyncProgressItemString, FolderStatusDelegate::WarningCount,
Qt::ToolTipRole };
const QVector<int> roles{ FolderStatusDelegate::SyncProgressItemString, Qt::ToolTipRole };
if (progress.status() == ProgressInfo::Discovery) {
if (!progress._currentDiscoveredRemoteFolder.isEmpty()) {