┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/kitemviews/kfileitemlistwidget.cpp17
-rw-r--r--src/kitemviews/kfileitemlistwidget.h2
-rw-r--r--src/kitemviews/kstandarditemlistwidget.cpp13
-rw-r--r--src/kitemviews/kstandarditemlistwidget.h4
4 files changed, 24 insertions, 12 deletions
diff --git a/src/kitemviews/kfileitemlistwidget.cpp b/src/kitemviews/kfileitemlistwidget.cpp
index fcfc9d7b1..b4e0895f2 100644
--- a/src/kitemviews/kfileitemlistwidget.cpp
+++ b/src/kitemviews/kfileitemlistwidget.cpp
@@ -162,33 +162,32 @@ QFont KFileItemListWidget::customizedFont(const QFont &baseFont) const
int KFileItemListWidget::selectionLength(const QString &text) const
{
- // Select the text without MIME-type extension
- int selectionLength = text.length();
-
// If item is a directory, use the whole text length for
// selection (ignore all points)
if (data().value("isDir").toBool()) {
- return selectionLength;
+ return numberOfUnicodeCharactersIn(text);
}
+ int indexOfExtension = text.length();
+
QMimeDatabase db;
const QString extension = db.suffixForFileName(text);
if (extension.isEmpty()) {
// For an unknown extension just exclude the extension after
// the last point. This does not work for multiple extensions like
// *.tar.gz but usually this is anyhow a known extension.
- selectionLength = text.lastIndexOf(QLatin1Char('.'));
+ indexOfExtension = text.lastIndexOf(QLatin1Char('.'));
// If no point could be found, use whole text length for selection.
- if (selectionLength < 1) {
- selectionLength = text.length();
+ if (indexOfExtension < 1) {
+ indexOfExtension = text.length();
}
} else {
- selectionLength -= extension.length() + 1;
+ indexOfExtension -= extension.length() + 1;
}
- return selectionLength;
+ return numberOfUnicodeCharactersIn(text.left(indexOfExtension));
}
void KFileItemListWidget::hoverSequenceStarted()
diff --git a/src/kitemviews/kfileitemlistwidget.h b/src/kitemviews/kfileitemlistwidget.h
index 6e98e03c4..5ce11b6da 100644
--- a/src/kitemviews/kfileitemlistwidget.h
+++ b/src/kitemviews/kfileitemlistwidget.h
@@ -62,7 +62,7 @@ protected:
QFont customizedFont(const QFont &baseFont) const override;
/**
- * @return Selection length without MIME-type extension
+ * @return Selection length without MIME-type extension in number of unicode characters, which might be different from number of QChars.
*/
int selectionLength(const QString &text) const override;
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
index c8a6955b9..fe686d4fe 100644
--- a/src/kitemviews/kstandarditemlistwidget.cpp
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
@@ -25,6 +25,7 @@
#include <QGraphicsView>
#include <QPixmapCache>
#include <QStyleOption>
+#include <QTextBoundaryFinder>
#include <QVariantAnimation>
// #define KSTANDARDITEMLISTWIDGET_DEBUG
@@ -812,9 +813,19 @@ void KStandardItemListWidget::siblingsInformationChanged(const QBitArray &curren
m_dirtyLayout = true;
}
+int KStandardItemListWidget::numberOfUnicodeCharactersIn(const QString &text)
+{
+ int count = 0;
+ QTextBoundaryFinder boundaryFinder(QTextBoundaryFinder::Grapheme, text);
+ while (boundaryFinder.toNextBoundary() != -1) {
+ ++count;
+ }
+ return count;
+}
+
int KStandardItemListWidget::selectionLength(const QString &text) const
{
- return text.length();
+ return numberOfUnicodeCharactersIn(text);
}
void KStandardItemListWidget::editedRoleChanged(const QByteArray &current, const QByteArray &previous)
diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h
index 35392b420..02f897dbe 100644
--- a/src/kitemviews/kstandarditemlistwidget.h
+++ b/src/kitemviews/kstandarditemlistwidget.h
@@ -159,6 +159,8 @@ protected:
*/
QString roleText(const QByteArray &role, const QHash<QByteArray, QVariant> &values) const;
+ static int numberOfUnicodeCharactersIn(const QString &text);
+
/**
* Fixes:
* Select the text without MIME-type extension
@@ -168,7 +170,7 @@ protected:
* Inherited classes can define, if the MIME-type extension
* should be selected or not.
*
- * @return Selection length (with or without MIME-type extension)
+ * @return Selection length (with or without MIME-type extension) in number of unicode characters, which might be different from number of QChars.
*/
virtual int selectionLength(const QString &text) const;