X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/98a4aa10ef09087ce6498d09461036cb0ab9cb4d..43da84eefc7d:/src/kitemviews/private/kitemlistroleeditor.cpp diff --git a/src/kitemviews/private/kitemlistroleeditor.cpp b/src/kitemviews/private/kitemlistroleeditor.cpp index 594b05338..5ff013429 100644 --- a/src/kitemviews/private/kitemlistroleeditor.cpp +++ b/src/kitemviews/private/kitemlistroleeditor.cpp @@ -19,40 +19,31 @@ #include "kitemlistroleeditor.h" -#include +#include #include KItemListRoleEditor::KItemListRoleEditor(QWidget *parent) : KTextEdit(parent), - m_index(0), - m_role() + m_role(), + m_blockFinishedSignal(false) { setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setAcceptRichText(false); + enableFindReplace(false); document()->setDocumentMargin(0); if (parent) { parent->installEventFilter(this); } - connect(this, SIGNAL(textChanged()), this, SLOT(autoAdjustSize())); + connect(this, &KItemListRoleEditor::textChanged, this, &KItemListRoleEditor::autoAdjustSize); } KItemListRoleEditor::~KItemListRoleEditor() { } -void KItemListRoleEditor::setIndex(int index) -{ - m_index = index; -} - -int KItemListRoleEditor::index() const -{ - return m_index; -} - void KItemListRoleEditor::setRole(const QByteArray& role) { m_role = role; @@ -66,7 +57,7 @@ QByteArray KItemListRoleEditor::role() const bool KItemListRoleEditor::eventFilter(QObject* watched, QEvent* event) { if (watched == parentWidget() && event->type() == QEvent::Resize) { - emit roleEditingFinished(m_index, m_role, toPlainText()); + emitRoleEditingFinished(); } return KTextEdit::eventFilter(watched, event); @@ -77,7 +68,7 @@ bool KItemListRoleEditor::event(QEvent* event) if (event->type() == QEvent::FocusOut) { QFocusEvent* focusEvent = static_cast(event); if (focusEvent->reason() != Qt::PopupFocusReason) { - emit roleEditingFinished(m_index, m_role, toPlainText()); + emitRoleEditingFinished(); } } return KTextEdit::event(event); @@ -87,14 +78,36 @@ void KItemListRoleEditor::keyPressEvent(QKeyEvent* event) { switch (event->key()) { case Qt::Key_Escape: - emit roleEditingCanceled(m_index, m_role, toPlainText()); + // Emitting the signal roleEditingCanceled might result + // in losing the focus. Per default losing the focus emits + // a roleEditingFinished signal (see KItemListRoleEditor::event), + // which is not wanted in this case. + m_blockFinishedSignal = true; + emit roleEditingCanceled(m_role, KIO::encodeFileName(toPlainText())); + m_blockFinishedSignal = false; event->accept(); return; case Qt::Key_Enter: case Qt::Key_Return: - emit roleEditingFinished(m_index, m_role, toPlainText()); + emitRoleEditingFinished(); event->accept(); return; + case Qt::Key_Left: + case Qt::Key_Right: { + QTextCursor cursor = textCursor(); + if (event->modifiers() == Qt::NoModifier && cursor.hasSelection()) { + if (event->key() == Qt::Key_Left) { + cursor.setPosition(cursor.selectionStart()); + } else { + cursor.setPosition(cursor.selectionEnd()); + } + cursor.clearSelection(); + setTextCursor(cursor); + event->accept(); + return; + } + break; + } default: break; } @@ -127,4 +140,10 @@ void KItemListRoleEditor::autoAdjustSize() } } -#include "kitemlistroleeditor.moc" +void KItemListRoleEditor::emitRoleEditingFinished() +{ + if (!m_blockFinishedSignal) { + emit roleEditingFinished(m_role, KIO::encodeFileName(toPlainText())); + } +} +