UnitedEntry: fix key press event

This commit is contained in:
Le Tan 2022-06-19 14:38:12 +08:00
parent cd53eedc7f
commit c08296bc3b
2 changed files with 30 additions and 15 deletions

View File

@ -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<QKeyEvent *>(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<QKeyEvent *>(p_event);
if (handleLineEditKeyPress(eve)) {
return true;
}
}
}
return QFrame::eventFilter(p_watched, p_event);

View File

@ -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;