From 96b0ea45dd8612fdc9670bc9f2a00341232f2eca Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Fri, 31 May 2019 07:23:18 -0400 Subject: [PATCH] Update Group in Preview Widget when focused * Fixes #3129 * Also fix out of bounds access when no entries are present in EntryView and up/down arrow pressed --- src/gui/DatabaseWidget.cpp | 3 +++ src/gui/entry/EntryView.cpp | 21 +++++++++++---------- src/gui/group/GroupView.cpp | 6 ++++++ src/gui/group/GroupView.h | 1 + 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 0d200848..51a0d7d8 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -787,6 +787,9 @@ void DatabaseWidget::switchToMainView(bool previousDialogAccepted) } m_newParent = nullptr; + } else { + // Workaround: ensure entries are focused so search doesn't reset + m_entryView->setFocus(); } setCurrentWidget(m_mainWidget); diff --git a/src/gui/entry/EntryView.cpp b/src/gui/entry/EntryView.cpp index 0a620a68..cd7896b0 100644 --- a/src/gui/entry/EntryView.cpp +++ b/src/gui/entry/EntryView.cpp @@ -139,17 +139,18 @@ void EntryView::keyPressEvent(QKeyEvent* event) } int last = m_model->rowCount() - 1; + if (last > 0) { + if (event->key() == Qt::Key_Up && currentIndex().row() == 0) { + QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(last, 0)); + setCurrentEntry(m_model->entryFromIndex(index)); + return; + } - if (event->key() == Qt::Key_Up && currentIndex().row() == 0) { - QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(last, 0)); - setCurrentEntry(m_model->entryFromIndex(index)); - return; - } - - if (event->key() == Qt::Key_Down && currentIndex().row() == last) { - QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(0, 0)); - setCurrentEntry(m_model->entryFromIndex(index)); - return; + if (event->key() == Qt::Key_Down && currentIndex().row() == last) { + QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(0, 0)); + setCurrentEntry(m_model->entryFromIndex(index)); + return; + } } QTreeView::keyPressEvent(event); diff --git a/src/gui/group/GroupView.cpp b/src/gui/group/GroupView.cpp index 7c3c9135..fa702335 100644 --- a/src/gui/group/GroupView.cpp +++ b/src/gui/group/GroupView.cpp @@ -72,6 +72,12 @@ void GroupView::dragMoveEvent(QDragMoveEvent* event) } } +void GroupView::focusInEvent(QFocusEvent* event) +{ + emitGroupChanged(); + QTreeView::focusInEvent(event); +} + Group* GroupView::currentGroup() { if (currentIndex() == QModelIndex()) { diff --git a/src/gui/group/GroupView.h b/src/gui/group/GroupView.h index 61f7b3ba..609ab0e0 100644 --- a/src/gui/group/GroupView.h +++ b/src/gui/group/GroupView.h @@ -47,6 +47,7 @@ private slots: protected: void dragMoveEvent(QDragMoveEvent* event) override; + void focusInEvent(QFocusEvent* event) override; private: void recInitExpanded(Group* group);