Bläddra i källkod

UnitedEntry: fix key press event

Le Tan 3 år sedan
förälder
incheckning
c08296bc3b
2 ändrade filer med 30 tillägg och 15 borttagningar
  1. 27 13
      src/unitedentry/unitedentry.cpp
  2. 3 2
      src/unitedentry/unitedentry.h

+ 27 - 13
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<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);

+ 3 - 2
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;