--- rxvt-unicode/src/main.C 2006/02/11 02:28:19 1.219 +++ rxvt-unicode/src/main.C 2006/02/12 09:44:04 1.222 @@ -1121,7 +1121,7 @@ #endif #ifdef USE_XIM - IMSetStatusPosition (); + IMSetPosition (); #endif } @@ -1528,8 +1528,8 @@ status_attr, NULL); if (preedit_attr) XFree (preedit_attr); - if (status_attr) XFree (status_attr); - if (fs) XFreeFontSet (dpy, fs); + if (status_attr) XFree (status_attr); + if (fs) XFreeFontSet (dpy, fs); if (Input_Context == NULL) { @@ -1544,8 +1544,7 @@ vt_select_input (); #endif - if (input_style & XIMPreeditArea) - IMSetStatusPosition (); + IMSetPosition (); return true; } @@ -1613,34 +1612,47 @@ } void -rxvt_term::IMSetStatusPosition () +rxvt_term::IMSetPosition () { XRectangle preedit_rect, status_rect, *needed_rect; XVaNestedList preedit_attr, status_attr; if (!Input_Context || !focus - || !(input_style & XIMPreeditArea) + || !(input_style & (XIMPreeditArea | XIMPreeditPosition)) || !IMisRunning ()) return; - /* Getting the necessary width of preedit area */ - status_attr = XVaCreateNestedList (0, XNAreaNeeded, &needed_rect, NULL); - XGetICValues (Input_Context, XNStatusAttributes, status_attr, NULL); - XFree (status_attr); - - im_set_preedit_area (preedit_rect, status_rect, *needed_rect); - XFree (needed_rect); - - preedit_attr = XVaCreateNestedList (0, XNArea, &preedit_rect, NULL); - status_attr = XVaCreateNestedList (0, XNArea, &status_rect, NULL); - - XSetICValues (Input_Context, - XNPreeditAttributes, preedit_attr, - XNStatusAttributes, status_attr, NULL); + if (input_style & XIMPreeditPosition) + { + im_set_size (preedit_rect); + preedit_attr = XVaCreateNestedList (0, XNArea, &preedit_rect, NULL); + + XSetICValues (Input_Context, + XNPreeditAttributes, preedit_attr, NULL); + } + else + { + /* Getting the necessary width of preedit area */ + status_attr = XVaCreateNestedList (0, XNAreaNeeded, &needed_rect, NULL); + XGetICValues (Input_Context, XNStatusAttributes, status_attr, NULL); + XFree (status_attr); - XFree (preedit_attr); - XFree (status_attr); + im_set_preedit_area (preedit_rect, status_rect, *needed_rect); + XFree (needed_rect); + + preedit_attr = XVaCreateNestedList (0, XNArea, &preedit_rect, NULL); + status_attr = XVaCreateNestedList (0, XNArea, &status_rect, NULL); + + XSetICValues (Input_Context, + XNPreeditAttributes, preedit_attr, + XNStatusAttributes, status_attr, + NULL); + + XFree (status_attr); + } + + XFree (preedit_attr); } #endif /* USE_XIM */