fix for #33996(Correct usage of XIMPreeditEnable) r=ftang, and passed pre-check-in
test on local Redhat 6.1 environment. git-svn-id: svn://10.0.0.236/trunk@66610 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -1235,10 +1235,18 @@ nsIMEGtkIC::ResetIC(PRUnichar **aUnichar, PRInt32 *aUnisize)
|
||||
#if XlibSpecificationRelease >= 6
|
||||
/* restore conversion state after resetting ic later */
|
||||
XIMPreeditState preedit_state = XIMPreeditUnKnown;
|
||||
XVaNestedList preedit_attr;
|
||||
|
||||
PRBool is_preedit_state = PR_FALSE;
|
||||
if (!XGetICValues(mIC->xic, XNPreeditState, &preedit_state, NULL)) {
|
||||
preedit_attr = XVaCreateNestedList(0,
|
||||
XNPreeditState, &preedit_state,
|
||||
0);
|
||||
if (!XGetICValues(mIC->xic,
|
||||
XNPreeditAttributes, preedit_attr,
|
||||
NULL)) {
|
||||
is_preedit_state = PR_TRUE;
|
||||
}
|
||||
XFree(preedit_attr);
|
||||
#endif
|
||||
|
||||
PRInt32 uniCharSize = 0;
|
||||
@@ -1254,11 +1262,15 @@ nsIMEGtkIC::ResetIC(PRUnichar **aUnichar, PRInt32 *aUnisize)
|
||||
}
|
||||
}
|
||||
#if XlibSpecificationRelease >= 6
|
||||
preedit_attr = XVaCreateNestedList(0,
|
||||
XNPreeditState, preedit_state,
|
||||
0);
|
||||
if (is_preedit_state) {
|
||||
XSetICValues(mIC->xic,
|
||||
XNPreeditState, preedit_state,
|
||||
XNPreeditAttributes, preedit_attr,
|
||||
NULL);
|
||||
}
|
||||
XFree(preedit_attr);
|
||||
#endif
|
||||
return uniCharSize;
|
||||
}
|
||||
@@ -1272,15 +1284,25 @@ nsIMEGtkIC::IsPreeditComposing()
|
||||
}
|
||||
} else {
|
||||
#if XlibSpecificationRelease >= 6
|
||||
int preedit_state;
|
||||
if (!XGetICValues(mIC->xic, XNPreeditState, &preedit_state, NULL)) {
|
||||
XIMPreeditState preedit_state = XIMPreeditUnKnown;
|
||||
XVaNestedList preedit_attr;
|
||||
PRBool ret_flag = PR_FALSE;
|
||||
|
||||
preedit_attr = XVaCreateNestedList(0,
|
||||
XNPreeditState, &preedit_state,
|
||||
0);
|
||||
if (!XGetICValues(mIC->xic,
|
||||
XNPreeditAttributes, preedit_attr,
|
||||
NULL)) {
|
||||
if (preedit_state == XIMPreeditEnable) {
|
||||
return PR_TRUE;
|
||||
ret_flag = PR_TRUE;
|
||||
}
|
||||
} else {
|
||||
// kinput2 does not support XGetICValues(XNPreeditState)
|
||||
return PR_TRUE;
|
||||
ret_flag = PR_TRUE;
|
||||
}
|
||||
XFree(preedit_attr);
|
||||
return ret_flag;
|
||||
#endif
|
||||
}
|
||||
return PR_FALSE;
|
||||
|
||||
Reference in New Issue
Block a user