Merge remote-tracking branch 'github/pr/74'

This commit is contained in:
Felix Geyer 2015-12-06 19:21:38 +01:00
commit efc4cd5969
3 changed files with 39 additions and 0 deletions

View File

@ -23,6 +23,7 @@
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QLabel> #include <QLabel>
#include <QLineEdit> #include <QLineEdit>
#include <QKeyEvent>
#include <QSplitter> #include <QSplitter>
#include <QTimer> #include <QTimer>
#include <QProcess> #include <QProcess>
@ -88,6 +89,7 @@ DatabaseWidget::DatabaseWidget(Database* db, QWidget* parent)
m_searchUi->closeSearchButton->setShortcut(Qt::Key_Escape); m_searchUi->closeSearchButton->setShortcut(Qt::Key_Escape);
m_searchWidget->hide(); m_searchWidget->hide();
m_searchUi->caseSensitiveCheckBox->setVisible(false); m_searchUi->caseSensitiveCheckBox->setVisible(false);
m_searchUi->searchEdit->installEventFilter(this);
QVBoxLayout* vLayout = new QVBoxLayout(rightHandSideWidget); QVBoxLayout* vLayout = new QVBoxLayout(rightHandSideWidget);
vLayout->setMargin(0); vLayout->setMargin(0);
@ -982,3 +984,33 @@ bool DatabaseWidget::currentEntryHasNotes()
} }
return !currentEntry->notes().isEmpty(); 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<QKeyEvent*>(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;
}

View File

@ -102,6 +102,9 @@ Q_SIGNALS:
void splitterSizesChanged(); void splitterSizesChanged();
void entryColumnSizesChanged(); void entryColumnSizesChanged();
protected:
bool eventFilter(QObject* object, QEvent* event);
public Q_SLOTS: public Q_SLOTS:
void createEntry(); void createEntry();
void cloneEntry(); void cloneEntry();

View File

@ -210,6 +210,10 @@ void TestGui::testSearch()
// Search for "some" // Search for "some"
QTest::keyClicks(searchEdit, "some"); QTest::keyClicks(searchEdit, "some");
QTRY_COMPARE(entryView->model()->rowCount(), 4); QTRY_COMPARE(entryView->model()->rowCount(), 4);
// Press Down to focus on the entry view
QVERIFY(!entryView->hasFocus());
QTest::keyClick(searchEdit, Qt::Key_Down);
QVERIFY(entryView->hasFocus());
clickIndex(entryView->model()->index(0, 1), entryView, Qt::LeftButton); clickIndex(entryView->model()->index(0, 1), entryView, Qt::LeftButton);
QAction* entryEditAction = m_mainWindow->findChild<QAction*>("actionEntryEdit"); QAction* entryEditAction = m_mainWindow->findChild<QAction*>("actionEntryEdit");