summaryrefslogtreecommitdiff
path: root/xc/lib/X11/imDefIm.c
diff options
context:
space:
mode:
Diffstat (limited to 'xc/lib/X11/imDefIm.c')
-rw-r--r--xc/lib/X11/imDefIm.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/xc/lib/X11/imDefIm.c b/xc/lib/X11/imDefIm.c
index 4b58da348..6b036f333 100644
--- a/xc/lib/X11/imDefIm.c
+++ b/xc/lib/X11/imDefIm.c
@@ -31,7 +31,7 @@ OF THIS SOFTWARE.
makoto@sm.sony.co.jp
******************************************************************/
-/* $XFree86: xc/lib/X11/imDefIm.c,v 1.4 2000/06/13 02:28:28 dawes Exp $ */
+/* $XFree86: xc/lib/X11/imDefIm.c,v 1.6 2000/11/28 18:49:35 dawes Exp $ */
#include <X11/Xatom.h>
#define NEED_EVENTS
@@ -1037,6 +1037,10 @@ _XimProtoIMFree(im)
_XlcCloseConverter(im->private.proto.ctow_conv);
im->private.proto.ctow_conv = NULL;
}
+ if (im->private.proto.ctoutf8_conv) {
+ _XlcCloseConverter(im->private.proto.ctoutf8_conv);
+ im->private.proto.ctoutf8_conv = NULL;
+ }
if (im->private.proto.cstomb_conv) {
_XlcCloseConverter(im->private.proto.cstomb_conv);
im->private.proto.cstomb_conv = NULL;
@@ -1045,6 +1049,10 @@ _XimProtoIMFree(im)
_XlcCloseConverter(im->private.proto.cstowc_conv);
im->private.proto.cstowc_conv = NULL;
}
+ if (im->private.proto.cstoutf8_conv) {
+ _XlcCloseConverter(im->private.proto.cstoutf8_conv);
+ im->private.proto.cstoutf8_conv = NULL;
+ }
#ifdef XIM_CONNECTABLE
if (!IS_SERVER_CONNECTED(im) && IS_RECONNECTABLE(im)) {
@@ -1549,7 +1557,8 @@ Private XIMMethodsRec im_methods = {
_XimProtoGetIMValues, /* get_values */
_XimProtoCreateIC, /* create_ic */
_Ximctstombs, /* ctstombs */
- _Ximctstowcs /* ctstowcs */
+ _Ximctstowcs, /* ctstowcs */
+ _Ximctstoutf8 /* ctstoutf8 */
};
Private Bool
@@ -1611,6 +1620,7 @@ _XimGetEncoding(im, buf, name, name_len, detail, detail_len)
int len;
XlcConv ctom_conv;
XlcConv ctow_conv;
+ XlcConv ctoutf8_conv;
XlcConv conv;
XimProtoPrivateRec *private = &im->private.proto;
@@ -1621,6 +1631,9 @@ _XimGetEncoding(im, buf, name, name_len, detail, detail_len)
if (!(ctow_conv = _XlcOpenConverter(lcd,
XlcNCompoundText, lcd, XlcNWideChar)))
return False;
+ if (!(ctoutf8_conv = _XlcOpenConverter(lcd,
+ XlcNCompoundText, lcd, XlcNUtf8String)))
+ return False;
}
if (category == XIM_Encoding_NameCategory) {
@@ -1633,6 +1646,9 @@ _XimGetEncoding(im, buf, name, name_len, detail, detail_len)
if (!(ctow_conv = _XlcOpenConverter(lcd,
XlcNCompoundText, lcd, XlcNWideChar)))
return False;
+ if (!(ctoutf8_conv = _XlcOpenConverter(lcd,
+ XlcNCompoundText, lcd, XlcNUtf8String)))
+ return False;
break;
} else {
/*
@@ -1653,6 +1669,8 @@ _XimGetEncoding(im, buf, name, name_len, detail, detail_len)
private->ctom_conv = ctom_conv;
private->ctow_conv = ctow_conv;
+ private->ctoutf8_conv = ctoutf8_conv;
+
if (!(conv = _XlcOpenConverter(lcd, XlcNCharSet, lcd, XlcNMultiByte)))
return False;
private->cstomb_conv = conv;
@@ -1661,8 +1679,14 @@ _XimGetEncoding(im, buf, name, name_len, detail, detail_len)
return False;
private->cstowc_conv = conv;
- private->locale_code = * _XimGetLocaleCode(XLC_PUBLIC(lcd,encoding_name),
- (XlcCharSet*) &(private->keyboard_charset));
+ if (!(conv = _XlcOpenConverter(lcd, XlcNCharSet, lcd, XlcNUtf8String)))
+ return False;
+ private->cstoutf8_conv = conv;
+
+ if (!(conv = _XlcOpenConverter(lcd, XlcNUcsChar, lcd, XlcNChar)))
+ return False;
+ private->ucs_conv = conv;
+
return True;
}