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;