summaryrefslogtreecommitdiff
path: root/hangul/hangulinputcontext.c
diff options
context:
space:
mode:
Diffstat (limited to 'hangul/hangulinputcontext.c')
-rw-r--r--hangul/hangulinputcontext.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/hangul/hangulinputcontext.c b/hangul/hangulinputcontext.c
index cd54945..a08ec8a 100644
--- a/hangul/hangulinputcontext.c
+++ b/hangul/hangulinputcontext.c
@@ -197,6 +197,7 @@ struct _HangulInputContext {
int type;
const HangulKeyboard* keyboard;
+ int keyboard_table_id;
HangulBuffer buffer;
int output_mode;
@@ -1079,7 +1080,7 @@ hangul_ic_process(HangulInputContext *hic, int ascii)
hic->preedit_string[0] = 0;
hic->commit_string[0] = 0;
- c = hangul_keyboard_get_mapping(hic->keyboard, 0, ascii);
+ c = hangul_keyboard_get_mapping(hic->keyboard, hic->keyboard_table_id, ascii);
if (hic->on_translate != NULL)
hic->on_translate(hic, ascii, &c, hic->on_translate_data);
@@ -1464,6 +1465,16 @@ hangul_ic_select_keyboard(HangulInputContext *hic, const char* id)
keyboard = hangul_keyboard_list_get_keyboard(id);
hic->keyboard = keyboard;
+ hic->keyboard_table_id = 0;
+}
+
+void
+hangul_ic_switch_keyboard_table(HangulInputContext *hic, int table_id)
+{
+ if (hic == NULL)
+ return;
+
+ hic->keyboard_table_id = table_id;
}
void
@@ -1493,6 +1504,9 @@ hangul_ic_new(const char* keyboard)
if (hic == NULL)
return NULL;
+ hic->keyboard = NULL;
+ hic->keyboard_table_id = 0;
+
hic->preedit_string[0] = 0;
hic->commit_string[0] = 0;
hic->flushed_string[0] = 0;