Sophie

Sophie

distrib > Mageia > 9 > armv7hl > media > core-release-src > by-pkgid > 1c85592b61d40f1a362d33ca395a997b > files > 4

scim-1.4.18-7.mga9.src.rpm

From a99ca5e3e13fd8d278841ebd627d5be4d30956f6 Mon Sep 17 00:00:00 2001
From: Benda Xu <heroxbd@gentoo.org>
Date: Thu, 30 Jan 2020 10:40:02 +0800
Subject: [PATCH 4/7] extras/immodules/client-qt: build with Qt5.

  - Remove Qt3 and Qt4 codes.

  - This version of Qt5 builds and loads successfully, but cannot be
    actived and input characters.

  - Adoption to Qt5:

    1. Replace all #ifdef QT4 blocks to unconditional counterparts.
    2. Remove all #ifdef Q_WS_X11 blocks, as is not supported by Qt5.
    3. Migrated QInputContextPlugin -> QPlatformInputContextPlugin.
---
 .../immodules/client-qt/im-scim-bridge-qt.cpp |  26 +--
 extras/immodules/client-qt/qt3/Makefile.am    |  64 -------
 extras/immodules/client-qt/qt4/Makefile.am    |  64 -------
 .../client-qt/scim-bridge-client-common-qt.h  |   5 -
 .../scim-bridge-client-imcontext-qt.cpp       | 176 +++---------------
 .../scim-bridge-client-imcontext-qt.h         |  60 +-----
 ...cim-bridge-client-key-event-utility-qt.cpp |  71 +------
 .../scim-bridge-client-key-event-utility-qt.h |   4 -
 .../client-qt/scim-bridge-client-qt.cpp       |   2 -
 .../client-qt/scim-bridge-client-qt.h         |   5 -
 10 files changed, 36 insertions(+), 441 deletions(-)
 delete mode 100644 extras/immodules/client-qt/qt3/Makefile.am
 delete mode 100644 extras/immodules/client-qt/qt4/Makefile.am

diff --git a/extras/immodules/client-qt/im-scim-bridge-qt.cpp b/extras/immodules/client-qt/im-scim-bridge-qt.cpp
index bad0056..ddf1df6 100644
--- a/extras/immodules/client-qt/im-scim-bridge-qt.cpp
+++ b/extras/immodules/client-qt/im-scim-bridge-qt.cpp
@@ -19,14 +19,10 @@
 
 #include <cassert>
 
-#ifdef QT4
 #include <Qt>
-#include <QInputContextPlugin>
+#include <qpa/qplatforminputcontextplugin_p.h>
 
 using namespace Qt;
-#else
-#include <qinputcontextplugin.h>
-#endif
 
 #include "scim-bridge.h"
 #include "scim-bridge-client-common-qt.h"
@@ -37,8 +33,10 @@ using namespace Qt;
 static ScimBridgeClientQt *client = NULL;
 
 /* The class Definition */
-class ScimBridgeInputContextPlugin: public QInputContextPlugin
+class ScimBridgeInputContextPlugin: public QPlatformInputContextPlugin
 {
+        Q_OBJECT
+        Q_PLUGIN_METADATA(IID QPlatformInputContextFactoryInterface_iid FILE "scim.json")
 
     private:
 
@@ -59,7 +57,7 @@ class ScimBridgeInputContextPlugin: public QInputContextPlugin
 
         QString description (const QString &key);
         
-        QInputContext *create (const QString &key);
+        ScimBridgeClientIMContext *create (const QString &key, const QStringList &param) Q_DECL_OVERRIDE;
 
         QString displayName (const QString &key);
 
@@ -69,7 +67,6 @@ class ScimBridgeInputContextPlugin: public QInputContextPlugin
 /* Implementations */
 QStringList ScimBridgeInputContextPlugin::scim_languages;
 
-
 ScimBridgeInputContextPlugin::ScimBridgeInputContextPlugin ()
 {
 }
@@ -107,13 +104,10 @@ QString ScimBridgeInputContextPlugin::description (const QString &key)
 }
 
 
