Author: yamakenz
Date: Wed Sep 19 13:59:27 2007
New Revision: 4982

Modified:
   trunk/qt/Makefile.am
   trunk/qt/immodule-plugin.cpp
   trunk/qt/immodule-quiminputcontext.cpp
   trunk/qt/immodule-quiminputcontext.h
   trunk/uim/uim-x-kana-input-hack.c
   trunk/uim/uim-x-util.h

Log:
* This commit add the Japanese kana-input hack to Qt3 immodule

* uim/uim-x-util.h
  - (uim_x_kana_input_hack_filter_event): New function decl
* uim/uim-x-kana-input-hack.c
  - (uim_x_kana_input_hack_filter_event): New function
* qt/immodule-quiminputcontext.h
  - (UIM_QT_USE_JAPANESE_KANA_KEYBOARD_HACK): New macro
  - (class QUimInputContext): Add decl for x11FilterEvent()
* qt/immodule-quiminputcontext.cpp
  - Include Xlib.h and uim-x-util.h
  - (QUimInputContext::x11FilterEvent): New function
* qt/immodule-plugin.cpp
  - Include qwindowdefs.h and uim-x-util.h
  - (UimInputContextPlugin::uimInit): Add uim_x_kana_input_hack_init()
* qt/Makefile.am
  - (libquiminputcontextplugin_la_CXXFLAGS): Add @X_CFLAGS@
  - (libquiminputcontextplugin_la_LIBADD): Add libuim-x-util.la


Modified: trunk/qt/Makefile.am
==============================================================================
--- trunk/qt/Makefile.am        (original)
+++ trunk/qt/Makefile.am        Wed Sep 19 13:59:27 2007
@@ -103,10 +103,13 @@
        immodule-qtextutil.cpp immodule-qtextutil.h \
        immodule-quiminfomanager.cpp immodule-quiminfomanager.h \
        immodule-subwindow.cpp immodule-subwindow.h
-libquiminputcontextplugin_la_CXXFLAGS = $(QT_CXXFLAGS)
+libquiminputcontextplugin_la_CXXFLAGS = $(QT_CXXFLAGS) @X_CFLAGS@
 libquiminputcontextplugin_la_LDFLAGS  = $(QT_LDFLAGS) -avoid-version
 libquiminputcontextplugin_la_LIBADD   = $(top_builddir)/uim/libuim-scm.la \
                                        $(top_builddir)/uim/libuim.la
+if LIBUIM_X_UTIL
+libquiminputcontextplugin_la_LIBADD  += $(top_builddir)/uim/libuim-x-util.la
+endif
 
 immodule-candidatewindow.cpp: immodule-candidatewindow.moc
 immodule-qhelpermanager.cpp: immodule-qhelpermanager.moc

Modified: trunk/qt/immodule-plugin.cpp
==============================================================================
--- trunk/qt/immodule-plugin.cpp        (original)
+++ trunk/qt/immodule-plugin.cpp        Wed Sep 19 13:59:27 2007
@@ -33,6 +33,9 @@
 #include <config.h>
 
 #include <qinputcontext.h>
+#if UIM_QT_USE_JAPANESE_KANA_KEYBOARD_HACK
+#include <qwindowdefs.h>
+#endif
 
 #include <locale.h>
 
@@ -42,6 +45,10 @@
 #include "immodule-quiminputcontext_with_slave.h"
 #include "immodule-quiminfomanager.h"
 
+#if UIM_QT_USE_JAPANESE_KANA_KEYBOARD_HACK
+#include "uim/uim-x-util.h"
+#endif
+
 QUimInfoManager *UimInputContextPlugin::infoManager = NULL;
 
 
@@ -117,6 +124,9 @@
     if ( !uim_init() ) {
         if (!infoManager)
             infoManager = new QUimInfoManager();
+#if UIM_QT_USE_JAPANESE_KANA_KEYBOARD_HACK
+       uim_x_kana_input_hack_init(qt_xdisplay());
+#endif
         uimReady = true;
     }
 }

