┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorConway <[email protected]>2026-01-24 12:20:08 -0500
committerConway <[email protected]>2026-03-09 13:44:11 -0400
commitc8ecdb45dde6f850a8eaefc661528dd2d43677a3 (patch)
treeb273fe0608967380cc09eb3cc0a371daf93cb176 /src
parent4a7be9f25332942b071e7a1659a7aed67236cfb8 (diff)
Adds options for pixel scaling and filename extensionspixelated-scaling-option
Diffstat (limited to 'src')
-rw-r--r--src/kitemviews/kfileitemmodel.cpp58
-rw-r--r--src/kitemviews/private/kpixmapmodifier.cpp7
-rw-r--r--src/settings/dolphin_contentdisplaysettings.kcfg4
-rw-r--r--src/settings/dolphin_iconsmodesettings.kcfg4
-rw-r--r--src/settings/viewmodes/contentdisplaytab.cpp8
-rw-r--r--src/settings/viewmodes/contentdisplaytab.h2
-rw-r--r--src/settings/viewmodes/viewsettingstab.cpp42
-rw-r--r--src/settings/viewmodes/viewsettingstab.h6
8 files changed, 51 insertions, 80 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp
index c8bac0b9d..1824fa8e8 100644
--- a/src/kitemviews/kfileitemmodel.cpp
+++ b/src/kitemviews/kfileitemmodel.cpp
@@ -15,7 +15,6 @@
#include "views/draganddrophelper.h"
#include <KDirLister>
-#include <KFileMetaData/UserMetaData>
#include <KIO/Job>
#include <KIO/ListJob>
#include <KLocalizedString>
@@ -750,41 +749,15 @@ void KFileItemModel::expandParentDirectories(const QUrl &url)
m_urlsToExpand.insert(urlToExpand);
}
- auto expandUrlAfterInserted = [this](const QUrl &url) {
- // need to wait for the item to be added to the model
- QMetaObject::Connection *connection = new QMetaObject::Connection;
- *connection = connect(this, &KFileItemModel::itemsInserted, this, [this, url, connection](const KItemRangeList &ranges) {
- int idx = -1;
- for (const KItemRange &it : ranges) {
- for (int i = 0; i < it.count; ++i) {
- if (fileItem(it.index + i).url() == url) {
- idx = it.index + i;
- break;
- }
- }
- if (idx != -1) {
- break;
- }
- }
-
- if (idx != -1) {
- setExpanded(idx, true);
- disconnect(*connection);
- delete connection;
- }
- });
- };
-
// KDirLister::open() must called at least once to trigger an initial
// loading. The pending URLs that must be restored are handled
// in slotCompleted().
- for (const auto &url : std::as_const(m_urlsToExpand)) {
- const int idx = index(url);
- if (idx >= 0) {
+ QSetIterator<QUrl> it2(m_urlsToExpand);
+ while (it2.hasNext()) {
+ const int idx = index(it2.next());
+ if (idx >= 0 && !isExpanded(idx)) {
setExpanded(idx, true);
- } else {
- // expand to url asynchronously
- expandUrlAfterInserted(url);
+ break;
}
}
}
@@ -1839,8 +1812,8 @@ void KFileItemModel::emitItemsChangedAndTriggerResorting(const KItemRangeList &i
void KFileItemModel::resetRoles()
{
- for (bool &i : m_requestRole) {
- i = false;
+ for (int i = 0; i < RolesCount; ++i) {
+ m_requestRole[i] = false;
}
}
@@ -1921,7 +1894,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) {
@@ -2043,14 +2023,6 @@ QHash<QByteArray, QVariant> KFileItemModel::retrieveData(const KFileItem &item,
data.insert(sharedValue("type"), folderMimeType);
}
- if (m_requestRole[RatingRole] && item.isLocalFile()) {
- KFileMetaData::UserMetaData md(item.localPath());
- const int rating = md.rating();
- if (rating > 0) {
- data.insert(sharedValue("rating"), rating);
- }
- }
-
return data;
}
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..1a00c5d84 100644
--- a/src/settings/viewmodes/viewsettingstab.cpp
+++ b/src/settings/viewmodes/viewsettingstab.cpp
@@ -16,17 +16,14 @@
#include <KLocalizedString>
-#include <KColorScheme>
#include <QApplication>
#include <QButtonGroup>
#include <QCheckBox>
#include <QComboBox>
#include <QFormLayout>
#include <QHelpEvent>
-#include <QLabel>
#include <QRadioButton>
#include <QSpinBox>
-#include <qfont.h>
ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget *parent)
: SettingsPageBase(parent)
@@ -37,6 +34,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);
@@ -65,17 +63,6 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget *parent)
m_fontRequester = new DolphinFontRequester(this);
topLayout->addRow(i18nc("@label:listbox", "Label font:"), m_fontRequester);
- // Reserved font style warning
- m_fontWarningLabel = new QLabel(this);
- m_fontWarningLabel->setWordWrap(true);
- m_fontWarningLabel->setVisible(false);
- m_fontWarningLabel->setText(i18nc("@info", "Some font styles are reserved by Dolphin and may be overridden."));
- topLayout->addRow(QString(), m_fontWarningLabel);
- KColorScheme scheme(QPalette::Normal);
- QPalette palette = m_fontWarningLabel->palette();
- palette.setColor(QPalette::WindowText, scheme.foreground(KColorScheme::InactiveText).color());
- m_fontWarningLabel->setPalette(palette);
-
switch (m_mode) {
case IconsMode: {
m_widthBox = new QComboBox();
@@ -93,6 +80,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: {
@@ -129,12 +119,12 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget *parent)
connect(m_defaultSizeSlider, &QSlider::valueChanged, this, &ViewSettingsTab::changed);
connect(m_previewSizeSlider, &QSlider::valueChanged, this, &ViewSettingsTab::changed);
connect(m_fontRequester, &DolphinFontRequester::changed, this, &ViewSettingsTab::changed);
- connect(m_fontRequester, &DolphinFontRequester::changed, this, &ViewSettingsTab::checkFontStyle);
switch (m_mode) {
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);
@@ -148,23 +138,8 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget *parent)
}
}
-ViewSettingsTab::~ViewSettingsTab() = default;
-
-void ViewSettingsTab::checkFontStyle()
+ViewSettingsTab::~ViewSettingsTab()
{
- const QFont font = m_fontRequester->currentFont();
- const bool wantsReservedStyle = font.italic() || font.underline() || font.strikeOut();
-
- // Disabled warning for System Font
- if (m_fontRequester->mode() != DolphinFontRequester::CustomFont) {
- m_fontWarningLabel->setVisible(false);
- return;
- }
-
- if (wantsReservedStyle) {
- m_fontWarningLabel->setVisible(true);
- return;
- }
}
void ViewSettingsTab::applySettings()
@@ -173,6 +148,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:
@@ -218,6 +194,7 @@ void ViewSettingsTab::applySettings()
settings.setUseSystemFont(useSystemFont);
settings.setViewFont(font);
+
settings.save();
}
@@ -235,6 +212,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());
@@ -285,4 +263,4 @@ void ViewSettingsTab::showToolTip(QSlider *slider, int value)
QApplication::sendEvent(slider, &toolTipEvent);
}
-#include "moc_viewsettingstab.cpp" \ No newline at end of file
+#include "moc_viewsettingstab.cpp"
diff --git a/src/settings/viewmodes/viewsettingstab.h b/src/settings/viewmodes/viewsettingstab.h
index 6ea7a3bf3..fef4a03fe 100644
--- a/src/settings/viewmodes/viewsettingstab.h
+++ b/src/settings/viewmodes/viewsettingstab.h
@@ -15,7 +15,6 @@ class QCheckBox;
class QSlider;
class QSpinBox;
class QRadioButton;
-class QLabel;
/**
* @brief Represents one tab of the view-settings page.
@@ -37,7 +36,6 @@ private Q_SLOTS:
void slotDefaultSliderMoved(int value);
void slotPreviewSliderMoved(int value);
- void checkFontStyle();
private:
void loadSettings();
@@ -54,7 +52,7 @@ private:
QRadioButton *m_entireRow;
QRadioButton *m_iconAndNameOnly;
QCheckBox *m_expandableFolders;
- QLabel *m_fontWarningLabel;
+ QCheckBox *m_pixelatedScaling;
};
-#endif \ No newline at end of file
+#endif