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:
tajima%eng.sun.com
2000-04-21 00:03:44 +00:00
parent 27de60ef5a
commit b10dbf484b

View File

@@ -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;