--- CannaLE.c.orig	Wed Dec 26 18:07:15 2001
+++ CannaLE.c	Thu Dec 27 15:42:41 2001
@@ -234,6 +234,7 @@
     int status_start;
     int preedit_start;
     int luc_start;
+    Bool conv_on;
 } CannaLESession;
 
 CannaLESession*
@@ -245,6 +246,7 @@
 int
 canna_session_context(iml_session_t *s)
 {
+    printf("canna_session_context: %d\n", ((CannaLESession*)(s->specific_data))->context_id);
     return ((CannaLESession*)(s->specific_data))->context_id;
 }
 
@@ -904,6 +906,7 @@
 {
     IMText *p;
     jrKanjiStatusWithValue *pksv;
+    CannaLESession* ses = canna_session_data(s);
     pksv = canna_session_status(s);
 
     pksv->val = CANNA_MODE_AlphaMode;
@@ -914,11 +917,14 @@
     canna_status_draw(s);
     canna_lookup_choice_done(s);
     canna_preedit_done(s);
+
+    ses->conv_on = False;
 }
 
 void
 canna_make_conversion_on(iml_session_t  *s)
 {
+    CannaLESession* ses = canna_session_data(s);
     jrKanjiStatusWithValue *pksv;
     pksv = canna_session_status(s);
 
@@ -926,10 +932,12 @@
     jrKanjiControl(canna_session_context(s),
 		   KC_CHANGEMODE, (char*) pksv);
     canna_status_draw(s);
+
+    ses->conv_on = True;
 }
 
 int
-canna_translate_keyevent(IMKeyListEvent *kev)
+canna_translate_keyevent(iml_session_t *s, IMKeyListEvent *kev)
 {
     IMKeyEventStruct *k = (IMKeyEventStruct *) kev->keylist;
     printf("iml_session_t() keycode=%x,keychar=%x, state=%x\n",
@@ -1006,6 +1014,19 @@
     case IM_VK_ENTER:
 	return 0x0D;
 
+    case IM_VK_BACK_SPACE:
+        return '\b';
+
+    case IM_VK_SPACE:
+    if( k->modifier & IM_CTRL_MASK ) {
+      CannaLESession *pcls = canna_session_data(s);
+      if ( pcls->conv_on == True ) {
+        canna_make_conversion_off(s);
+      } else
+        canna_make_conversion_on(s);
+        return -100; /* Non existant value */
+      }
+
     default:
 	if ((k->keyChar > 0)
 	    && (k->keyChar < 0xFFFF)) {
@@ -1023,9 +1044,11 @@
 canna_process_keyevent(iml_session_t *s, IMKeyListEvent *kev)
 {
     int ch;
-    ch = canna_translate_keyevent(kev);
+    CannaLESession* ses = canna_session_data(s);
+    ch = canna_translate_keyevent(s, kev);
 
-    if (ch) {
+    if (ch == -100) return;
+    if (ses->conv_on == True && ch) {
 	int size, n;
 	char buf[CANNA_COMMIT_STRING_BUFSIZE + 1];
 
