diff --git a/src/filewidgets/kdiroperator.cpp b/src/filewidgets/kdiroperator.cpp --- a/src/filewidgets/kdiroperator.cpp +++ b/src/filewidgets/kdiroperator.cpp @@ -147,6 +147,7 @@ void _k_slotDirectoryCreated(const QUrl &); int iconSizeForViewType(QAbstractItemView *itemView) const; + void writeIconZoomSettings(KConfigGroup &configGroup); // private members KDirOperator * const parent; @@ -510,24 +511,44 @@ void KDirOperator::Private::_k_slotDetailedView() { + if (configGroup && itemView) { + // save old zoom settings + writeIconZoomSettings(*configGroup); + } + KFile::FileView view = static_cast((viewKind & ~allViews()) | KFile::Detail); parent->setView(view); } void KDirOperator::Private::_k_slotSimpleView() { + if (configGroup && itemView) { + // save old zoom settings + writeIconZoomSettings(*configGroup); + } + KFile::FileView view = static_cast((viewKind & ~allViews()) | KFile::Simple); parent->setView(view); } void KDirOperator::Private::_k_slotTreeView() { + if (configGroup && itemView) { + // save old zoom settings + writeIconZoomSettings(*configGroup); + } + KFile::FileView view = static_cast((viewKind & ~allViews()) | KFile::Tree); parent->setView(view); } void KDirOperator::Private::_k_slotDetailedTreeView() { + if (configGroup && itemView) { + // save old zoom settings + writeIconZoomSettings(*configGroup); + } + KFile::FileView view = static_cast((viewKind & ~allViews()) | KFile::DetailTree); parent->setView(view); } @@ -634,6 +655,11 @@ void KDirOperator::Private::_k_slotToggleIconsView() { + if (configGroup && itemView) { + // save old zoom settings + writeIconZoomSettings(*configGroup); + } + // Put the icons on top actionCollection->action(QStringLiteral("decorationAtTop"))->setChecked(true); decorationPosition = QStyleOptionViewItem::Top; @@ -645,6 +671,11 @@ void KDirOperator::Private::_k_slotToggleCompactView() { + if (configGroup && itemView) { + // save old zoom settings + writeIconZoomSettings(*configGroup); + } + // Put the icons on the side actionCollection->action(QStringLiteral("decorationAtLeft"))->setChecked(true); decorationPosition = QStyleOptionViewItem::Left; @@ -656,6 +687,11 @@ void KDirOperator::Private::_k_slotToggleDetailsView() { + if (configGroup && itemView) { + // save old zoom settings + writeIconZoomSettings(*configGroup); + } + KFile::FileView view; if (actionCollection->action(QStringLiteral("allow expansion"))->isChecked()) { view = static_cast((viewKind & ~allViews()) | KFile::DetailTree); @@ -2291,16 +2327,34 @@ if (d->inlinePreviewState == Private::NotForced) { configGroup.writeEntry(QStringLiteral("Show Inline Previews"), d->showPreviews); - if (qobject_cast(d->itemView)) { - configGroup.writeEntry(QStringLiteral("listViewIconSize"), d->iconsZoom); - } else { - configGroup.writeEntry(QStringLiteral("detailedViewIconSize"), d->iconsZoom); - } + d->writeIconZoomSettings(configGroup); } configGroup.writeEntry(QStringLiteral("Decoration position"), (int) d->decorationPosition); } +void KDirOperator::Private::writeIconZoomSettings(KConfigGroup &configGroup) { + // must match behavior of iconSizeForViewType + KFile::FileView fv = static_cast(viewKind); + + if (KFile::isSimpleView(fv)) { + if (decorationPosition == QStyleOptionViewItem::Top){ + // Simple view decoration above, aka Icons View + configGroup.writeEntry("iconViewIconSize", iconsZoom); + } else { + // Simple view decoration left, aka compact view + configGroup.writeEntry("listViewIconSize", iconsZoom); + } + } else { + if (KFile::isTreeView(fv)) { + configGroup.writeEntry(QStringLiteral("treeViewIconSize"), iconsZoom); + } else if (KFile::isDetailView(fv)) { + configGroup.writeEntry(QStringLiteral("detailViewIconSize"), iconsZoom); + } else if (KFile::isDetailTreeView(fv)) { + configGroup.writeEntry(QStringLiteral("detailTreeViewIconSize"), iconsZoom); + } + } +} void KDirOperator::resizeEvent(QResizeEvent *) { @@ -2637,15 +2691,33 @@ int KDirOperator::Private::iconSizeForViewType(QAbstractItemView *itemView) const { + // must match behavior of writeIconZoomSettings if (!itemView || !configGroup) { return 0; } - if (qobject_cast(itemView)) { - return configGroup->readEntry("listViewIconSize", 0); + KFile::FileView fv = static_cast(viewKind); + + if (KFile::isSimpleView(fv)) { + if (decorationPosition == QStyleOptionViewItem::Top){ + // Simple view decoration above, aka Icons View + // default to 43% aka 64px + return configGroup->readEntry("iconViewIconSize", 43); + } else { + // Simple view decoration left, aka compact view + return configGroup->readEntry("listViewIconSize", 0); + } } else { - return configGroup->readEntry("detailedViewIconSize", 0); + if (KFile::isTreeView(fv)) { + return configGroup->readEntry(QStringLiteral("treeViewIconSize"), 0); + } else if (KFile::isDetailView(fv)) { + return configGroup->readEntry(QStringLiteral("detailViewIconSize"), 0); + } else if (KFile::isDetailTreeView(fv)) { + return configGroup->readEntry(QStringLiteral("detailTreeViewIconSize"), 0); + } } + + return 0; } void KDirOperator::setViewConfig(KConfigGroup &configGroup)