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();
}

Reply via email to