diff --git a/src/unitedentry/unitedentry.cpp b/src/unitedentry/unitedentry.cpp index afb741f2..3fef3bcd 100644 --- a/src/unitedentry/unitedentry.cpp +++ b/src/unitedentry/unitedentry.cpp @@ -181,7 +181,7 @@ void UnitedEntry::deactivateUnitedEntry() hide(); } -void UnitedEntry::keyPressEvent(QKeyEvent *p_event) +bool UnitedEntry::handleLineEditKeyPress(QKeyEvent *p_event) { const int key = p_event->key(); const int modifiers = p_event->modifiers(); @@ -194,7 +194,7 @@ void UnitedEntry::keyPressEvent(QKeyEvent *p_event) Q_FALLTHROUGH(); case Qt::Key_Escape: exitUnitedEntry(); - return; + return true; // Up/Down Ctrl+K/J to navigate to previous/next item. case Qt::Key_Up: @@ -206,7 +206,7 @@ void UnitedEntry::keyPressEvent(QKeyEvent *p_event) } else if (m_entryListWidget && m_entryListWidget->isVisible()) { IUnitedEntry::handleActionCommon(act, m_entryListWidget.data()); } - return; + return true; case Qt::Key_K: act = IUnitedEntry::Action::PreviousItem; @@ -218,8 +218,9 @@ void UnitedEntry::keyPressEvent(QKeyEvent *p_event) } else if (m_entryListWidget && m_entryListWidget->isVisible()) { IUnitedEntry::handleActionCommon(act, m_entryListWidget.data()); } + return true; } - return; + break; case Qt::Key_Enter: Q_FALLTHROUGH(); @@ -227,7 +228,7 @@ void UnitedEntry::keyPressEvent(QKeyEvent *p_event) if (m_lastEntry) { m_lastEntry->handleAction(IUnitedEntry::Action::Activate); } - return; + return true; case Qt::Key_E: if (WidgetUtils::isViControlModifier(modifiers)) { @@ -237,8 +238,9 @@ void UnitedEntry::keyPressEvent(QKeyEvent *p_event) if (!entry.m_name.isEmpty()) { m_lineEdit->setText(entry.m_name + QLatin1Char(' ')); } + return true; } - return; + break; case Qt::Key_F: if (WidgetUtils::isViControlModifier(modifiers)) { @@ -248,8 +250,9 @@ void UnitedEntry::keyPressEvent(QKeyEvent *p_event) if (!entry.m_name.isEmpty()) { m_lineEdit->setSelection(0, entry.m_name.size()); } + return true; } - return; + break; case Qt::Key_D: if (WidgetUtils::isViControlModifier(modifiers)) { @@ -257,8 +260,9 @@ void UnitedEntry::keyPressEvent(QKeyEvent *p_event) if (m_lastEntry) { m_lastEntry->stop(); } + return true; } - return; + break; case Qt::Key_L: if (WidgetUtils::isViControlModifier(modifiers)) { @@ -266,8 +270,9 @@ void UnitedEntry::keyPressEvent(QKeyEvent *p_event) if (m_lastEntry) { m_lastEntry->handleAction(IUnitedEntry::Action::LevelUp); } + return true; } - return; + break; case Qt::Key_I: if (WidgetUtils::isViControlModifier(modifiers)) { @@ -275,8 +280,9 @@ void UnitedEntry::keyPressEvent(QKeyEvent *p_event) if (m_lastEntry) { m_lastEntry->handleAction(IUnitedEntry::Action::ExpandCollapse); } + return true; } - return; + break; case Qt::Key_B: if (WidgetUtils::isViControlModifier(modifiers)) { @@ -284,14 +290,15 @@ void UnitedEntry::keyPressEvent(QKeyEvent *p_event) if (m_lastEntry) { m_lastEntry->handleAction(IUnitedEntry::Action::ExpandCollapseAll); } + return true; } - return; + break; default: break; } - QFrame::keyPressEvent(p_event); + return false; } void UnitedEntry::clear() @@ -432,7 +439,7 @@ void UnitedEntry::setBusy(bool p_busy) bool UnitedEntry::eventFilter(QObject *p_watched, QEvent *p_event) { - if (p_watched == m_popup || p_watched == m_lineEdit) { + if (p_watched == m_popup) { if (p_event->type() == QEvent::KeyPress) { auto eve = static_cast(p_event); switch (eve->key()) { @@ -449,6 +456,13 @@ bool UnitedEntry::eventFilter(QObject *p_watched, QEvent *p_event) break; } } + } else if (p_watched == m_lineEdit) { + if (p_event->type() == QEvent::KeyPress) { + auto eve = static_cast(p_event); + if (handleLineEditKeyPress(eve)) { + return true; + } + } } return QFrame::eventFilter(p_watched, p_event); diff --git a/src/unitedentry/unitedentry.h b/src/unitedentry/unitedentry.h index 9d7bd27c..7ce1c942 100644 --- a/src/unitedentry/unitedentry.h +++ b/src/unitedentry/unitedentry.h @@ -29,8 +29,6 @@ namespace vnotex QAction *getTriggerAction(); protected: - void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE; - void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE; private: @@ -69,6 +67,9 @@ namespace vnotex QSize preferredSize() const; + // Return true if want to stop the propogation. + bool handleLineEditKeyPress(QKeyEvent *p_event); + QMainWindow *m_mainWindow = nullptr; LineEditWithSnippet *m_lineEdit = nullptr;