From b10dbf484b066363460f954629ae58bc5535d9a3 Mon Sep 17 00:00:00 2001 From: "tajima%eng.sun.com" Date: Fri, 21 Apr 2000 00:03:44 +0000 Subject: [PATCH] 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 --- mozilla/widget/src/gtk/nsGtkIMEHelper.cpp | 34 +++++++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) 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;