Modified: trunk/qt/immodule-quiminputcontext.cpp
==============================================================================
--- trunk/qt/immodule-quiminputcontext.cpp      (original)
+++ trunk/qt/immodule-quiminputcontext.cpp      Wed Sep 19 13:59:27 2007
@@ -59,6 +59,12 @@
 #include "immodule-quiminputcontext_compose.h"
 #endif
 
+#if UIM_QT_USE_JAPANESE_KANA_KEYBOARD_HACK
+#include <X11/Xlib.h>
+
+#include "uim/uim-x-util.h"
+#endif
+
 #define DEFAULT_SEPARATOR_STR "|"
 
 QUimInputContext *focusedInputContext = NULL;
@@ -171,6 +177,21 @@
 
     return uc;
 }
+
+#ifdef Q_WS_X11
+bool QUimInputContext::x11FilterEvent( QWidget *keywidget, XEvent *event )
+{
+    // to suppress warning
+    keywidget = keywidget;
+    event = event;
+
+#if UIM_QT_USE_JAPANESE_KANA_KEYBOARD_HACK
+    return uim_x_kana_input_hack_filter_event( m_uc, event );
+#else
+    return FALSE;
+#endif
+}
+#endif // Q_WS_X11
 
 bool QUimInputContext::filterEvent( const QEvent *event )
 {

Modified: trunk/qt/immodule-quiminputcontext.h
==============================================================================
--- trunk/qt/immodule-quiminputcontext.h        (original)
+++ trunk/qt/immodule-quiminputcontext.h        Wed Sep 19 13:59:27 2007
@@ -36,6 +36,10 @@
 #include <qinputcontext.h>
 #include <qptrlist.h>
 
+#ifdef Q_WS_X11
+#define UIM_QT_USE_JAPANESE_KANA_KEYBOARD_HACK 1
+#endif
+
 class QString;
 
 class CandidateWindow;
@@ -69,6 +73,9 @@
     virtual QString identifierName();
     virtual QString language();
 
+#ifdef Q_WS_X11
+    virtual bool x11FilterEvent( QWidget *keywidget, XEvent *event );
+#endif
     virtual bool filterEvent( const QEvent *event );
     virtual void reset();
     virtual void setFocus();

Modified: trunk/uim/uim-x-kana-input-hack.c
==============================================================================
--- trunk/uim/uim-x-kana-input-hack.c   (original)
+++ trunk/uim/uim-x-kana-input-hack.c   Wed Sep 19 13:59:27 2007
@@ -77,6 +77,37 @@
   return ukey;
 }
 
+int
+uim_x_kana_input_hack_filter_event(uim_context uc, XEvent *event)
+{
+  unsigned int keycode;
+  int translated_key;
+  KeySym keysym;
+
+  if (event->type != KeyPress && event->type != KeyRelease)
+    return UIM_FALSE;
+
+  /* Only unmodified keys are translated. */
+  if (!event->xkey.state) {
+    keycode = event->xkey.keycode;
+    keysym = XLookupKeysym(&event->xkey, UNMODIFIED_KEYSYM_INDEX);
+    translated_key = uim_x_kana_input_hack_translate_key(keysym, keycode);
+
+    if (translated_key == UKey_Yen) {
+      int not_filtered;
+
+      if (event->type == KeyPress)
+       not_filtered = uim_press_key(uc, translated_key, 0);
+      else
+       not_filtered = uim_release_key(uc, translated_key, 0);
+
+      if (!not_filtered)
+       return UIM_TRUE;
+    }
+  }
+  return UIM_FALSE;
+}
+
 void
 uim_x_kana_input_hack_init(Display *display)
 {

Modified: trunk/uim/uim-x-util.h
==============================================================================
--- trunk/uim/uim-x-util.h      (original)
+++ trunk/uim/uim-x-util.h      Wed Sep 19 13:59:27 2007
@@ -41,6 +41,7 @@
 #endif
 
 int uim_x_kana_input_hack_translate_key(int ukey, KeyCode hardware_keycode);
+int uim_x_kana_input_hack_filter_event(uim_context uc, XEvent *event);
 void uim_x_kana_input_hack_init(Display *display);
 
 #ifdef __cplusplus

Reply via email to