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