-QInputContext *ScimBridgeInputContextPlugin::create (const QString &key)
+ScimBridgeClientIMContext *ScimBridgeInputContextPlugin::create (const QString &key, const QStringList &param)
 {
-#ifdef QT4
+    Q_UNUSED(param);
     if (key.toLower () != SCIM_BRIDGE_IDENTIFIER_NAME) {
-#else
-    if (key.lower () != SCIM_BRIDGE_IDENTIFIER_NAME) {
-#endif
         return NULL;
     } else {
         if (client == NULL) client = new ScimBridgeClientQt ();
@@ -127,8 +121,4 @@ QString ScimBridgeInputContextPlugin::displayName (const QString &key)
     return key;
 }
 
-#ifdef QT4
-Q_EXPORT_PLUGIN2 (ScimBridgeInputContextPlugin, ScimBridgeInputContextPlugin)
-#else
-Q_EXPORT_PLUGIN (ScimBridgeInputContextPlugin)
-#endif
+#include "im-scim-bridge-qt.moc"
diff --git a/extras/immodules/client-qt/qt3/Makefile.am b/extras/immodules/client-qt/qt3/Makefile.am
deleted file mode 100644
index d4e22fb..0000000
--- a/extras/immodules/client-qt/qt3/Makefile.am
+++ /dev/null
@@ -1,64 +0,0 @@
-## Makefile.am -- Process this file with automake to produce Makefile.in
-##
-## Copyright (C) 2006 Ryo Dairiki
-##
-##
-## This library is free software; you can redistribute it and/or
-## modify it under the terms of the GNU Lesser General Public
-## License as published by the Free Software Foundation and 
-## appearing in the file LICENSE.LGPL included in the package of this file.
-## You can also redistribute it and/or modify it under the terms of 
-## the GNU General Public License as published by the Free Software Foundation and 
-## appearing in the file LICENSE.GPL included in the package of this file.
-##
-## This library is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-if SCIM_BUILD_QT3_IMMODULE
-
-AM_CPPFLAGS	= -I$(top_builddir) \
-	    	  -I$(top_srcdir) \
-			  -I$(top_srcdir)/extras/immodules/common \
-			  -I$(top_srcdir)/extras/immodules/client-common
-
-noinst_HEADERS = ../scim-bridge-client-qt.h ../scim-bridge-client-imcontext-qt.h  ../scim-bridge-client-key-event-utility-qt.h ../scim-bridge-client-common-qt.h
-
-moduledir = @QT3_IM_MODULEDIR@
-module_LTLIBRARIES = im-scim.la
-
-im_scim_la_SOURCES = ../im-scim-bridge-qt.cpp \
-							../scim-bridge-client-qt.cpp \
-							../scim-bridge-client-imcontext-qt.cpp \
-							../scim-bridge-client-key-event-utility-qt.cpp \
-							moc_scim-bridge-client-qt.cpp
-
-im_scim_la_CXXFLAGS=@QT3_CFLAGS@ -DQT_IMMODULE
-im_scim_la_CFLAGS  =@QT3_CFLAGS@ -DQT_IMMODULE
-
-im_scim_la_LDFLAGS = -rpath $(moduledir) \
-							-avoid-version -no-undefined \
-							-module \
-							@QT3_LIBS@
-
-im_scim_la_LIBADD  = $(top_builddir)/extras/immodules/common/libscimbridgecommon.la \
-					$(top_builddir)/extras/immodules/client-common/libscimbridgeclientcommon.la
-
-MOC = @QT3_MOC@
-
-moc_scim-bridge-client-qt.cpp: ../scim-bridge-client-qt.h
-	$(MOC) $< -o $@
-
-else
-
-moc_scim-bridge-client-qt.cpp:
-	touch $@
-
-endif
-
-dist-hook:
-	-rm -f $(distdir)/moc_scim-bridge-client-qt.cpp
-
-MAINTAINERCLEANFILES 	= Makefile.in
-CLEANFILES = moc_scim-bridge-client-qt.cpp
-
diff --git a/extras/immodules/client-qt/qt4/Makefile.am b/extras/immodules/client-qt/qt4/Makefile.am
deleted file mode 100644
index 7699298..0000000
--- a/extras/immodules/client-qt/qt4/Makefile.am
+++ /dev/null
@@ -1,64 +0,0 @@
-## Makefile.am -- Process this file with automake to produce Makefile.in
-##
-## Copyright (C) 2006 Ryo Dairiki
-##
-##
-## This library is free software; you can redistribute it and/or
-## modify it under the terms of the GNU Lesser General Public
-## License as published by the Free Software Foundation and 
-## appearing in the file LICENSE.LGPL included in the package of this file.
-## You can also redistribute it and/or modify it under the terms of 
-## the GNU General Public License as published by the Free Software Foundation and 
-## appearing in the file LICENSE.GPL included in the package of this file.
-##
-## This library is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-if SCIM_BUILD_QT4_IMMODULE
-
-AM_CPPFLAGS	= -I$(top_builddir) \
-	    	  -I$(top_srcdir) \
-			  -I$(top_srcdir)/extras/immodules/common \
-			  -I$(top_srcdir)/extras/immodules/client-common
-
-noinst_HEADERS = ../scim-bridge-client-qt.h ../scim-bridge-client-imcontext-qt.h ../scim-bridge-client-key-event-utility-qt.h ../scim-bridge-client-common-qt.h
-
-moduledir = @QT4_IM_MODULEDIR@
-module_LTLIBRARIES = im-scim.la
-
-im_scim_la_SOURCES = ../im-scim-bridge-qt.cpp \
-							../scim-bridge-client-qt.cpp \
-							../scim-bridge-client-imcontext-qt.cpp \
-							../scim-bridge-client-key-event-utility-qt.cpp \
-							moc_scim-bridge-client-qt.cpp
-
-im_scim_la_CXXFLAGS=@QT4_CFLAGS@ -DQT_IMMODULE -DQT4 -g -O0
-im_scim_la_CFLAGS  =@QT4_CFLAGS@ -DQT_IMMODULE -DQT4 -g -O0
-
-im_scim_la_LDFLAGS = -rpath $(moduledir) \
-							-avoid-version -no-undefined \
-							-module \
-							@QT4_LIBS@
-
-im_scim_la_LIBADD  = $(top_builddir)/extras/immodules/common/libscimbridgecommon.la \
-					$(top_builddir)/extras/immodules/client-common/libscimbridgeclientcommon.la
-
-MOC = @QT4_MOC@
-
-moc_scim-bridge-client-qt.cpp: ../scim-bridge-client-qt.h
-	$(MOC) $< -o $@
-
-else
-
-moc_scim-bridge-client-qt.cpp:
-	touch $@
-
-endif
-
-dist-hook:
-	-rm -f $(distdir)/moc_scim-bridge-client-qt.cpp
-
-MAINTAINERCLEANFILES 	= Makefile.in
-CLEANFILES = moc_scim-bridge-client-qt.cpp
-
diff --git a/extras/immodules/client-qt/scim-bridge-client-common-qt.h b/extras/immodules/client-qt/scim-bridge-client-common-qt.h
index 6e5c502..6fcac17 100644
--- a/extras/immodules/client-qt/scim-bridge-client-common-qt.h
+++ b/extras/immodules/client-qt/scim-bridge-client-common-qt.h
@@ -27,13 +27,8 @@
 #ifndef SCIMBRIDGECOMMONQT_H_
 #define SCIMBRIDGECOMMONQT_H_
 
-#ifdef QT4
 #include <QString>
 #include <QStringList>
-#else
-#include <qstring.h>
-#include <qstringlist.h>
-#endif
 
 #include "scim-bridge.h"
 
diff --git a/extras/immodules/client-qt/scim-bridge-client-imcontext-qt.cpp b/extras/immodules/client-qt/scim-bridge-client-imcontext-qt.cpp
index 2f62bcc..26c0027 100644
--- a/extras/immodules/client-qt/scim-bridge-client-imcontext-qt.cpp
+++ b/extras/immodules/client-qt/scim-bridge-client-imcontext-qt.cpp
@@ -20,16 +20,12 @@
 #include <cassert>
 #include <string>
 
-#ifdef QT4
 #include <QColor>
 #include <QInputMethodEvent>
 #include <QPalette>
 #include <QTextCharFormat>
 
-#ifdef Q_WS_X11
 #include <QX11Info>
-#endif
-#endif
 
 #include "scim-bridge-output.h"
 #include "scim-bridge-string.h"
@@ -39,13 +35,11 @@
 #include "scim-bridge-client-imcontext-qt.h"
 #include "scim-bridge-client-key-event-utility-qt.h"
 
-#ifdef QT4
 using namespace std;
 
 using namespace Qt;
 
 typedef QInputMethodEvent::Attribute QAttribute;
-#endif
 
 /* Static variables */
 class ScimBridgeClientIMContextImpl;
@@ -66,22 +60,16 @@ class ScimBridgeClientIMContextImpl: public _ScimBridgeClientIMContext
         bool x11FilterEvent (QWidget *widget, XEvent *event);
         bool filterEvent (const QEvent *event);
 
-#ifdef QT4
         void update ();
         QString identifierName ();
         QString language ();
 
-        void setFocusWidget (QWidget *widget);
+        bool isValid() const Q_DECL_OVERRIDE;
+        void setFocusObject (QObject *object) Q_DECL_OVERRIDE;
         void widgetDestroyed (QWidget *widget);
 
         bool isComposing () const;
         void mouseHandler (int offset, QMouseEvent *event);
-#else
-        void setFocus ();
-        void unsetFocus ();
-        void setMicroFocus (int x, int y, int w, int h, QFont *font = 0);
-        void mouseHandler (int offset, QEvent::Type type, ButtonState button, ButtonState state);
-#endif
 
         void reset ();
 
@@ -103,11 +91,9 @@ class ScimBridgeClientIMContextImpl: public _ScimBridgeClientIMContext
         scim_bridge_imcontext_id_t get_id () const;
         void set_id (scim_bridge_imcontext_id_t new_id);
 
-#ifdef QT4
         bool get_surrounding_text (unsigned int before_max, unsigned int after_max, char **string, int *cursor_position);
         bool delete_surrounding_text (int offset, int length);
         bool replace_surrounding_text (const char *text, int cursor_position);
-#endif
 
     private:
 
@@ -117,12 +103,7 @@ class ScimBridgeClientIMContextImpl: public _ScimBridgeClientIMContext
 
         QString preedit_string;
 
-#ifdef QT4
         QList<QAttribute> preedit_attributes;
-#else
-        int preedit_selected_offset;
-        int preedit_selected_length;
-#endif
 
         int preedit_cursor_position;
 
@@ -165,12 +146,7 @@ ScimBridgeClientIMContextImpl::ScimBridgeClientIMContextImpl (): id (-1), preedi
 {
     scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::ScimBridgeClientIMContextImpl ()");
 
-#ifdef QT4
     preedit_attributes.push_back (QAttribute (QInputMethodEvent::Cursor, preedit_cursor_position, true, 0));
-#else
-    preedit_selected_offset = 0;
-    preedit_selected_length = 0;
-#endif
 
     if (!scim_bridge_client_is_messenger_opened ()) {
         scim_bridge_perrorln ("The messenger is now down");
@@ -197,8 +173,6 @@ ScimBridgeClientIMContextImpl::~ScimBridgeClientIMContextImpl ()
     }
 }
 
-#ifdef QT4
-
 QString ScimBridgeClientIMContextImpl::identifierName ()
 {
     return SCIM_BRIDGE_IDENTIFIER_NAME;
@@ -216,16 +190,20 @@ void ScimBridgeClientIMContextImpl::widgetDestroyed (QWidget *widget)
     update ();
 }
 
-void ScimBridgeClientIMContextImpl::setFocusWidget (QWidget *widget)
+bool ScimBridgeClientIMContextImpl::isValid() const
 {
-    scim_bridge_pdebugln (4, "ScimBridgeClientIMContextImpl::setFocusWidget ()");
-    QInputContext::setFocusWidget (widget);
-	if (widget == NULL) {
-    	focus_out ();
-	}
-	else {
-    	focus_in ();
-	}
+    return true;
+}
+
+void ScimBridgeClientIMContextImpl::setFocusObject (QObject *object)
+{
+    scim_bridge_pdebugln (4, "ScimBridgeClientIMContextImpl::setFocusObject ()");
+    QPlatformInputContext::setFocusObject (object);
+    if (object == NULL) {
+        focus_out ();
+    } else {
+        focus_in ();
+    }
     update ();
 }
 
@@ -276,43 +254,10 @@ bool ScimBridgeClientIMContextImpl::replace_surrounding_text (const char *text,
     return false;
 }
 
-#else
-
-void ScimBridgeClientIMContextImpl::setFocus ()
-{
-    scim_bridge_pdebugln (4, "ScimBridgeClientIMContextImpl::setFocus ()");
-    
-    focus_in ();
-}
-
-
-void ScimBridgeClientIMContextImpl::unsetFocus ()
-{
-    scim_bridge_pdebugln (4, "ScimBridgeClientIMContextImpl::unsetFocus ()");
-    
-    focus_out ();
-}
-
-
-void ScimBridgeClientIMContextImpl::setMicroFocus (int x, int y, int w, int h, QFont *qfont)
-{
-    scim_bridge_pdebugln (4, "ScimBridgeClientIMContextImpl::setMicroFocus ()");
-
-    QPoint new_cursor_location (x, y + h);
-    set_cursor_location (new_cursor_location);
-}
-
-void ScimBridgeClientIMContextImpl::mouseHandler (int offset, QEvent::Type type, ButtonState button, ButtonState state)
-{
-}
-#endif
-
-
 bool ScimBridgeClientIMContextImpl::x11FilterEvent (QWidget *widget, XEvent *xevent)
 {
     scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::x11FilterEvent ()");
 
-#ifdef Q_WS_X11
     if (key_event_forwarded || (xevent->type != XKeyPress && xevent->type != XKeyRelease)) return false;
     
     if (focused_imcontext != this) focus_in ();
@@ -331,17 +276,14 @@ bool ScimBridgeClientIMContextImpl::x11FilterEvent (QWidget *widget, XEvent *xev
             return consumed;
         }
     }
-#endif
 
     return false;
 }
 
-
 bool ScimBridgeClientIMContextImpl::filterEvent (const QEvent *qevent)
 {
     scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::filterEvent ()");
 
-#ifndef Q_WS_X11
     if (key_event_forwarded || (qevent->type () != QEvent::KeyPress && qevent->type () != QEvent::KeyRelease)) return false;
     
     if (focused_imcontext != this) focus_in ();
@@ -364,7 +306,6 @@ bool ScimBridgeClientIMContextImpl::filterEvent (const QEvent *qevent)
             return consumed;
         }
     }
