From 021365dceb590a14bfcdb904ea05ffdd69b7d663 Mon Sep 17 00:00:00 2001 From: Yifan Zhu Date: Thu, 8 Aug 2024 20:21:08 -0700 Subject: KStandardItemListWidget: select by number of unicode chars MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously during rename, the number of QChar is used for selection, which might be different from number of unicode characters. Test plan: - create the file zz❤️❤️.txt - rename the file - verify that the first 4 characters are correctly selected, which didn't work before the patch. BUG: 466814 --- src/kitemviews/kfileitemlistwidget.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'src/kitemviews/kfileitemlistwidget.cpp') 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() -- cgit v1.3