1 #include <chewing.h>
2 #include "IBusChewingPreEdit.h"
3 #include "IBusChewingLookupTable.h"
4
kbType_id_get_index(const gchar * kbType_id)5 static ChewingKbType kbType_id_get_index(const gchar * kbType_id)
6 {
7 ChewingKbType i = 0;
8 for (i = 0; kbType_ids[i] != NULL; i++) {
9 if (strcmp(kbType_id, kbType_ids[i]) == 0) {
10 return i;
11 }
12 }
13 return CHEWING_KBTYPE_INVALID;
14 }
15
16
17 /*============================================
18 * Callback routines
19 */
KBType_apply_callback(PropertyContext * ctx,gpointer userData)20 gboolean KBType_apply_callback(PropertyContext * ctx, gpointer userData)
21 {
22 GValue *value = &(ctx->value);
23 IBUS_CHEWING_LOG(DEBUG, "KBType_apply_callback(%s,%s)", ctx->spec->key,
24 mkdg_g_value_to_string(value));
25 ChewingKbType kbType = kbType_id_get_index(g_value_get_string(value));
26 IBusChewingPreEdit *icPreEdit = (IBusChewingPreEdit *) ctx->parent;
27 chewing_set_KBType(icPreEdit->context, kbType);
28 return TRUE;
29 }
30
selKeys_apply_callback(PropertyContext * ctx,gpointer userData)31 gboolean selKeys_apply_callback(PropertyContext * ctx, gpointer userData)
32 {
33 GValue *value = &(ctx->value);
34 IBUS_CHEWING_LOG(DEBUG, "selKeys_apply_callback(%s,%s)",
35 ctx->spec->key, mkdg_g_value_to_string(value));
36 IBusChewingPreEdit *icPreEdit = (IBusChewingPreEdit *) ctx->parent;
37 ibus_chewing_lookup_table_resize(icPreEdit->iTable,
38 icPreEdit->iProperties,
39 icPreEdit->context);
40 return TRUE;
41 }
42
43 gboolean
autoShiftCur_apply_callback(PropertyContext * ctx,gpointer userData)44 autoShiftCur_apply_callback(PropertyContext * ctx, gpointer userData)
45 {
46 GValue *value = &(ctx->value);
47 IBusChewingPreEdit *icPreEdit = (IBusChewingPreEdit *) ctx->parent;
48 chewing_set_autoShiftCur(icPreEdit->context,
49 (g_value_get_boolean(value)) ? 1 : 0);
50 return TRUE;
51 }
52
53 gboolean
addPhraseDirection_apply_callback(PropertyContext * ctx,gpointer userData)54 addPhraseDirection_apply_callback(PropertyContext * ctx, gpointer userData)
55 {
56 GValue *value = &(ctx->value);
57 IBusChewingPreEdit *icPreEdit = (IBusChewingPreEdit *) ctx->parent;
58 chewing_set_addPhraseDirection(icPreEdit->context,
59 (g_value_get_boolean(value)) ? 1 : 0);
60 return TRUE;
61 }
62
63
64 gboolean
cleanBufferFocusOut_apply_callback(PropertyContext * ctx,gpointer userData)65 cleanBufferFocusOut_apply_callback(PropertyContext
66 * ctx, gpointer userData)
67 {
68 return TRUE;
69 }
70
71
72 gboolean
easySymbolInput_apply_callback(PropertyContext * ctx,gpointer userData)73 easySymbolInput_apply_callback(PropertyContext * ctx, gpointer userData)
74 {
75 GValue *value = &(ctx->value);
76 IBusChewingPreEdit *icPreEdit = (IBusChewingPreEdit *) ctx->parent;
77 chewing_set_easySymbolInput(icPreEdit->context,
78 (g_value_get_boolean(value)) ? 1 : 0);
79 /* Use MkdgProperty directly, no need to call IBusChewingEngine */
80 return TRUE;
81 }
82
83 gboolean
escCleanAllBuf_apply_callback(PropertyContext * ctx,gpointer userData)84 escCleanAllBuf_apply_callback(PropertyContext * ctx, gpointer userData)
85 {
86 GValue *value = &(ctx->value);
87 IBusChewingPreEdit *icPreEdit = (IBusChewingPreEdit *) ctx->parent;
88 chewing_set_escCleanAllBuf(icPreEdit->context,
89 (g_value_get_boolean(value)) ? 1 : 0);
90 return TRUE;
91 }
92
93 /* Additional symbol buffer length */
94 gboolean
maxChiSymbolLen_apply_callback(PropertyContext * ctx,gpointer userData)95 maxChiSymbolLen_apply_callback(PropertyContext * ctx, gpointer userData)
96 {
97 GValue *value = &(ctx->value);
98 IBusChewingPreEdit *icPreEdit = (IBusChewingPreEdit *) ctx->parent;
99 chewing_set_maxChiSymbolLen(icPreEdit->context,
100 g_value_get_int(value) + 5); /* 5 for incomplete bopomofos */
101 return TRUE;
102 }
103
104 gboolean
defaultEnglishLetterCase_apply_callback(PropertyContext * ctx,gpointer userData)105 defaultEnglishLetterCase_apply_callback
106 (PropertyContext * ctx, gpointer userData) {
107 /* Use MkdgProperty directly, no need to call IBusChewingEngine */
108 return TRUE;
109 }
110
111 gboolean
syncCapsLock_apply_callback(PropertyContext * ctx,gpointer userData)112 syncCapsLock_apply_callback(PropertyContext * ctx, gpointer userData)
113 {
114 GValue *value = &(ctx->value);
115 IBusChewingPreEdit *icPreEdit = (IBusChewingPreEdit *) ctx->parent;
116 const gchar *str = g_value_get_string(value);
117 if (strcmp(str, "keyboard") == 0) {
118 ibus_chewing_pre_edit_set_flag(icPreEdit, FLAG_SYNC_FROM_KEYBOARD);
119 ibus_chewing_pre_edit_clear_flag(icPreEdit, FLAG_SYNC_FROM_IM);
120 } else if (strcmp(str, "input method") == 0) {
121 ibus_chewing_pre_edit_set_flag(icPreEdit, FLAG_SYNC_FROM_IM);
122 ibus_chewing_pre_edit_clear_flag(icPreEdit,
123 FLAG_SYNC_FROM_KEYBOARD);
124 } else {
125 ibus_chewing_pre_edit_clear_flag(icPreEdit,
126 FLAG_SYNC_FROM_IM
127 | FLAG_SYNC_FROM_KEYBOARD);
128 }
129 return TRUE;
130 }
131
132 gboolean
shiftToggleChinese_apply_callback(PropertyContext * ctx,gpointer userData)133 shiftToggleChinese_apply_callback(PropertyContext * ctx, gpointer userData)
134 {
135 GValue *value = &(ctx->value);
136 IBusChewingPreEdit *icPreEdit = (IBusChewingPreEdit *) ctx->parent;
137 ibus_chewing_pre_edit_set_property_boolean
138 (icPreEdit, "shift-toggle-chinese", g_value_get_boolean(value));
139 return TRUE;
140 }
141
142 gboolean
candPerPage_apply_callback(PropertyContext * ctx,gpointer userData)143 candPerPage_apply_callback(PropertyContext * ctx, gpointer userData)
144 {
145 IBusChewingPreEdit *icPreEdit = (IBusChewingPreEdit *) ctx->parent;
146 ibus_chewing_lookup_table_resize(icPreEdit->iTable,
147 icPreEdit->iProperties,
148 icPreEdit->context);
149 return TRUE;
150 }
151
152 gboolean
capslockToggleChinese_apply_callback(PropertyContext * ctx,gpointer userData)153 capslockToggleChinese_apply_callback
154 (PropertyContext * ctx, gpointer userData) {
155 /* Use MkdgProperty directly, no need to call IBusChewingEngine */
156 return TRUE;
157 }
158
159 gboolean
phraseChoiceRearward_apply_callback(PropertyContext * ctx,gpointer userData)160 phraseChoiceRearward_apply_callback
161 (PropertyContext * ctx, gpointer userData) {
162 GValue *value = &(ctx->value);
163 IBusChewingPreEdit *icPreEdit = (IBusChewingPreEdit *) ctx->parent;
164 chewing_set_phraseChoiceRearward(icPreEdit->context,
165 (g_value_get_boolean(value)) ? 1 : 0);
166 return TRUE;
167 }
168
169 gboolean
spaceAsSelection_apply_callback(PropertyContext * ctx,gpointer userData)170 spaceAsSelection_apply_callback(PropertyContext * ctx, gpointer userData)
171 {
172 GValue *value = &(ctx->value);
173 IBusChewingPreEdit *icPreEdit = (IBusChewingPreEdit *) ctx->parent;
174 chewing_set_spaceAsSelection(icPreEdit->context,
175 (g_value_get_boolean(value)) ? 1 : 0);
176 return TRUE;
177 }
178
179 gboolean
plainZhuyin_apply_callback(PropertyContext * ctx,gpointer userData)180 plainZhuyin_apply_callback(PropertyContext * ctx, gpointer userData)
181 {
182 /* Use MkdgProperty directly, no need to call IBusChewingEngine */
183 return TRUE;
184 }
185