Author: yamakenz
Date: Fri Sep 21 03:08:58 2007
New Revision: 4994

Added:
   trunk/qt/quiminputcontextplugin-qt4/qtextutil.cpp
      - copied, changed from r4979, /trunk/qt/immodule-qtextutil.cpp
   trunk/qt/quiminputcontextplugin-qt4/qtextutil.h
      - copied, changed from r4979, /trunk/qt/immodule-qtextutil.h
Modified:
   trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.cpp
   trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.h
   trunk/qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro

Log:
* This commit merge most updates of Qt3 immodule (except for X Compose
  cooperation)

* quiminputcontext.h
  - Merge updates of Qt3 immodule
  - (QUimInputContext::reloadUim, QUimInputContext::textUtil,
    QUimInputContext::saveContext, QUimInputContext::restoreContext,
    QUimInputContext::switch_app_global_im_cb,
    QUimInputContext::switch_system_global_im_cb,
    QUimInputContext::switch_app_global_im,
    QUimInputContext::switch_system_global_im): New function decl
    merged from Qt3 immodule
  - (QUimInputContext::mTextUtil): New variable merged from Qt3
    immodule
  - (QUimInputContext::getPreeditString,
    QUimInputContext::getPreeditCursorPosition): Change from private
    to public to follow Qt3 immodule
* quiminputcontext.cpp
  - Merge updates of Qt3 immodule
  - (QUimInputContext::QUimInputContext,
    QUimInputContext::~QUimInputContext): Merge updates of Qt3 immodule
  - (QUimInputContext::createUimContext): Add callbacks for im
    switching and text acquisition
  - (QUimInputContext::filterEvent): Improve key handling
  - (QUimInputContext::setFocus): Remove uim_prop_label_update()
  - (QUimInputContext::reloadUim,
    QUimInputContext::switch_app_global_im_cb,
    QUimInputContext::switch_system_global_im_cb,
    QUimInputContext::saveContext, QUimInputContext::restoreContext,
    QUimInputContext::switch_app_global_im,
    QUimInputContext::switch_system_global_im, unicodeToUKey): New
    function merged from Qt3 immodule
* qtextutil.h
  - New file copied from qt/immodule-qtextutil.h
* qtextutil.cpp
  - New file copied from qt/immodule-qtextutil.cpp
  - (QUimTextUtil::acquirePrimaryText,
    QUimTextUtil::acquirePrimaryTextInQTextEdit,
    QUimTextUtil::acquireSelectionText,
    QUimTextUtil::acquireSelectionTextInQTextEdit,
    QUimTextUtil::deletePrimaryText,
    QUimTextUtil::deletePrimaryTextInQTextEdit,
    QUimTextUtil::deleteSelectionText,
    QUimTextUtil::deleteSelectionTextInQTextEdit,
    QUimTextUtil::QTextEditPositionBackward,
    QUimTextUtil::QTextEditPositionForward): Adapt to Qt4 (but Qt4's
    QTextEdit is not supported yet)
* quiminputcontextplugin.pro
  - Add qtextutil.{h,cpp}


Copied: trunk/qt/quiminputcontextplugin-qt4/qtextutil.cpp (from r4979, 
/trunk/qt/immodule-qtextutil.cpp)
==============================================================================
--- /trunk/qt/immodule-qtextutil.cpp    (original)
+++ trunk/qt/quiminputcontextplugin-qt4/qtextutil.cpp   Fri Sep 21 03:08:58 2007
@@ -30,19 +30,24 @@
 SUCH DAMAGE.
 
 */
-#include <config.h>
+
+// FIXME: Support Qt4 TextEdit
+
+//#include <config.h>
+
 #include <stdlib.h>
 
 #include <qwidget.h>
 #include <qlineedit.h>
-#include <qtextedit.h>
+//#include <qtextedit.h>
+#include <Q3TextEdit>
 #include <qapplication.h>
 #include <qclipboard.h>
 
 #include "uim/uim.h"
 
-#include "immodule-qtextutil.h"
-#include "immodule-quiminputcontext.h"
+#include "qtextutil.h"
+#include "quiminputcontext.h"
 
 
 QUimTextUtil::QUimTextUtil( QObject *parent )
@@ -128,7 +133,7 @@
     if ( mWidget->inherits( "QLineEdit" ) )
         err = acquirePrimaryTextInQLineEdit( origin, former_req_len,
                                              latter_req_len, former, latter );