-#endif
 
     return false;
 }
@@ -375,13 +316,8 @@ void ScimBridgeClientIMContextImpl::reset ()
     scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::reset ()");
 
     preedit_cursor_position = 0;
-#ifdef QT4
     preedit_attributes.clear ();
     preedit_attributes.push_back (QAttribute (QInputMethodEvent::Cursor, preedit_cursor_position, true, 0));
-#else
-    preedit_selected_offset = 0;
-    preedit_selected_length = 0;
-#endif
     preedit_string = "";
 
     if (scim_bridge_client_is_messenger_opened ()) {
@@ -389,10 +325,6 @@ void ScimBridgeClientIMContextImpl::reset ()
             scim_bridge_perrorln ("An IOException at filterEvent ()");
         }
     }
-
-#ifndef QT4
-    QInputContext::reset ();
-#endif
 }
 
 
@@ -469,20 +401,16 @@ void ScimBridgeClientIMContextImpl::commit ()
     scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::commit ()");
     
     if (commit_string.length () <= 0) return;
-#ifdef QT4
     scim_bridge_pdebugln (9, "commit string: %s", commit_string.toUtf8 ().data ());
-#endif
+
+    QObject *input = qApp->focusObject();
+    if (!input) return;
 
     const bool is_composing = isComposing ();
 
