diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 31ef9c78..088f83af 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -88,6 +89,7 @@ DatabaseWidget::DatabaseWidget(Database* db, QWidget* parent) m_searchUi->closeSearchButton->setShortcut(Qt::Key_Escape); m_searchWidget->hide(); m_searchUi->caseSensitiveCheckBox->setVisible(false); + m_searchUi->searchEdit->installEventFilter(this); QVBoxLayout* vLayout = new QVBoxLayout(rightHandSideWidget); vLayout->setMargin(0); @@ -982,3 +984,33 @@ bool DatabaseWidget::currentEntryHasNotes() } return !currentEntry->notes().isEmpty(); } + +bool DatabaseWidget::eventFilter(QObject* object, QEvent* event) +{ + if (object == m_searchUi->searchEdit) { + if (event->type() == QEvent::KeyPress) { + QKeyEvent* keyEvent = static_cast(event); + if (keyEvent->matches(QKeySequence::Copy)) { + // If Control+C is pressed in the search edit when no + // text is selected, copy the password of the current + // entry. + Entry* currentEntry = m_entryView->currentEntry(); + if (currentEntry && !m_searchUi->searchEdit->hasSelectedText()) { + setClipboardTextAndMinimize(currentEntry->password()); + return true; + } + } + else if (keyEvent->matches(QKeySequence::MoveToNextLine)) { + // If Down is pressed at EOL in the search edit, move + // the focus to the entry view. + if (!m_searchUi->searchEdit->hasSelectedText() && + m_searchUi->searchEdit->cursorPosition() == m_searchUi->searchEdit->text().length()) { + m_entryView->setFocus(); + return true; + } + } + } + } + + return false; +} diff --git a/src/gui/DatabaseWidget.h b/src/gui/DatabaseWidget.h index 1ba3dd1f..653c1fca 100644 --- a/src/gui/DatabaseWidget.h +++ b/src/gui/DatabaseWidget.h @@ -102,6 +102,9 @@ Q_SIGNALS: void splitterSizesChanged(); void entryColumnSizesChanged(); +protected: + bool eventFilter(QObject* object, QEvent* event); + public Q_SLOTS: void createEntry(); void cloneEntry();