-    else if ( mWidget->inherits( "QTextEdit" ) )
+    else if ( mWidget->inherits( "Q3TextEdit" ) )
         err = acquirePrimaryTextInQTextEdit( origin, former_req_len,
                                              latter_req_len, former, latter );
     else
@@ -246,7 +251,7 @@
                                              int latter_req_len,
                                              char **former, char **latter )
 {
-    QTextEdit *edit = (QTextEdit *)mWidget;
+    Q3TextEdit *edit = (Q3TextEdit *)mWidget;
     QString text;
 
     int i;
@@ -254,7 +259,7 @@
     int n_para;
     int preedit_len, preedit_cursor_pos;
     int sel_start_para, sel_start_index, sel_end_para, sel_end_index;
-    TextFormat format;
+    Qt::TextFormat format;
 
     format = edit->textFormat();
     edit->setTextFormat( Qt::PlainText );
@@ -415,7 +420,7 @@
     if ( mWidget->inherits( "QLineEdit" ) )
         err = acquireSelectionTextInQLineEdit( origin, former_req_len,
                                                latter_req_len, former, latter 
);
-    else if ( mWidget->inherits( "QTextEdit" ) )
+    else if ( mWidget->inherits( "Q3TextEdit" ) )
         err = acquireSelectionTextInQTextEdit( origin, former_req_len,
                                                latter_req_len, former, latter 
);
     else
@@ -485,13 +490,13 @@
                                                int latter_req_len,
                                                char **former, char **latter )
 {
-    QTextEdit *edit = (QTextEdit *)mWidget;
+    Q3TextEdit *edit = (Q3TextEdit *)mWidget;
     QString text;
     int len, offset, newline;
     int start_para, start_index, end_para, end_index;
     int para, index;
     bool cursor_at_beginning = false;
-    TextFormat format;
+    Qt::TextFormat format;
 
     if ( ! edit->hasSelectedText() )
         return -1;
@@ -622,7 +627,7 @@
     if ( mWidget->inherits( "QLineEdit" ) )
         err = deletePrimaryTextInQLineEdit( origin, former_req_len,
                                             latter_req_len );
-    else if ( mWidget->inherits( "QTextEdit" ) )
+    else if ( mWidget->inherits( "Q3TextEdit" ) )
         err = deletePrimaryTextInQTextEdit( origin, former_req_len,
                                             latter_req_len );
     else
@@ -718,7 +723,7 @@
                                             int former_req_len,
                                             int latter_req_len )
 {
-    QTextEdit *edit = (QTextEdit *)mWidget;
+    Q3TextEdit *edit = (Q3TextEdit *)mWidget;
     int i;
     int start_para, start_index, end_para, end_index, para, index;
     int n_para;
@@ -836,7 +841,7 @@
     if ( mWidget->inherits( "QLineEdit" ) )
         err = deleteSelectionTextInQLineEdit( origin, former_req_len,
                                               latter_req_len );
-    else if ( mWidget->inherits( "QTextEdit" ) )
+    else if ( mWidget->inherits( "Q3TextEdit" ) )
         err = deleteSelectionTextInQTextEdit( origin, former_req_len,
                                               latter_req_len );
     else
@@ -900,7 +905,7 @@
                                               int former_req_len,
                                               int latter_req_len )
 {
-    QTextEdit *edit = (QTextEdit *)mWidget;
+    Q3TextEdit *edit = (Q3TextEdit *)mWidget;
     QString text;
     int len, newline, i;
     int para, index;
@@ -974,7 +979,7 @@
 void
 QUimTextUtil::QTextEditPositionBackward( int *cursor_para, int *cursor_index )
 {
-    QTextEdit *edit = (QTextEdit *)mWidget;
+    Q3TextEdit *edit = (Q3TextEdit *)mWidget;
     int preedit_len, preedit_cursor_pos;
     int para, index;
     int current_para, current_index;
@@ -1010,7 +1015,7 @@
 void
 QUimTextUtil::QTextEditPositionForward( int *cursor_para, int *cursor_index )
 {
-    QTextEdit *edit = (QTextEdit *)mWidget;
+    Q3TextEdit *edit = (Q3TextEdit *)mWidget;
     int n_para = edit->paragraphs();
     int preedit_len, preedit_cursor_pos;
     int current_para_len;
@@ -1060,5 +1065,3 @@
     mIc->restoreContext();
     mPreeditSaved = false;
 }
-
-#include "immodule-qtextutil.moc"

Copied: trunk/qt/quiminputcontextplugin-qt4/qtextutil.h (from r4979, 
/trunk/qt/immodule-qtextutil.h)
==============================================================================
--- /trunk/qt/immodule-qtextutil.h      (original)
+++ trunk/qt/quiminputcontextplugin-qt4/qtextutil.h     Fri Sep 21 03:08:58 2007
@@ -33,6 +33,11 @@
 #ifndef _IMMODULE_QTEXT_UTIL_H_
 #define _IMMODULE_QTEXT_UTIL_H_
 
+#include <QObject>
+
+#include "uim/uim.h"
+
+
 class QUimInputContext;
 
 class QUimTextUtil : QObject

Modified: trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.cpp
==============================================================================
--- trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.cpp    (original)
+++ trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.cpp    Fri Sep 21 
03:08:58 2007
@@ -1,7 +1,6 @@
 /*
 Copyright (C) 2004 Kazuki Ohta <[EMAIL PROTECTED]>
 */
-#include "quiminputcontext.h"
 
 #include <qnamespace.h>
 #include <qevent.h>
@@ -16,11 +15,16 @@
 #include <ctype.h>
 #include <string.h>
 
+#include "quiminputcontext.h"
+#include "plugin.h"
 #include "candidatewindow.h"
+#include "quiminfomanager.h"
 #include "qhelpermanager.h"
+#include "qtextutil.h"
 
 #include <uim/uim.h>
 #include <uim/uim-scm.h>
+#include <uim/uim-im-switcher.h>
 
 #define DEFAULT_SEPARATOR_STR "|"
 
@@ -31,6 +35,8 @@
 
 QUimHelperManager * QUimInputContext::m_HelperManager = 0L;
 
+static int unicodeToUKey(ushort c);
+
 // I think that current index-based query API of uim for language and
 // input method name is useless and should be redesigned. I will
 // suggest the change in future. -- YamaKen 2004-07-28
@@ -40,6 +46,8 @@
         candwinIsActive( false ),
         m_isComposing( false )
 {
+    qDebug( "QUimInputContext()" );
+
     contextList.append( this );
 
     // must be initialized before createUimContext() call
@@ -57,17 +65,17 @@
     cwin->setQUimInputContext( this );
     cwin->hide();
 
+    mTextUtil = new QUimTextUtil( this );
+
     // read configuration
     readIMConf();
-
-    qDebug( "QUimInputContext()" );
 }
 
 QUimInputContext::~QUimInputContext()
 {
     qDebug( "~QUimInputContext()" );
 
-    contextList.removeAt( contextList.indexOf( this ) );
+    contextList.remove( this );
 
     if ( m_uc )
         uim_release_context( m_uc );
@@ -85,7 +93,7 @@
 
     uim_context uc = uim_create_context( this, "UTF-8",
                                          NULL, ( char * ) imname,
-                                         uim_iconv,
+                                         NULL,
                                          QUimInputContext::commit_cb );
 
     m_HelperManager->checkHelperConnection();
@@ -105,6 +113,15 @@
 
     uim_set_prop_list_update_cb( uc, QUimHelperManager::update_prop_list_cb );
     uim_set_prop_label_update_cb( uc, QUimHelperManager::update_prop_label_cb 
);
+
+    uim_set_im_switch_request_cb( uc,
+                                  QUimInputContext::switch_app_global_im_cb,
+                                  
QUimInputContext::switch_system_global_im_cb);
+
+    uim_set_text_acquisition_cb( uc,
+                                 QUimTextUtil::acquire_text_cb,
+                                 QUimTextUtil::delete_text_cb);
+
     uim_prop_list_update( uc );
 
     return uc;
@@ -145,69 +162,78 @@
         }
         else
         {
-            key = qkey;
+            if ( keyevent->state() & Qt::ControlButton &&
+                 ( ascii >= 0x01 && ascii <= 0x1a ) )
+                if ( keyevent->state() & Qt::ShiftButton )
+                    key = ascii + 0x40;
+                else
+                    key = ascii + 0x60;
+            else
+                key = qkey;
+        }
+    }
+    else if ( qkey == Qt::Key_unknown )
+    {
+        QString text = keyevent->text();
+        if ( !text.isNull() )
+        {
+            QChar s = text.at(0);
+            key = unicodeToUKey ( s.unicode() );
+        }
+        else
+        {
+            key = UKey_Other;
         }
     }
     else
     {
-        switch ( qkey )
+        if ( qkey >= Qt::Key_F1 && qkey <= Qt::Key_F35 )
         {
-        case Qt::Key_Tab: key = UKey_Tab; break;
-        case Qt::Key_Backspace: key = UKey_Backspace; break;
-        case Qt::Key_Escape: key = UKey_Escape; break;
-        case Qt::Key_Delete: key = UKey_Delete; break;
-        case Qt::Key_Return: key = UKey_Return; break;
-        case Qt::Key_Left: key = UKey_Left; break;
-        case Qt::Key_Up: key = UKey_Up; break;
-        case Qt::Key_Right: key = UKey_Right; break;
-        case Qt::Key_Down: key = UKey_Down; break;
-            //        case Qt::Key_Prior: key = UKey_Prior; break;
-            //        case Qt::Key_Next: key = UKey_Next; break;
-        case Qt::Key_Home: key = UKey_Home; break;
-        case Qt::Key_End: key = UKey_End; break;
-        case Qt::Key_Zenkaku_Hankaku: key = UKey_Zenkaku_Hankaku; break;
-        case Qt::Key_Multi_key: key = UKey_Multi_key; break;
-#if defined(_WS_X11_)
-        case Qt::Key_Mode_switch: key = UKey_Mode_switch; break;
-#endif
-        case Qt::Key_Henkan: key = UKey_Henkan_Mode; break;
-        case Qt::Key_Muhenkan: key = UKey_Muhenkan; break;
-        case Qt::Key_F1: key = UKey_F1; break;
-        case Qt::Key_F2: key = UKey_F2; break;
-        case Qt::Key_F3: key = UKey_F3; break;
-        case Qt::Key_F4: key = UKey_F4; break;
-        case Qt::Key_F5: key = UKey_F5; break;
-        case Qt::Key_F6: key = UKey_F6; break;
-        case Qt::Key_F7: key = UKey_F7; break;
-        case Qt::Key_F8: key = UKey_F8; break;
-        case Qt::Key_F9: key = UKey_F9; break;
-        case Qt::Key_F10: key = UKey_F10; break;
-        case Qt::Key_F11: key = UKey_F11; break;
-        case Qt::Key_F12: key = UKey_F12; break;
-        case Qt::Key_F13: key = UKey_F13; break;
-        case Qt::Key_F14: key = UKey_F14; break;
-        case Qt::Key_F15: key = UKey_F15; break;
-        case Qt::Key_F16: key = UKey_F16; break;
-        case Qt::Key_F17: key = UKey_F17; break;
-        case Qt::Key_F18: key = UKey_F18; break;
-        case Qt::Key_F19: key = UKey_F19; break;
-        case Qt::Key_F20: key = UKey_F20; break;
-        case Qt::Key_F21: key = UKey_F21; break;
-        case Qt::Key_F22: key = UKey_F22; break;
-        case Qt::Key_F23: key = UKey_F23; break;
-        case Qt::Key_F24: key = UKey_F24; break;
-        case Qt::Key_F25: key = UKey_F25; break;
-        case Qt::Key_F26: key = UKey_F26; break;
-        case Qt::Key_F27: key = UKey_F27; break;
-        case Qt::Key_F28: key = UKey_F28; break;
-        case Qt::Key_F29: key = UKey_F29; break;
-        case Qt::Key_F30: key = UKey_F30; break;
-        case Qt::Key_F31: key = UKey_F31; break;
-        case Qt::Key_F32: key = UKey_F32; break;
-        case Qt::Key_F33: key = UKey_F33; break;
-        case Qt::Key_F34: key = UKey_F34; break;
-        case Qt::Key_F35: key = UKey_F35; break;
-        default: key = UKey_Other;
+            key = qkey - Qt::Key_F1 + UKey_F1;
+        }
+        else if ( qkey >= Qt::Key_Dead_Grave && qkey <= Qt::Key_Dead_Horn ) {
+            key = qkey - Qt::Key_Dead_Grave + UKey_Dead_Grave;
+        }
+        else if ( qkey >= Qt::Key_Kanji && qkey <= Qt::Key_Eisu_toggle )
+        {
+            key = qkey - Qt::Key_Kanji + UKey_Kanji;
+        }
+        else if ( qkey >= Qt::Key_Hangul && qkey <= Qt::Key_Hangul_Special )
+        {
+            key = qkey - Qt::Key_Hangul + UKey_Hangul;
+        }
+        else
+        {
+            switch ( qkey )
+            {
+            case Qt::Key_Tab: key = UKey_Tab; break;
+            case Qt::Key_BackSpace: key = UKey_Backspace; break;
+            case Qt::Key_Escape: key = UKey_Escape; break;
+            case Qt::Key_Delete: key = UKey_Delete; break;
+            case Qt::Key_Return: key = UKey_Return; break;
+            case Qt::Key_Left: key = UKey_Left; break;
+            case Qt::Key_Up: key = UKey_Up; break;
+            case Qt::Key_Right: key = UKey_Right; break;
+            case Qt::Key_Down: key = UKey_Down; break;
+            case Qt::Key_Prior: key = UKey_Prior; break;
+            case Qt::Key_Next: key = UKey_Next; break;
+            case Qt::Key_Home: key = UKey_Home; break;
+            case Qt::Key_End: key = UKey_End; break;
+            case Qt::Key_Multi_key: key = UKey_Multi_key; break;
+            case Qt::Key_Mode_switch: key = UKey_Mode_switch; break;
+            case Qt::Key_Codeinput: key = UKey_Codeinput; break;
+            case Qt::Key_SingleCandidate: key = UKey_SingleCandidate; break;
+            case Qt::Key_MultipleCandidate: key = UKey_MultipleCandidate; 
break;
+            case Qt::Key_PreviousCandidate: key = UKey_PreviousCandidate; 
break;
+            case Qt::Key_Shift: key = UKey_Shift_key; break;
+            case Qt::Key_Control: key = UKey_Control_key; break;
+            case Qt::Key_Alt: key = UKey_Alt_key; break;
+            case Qt::Key_Meta: key = UKey_Meta_key; break;
+            case Qt::Key_CapsLock: key = UKey_Caps_Lock; break;
+            case Qt::Key_NumLock: key = UKey_Num_Lock; break;
+            case Qt::Key_ScrollLock: key = UKey_Scroll_Lock; break;
+            default: key = UKey_Other;
+            }
         }
     }
 
@@ -254,7 +280,6 @@
 
     uim_helper_client_focus_in( m_uc );
     uim_prop_list_update( m_uc );
-    uim_prop_label_update( m_uc );
 
     uim_focus_in_context( m_uc );
 }
