mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-19 16:31:21 +00:00
Fix bug 303375 - Dots in directory names treated as file extension.
Patch by Emmanuel Pescosta <emmanuelpescosta099@gmail.com> BUG: 303375 REVIEW: 105575 FIXED-IN: 4.9.0
This commit is contained in:
parent
5fbe52c151
commit
eb14263c48
|
@ -19,6 +19,7 @@
|
|||
|
||||
#include "kfileitemlistwidget.h"
|
||||
|
||||
#include <kmimetype.h>
|
||||
#include <KDebug>
|
||||
#include <KGlobal>
|
||||
#include <KLocale>
|
||||
|
@ -101,4 +102,34 @@ QFont KFileItemListWidget::customizedFont(const QFont& baseFont) const
|
|||
return font;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
const QString extension = KMimeType::extractKnownExtension(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('.'));
|
||||
|
||||
// If no point could be found, use whole text length for selection.
|
||||
if (selectionLength < 1) {
|
||||
selectionLength = text.length();
|
||||
}
|
||||
|
||||
} else {
|
||||
selectionLength -= extension.length() + 1;
|
||||
}
|
||||
|
||||
return selectionLength;
|
||||
}
|
||||
|
||||
#include "kfileitemlistwidget.moc"
|
||||
|
|
|
@ -48,6 +48,11 @@ protected:
|
|||
virtual bool isRoleRightAligned(const QByteArray& role) const;
|
||||
virtual bool isHidden() const;
|
||||
virtual QFont customizedFont(const QFont& baseFont) const;
|
||||
|
||||
/**
|
||||
* @return Selection length without MIME-type extension
|
||||
*/
|
||||
virtual int selectionLength(const QString& text) const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -581,6 +581,11 @@ void KStandardItemListWidget::siblingsInformationChanged(const QBitArray& curren
|
|||
m_dirtyLayout = true;
|
||||
}
|
||||
|
||||
int KStandardItemListWidget::selectionLength(const QString& text) const
|
||||
{
|
||||
return text.length();
|
||||
}
|
||||
|
||||
void KStandardItemListWidget::editedRoleChanged(const QByteArray& current, const QByteArray& previous)
|
||||
{
|
||||
Q_UNUSED(previous);
|
||||
|
@ -610,25 +615,12 @@ void KStandardItemListWidget::editedRoleChanged(const QByteArray& current, const
|
|||
QTextOption textOption = textInfo->staticText.textOption();
|
||||
m_roleEditor->document()->setDefaultTextOption(textOption);
|
||||
|
||||
// Select the text without MIME-type extension
|
||||
// TODO: This is file-item-specific and should be moved
|
||||
// into KFileItemListWidget.
|
||||
int selectionLength = text.length();
|
||||
const int textSelectionLength = selectionLength(text);
|
||||
|
||||
const QString extension = KMimeType::extractKnownExtension(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('.'));
|
||||
} else {
|
||||
selectionLength -= extension.length() + 1;
|
||||
}
|
||||
|
||||
if (selectionLength > 0) {
|
||||
if (textSelectionLength > 0) {
|
||||
QTextCursor cursor = m_roleEditor->textCursor();
|
||||
cursor.movePosition(QTextCursor::StartOfBlock);
|
||||
cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, selectionLength);
|
||||
cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, textSelectionLength);
|
||||
m_roleEditor->setTextCursor(cursor);
|
||||
}
|
||||
|
||||
|
|
|
@ -133,6 +133,19 @@ protected:
|
|||
*/
|
||||
QString roleText(const QByteArray& role, const QHash<QByteArray, QVariant>& values) const;
|
||||
|
||||
/**
|
||||
* Fixes:
|
||||
* Select the text without MIME-type extension
|
||||
* This is file-item-specific and should be moved
|
||||
* into KFileItemListWidget.
|
||||
*
|
||||
* Inherited classes can define, if the MIME-type extension
|
||||
* should be selected or not.
|
||||
*
|
||||
* @return Selection length (with or without MIME-type extension)
|
||||
*/
|
||||
virtual int selectionLength(const QString& text) const;
|
||||
|
||||
virtual void dataChanged(const QHash<QByteArray, QVariant>& current, const QSet<QByteArray>& roles = QSet<QByteArray>());
|
||||
virtual void visibleRolesChanged(const QList<QByteArray>& current, const QList<QByteArray>& previous);
|
||||
virtual void columnWidthChanged(const QByteArray& role, qreal current, qreal previous);
|
||||
|
|
|
@ -87,7 +87,9 @@ RenameDialog::RenameDialog(QWidget *parent, const KFileItemList& items) :
|
|||
if (m_renameOneItem) {
|
||||
const QString fileName = items.first().url().prettyUrl();
|
||||
const QString extension = KMimeType::extractKnownExtension(fileName.toLower());
|
||||
if (extension.length() > 0) {
|
||||
|
||||
// If the current item is a directory, select the whole file name.
|
||||
if ((extension.length() > 0) && !items.first().isDir()) {
|
||||
// Don't select the extension
|
||||
selectionLength -= extension.length() + 1;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue