Forráskód Böngészése

disable input method in QuickSelector

Le Tan 4 éve
szülő
commit
7fc7481cfb

+ 23 - 0
src/widgets/lineedit.cpp

@@ -2,6 +2,8 @@
 
 #include <QKeyEvent>
 #include <QCoreApplication>
+#include <QInputMethod>
+#include <QGuiApplication>
 
 #include <utils/widgetutils.h>
 
@@ -98,3 +100,24 @@ void LineEdit::selectBaseName(QLineEdit *p_lineEdit)
     int dotIndex = name.lastIndexOf('.');
     p_lineEdit->setSelection(0, (dotIndex == -1) ? name.size() : dotIndex);
 }
+
+QVariant LineEdit::inputMethodQuery(Qt::InputMethodQuery p_query) const
+{
+    if (p_query == Qt::ImEnabled) {
+        return m_inputMethodEnabled;
+    }
+
+    return QLineEdit::inputMethodQuery(p_query);
+}
+
+void LineEdit::setInputMethodEnabled(bool p_enabled)
+{
+    if (m_inputMethodEnabled != p_enabled) {
+        m_inputMethodEnabled = p_enabled;
+
+        QInputMethod *im = QGuiApplication::inputMethod();
+        im->reset();
+        // Ask input method to query current state, which will call inputMethodQuery().
+        im->update(Qt::ImEnabled);
+    }
+}

+ 8 - 0
src/widgets/lineedit.h

@@ -14,10 +14,18 @@ namespace vnotex
 
         LineEdit(const QString &p_contents, QWidget *p_parent = nullptr);
 
+        QVariant inputMethodQuery(Qt::InputMethodQuery p_query) const Q_DECL_OVERRIDE;
+
+        void setInputMethodEnabled(bool p_enabled);
+
         static void selectBaseName(QLineEdit *p_lineEdit);
 
     protected:
         void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE;
+
+    private:
+        // Whether enable input method.
+        bool m_inputMethodEnabled = true;
     };
 }
 

+ 2 - 1
src/widgets/quickselector.cpp

@@ -72,7 +72,8 @@ void QuickSelector::setupUI(const QString &p_title)
         mainLayout->addWidget(new QLabel(p_title, this));
     }
 
-    m_searchLineEdit = WidgetsFactory::createLineEdit(this);
+    m_searchLineEdit = dynamic_cast<LineEdit *>(WidgetsFactory::createLineEdit(this));
+    m_searchLineEdit->setInputMethodEnabled(false);
     connect(m_searchLineEdit, &QLineEdit::textEdited,
             this, &QuickSelector::searchAndFilter);
     mainLayout->addWidget(m_searchLineEdit);

+ 3 - 2
src/widgets/quickselector.h

@@ -6,12 +6,13 @@
 #include <QVariant>
 #include <QVector>
 
-class QLineEdit;
 class QListWidget;
 class QListWidgetItem;
 
 namespace vnotex
 {
+    class LineEdit;
+
     struct QuickSelectorItem
     {
         QuickSelectorItem() = default;
@@ -63,7 +64,7 @@ namespace vnotex
 
         QVector<QuickSelectorItem> m_items;
 
-        QLineEdit *m_searchLineEdit = nullptr;
+        LineEdit *m_searchLineEdit = nullptr;
 
         QListWidget *m_itemList = nullptr;