Author: yamakenz
Date: Sat Dec 29 21:22:44 2007
New Revision: 5071
Modified:
trunk/scm/im.scm
trunk/uim/uim-func.c
trunk/uim/uim-internal.h
trunk/uim/uim.c
Log:
* uim/uim.c
- (uim_set_client_encoding): Fix unchanged converter objects
* uim/uim-internal.h
- (uim_set_encoding): New function decl
* uim/uim-func.c
- (im_set_encoding): Split uim_set_encoding() off
- (uim_set_encoding): New function splitted from im_set_encoding()
* scm/im.scm
- Require SRFI-2
- (uim-context-encoding): New procedure
Modified: trunk/scm/im.scm
==============================================================================
--- trunk/scm/im.scm (original)
+++ trunk/scm/im.scm Sat Dec 29 21:22:44 2007
@@ -29,6 +29,8 @@
;;; SUCH DAMAGE.
;;;;
+(require-extension (srfi 2))
+
; Comment should be written in English, UTF-8.
;
(require "util.scm")
@@ -360,6 +362,11 @@
(let ((c (im-retrieve-context uc)))
(and c
(context-im c)))))
+
+(define uim-context-encoding
+ (lambda (uc)
+ (and-let* ((im (uim-context-im uc)))
+ (im-encoding im))))
(define context-update-preedit
(lambda (context segments)
Modified: trunk/uim/uim-func.c
==============================================================================
--- trunk/uim/uim-func.c (original)
+++ trunk/uim/uim-func.c Sat Dec 29 21:22:44 2007
@@ -159,6 +159,17 @@
uc = retrieve_uim_context(uc_);
enc = REFER_C_STR(enc_);
+ uim_set_encoding(uc, enc);
+
+ return uim_scm_f();
+}
+
+void
+uim_set_encoding(uim_context uc, const char *enc)
+{
+ assert(uc);
+ assert(enc);
+
if (uc->outbound_conv)
uc->conv_if->release(uc->outbound_conv);
if (uc->inbound_conv)
@@ -171,8 +182,6 @@
uc->outbound_conv = uc->conv_if->create(uc->client_encoding, enc);
uc->inbound_conv = uc->conv_if->create(enc, uc->client_encoding);
}
-
- return uim_scm_f();
}
static uim_lisp
Modified: trunk/uim/uim-internal.h
==============================================================================
--- trunk/uim/uim-internal.h (original)
+++ trunk/uim/uim-internal.h Sat Dec 29 21:22:44 2007
@@ -160,6 +160,7 @@
void uim_init_rk_subrs(void);
void uim_init_intl_subrs(void);
+void uim_set_encoding(uim_context uc, const char *enc);
#if HAVE_ISSETUGID
#define uim_issetugid() issetugid()
#else
Modified: trunk/uim/uim.c
==============================================================================
--- trunk/uim/uim.c (original)
+++ trunk/uim/uim.c Sat Dec 29 21:22:44 2007
@@ -561,6 +561,8 @@
void
uim_set_client_encoding(uim_context uc, const char *encoding)
{
+ uim_lisp im_enc;
+
if (UIM_CATCH_ERROR_BEGIN())
return;
@@ -570,6 +572,12 @@
free(uc->client_encoding);
uc->client_encoding = uim_strdup(encoding);
+
+ protected0 = im_enc = uim_scm_callf("uim-context-encoding", "p", uc);
+ if (!STRP(im_enc))
+ uim_fatal_error("invalid IM encoding");
+
+ uim_set_encoding(uc, REFER_C_STR(im_enc));
UIM_CATCH_ERROR_END();
}