diff options
| -rw-r--r-- | .gitignore | 10 | ||||
| -rw-r--r-- | PKGBUILD | 13 | ||||
| -rw-r--r-- | pixelated-scaling-and-hide-extensions.patch | 206 |
3 files changed, 226 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c3d1b4f --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +# makepkg build/output dirs +src/ +pkg/ + +# downloaded source tarballs and signatures +*.tar.xz +*.tar.xz.sig + +# built packages +*.pkg.tar.zst @@ -4,7 +4,7 @@ # Contributor: Pierre Schmitz <[email protected]> pkgname=dolphin -pkgver=25.12.1 +pkgver=26.04.0 pkgrel=1 pkgdesc='KDE File Manager' arch=(x86_64) @@ -58,13 +58,20 @@ optdepends=('dolphin-plugins: extra plugins' 'purpose: share context menu') groups=(kde-applications kde-system) -source=(https://download.kde.org/stable/release-service/$pkgver/src/$pkgname-$pkgver.tar.xz{,.sig}) -sha256sums=('86315327422175a483e3efc61f7e7fff954d4f760efdcfff5f8713a3d10db664' +source=(https://download.kde.org/stable/release-service/$pkgver/src/$pkgname-$pkgver.tar.xz{,.sig} + pixelated-scaling-and-hide-extensions.patch) +sha256sums=('5c5e5024835fddbcd9dfaa9c16ab2bcff2475645b0e28d1b269de42e412ec543' + 'SKIP' 'SKIP') validpgpkeys=(CA262C6C83DE4D2FB28A332A3A6A4DB839EAA6D7 # Albert Astals Cid <[email protected]> F23275E4BF10AFC1DF6914A6DBD2CE893E2D1C87 # Christoph Feck <[email protected]> D81C0CB38EB725EF6691C385BB463350D6EF31EF) # Heiko Becker <[email protected]> +prepare() { + cd $pkgname-$pkgver + patch -Np1 -i "$srcdir/pixelated-scaling-and-hide-extensions.patch" +} + build() { cmake -B build -S $pkgname-$pkgver \ -DBUILD_TESTING=OFF diff --git a/pixelated-scaling-and-hide-extensions.patch b/pixelated-scaling-and-hide-extensions.patch new file mode 100644 index 0000000..c80a59f --- /dev/null +++ b/pixelated-scaling-and-hide-extensions.patch @@ -0,0 +1,206 @@ +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<QByteArray, QVariant> 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/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 <QGuiApplication> + #include <QImage> + #include <QPainter> +@@ -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 @@ + </choices> + <default>Middle</default> + </entry> ++ <entry name="HideFileExtensions" type="Bool"> ++ <label>Hide file name extensions</label> ++ <default>false</default> ++ </entry> + </group> + </kcfg> +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 @@ + <label>Maximum textlines (0 means unlimited)</label> + <default>3</default> + </entry> ++ <entry name="UsePixelatedScaling" type="Bool"> ++ <label>Use nearest-neighbor scaling for icons (better for pixel art)</label> ++ <default>false</default> ++ </entry> + </group> + </kcfg> +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 <KLocalizedString> + + #include <QButtonGroup> ++#include <QCheckBox> + #include <QFormLayout> + #include <QHBoxLayout> + #include <QRadioButton> +@@ -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 |
