diff --git a/mozilla/widget/src/gtk/nsGtkIMEHelper.cpp b/mozilla/widget/src/gtk/nsGtkIMEHelper.cpp index 15128fa2be9..65e6e237ed5 100644 --- a/mozilla/widget/src/gtk/nsGtkIMEHelper.cpp +++ b/mozilla/widget/src/gtk/nsGtkIMEHelper.cpp @@ -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;