@@ -286,6 +311,26 @@
     return focusedInputContext;
 }
 
+void QUimInputContext::reloadUim()
+{
+    QList<QUimInputContext*>::iterator it;
+    QUimInfoManager *infoManager = UimInputContextPlugin::getQUimInfoManager();
+
+    for ( it = contextList.begin(); it != contextList.end(); ++it )
+    {
+        ( *it )->reset();
+        uim_release_context( ( *it )->m_uc );
+    }
+
+    uim_quit();
+    uim_init();
+    infoManager->initUimInfo();
+
+    for ( it = contextList.begin(); it != contextList.end(); ++it )
+    {
+        ( *it )->m_uc = ( *it )->createUimContext( ( *it )->m_imname );
+    }
+}
 
 void QUimInputContext::setMicroFocus( int x, int y, int w, int h, QFont *f )
 {
@@ -420,6 +465,18 @@
     ic->candidateDeactivate();
 }
 
+void QUimInputContext::switch_app_global_im_cb( void *ptr, const char *name )
+{
+    QUimInputContext *ic = ( QUimInputContext* ) ptr;
+    ic->switch_app_global_im( name );
+}
+
+void QUimInputContext::switch_system_global_im_cb( void *ptr, const char *name 
)
+{
+    QUimInputContext *ic = ( QUimInputContext* ) ptr;
+    ic->switch_system_global_im( name );
+}
+
 void QUimInputContext::commitString( const QString& str )
 {
     QInputMethodEvent e;
@@ -468,6 +525,18 @@
     }
 }
 
