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