Revision: 7258
Author:   nogu.dev
Date:     Fri Aug 12 01:51:53 2011
Log:      * qt4/immodule/qtextutil.cpp
  - (QUimTextUtil::acquirePrimaryTextInQLineEdit,
     QUimTextUtil::acquirePrimaryTextInQTextEdit,
     QUimTextUtil::deletePrimaryTextInQLineEdit,
     QUimTextUtil::deletePrimaryTextInQTextEdit):
    Fix bugs in handling of surrounding text.
http://code.google.com/p/uim/source/detail?r=7258

Modified:
 /trunk/qt4/immodule/qtextutil.cpp

=======================================
--- /trunk/qt4/immodule/qtextutil.cpp   Fri Aug 12 01:51:38 2011
+++ /trunk/qt4/immodule/qtextutil.cpp   Fri Aug 12 01:51:53 2011
@@ -157,12 +157,12 @@
     preedit_len = mIc->getPreeditString().length();
     preedit_cursor_pos = mIc->getPreeditCursorPosition();

-    text = edit->text(); // including preedit string
+    text = edit->text(); // excluding preedit string
     len = text.length();
-    cursor_index = edit->cursorPosition();
+    cursor_index = edit->cursorPosition() + preedit_len;

     precedence_len = cursor_index - preedit_cursor_pos;
-    following_len = len - precedence_len - preedit_len;
+    following_len = len - precedence_len;

     switch ( origin ) {
     case UTextOrigin_Cursor:
@@ -254,14 +254,15 @@
                                              char **former, char **latter )
 {
     QTextEdit *edit = static_cast<QTextEdit *>( mWidget );
-    QString text = edit->toPlainText(); // including preedit string
+    QString text = edit->toPlainText(); // excluding preedit string
     int len = text.length();
-    int cursor_index = edit->textCursor().position();

     int preedit_len = mIc->getPreeditString().length();
     int preedit_cursor_pos = mIc->getPreeditCursorPosition();
+
+    int cursor_index = edit->textCursor().position() + preedit_len;
     int precedence_len = cursor_index - preedit_cursor_pos;
-    int following_len = len - precedence_len - preedit_len;
+    int following_len = len - precedence_len;

     QString former_text;
     QString latter_text;
@@ -835,12 +836,12 @@
     preedit_len = mIc->getPreeditString().length();
     preedit_cursor_pos = mIc->getPreeditCursorPosition();

-    text = edit->text(); // including preedit string
+    text = edit->text(); // excluding preedit string
     len = text.length();
-    cursor_index = edit->cursorPosition();
+    cursor_index = edit->cursorPosition() + preedit_len;

     precedence_len = cursor_index - preedit_cursor_pos;
-    following_len = len - precedence_len - preedit_len;
+    following_len = len - precedence_len;

     switch ( origin ) {
     case UTextOrigin_Cursor:
@@ -852,7 +853,7 @@
if (! ( ~former_req_len & ( ~UTextExtent_Line | ~UTextExtent_Full ) ) )
                 return -1;
         }
-        latter_del_end = len;
+        latter_del_end = len + preedit_len;
         if ( latter_req_len >= 0 ) {
             if ( following_len > latter_req_len )
latter_del_end = precedence_len + preedit_len + latter_req_len;
@@ -870,18 +871,18 @@
                 if ( following_len >= ( latter_req_len - precedence_len ) )
                     latter_del_end = preedit_len + latter_req_len;
                 else
-                    latter_del_end = len;
+                    latter_del_end = len + preedit_len;
             }
         } else {
if (! ( ~latter_req_len & ( ~UTextExtent_Line | ~UTextExtent_Full ) ) )
                 return -1;
-            latter_del_end = len;
+            latter_del_end = len + preedit_len;
         }
         break;

     case UTextOrigin_End:
         former_del_start = precedence_len;
-        latter_del_end = len;
+        latter_del_end = len + preedit_len;
         if ( former_req_len < 0 ) {
if (! ( ~former_req_len & ( ~UTextExtent_Line | ~UTextExtent_Full ) ) )
                 return -1;
@@ -895,7 +896,7 @@
         return -1;
     }

- edit->setText( text.left( former_del_start ) + text.right( len - latter_del_end ) ); + edit->setText( text.left( former_del_start ) + text.right( len - latter_del_end + preedit_len ) );
     edit->setCursorPosition( former_del_start );

     return 0;
@@ -907,15 +908,16 @@
                                             int latter_req_len )
 {
     QTextEdit *edit = static_cast<QTextEdit *>( mWidget );
-    QString text = edit->toPlainText(); // including preedit string
+    QString text = edit->toPlainText(); // excluding preedit string
     int len = text.length();
-    QTextCursor cursor = edit->textCursor();
-    int cursor_index = cursor.position();

     int preedit_len = mIc->getPreeditString().length();
     int preedit_cursor_pos = mIc->getPreeditCursorPosition();
+
+    QTextCursor cursor = edit->textCursor();
+    int cursor_index = cursor.position() + preedit_len;
     int precedence_len = cursor_index - preedit_cursor_pos;
-    int following_len = len - precedence_len - preedit_len;
+    int following_len = len - precedence_len;

     int former_del_start;
     int latter_del_end;
@@ -930,7 +932,7 @@
                     & ( ~UTextExtent_Line | ~UTextExtent_Full ) ) )
                 return -1;
         }
-        latter_del_end = len;
+        latter_del_end = len + preedit_len;
         if ( latter_req_len >= 0 ) {
             if ( following_len > latter_req_len )
latter_del_end = precedence_len + preedit_len + latter_req_len;
@@ -949,19 +951,19 @@
                 if ( following_len >= ( latter_req_len - precedence_len ) )
                     latter_del_end = preedit_len + latter_req_len;
                 else
-                    latter_del_end = len;
+                    latter_del_end = len + preedit_len;
             }
         } else {
             if (! ( ~latter_req_len
                     & ( ~UTextExtent_Line | ~UTextExtent_Full ) ) )
                 return -1;
-            latter_del_end = len;
+            latter_del_end = len + preedit_len;
         }
         break;

     case UTextOrigin_End:
         former_del_start = precedence_len;
-        latter_del_end = len;
+        latter_del_end = len + preedit_len;
         if ( former_req_len < 0 ) {
             if (! ( ~former_req_len
                     & ( ~UTextExtent_Line | ~UTextExtent_Full ) ) )
@@ -977,7 +979,7 @@
     }

     edit->setText( text.left( former_del_start )
-            + text.right( len - latter_del_end ) );
+            + text.right( len - latter_del_end + preedit_len ) );
     cursor.setPosition( former_del_start );

     return 0;

Reply via email to