+void QUimInputContext::saveContext()
+{
+    // just send IMEnd and keep preedit string
+    if ( isComposing() )
+       commitString( "" );
+}
+
+void QUimInputContext::restoreContext()
+{
+    updatePreedit();
+}
+
 bool QUimInputContext::isPreeditRelocationEnabled()
 {
     return ( language() == "ja" );
@@ -642,6 +711,29 @@
     candwinIsActive = false;
 }
 
+void QUimInputContext::switch_app_global_im( const char *name )
+{
+    QList<QUimInputContext*>::iterator it;
+    QString im_name_sym( "'" );
+
+    im_name_sym += name;
+
+    for ( it = contextList.begin(); it != contextList.end(); ++it )
+    {
+        if ( ( *it ) != this) {
+            uim_switch_im( ( *it )->uimContext(), name );
+            ( *it )->readIMConf();
+        }
+    }
+    uim_prop_update_custom(this->uimContext(), 
"custom-preserved-default-im-name", ( const char* ) im_name_sym.toUtf8() );
+}
+
+void QUimInputContext::switch_system_global_im( const char *name )
+{
+    switch_app_global_im( name );
+    QUimHelperManager::send_im_change_whole_desktop( name );
+}
+
 void QUimInputContext::readIMConf()
 {
     char * leftp = uim_scm_symbol_value_str( "candidate-window-position" );
@@ -650,4 +742,80 @@
     else
         cwin->setAlwaysLeftPosition( false );
     free( leftp );
+}
+
+static int unicodeToUKey (ushort c) {
+    int sym;
+
+    switch (c) {
+    case 0x00A5: sym = UKey_Yen; break;
+    case 0x3002: sym = UKey_Kana_Fullstop; break;
+    case 0x300C: sym = UKey_Kana_OpeningBracket; break;
+    case 0x300D: sym = UKey_Kana_ClosingBracket; break;
+    case 0x3001: sym = UKey_Kana_Comma; break;
+    case 0x30FB: sym = UKey_Kana_Conjunctive; break;
+    case 0x30F2: sym = UKey_Kana_WO; break;
+    case 0x30A1: sym = UKey_Kana_a; break;
+    case 0x30A3: sym = UKey_Kana_i; break;
+    case 0x30A5: sym = UKey_Kana_u; break;
+    case 0x30A7: sym = UKey_Kana_e; break;
+    case 0x30A9: sym = UKey_Kana_o; break;
+    case 0x30E3: sym = UKey_Kana_ya; break;
+    case 0x30E5: sym = UKey_Kana_yu; break;
+    case 0x30E7: sym = UKey_Kana_yo; break;
+    case 0x30C3: sym = UKey_Kana_tsu; break;
+    case 0x30FC: sym = UKey_Kana_ProlongedSound; break;
+    case 0x30A2: sym = UKey_Kana_A; break;
+    case 0x30A4: sym = UKey_Kana_I; break;
+    case 0x30A6: sym = UKey_Kana_U; break;
+    case 0x30A8: sym = UKey_Kana_E; break;
+    case 0x30AA: sym = UKey_Kana_O; break;
+    case 0x30AB: sym = UKey_Kana_KA; break;
+    case 0x30AD: sym = UKey_Kana_KI; break;
+    case 0x30AF: sym = UKey_Kana_KU; break;
+    case 0x30B1: sym = UKey_Kana_KE; break;
+    case 0x30B3: sym = UKey_Kana_KO; break;
+    case 0x30B5: sym = UKey_Kana_SA; break;
+    case 0x30B7: sym = UKey_Kana_SHI; break;
+    case 0x30B9: sym = UKey_Kana_SU; break;
+    case 0x30BB: sym = UKey_Kana_SE; break;
+    case 0x30BD: sym = UKey_Kana_SO; break;
+    case 0x30BF: sym = UKey_Kana_TA; break;
+    case 0x30C1: sym = UKey_Kana_CHI; break;
+    case 0x30C4: sym = UKey_Kana_TSU; break;
+    case 0x30C6: sym = UKey_Kana_TE; break;
+    case 0x30C8: sym = UKey_Kana_TO; break;
+    case 0x30CA: sym = UKey_Kana_NA; break;
+    case 0x30CB: sym = UKey_Kana_NI; break;
+    case 0x30CC: sym = UKey_Kana_NU; break;
+    case 0x30CD: sym = UKey_Kana_NE; break;
+    case 0x30CE: sym = UKey_Kana_NO; break;
+    case 0x30CF: sym = UKey_Kana_HA; break;
+    case 0x30D2: sym = UKey_Kana_HI; break;
+    case 0x30D5: sym = UKey_Kana_FU; break;
+    case 0x30D8: sym = UKey_Kana_HE; break;
+    case 0x30DB: sym = UKey_Kana_HO; break;
+    case 0x30DE: sym = UKey_Kana_MA; break;
+    case 0x30DF: sym = UKey_Kana_MI; break;
+    case 0x30E0: sym = UKey_Kana_MU; break;
+    case 0x30E1: sym = UKey_Kana_ME; break;
+    case 0x30E2: sym = UKey_Kana_MO; break;
+    case 0x30E4: sym = UKey_Kana_YA; break;
+    case 0x30E6: sym = UKey_Kana_YU; break;
+    case 0x30E8: sym = UKey_Kana_YO; break;
+    case 0x30E9: sym = UKey_Kana_RA; break;
+    case 0x30EA: sym = UKey_Kana_RI; break;
+    case 0x30EB: sym = UKey_Kana_RU; break;
+    case 0x30EC: sym = UKey_Kana_RE; break;
+    case 0x30ED: sym = UKey_Kana_RO; break;
+    case 0x30EF: sym = UKey_Kana_WA; break;
+    case 0x30F3: sym = UKey_Kana_N; break;
+    case 0x309B: sym = UKey_Kana_VoicedSound; break;
+    case 0x309C: sym = UKey_Kana_SemivoicedSound; break;
+    default:
+        sym = UKey_Other;
+        break;
+    }
+
+    return sym;
 }

