┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore10
-rw-r--r--PKGBUILD13
-rw-r--r--pixelated-scaling-and-hide-extensions.patch206
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
diff --git a/PKGBUILD b/PKGBUILD
index ba08e40..1b0273a 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -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