diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 12b8e2a98..eb1b9e869 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -1920,7 +1920,14 @@ QHash KFileItemModel::retrieveData(const KFileItem &item, } if (m_requestRole[NameRole]) { - data.insert(sharedValue("text"), item.text()); + QString displayName = item.text(); + if (ContentDisplaySettings::hideFileExtensions() && !isDir) { + const int dotIndex = displayName.lastIndexOf(QLatin1Char('.')); + if (dotIndex > 0) { + displayName = displayName.left(dotIndex); + } + } + data.insert(sharedValue("text"), displayName); } if (m_requestRole[ExtensionRole] && !isDir) { diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp index 6c14b89e4..e13b3a5c1 100644 --- a/src/kitemviews/kitemlistwidget.cpp +++ b/src/kitemviews/kitemlistwidget.cpp @@ -634,7 +634,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS QPainterPath path; const qreal adjustment = 0.5 * penWidth; // Use same adjustments as Breeze strokedRect uses, to snap to pixelGrid. path.addRoundedRect(selectionRectFull().adjusted(adjustment, adjustment, -adjustment, -adjustment), roundness, roundness); - QColor backgroundColor{widget->palette().color(QPalette::Accent)}; + QColor backgroundColor{widget->palette().color(QPalette::Active, QPalette::Accent)}; painter->setRenderHint(QPainter::Antialiasing); bool current = m_current && styleState & QStyle::State_Active; @@ -646,12 +646,12 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS backgroundColor.setAlphaF(1.0); } else { if (m_selected && m_hovered) { - backgroundColor.setAlphaF(0.40); + backgroundColor.setAlphaF(0.85); } else if (m_selected) { - backgroundColor.setAlphaF(0.32); + backgroundColor.setAlphaF(0.70); } else if (m_hovered) { backgroundColor = widget->palette().color(QPalette::Text); - backgroundColor.setAlphaF(0.06); + backgroundColor.setAlphaF(0.12); } } @@ -659,7 +659,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS // Focus decoration if (current) { - QColor focusColor{widget->palette().color(QPalette::Accent)}; + QColor focusColor{widget->palette().color(QPalette::Active, QPalette::Accent)}; focusColor = m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? focusColor.darker(110) : focusColor.lighter(110); focusColor.setAlphaF(m_selected || m_hovered ? 1.0 : 0.8); // Set the pen color lighter or darker depending on background color diff --git a/src/kitemviews/private/kpixmapmodifier.cpp b/src/kitemviews/private/kpixmapmodifier.cpp index bf316b880..96aea26d4 100644 --- a/src/kitemviews/private/kpixmapmodifier.cpp +++ b/src/kitemviews/private/kpixmapmodifier.cpp @@ -15,6 +15,8 @@ #include "kpixmapmodifier.h" +#include "dolphin_iconsmodesettings.h" + #include #include #include @@ -281,7 +283,10 @@ void KPixmapModifier::scale(QPixmap &pixmap, const QSize &scaledSize) return; } qreal dpr = pixmap.devicePixelRatio(); - pixmap = pixmap.scaled(scaledSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); + const Qt::TransformationMode mode = IconsModeSettings::usePixelatedScaling() + ? Qt::FastTransformation + : Qt::SmoothTransformation; + pixmap = pixmap.scaled(scaledSize, Qt::KeepAspectRatio, mode); pixmap.setDevicePixelRatio(dpr); } diff --git a/src/settings/dolphin_contentdisplaysettings.kcfg b/src/settings/dolphin_contentdisplaysettings.kcfg index 6e8f8e9d5..dd10d09e8 100644 --- a/src/settings/dolphin_contentdisplaysettings.kcfg +++ b/src/settings/dolphin_contentdisplaysettings.kcfg @@ -46,5 +46,9 @@ Middle + + + false + diff --git a/src/settings/dolphin_iconsmodesettings.kcfg b/src/settings/dolphin_iconsmodesettings.kcfg index 7948af75d..d4e3ca8d5 100644 --- a/src/settings/dolphin_iconsmodesettings.kcfg +++ b/src/settings/dolphin_iconsmodesettings.kcfg @@ -31,5 +31,9 @@ 3 + + + false + diff --git a/src/settings/viewmodes/contentdisplaytab.cpp b/src/settings/viewmodes/contentdisplaytab.cpp index 747c3ff20..7b854182e 100644 --- a/src/settings/viewmodes/contentdisplaytab.cpp +++ b/src/settings/viewmodes/contentdisplaytab.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -31,6 +32,7 @@ ContentDisplayTab::ContentDisplayTab(QWidget *parent) , m_useCombinedPermissions(nullptr) , m_elideMiddle(nullptr) , m_elideEnding(nullptr) + , m_hideFileExtensions(nullptr) { QFormLayout *topLayout = new QFormLayout(this); topLayout->setFormAlignment(Qt::AlignHCenter); @@ -114,6 +116,9 @@ ContentDisplayTab::ContentDisplayTab(QWidget *parent) elidingModeGroup->addButton(m_elideMiddle); elidingModeGroup->addButton(m_elideEnding); + m_hideFileExtensions = new QCheckBox(i18nc("@option:check", "Hide file name extensions")); + topLayout->addRow(QString(), m_hideFileExtensions); + #ifndef Q_OS_WIN connect(m_recursiveDirectorySizeLimit, &QSpinBox::valueChanged, this, &SettingsPageBase::changed); connect(m_numberOfItems, &QRadioButton::toggled, this, &SettingsPageBase::changed); @@ -133,6 +138,7 @@ ContentDisplayTab::ContentDisplayTab(QWidget *parent) connect(m_caseSensitiveSorting, &QRadioButton::toggled, this, &SettingsPageBase::changed); connect(m_elideMiddle, &QRadioButton::toggled, this, &SettingsPageBase::changed); connect(m_elideEnding, &QRadioButton::toggled, this, &SettingsPageBase::changed); + connect(m_hideFileExtensions, &QCheckBox::toggled, this, &SettingsPageBase::changed); loadSettings(); } @@ -166,6 +172,7 @@ void ContentDisplayTab::applySettings() } else if (m_elideEnding->isChecked()) { settings->setElidingMode(ContentDisplaySettings::ElidingMode::Right); } + settings->setHideFileExtensions(m_hideFileExtensions->isChecked()); settings->save(); GeneralSettings::self()->save(); @@ -188,6 +195,7 @@ void ContentDisplayTab::loadSettings() loadSortingChoiceSettings(); m_elideMiddle->setChecked(settings->elidingMode() == ContentDisplaySettings::ElidingMode::Middle); m_elideEnding->setChecked(settings->elidingMode() == ContentDisplaySettings::ElidingMode::Right); + m_hideFileExtensions->setChecked(settings->hideFileExtensions()); } void ContentDisplayTab::setSortingChoiceValue() diff --git a/src/settings/viewmodes/contentdisplaytab.h b/src/settings/viewmodes/contentdisplaytab.h index 2bae5a87c..6d673b0f6 100644 --- a/src/settings/viewmodes/contentdisplaytab.h +++ b/src/settings/viewmodes/contentdisplaytab.h @@ -10,6 +10,7 @@ #include "dolphin_generalsettings.h" #include "settings/settingspagebase.h" +class QCheckBox; class QRadioButton; class QSpinBox; @@ -45,6 +46,7 @@ private: QRadioButton *m_useCombinedPermissions; QRadioButton *m_elideMiddle; QRadioButton *m_elideEnding; + QCheckBox *m_hideFileExtensions; }; #endif // GENERALTAB_H diff --git a/src/settings/viewmodes/viewsettingstab.cpp b/src/settings/viewmodes/viewsettingstab.cpp index 3593f23dd..12a8c11cb 100644 --- a/src/settings/viewmodes/viewsettingstab.cpp +++ b/src/settings/viewmodes/viewsettingstab.cpp @@ -37,6 +37,7 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget *parent) , m_widthBox(nullptr) , m_maxLinesBox(nullptr) , m_expandableFolders(nullptr) + , m_pixelatedScaling(nullptr) { QFormLayout *topLayout = new QFormLayout(this); topLayout->setFormAlignment(Qt::AlignHCenter); @@ -93,6 +94,9 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget *parent) m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "4")); m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "5")); topLayout->addRow(i18nc("@label:listbox", "Maximum lines:"), m_maxLinesBox); + + m_pixelatedScaling = new QCheckBox(i18nc("@option:check", "Use pixelated thumbnail scaling")); + topLayout->addRow(QString(), m_pixelatedScaling); break; } case CompactMode: { @@ -135,6 +139,7 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget *parent) case IconsMode: connect(m_widthBox, &QComboBox::currentIndexChanged, this, &ViewSettingsTab::changed); connect(m_maxLinesBox, &QComboBox::currentIndexChanged, this, &ViewSettingsTab::changed); + connect(m_pixelatedScaling, &QCheckBox::toggled, this, &ViewSettingsTab::changed); break; case CompactMode: connect(m_widthBox, &QComboBox::currentIndexChanged, this, &ViewSettingsTab::changed); @@ -173,6 +178,7 @@ void ViewSettingsTab::applySettings() case IconsMode: IconsModeSettings::setTextWidthIndex(m_widthBox->currentIndex()); IconsModeSettings::setMaximumTextLines(m_maxLinesBox->currentIndex()); + IconsModeSettings::setUsePixelatedScaling(m_pixelatedScaling->isChecked()); IconsModeSettings::self()->save(); break; case CompactMode: @@ -235,6 +241,7 @@ void ViewSettingsTab::loadSettings() case IconsMode: m_widthBox->setCurrentIndex(IconsModeSettings::textWidthIndex()); m_maxLinesBox->setCurrentIndex(IconsModeSettings::maximumTextLines()); + m_pixelatedScaling->setChecked(IconsModeSettings::usePixelatedScaling()); break; case CompactMode: m_widthBox->setCurrentIndex(CompactModeSettings::maximumTextWidthIndex()); diff --git a/src/settings/viewmodes/viewsettingstab.h b/src/settings/viewmodes/viewsettingstab.h index 6ea7a3bf3..2f2e75180 100644 --- a/src/settings/viewmodes/viewsettingstab.h +++ b/src/settings/viewmodes/viewsettingstab.h @@ -55,6 +55,7 @@ private: QRadioButton *m_iconAndNameOnly; QCheckBox *m_expandableFolders; QLabel *m_fontWarningLabel; + QCheckBox *m_pixelatedScaling; }; #endif \ No newline at end of file