[Libreoffice-commits] core.git: Branch 'libreoffice-6-2' - vcl/inc vcl/qt5

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Sun Dec 23 09:37:31 UTC 2018


 vcl/inc/qt5/Qt5Widget.hxx |    8 ++++++++
 vcl/qt5/Qt5Frame.cxx      |   10 ++++++++--
 vcl/qt5/Qt5Widget.cxx     |   42 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 58 insertions(+), 2 deletions(-)

New commits:
commit 7da0f71cf15af0cfa74d0eaa0011a6b1db1a4abd
Author:     Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Fri Dec 21 17:25:17 2018 +0100
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Sun Dec 23 10:31:08 2018 +0100

    tdf#121161 Qt5 initial IM support
    
    This just implements some minimal solution, since I have no idea,
    how all this IM handling should actually work.
    
    Change-Id: I0d02dfb96680891e275881927ebc17f798dc1f29
    Reviewed-on: https://gerrit.libreoffice.org/65553
    Tested-by: Jenkins
    Reviewed-by: Jan-Marek Glogowski <glogow at fbihome.de>
    (cherry picked from commit c7ee454a35c392dfd03c9ccf8fd953ec9c98e484)
    Reviewed-on: https://gerrit.libreoffice.org/65558
    Reviewed-by: Michael Weghorn <m.weghorn at posteo.de>
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/vcl/inc/qt5/Qt5Widget.hxx b/vcl/inc/qt5/Qt5Widget.hxx
index ad043650b32e..26f26c8bf0a3 100644
--- a/vcl/inc/qt5/Qt5Widget.hxx
+++ b/vcl/inc/qt5/Qt5Widget.hxx
@@ -22,9 +22,13 @@
 #include <QtWidgets/QWidget>
 #include <rtl/ustring.hxx>
 
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/accessibility/XAccessibleEditableText.hpp>
+
 class Qt5Frame;
 class Qt5Object;
 class QFocusEvent;
+class QInputMethodEvent;
 class QKeyEvent;
 class QMouseEvent;
 class QMoveEvent;
@@ -32,6 +36,7 @@ class QPaintEvent;
 class QResizeEvent;
 class QShowEvent;
 class QWheelEvent;
+class QVariant;
 
 class Qt5Widget : public QWidget
 {
@@ -57,6 +62,9 @@ class Qt5Widget : public QWidget
     virtual void wheelEvent(QWheelEvent*) override;
     virtual void closeEvent(QCloseEvent*) override;
 
+    void inputMethodEvent(QInputMethodEvent*) override;
+    QVariant inputMethodQuery(Qt::InputMethodQuery) const override;
+
     const QString m_InternalMimeType = "application/x-libreoffice-dnditem";
 
 public slots:
diff --git a/vcl/qt5/Qt5Frame.cxx b/vcl/qt5/Qt5Frame.cxx
index 781f1c6b67a4..230c98395a70 100644
--- a/vcl/qt5/Qt5Frame.cxx
+++ b/vcl/qt5/Qt5Frame.cxx
@@ -655,9 +655,15 @@ bool Qt5Frame::ShowTooltip(const OUString& rText, const tools::Rectangle& /*rHel
 
 // do we even need it? void Qt5Frame::Flush(const tools::Rectangle& /*rRect*/) {}
 
-void Qt5Frame::SetInputContext(SalInputContext* /*pContext*/)
+void Qt5Frame::SetInputContext(SalInputContext* pContext)
 {
-    // TODO some IM handler setup
+    if (!pContext)
+        return;
+
+    if (!(pContext->mnOptions & InputContextFlags::Text))
+        return;
+
+    m_pQWidget->setAttribute(Qt::WA_InputMethodEnabled);
 }
 
 void Qt5Frame::EndExtTextInput(EndExtTextInputFlags /*nFlags*/)
diff --git a/vcl/qt5/Qt5Widget.cxx b/vcl/qt5/Qt5Widget.cxx
index ba839a6abaea..462f19675905 100644
--- a/vcl/qt5/Qt5Widget.cxx
+++ b/vcl/qt5/Qt5Widget.cxx
@@ -428,4 +428,46 @@ Qt5Widget::Qt5Widget(Qt5Frame& rFrame, Qt::WindowFlags f)
     setFocusPolicy(Qt::StrongFocus);
 }
 
+void Qt5Widget::inputMethodEvent(QInputMethodEvent* pEvent)
+{
+    SolarMutexGuard aGuard;
+    SalExtTextInputEvent aInputEvent;
+    aInputEvent.mpTextAttr = nullptr;
+    aInputEvent.mnCursorFlags = 0;
+
+    if (!pEvent->commitString().isEmpty())
+    {
+        vcl::DeletionListener aDel(m_pFrame);
+        aInputEvent.maText = toOUString(pEvent->commitString());
+        aInputEvent.mnCursorPos = aInputEvent.maText.getLength();
+        m_pFrame->CallCallback(SalEvent::ExtTextInput, &aInputEvent);
+        pEvent->accept();
+        if (!aDel.isDeleted())
+            m_pFrame->CallCallback(SalEvent::EndExtTextInput, nullptr);
+    }
+    else
+    {
+        aInputEvent.maText = toOUString(pEvent->preeditString());
+        aInputEvent.mnCursorPos = 0;
+        m_pFrame->CallCallback(SalEvent::ExtTextInput, &aInputEvent);
+        pEvent->accept();
+    }
+}
+
+QVariant Qt5Widget::inputMethodQuery(Qt::InputMethodQuery property) const
+{
+    switch (property)
+    {
+        case Qt::ImCursorRectangle:
+        {
+            SalExtTextInputPosEvent aPosEvent;
+            m_pFrame->CallCallback(SalEvent::ExtTextInputPos, &aPosEvent);
+            return QVariant(
+                QRect(aPosEvent.mnX, aPosEvent.mnY, aPosEvent.mnWidth, aPosEvent.mnHeight));
+        }
+        default:
+            return QWidget::inputMethodQuery(property);
+    }
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list