-#ifdef QT4
     QInputMethodEvent commit_event;
     commit_event.setCommitString (commit_string);
-    sendEvent (commit_event);
-#else
-    if (!is_composing) sendIMEvent (QEvent::IMStart);
-    sendIMEvent (QEvent::IMEnd, commit_string);
-#endif
+    QCoreApplication::sendEvent (input, &commit_event);
 
     if (is_composing) update_preedit ();
 }
@@ -495,21 +423,9 @@ void ScimBridgeClientIMContextImpl::forward_key_event (const ScimBridgeKeyEvent
     QWidget *focused_widget = qApp->focusWidget ();
     if (focused_widget != NULL) {
         key_event_forwarded = true;
-#ifdef Q_WS_X11
-        const WId window_id = focused_widget->winId ();
-#ifdef QT4
-        Display *x11_display = QX11Info::display();
-#else
-        Display *x11_display = qt_xdisplay ();
-#endif
-        XEvent *x_event = scim_bridge_key_event_bridge_to_x11 (key_event, x11_display, window_id);
-        qApp->x11ProcessEvent (x_event);
-        free (x_event);
-#else
         QKeyEvent *forwarded_key_event = scim_bridge_key_event_bridge_to_qt (key_event);
         QApplication::sendEvent (focused_widget, forwarded_key_event);
         delete forwarded_key_event;
-#endif
         key_event_forwarded = false;
     } else {
         scim_bridge_pdebugln (4, "No widget is focused");
@@ -525,13 +441,8 @@ void ScimBridgeClientIMContextImpl::set_preedit_shown (bool shown)
     if (!preedit_shown) {
         preedit_string = "";
         preedit_cursor_position = 0;
-#ifdef QT4
         preedit_attributes.clear ();
         preedit_attributes.push_back (QAttribute (QInputMethodEvent::Cursor, preedit_cursor_position, true, 0));
-#else
-        preedit_selected_offset = 0;
-        preedit_selected_length = 0;
-#endif
     }
 }
 
@@ -554,13 +465,8 @@ void ScimBridgeClientIMContextImpl::set_preedit_attributes (ScimBridgeAttribute*
 {
     scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::set_preedit_attribute ()");
     
-#ifdef QT4
     preedit_attributes.clear ();
     preedit_attributes.push_back (QAttribute (QInputMethodEvent::Cursor, preedit_cursor_position, true, 0));
-#else
-    preedit_selected_offset = 0;
-    preedit_selected_length = 0;
-#endif
 
     for (int i = 0; i < attribute_count; ++i) {
         const ScimBridgeAttribute *attribute = attributes[i];
@@ -570,7 +476,6 @@ void ScimBridgeClientIMContextImpl::set_preedit_attributes (ScimBridgeAttribute*
         const scim_bridge_attribute_type_t attribute_type = scim_bridge_attribute_get_type (attribute);
         const scim_bridge_attribute_value_t attribute_value = scim_bridge_attribute_get_value (attribute);
 
-#ifdef QT4
         const size_t attribute_length = attribute_end - attribute_begin;
 
         const QWidget *focused_widget = qApp->focusWidget ();
@@ -637,13 +542,6 @@ void ScimBridgeClientIMContextImpl::set_preedit_attributes (ScimBridgeAttribute*
         default:
             break;
         }
-#else
-        if (attribute_type == ATTRIBUTE_DECORATE && (attribute_value == SCIM_BRIDGE_ATTRIBUTE_DECORATE_HIGHLIGHT || attribute_value == SCIM_BRIDGE_ATTRIBUTE_DECORATE_REVERSE)) {
-            preedit_selected_offset = attribute_begin;
-            preedit_selected_length = attribute_end - attribute_begin;
-            break;
-        }
-#endif
     }
 }
 
@@ -652,26 +550,13 @@ void ScimBridgeClientIMContextImpl::update_preedit ()
 {
     scim_bridge_pdebugln (5, "ScimBridgeClientIMContextImpl::update_preedit ()");
 
-#ifdef QT4
+    QObject *input = qApp->focusObject();
+    if (!input) return;
+
     preedit_attributes[0] = QAttribute (QInputMethodEvent::Cursor, preedit_cursor_position, true, 0);
     QInputMethodEvent im_event (preedit_string, preedit_attributes);
-    sendEvent (im_event);
+    QCoreApplication::sendEvent(input, &im_event);
     update ();
-#else
-    if (preedit_shown) {
-        if (!isComposing ()) sendIMEvent (QEvent::IMStart);
-        const size_t preedit_length = preedit_string.length ();
-
-        size_t cursor_position = preedit_cursor_position;
-        if (cursor_position > preedit_length) cursor_position = preedit_length;
-
-        size_t selected_length = preedit_selected_length;
-        if (cursor_position + selected_length > preedit_length) selected_length = preedit_length - cursor_position;
-        sendIMEvent (QEvent::IMCompose, preedit_string, cursor_position, selected_length);
-    } else {
-        if (isComposing ()) sendIMEvent (QEvent::IMEnd);
-    }
-#endif
 }
 
 
@@ -780,37 +665,22 @@ void scim_bridge_client_imcontext_update_preedit (ScimBridgeClientIMContext *imc
 
 boolean scim_bridge_client_imcontext_get_surrounding_text (ScimBridgeClientIMContext *imcontext, int before_max, int after_max, char **string, int *cursor_position)
 {
-#ifdef QT4
     ScimBridgeClientIMContextImpl *imcontext_impl = static_cast<ScimBridgeClientIMContextImpl*> (imcontext);
     return imcontext_impl->get_surrounding_text (before_max, after_max, string, cursor_position);
-#else
-    scim_bridge_perrorln ("FIXME: scim_bridge_client_imcontext_get_surrounding_text () is not yet implemented.");
-    return FALSE;
-#endif
 }
 
 
 boolean scim_bridge_client_imcontext_delete_surrounding_text (ScimBridgeClientIMContext *imcontext, int offset, int length)
 {
-#ifdef QT4
     ScimBridgeClientIMContextImpl *imcontext_impl = static_cast<ScimBridgeClientIMContextImpl*> (imcontext);
     return imcontext_impl->delete_surrounding_text (offset, length);
-#else
-    scim_bridge_perrorln ("FIXME: scim_bridge_client_imcontext_delete_surrounding_text () is not yet implemented.");
-    return FALSE;
-#endif
 }
 
 
 boolean scim_bridge_client_imcontext_replace_surrounding_text (ScimBridgeClientIMContext *imcontext, int cursor_position, const char *string)
 {
-#ifdef QT4
     ScimBridgeClientIMContextImpl *imcontext_impl = static_cast<ScimBridgeClientIMContextImpl*> (imcontext);
     return imcontext_impl->replace_surrounding_text (string, cursor_position);
-#else
-    scim_bridge_perrorln ("FIXME: scim_bridge_client_imcontext_replace_surrounding_text () is not yet implemented.");
-    return FALSE;
-#endif
 }
 
 
diff --git a/extras/immodules/client-qt/scim-bridge-client-imcontext-qt.h b/extras/immodules/client-qt/scim-bridge-client-imcontext-qt.h
index 2e7abad..4bec2f7 100644
--- a/extras/immodules/client-qt/scim-bridge-client-imcontext-qt.h
+++ b/extras/immodules/client-qt/scim-bridge-client-imcontext-qt.h
@@ -26,25 +26,14 @@
 #ifndef SCIMBRIDGECLIENTIMCONTEXTQT_H_
 #define SCIMBRIDGECLIENTIMCONTEXTQT_H_
 
-#ifdef QT4
 #include <QApplication>
 #include <QEvent>
 #include <QFont>
-#include <QInputContext>
+#include <qpa/qplatforminputcontext.h>
 #include <QInputMethodEvent>
 #include <QObject>
 #include <QPoint>
 #include <QWidget>
-#else
-#include <qapplication.h>
-#include <qevent.h>
-#include <qfont.h>
-#include <qinputcontext.h>
-#include <qobject.h>
-#include <qptrlist.h>
-#include <qpoint.h>
-#include <qwidget.h>
-#endif
 
 #include "scim-bridge.h"
 #include "scim-bridge-attribute.h"
@@ -56,7 +45,7 @@
 /**
  * IMContext class for qt client.
  */
-struct _ScimBridgeClientIMContext: public QInputContext
+struct _ScimBridgeClientIMContext: public QPlatformInputContext
 {
 
     public:
@@ -93,15 +82,6 @@ struct _ScimBridgeClientIMContext: public QInputContext
          */
         virtual ~_ScimBridgeClientIMContext () {}
 
-        /**
-         * Filter a event from X11.
-         *
-         * @param widget The widget.
-         * @param A event from X11.
-         * @return If this event is consumed or not.
-         */
-        virtual bool x11FilterEvent (QWidget *widget, XEvent *event) = 0;
-
         /**
          * Filter a key event.
          *
@@ -110,7 +90,6 @@ struct _ScimBridgeClientIMContext: public QInputContext
          */
         virtual bool filterEvent (const QEvent *event) = 0;
 
-#ifdef QT4
         /**
          * The focus has been changed.
          */
@@ -145,41 +124,6 @@ struct _ScimBridgeClientIMContext: public QInputContext
          */
         virtual void widgetDestroyed (QWidget *widget) = 0;
 
-#else
-
-        /**
-         * Focus an IMContext.
-         */
-        virtual void setFocus () = 0;
-
-        /**
-         * Unfocus an IMContext.
-         */
-        virtual void unsetFocus () = 0;
-        
-        /**
-         * Set the focused area in the display.
-         *
-         * @param x The X loation of the focused area.
-         * @param y The Y loation of the focused area.
-         * @param w The width of the focused area.
-         * @param h The height of the focused area.
-         * @param font The font.
-         */
-        virtual void setMicroFocus (int x, int y, int w, int h, QFont *font = 0) = 0;
-
-        /**
-         * Filter a mouse event.
-         *
-         * @param offset The cursor offset in the preedit string.
-         * @param type The type of the event.
-         * @param button The button of this event.
-         * @param state The state of the button.
-         */
-        virtual void mouseHandler (int offset, QEvent::Type type, ButtonState button, ButtonState state) = 0;
-
-#endif
-
         /**
          * Reset the current IME.
          */
diff --git a/extras/immodules/client-qt/scim-bridge-client-key-event-utility-qt.cpp b/extras/immodules/client-qt/scim-bridge-client-key-event-utility-qt.cpp
index 5db24ba..5d52ea3 100644
--- a/extras/immodules/client-qt/scim-bridge-client-key-event-utility-qt.cpp
+++ b/extras/immodules/client-qt/scim-bridge-client-key-event-utility-qt.cpp
@@ -22,15 +22,10 @@
 #include <cstdlib>
 #include <map>
 
-#ifdef QT4
 #include <QApplication>
 #include <QChar>
 #include <QEvent>
 #include <QKeyEvent>
-#else
-#include <qapplication.h>
-#include <qkeycode.h>
-#endif
 
 #include "scim-bridge-output.h"
 #include "scim-bridge-client-key-event-utility-qt.h"
@@ -82,13 +77,8 @@ static void static_initialize ()
     register_key (Qt::Key_Up, SCIM_BRIDGE_KEY_CODE_Up);
     register_key (Qt::Key_Right, SCIM_BRIDGE_KEY_CODE_Right);
     register_key (Qt::Key_Down, SCIM_BRIDGE_KEY_CODE_Down);
-#ifdef QT4
     register_key (Qt::Key_PageUp, SCIM_BRIDGE_KEY_CODE_Prior);
-    register_key (Qt::Key_PageUp, SCIM_BRIDGE_KEY_CODE_Next);
-#else
-    register_key (Qt::Key_Prior, SCIM_BRIDGE_KEY_CODE_Prior);
-    register_key (Qt::Key_Next, SCIM_BRIDGE_KEY_CODE_Next);
-#endif
+    register_key (Qt::Key_PageDown, SCIM_BRIDGE_KEY_CODE_Next);
     register_key (Qt::Key_CapsLock, SCIM_BRIDGE_KEY_CODE_Caps_Lock);
     register_key (Qt::Key_NumLock, SCIM_BRIDGE_KEY_CODE_Num_Lock);
     register_key (Qt::Key_ScrollLock, SCIM_BRIDGE_KEY_CODE_Scroll_Lock);
@@ -184,34 +174,17 @@ QKeyEvent *scim_bridge_key_event_bridge_to_qt (const ScimBridgeKeyEvent *bridge_
     if (bridge_key_code < 0x1000) {
         if (bridge_key_code >= SCIM_BRIDGE_KEY_CODE_a && bridge_key_code <= SCIM_BRIDGE_KEY_CODE_z) {
             ascii_code = bridge_key_code;
-#ifdef QT4
-            qt_key_code = QChar (ascii_code).toUpper ().toAscii ();
-#else
-            qt_key_code = QChar (ascii_code).upper ();
-#endif
+            qt_key_code = QChar (ascii_code).toUpper ().toLatin1 ();
         } else {
             ascii_code = bridge_key_code;
             qt_key_code = bridge_key_code;
         }
     } else if (bridge_key_code < 0x3000) {
-#ifdef Q_WS_WIN
         qt_key_code = bridge_key_code;
     } else {
-        qt_key_code = Key_unknown;
+        qt_key_code = Qt::Key_unknown;
     }
-#else
-        qt_key_code = bridge_key_code | Qt::UNICODE_ACCEL;
-    } else {
-        map<scim_bridge_key_code_t, int>::iterator iter = bridge_to_qt_key_map.find (bridge_key_code);
-        if (iter != bridge_to_qt_key_map.end ()) {
-            qt_key_code = iter->second;
-        } else {
-            qt_key_code = Qt::Key_unknown;
-        }
-    }
-#endif
 
-#ifdef QT4
     Qt::KeyboardModifiers modifiers = Qt::NoModifier;
 
     if (scim_bridge_key_event_is_alt_down (bridge_key_event)) modifiers |= Qt::AltModifier;
@@ -220,16 +193,6 @@ QKeyEvent *scim_bridge_key_event_bridge_to_qt (const ScimBridgeKeyEvent *bridge_
     if (scim_bridge_key_event_is_meta_down (bridge_key_event)) modifiers |= Qt::MetaModifier;
 
     return new QKeyEvent (type, qt_key_code, modifiers);
-#else
-    unsigned int modifiers = 0;
-
-    if (scim_bridge_key_event_is_alt_down (bridge_key_event)) modifiers |= Qt::AltButton;
-    if (scim_bridge_key_event_is_shift_down (bridge_key_event)) modifiers |= Qt::ShiftButton;
-    if (scim_bridge_key_event_is_control_down (bridge_key_event)) modifiers |= Qt::ControlButton;
-    if (scim_bridge_key_event_is_meta_down (bridge_key_event)) modifiers |= Qt::MetaButton;
-
-    return new QKeyEvent (type, qt_key_code, ascii_code, modifiers);
-#endif
 }
 
 
@@ -239,7 +202,6 @@ ScimBridgeKeyEvent *scim_bridge_key_event_qt_to_bridge (const QKeyEvent *key_eve
     
     ScimBridgeKeyEvent *bridge_key_event = scim_bridge_alloc_key_event ();
 
-#ifdef QT4
     const Qt::KeyboardModifiers modifiers = key_event->modifiers ();
 
     if (modifiers & Qt::ShiftModifier) {
@@ -254,22 +216,6 @@ ScimBridgeKeyEvent *scim_bridge_key_event_qt_to_bridge (const QKeyEvent *key_eve
     if (modifiers & Qt::MetaModifier) {
         scim_bridge_key_event_set_meta_down (bridge_key_event, TRUE);
     }
-#else
-    const int modifiers = key_event->state ();
-
-    if (modifiers & Qt::ShiftButton) {
-        scim_bridge_key_event_set_shift_down (bridge_key_event, TRUE);
-    }
-    if (modifiers & Qt::ControlButton) {
-        scim_bridge_key_event_set_control_down (bridge_key_event, TRUE);
-    }
-    if (modifiers & Qt::AltButton) {
-        scim_bridge_key_event_set_alt_down (bridge_key_event, TRUE);
-    }
-    if (modifiers & Qt::MetaButton) {
-        scim_bridge_key_event_set_meta_down (bridge_key_event, TRUE);
-    }
-#endif
 
     const int qt_key_code = key_event->key ();
     int bridge_key_code;
@@ -294,17 +240,9 @@ ScimBridgeKeyEvent *scim_bridge_key_event_qt_to_bridge (const QKeyEvent *key_eve
         }
         
         if (!scim_bridge_key_event_is_caps_lock_down (bridge_key_event) ^ scim_bridge_key_event_is_shift_down (bridge_key_event)) {
-#ifdef QT4
 	        bridge_key_code = QChar (qt_key_code).toLower ().unicode ();
-#else
-	        bridge_key_code = QChar (qt_key_code).lower ().unicode ();
-#endif
 	    } else {
-#ifdef QT4
 	        bridge_key_code = QChar (qt_key_code).toUpper ().unicode ();
-#else
-	        bridge_key_code = QChar (qt_key_code).upper ().unicode ();
-#endif
 	    }
     } else {
         map<int, scim_bridge_key_code_t>::iterator iter = qt_to_bridge_key_map.find (qt_key_code);
@@ -324,7 +262,6 @@ ScimBridgeKeyEvent *scim_bridge_key_event_qt_to_bridge (const QKeyEvent *key_eve
 }
 
 
-#ifdef Q_WS_X11
 XEvent *scim_bridge_key_event_bridge_to_x11 (const ScimBridgeKeyEvent *bridge_key_event, Display *display, WId window_id)
 {
     XEvent *x_event = static_cast<XEvent*> (malloc (sizeof (XEvent)));
@@ -412,5 +349,3 @@ ScimBridgeKeyEvent* scim_bridge_key_event_x11_to_bridge (const XEvent *x_event)
     
     return bridge_key_event;
 }
-
-#endif
diff --git a/extras/immodules/client-qt/scim-bridge-client-key-event-utility-qt.h b/extras/immodules/client-qt/scim-bridge-client-key-event-utility-qt.h
index c099957..09f2f5d 100644
--- a/extras/immodules/client-qt/scim-bridge-client-key-event-utility-qt.h
+++ b/extras/immodules/client-qt/scim-bridge-client-key-event-utility-qt.h
@@ -32,7 +32,6 @@
 
 #include "scim-bridge-client-common-qt.h"
 
-#ifdef Q_WS_X11
 #include <X11/Xlib.h>
 #include <X11/keysym.h>
 #include <X11/Xutil.h>
@@ -40,7 +39,6 @@ static const int XKeyPress = KeyPress;
 static const int XKeyRelease = KeyRelease;
 #undef KeyPress
 #undef KeyRelease
-#endif
 
 class QKeyEvent;
 
@@ -60,7 +58,6 @@ QKeyEvent *scim_bridge_key_event_bridge_to_qt (const ScimBridgeKeyEvent *bridge_
  */
 ScimBridgeKeyEvent *scim_bridge_key_event_qt_to_bridge (const QKeyEvent *qt_key_event);
 
-#ifdef Q_WS_X11
 /**
  * Translate a key event from scim-bridge into X11.
  *
@@ -79,6 +76,5 @@ XEvent *scim_bridge_key_event_bridge_to_x11 (const ScimBridgeKeyEvent *bridge_ke
  * @return The key event from scim-bridge.
  */
 ScimBridgeKeyEvent* scim_bridge_key_event_x11_to_bridge (const XEvent *x11_event);
-#endif
 
 #endif                                            /*SCIMBRIDGECLIENTKEYEVENTUTILITYQT_H_*/
diff --git a/extras/immodules/client-qt/scim-bridge-client-qt.cpp b/extras/immodules/client-qt/scim-bridge-client-qt.cpp
index 4ad24fa..7495ca6 100644
--- a/extras/immodules/client-qt/scim-bridge-client-qt.cpp
+++ b/extras/immodules/client-qt/scim-bridge-client-qt.cpp
@@ -23,9 +23,7 @@
 
 #include "scim-bridge-client-qt.h"
 
-#ifdef QT4
 using namespace Qt;
-#endif
 
 /* Static variables */
 static ScimBridgeClientQt *client = NULL;
diff --git a/extras/immodules/client-qt/scim-bridge-client-qt.h b/extras/immodules/client-qt/scim-bridge-client-qt.h
index dd0ce51..65ad450 100644
--- a/extras/immodules/client-qt/scim-bridge-client-qt.h
+++ b/extras/immodules/client-qt/scim-bridge-client-qt.h
@@ -26,13 +26,8 @@
 #ifndef SCIMBRIDGECLIENTQT_H_
 #define SCIMBRIDGECLIENTQT_H_
 
-#ifdef QT4
 #include <QObject>
 #include <QSocketNotifier>
-#else
-#include <qobject.h>
-#include <qsocketnotifier.h>
-#endif
 
 #include "scim-bridge.h"
 #include "scim-bridge-client-imcontext-qt.h"
-- 
2.37.3