Revision: 6811
Author: ek.kato
Date: Thu Nov 11 04:49:20 2010
Log: - Commit remaining input before deactivating uim-chewing (#31545,
Kan-Ru Chen)
* scm/chewing.scm
- (chewing-press-key-handler) : Commit remaining input upon
chewing-off-key?
* src/chewing.c
- (chewing_context) : Add has_pending_input member.
- (chewing_context_new) : Init has_pending_input.
- (press_key_internal) : Set has_pending_input when key press is
handled.
- (flush) : New. Commit remaining input if has_pending_input is
set.
- (uim_plugin_instance_init) : Export chewing-lib-flush for
scheme side.
http://code.google.com/p/uim/source/detail?r=6811
Modified:
/uim-chewing-trunk/scm/chewing.scm
/uim-chewing-trunk/src/chewing.c
=======================================
--- /uim-chewing-trunk/scm/chewing.scm Wed Jan 14 21:38:12 2009
+++ /uim-chewing-trunk/scm/chewing.scm Thu Nov 11 04:49:20 2010
@@ -256,7 +256,8 @@
(if (chewing-press-key mc key key-state #t)
#f
(if (chewing-off-key? key key-state)
- (begin
+ (let ((mid (chewing-context-mc-id mc)))
+ (chewing-lib-flush mid)
(chewing-reset-handler mc)
(im-clear-preedit mc)
(im-deactivate-candidate-selector mc)
=======================================
--- /uim-chewing-trunk/src/chewing.c Thu Jan 8 17:56:26 2009
+++ /uim-chewing-trunk/src/chewing.c Thu Nov 11 04:49:20 2010
@@ -70,6 +70,7 @@
int prev_page;
int prev_cursor;
int has_active_candwin;
+ int has_pending_input;
} uim_chewing_context;
static struct context {
@@ -184,6 +185,7 @@
ucc->prev_page = -1;
ucc->prev_cursor = -1;
ucc->has_active_candwin = 0;
+ ucc->has_pending_input = 0;
}
return ucc;
@@ -550,6 +552,7 @@
} else {
return uim_scm_f();
}
+ ucc->has_pending_input = 1;
return check_output(ucc);
}
@@ -653,6 +656,27 @@
return uim_scm_f();
}
+
+static uim_lisp
+flush(uim_lisp id_)
+{
+ int id;
+ uim_chewing_context *ucc;
+
+ id = uim_scm_c_int(id_);
+ ucc = get_chewing_context(id);
+
+ if (!ucc)
+ return uim_scm_f();
+
+ if (ucc->has_pending_input) {
+ chewing_handle_Enter(ucc->cc);
+ check_output(ucc);
+ ucc->has_pending_input = 0;
+ }
+
+ return uim_scm_t();
+}
static uim_lisp
get_nr_candidates(uim_lisp id_)
@@ -843,6 +867,7 @@
uim_scm_init_subr_1("chewing-lib-reset-context", reset_context);
uim_scm_init_subr_1("chewing-lib-focus-in-context", focus_in_context);
uim_scm_init_subr_1("chewing-lib-focus-out-context", focus_out_context);
+ uim_scm_init_subr_1("chewing-lib-flush", flush);
uim_scm_init_subr_1("chewing-lib-get-nr-candidates", get_nr_candidates);
uim_scm_init_subr_2("chewing-lib-get-nth-candidate", get_nth_candidate);
uim_scm_init_subr_1("chewing-lib-get-nr-candidates-per-page",