Modified: trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.h
==============================================================================
--- trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.h      (original)
+++ trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.h      Fri Sep 21 
03:08:58 2007
@@ -13,6 +13,7 @@
 
 class CandidateWindow;
 class QUimHelperManager;
+class QUimTextUtil;
 
 class PreeditSegment
 {
@@ -49,11 +50,20 @@
     uim_context uimContext() { return m_uc; }
 
     static QUimInputContext *focusedIC();
+    static void reloadUim();
 
     void commitString( const QString& str );
 
     void readIMConf();
 
+    QUimTextUtil *textUtil() { return mTextUtil; }
+
+    QString getPreeditString();
+    int getPreeditCursorPosition();
+
+    void saveContext();
+    void restoreContext();
+
 protected:
     uim_context createUimContext( const char *imname );
     virtual bool isPreeditPreservationEnabled();  // not a QInputContext func
@@ -62,8 +72,6 @@
 
 private:
     void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 );
-    QString getPreeditString();
-    int getPreeditCursorPosition();
     int getPreeditSelectionLength();
     QList<QInputMethodEvent::Attribute> getPreeditAttrs();
 
@@ -78,6 +86,9 @@
     static void cand_select_cb( void *ptr, int index );
     static void cand_shift_page_cb( void* ptr, int index );
     static void cand_deactivate_cb( void *ptr );
