Ver Fonte

UI/Qt: Enable basic IME keyboard input for WebContentView

This makes dead keys work (e.g. typing ' and e results in é).
Jelle Raaijmakers há 11 meses atrás
pai
commit
7e57cc7b09
2 ficheiros alterados com 17 adições e 1 exclusões
  1. 15 1
      Ladybird/Qt/WebContentView.cpp
  2. 2 0
      Ladybird/Qt/WebContentView.h

+ 15 - 1
Ladybird/Qt/WebContentView.cpp

@@ -36,7 +36,6 @@
 #include <QCursor>
 #include <QCursor>
 #include <QGuiApplication>
 #include <QGuiApplication>
 #include <QIcon>
 #include <QIcon>
-#include <QLineEdit>
 #include <QMimeData>
 #include <QMimeData>
 #include <QMouseEvent>
 #include <QMouseEvent>
 #include <QPaintEvent>
 #include <QPaintEvent>
@@ -60,6 +59,7 @@ WebContentView::WebContentView(QWidget* window, RefPtr<WebView::WebContentClient
     m_client_state.client = parent_client;
     m_client_state.client = parent_client;
     m_client_state.page_index = page_index;
     m_client_state.page_index = page_index;
 
 
+    setAttribute(Qt::WA_InputMethodEnabled, true);
     setMouseTracking(true);
     setMouseTracking(true);
     setAcceptDrops(true);
     setAcceptDrops(true);
 
 
@@ -346,6 +346,20 @@ void WebContentView::keyReleaseEvent(QKeyEvent* event)
     enqueue_native_event(Web::KeyEvent::Type::KeyUp, *event);
     enqueue_native_event(Web::KeyEvent::Type::KeyUp, *event);
 }
 }
 
 
+void WebContentView::inputMethodEvent(QInputMethodEvent* event)
+{
+    if (!event->commitString().isEmpty()) {
+        QKeyEvent keyEvent(QEvent::KeyPress, 0, Qt::NoModifier, event->commitString());
+        keyPressEvent(&keyEvent);
+    }
+    event->accept();
+}
+
+QVariant WebContentView::inputMethodQuery(Qt::InputMethodQuery) const
+{
+    return QVariant();
+}
+
 void WebContentView::mouseMoveEvent(QMouseEvent* event)
 void WebContentView::mouseMoveEvent(QMouseEvent* event)
 {
 {
     if (!m_tooltip_override) {
     if (!m_tooltip_override) {

+ 2 - 0
Ladybird/Qt/WebContentView.h

@@ -61,6 +61,8 @@ public:
     virtual void dropEvent(QDropEvent*) override;
     virtual void dropEvent(QDropEvent*) override;
     virtual void keyPressEvent(QKeyEvent* event) override;
     virtual void keyPressEvent(QKeyEvent* event) override;
     virtual void keyReleaseEvent(QKeyEvent* event) override;
     virtual void keyReleaseEvent(QKeyEvent* event) override;
+    virtual void inputMethodEvent(QInputMethodEvent*) override;
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const override;
     virtual void showEvent(QShowEvent*) override;
     virtual void showEvent(QShowEvent*) override;
     virtual void hideEvent(QHideEvent*) override;
     virtual void hideEvent(QHideEvent*) override;
     virtual void focusInEvent(QFocusEvent*) override;
     virtual void focusInEvent(QFocusEvent*) override;