+    //imsw
+    static void switch_app_global_im_cb( void *ptr, const char *str );
+    static void switch_system_global_im_cb( void *ptr, const char *str );
     /* real functions for callbacks (correspond order) */
     //preedit
     void clearPreedit();
@@ -87,6 +98,11 @@
     void candidateActivate( int nr, int displayLimit );
     void candidateSelect( int index );
     void candidateDeactivate();
+    //imsw
+    void switch_app_global_im( const char *str );
+    void switch_system_global_im( const char *str );
+
+    QUimTextUtil *mTextUtil;
 
 protected:
     QString m_imname;

Modified: trunk/qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro
==============================================================================
--- trunk/qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro      
(original)
+++ trunk/qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro      Fri Sep 
21 03:08:58 2007
@@ -15,13 +15,15 @@
            plugin.h \
            candidatewindow.h \
            subwindow.h \
-           quiminfomanager.h
+           quiminfomanager.h \
+           qtextutil.h
 
 SOURCES += plugin.cpp \
            qhelpermanager.cpp \
            quiminputcontext.cpp \
            candidatewindow.cpp \
            subwindow.cpp \
-           quiminfomanager.cpp
+           quiminfomanager.cpp \
+           qtextutil.cpp
 
 TARGET = uiminputcontextplugin

Reply via email to