~ubuntu-branches/ubuntu/saucy/ibus-chewing/saucy

« back to all changes in this revision

Viewing changes to src/ibus-chewing-engine.c

  • Committer: Bazaar Package Importer
  • Author(s): LI Daobing, Asias He, LI Daobing
  • Date: 2010-06-07 21:25:30 UTC
  • mfrom: (1.1.9 upstream) (0.1.11 sid)
  • Revision ID: james.westby@ubuntu.com-20100607212530-0esr4ym1x8mj0fwx
Tags: 1.3.4.20100605-1
[ Asias He ]
* debian/control:
  - set maintainer to pkg-ime, add LI Daobing <lidaobing@debian.org> 
    & Asias He <asias.hejun@gmail.com> to uploaders.
  - update Vcs-* fields.
* New upstream release.

[ LI Daobing ]
* debian/control: build depends on gob2 (>= 2.0.17) 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* Generated by GOB (v2.0.16)   (do not edit directly) */
2
 
 
3
 
/* End world hunger, donate to the World Food Programme, http://www.wfp.org */
4
 
 
5
 
 
6
 
#line 3 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
7
 
 
8
 
/*
9
 
 * Copyright © 2009  Red Hat, Inc. All rights reserved.
10
 
 * Copyright © 2009  Ding-Yi Chen <dchen at redhat.com>
11
 
 *
12
 
 * This file is part of the ibus-chewing Project.
13
 
 *
14
 
 * This program is free software; you can redistribute it and/or
15
 
 * modify it under the terms of the GNU General Public License
16
 
 * as published by the Free Software Foundation; either version 2
17
 
 * of the License, or (at your option) any later version.
18
 
 *
19
 
 * This program is distributed in the hope that it will be useful,
20
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22
 
 * GNU General Public License for more details.
23
 
 *
24
 
 * You should have received a copy of the GNU General Public License
25
 
 * along with this program; if not, write to the Free Software
26
 
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
27
 
 */
28
 
#include <stdlib.h>
29
 
#include <libintl.h>
30
 
#include <ibus.h>
31
 
#include <chewing.h>
32
 
#include <string.h>
33
 
#include <stdio.h>
34
 
#define GETTEXT_PACKAGE "gtk20"
35
 
#include <glib/gi18n.h>
36
 
#include <gtk/gtk.h>
37
 
#include <X11/extensions/XTest.h>
38
 
#include <X11/Xlib.h>
39
 
#include <ctype.h>
40
 
 
41
 
#line 42 "ibus-chewing-engine.c"
42
 
#define GOB_VERSION_MAJOR 2
43
 
#define GOB_VERSION_MINOR 0
44
 
#define GOB_VERSION_PATCHLEVEL 16
45
 
 
46
 
#define selfp (self->_priv)
47
 
 
48
 
#include <string.h> /* memset() */
49
 
 
50
 
#include "ibus-chewing-engine.h"
51
 
 
52
 
#include "ibus-chewing-engine-private.h"
53
 
 
54
 
#ifdef G_LIKELY
55
 
#define ___GOB_LIKELY(expr) G_LIKELY(expr)
56
 
#define ___GOB_UNLIKELY(expr) G_UNLIKELY(expr)
57
 
#else /* ! G_LIKELY */
58
 
#define ___GOB_LIKELY(expr) (expr)
59
 
#define ___GOB_UNLIKELY(expr) (expr)
60
 
#endif /* G_LIKELY */
61
 
static const GEnumValue _chewing_kbtype_values[] = {
62
 
        { CHEWING_KBTYPE_INVALID, (char *)"CHEWING_KBTYPE_INVALID", (char *)"invalid" },
63
 
        { CHEWING_KBTYPE_DEFAULT, (char *)"CHEWING_KBTYPE_DEFAULT", (char *)"default" },
64
 
        { CHEWING_KBTYPE_HSU, (char *)"CHEWING_KBTYPE_HSU", (char *)"hsu" },
65
 
        { CHEWING_KBTYPE_IBM, (char *)"CHEWING_KBTYPE_IBM", (char *)"ibm" },
66
 
        { CHEWING_KBTYPE_GIN_YIEH, (char *)"CHEWING_KBTYPE_GIN_YIEH", (char *)"gin-yieh" },
67
 
        { CHEWING_KBTYPE_ETEN, (char *)"CHEWING_KBTYPE_ETEN", (char *)"eten" },
68
 
        { CHEWING_KBTYPE_ETEN26, (char *)"CHEWING_KBTYPE_ETEN26", (char *)"eten26" },
69
 
        { CHEWING_KBTYPE_DVORAK, (char *)"CHEWING_KBTYPE_DVORAK", (char *)"dvorak" },
70
 
        { CHEWING_KBTYPE_DVORAK_HSU, (char *)"CHEWING_KBTYPE_DVORAK_HSU", (char *)"dvorak-hsu" },
71
 
        { CHEWING_KBTYPE_DACHEN_CP26, (char *)"CHEWING_KBTYPE_DACHEN_CP26", (char *)"dachen-cp26" },
72
 
        { CHEWING_KBTYPE_HAN_YU, (char *)"CHEWING_KBTYPE_HAN_YU", (char *)"han-yu" },
73
 
        { 0, NULL, NULL }
74
 
};
75
 
 
76
 
GType
77
 
chewing_kbtype_get_type (void)
78
 
{
79
 
        static GType type = 0;
80
 
        if ___GOB_UNLIKELY(type == 0)
81
 
                type = g_enum_register_static ("ChewingKbType", _chewing_kbtype_values);
82
 
        return type;
83
 
}
84
 
 
85
 
static const GEnumValue _chewing_modifier_sync_values[] = {
86
 
        { CHEWING_MODIFIER_SYNC_DISABLE, (char *)"CHEWING_MODIFIER_SYNC_DISABLE", (char *)"disable" },
87
 
        { CHEWING_MODIFIER_SYNC_FROM_KEYBOARD, (char *)"CHEWING_MODIFIER_SYNC_FROM_KEYBOARD", (char *)"from-keyboard" },
88
 
        { CHEWING_MODIFIER_SYNC_FROM_IM, (char *)"CHEWING_MODIFIER_SYNC_FROM_IM", (char *)"from-im" },
89
 
        { 0, NULL, NULL }
90
 
};
91
 
 
92
 
GType
93
 
chewing_modifier_sync_get_type (void)
94
 
{
95
 
        static GType type = 0;
96
 
        if ___GOB_UNLIKELY(type == 0)
97
 
                type = g_enum_register_static ("ChewingModifierSync", _chewing_modifier_sync_values);
98
 
        return type;
99
 
}
100
 
 
101
 
static const GEnumValue _chewing_input_style_values[] = {
102
 
        { CHEWING_INPUT_STYLE_IN_APPLICATION, (char *)"CHEWING_INPUT_STYLE_IN_APPLICATION", (char *)"in-application" },
103
 
        { CHEWING_INPUT_STYLE_IN_CANDIDATE, (char *)"CHEWING_INPUT_STYLE_IN_CANDIDATE", (char *)"in-candidate" },
104
 
        { 0, NULL, NULL }
105
 
};
106
 
 
107
 
GType
108
 
chewing_input_style_get_type (void)
109
 
{
110
 
        static GType type = 0;
111
 
        if ___GOB_UNLIKELY(type == 0)
112
 
                type = g_enum_register_static ("ChewingInputStyle", _chewing_input_style_values);
113
 
        return type;
114
 
}
115
 
 
116
 
static const GEnumValue _chewing_input_mode_values[] = {
117
 
        { CHEWING_INPUT_MODE_BYPASS, (char *)"CHEWING_INPUT_MODE_BYPASS", (char *)"bypass" },
118
 
        { CHEWING_INPUT_MODE_EDITING, (char *)"CHEWING_INPUT_MODE_EDITING", (char *)"editing" },
119
 
        { CHEWING_INPUT_MODE_SELECTING, (char *)"CHEWING_INPUT_MODE_SELECTING", (char *)"selecting" },
120
 
        { CHEWING_INPUT_MODE_SELECTING_DONE, (char *)"CHEWING_INPUT_MODE_SELECTING_DONE", (char *)"selecting-done" },
121
 
        { 0, NULL, NULL }
122
 
};
123
 
 
124
 
GType
125
 
chewing_input_mode_get_type (void)
126
 
{
127
 
        static GType type = 0;
128
 
        if ___GOB_UNLIKELY(type == 0)
129
 
                type = g_enum_register_static ("ChewingInputMode", _chewing_input_mode_values);
130
 
        return type;
131
 
}
132
 
 
133
 
static const GEnumValue _chewing_output_charset_values[] = {
134
 
        { CHEWING_OUTPUT_CHARSET_AUTO, (char *)"CHEWING_OUTPUT_CHARSET_AUTO", (char *)"auto" },
135
 
        { CHEWING_OUTPUT_CHARSET_BIG5, (char *)"CHEWING_OUTPUT_CHARSET_BIG5", (char *)"big5" },
136
 
        { CHEWING_OUTPUT_CHARSET_UTF8, (char *)"CHEWING_OUTPUT_CHARSET_UTF8", (char *)"utf8" },
137
 
        { 0, NULL, NULL }
138
 
};
139
 
 
140
 
GType
141
 
chewing_output_charset_get_type (void)
142
 
{
143
 
        static GType type = 0;
144
 
        if ___GOB_UNLIKELY(type == 0)
145
 
                type = g_enum_register_static ("ChewingOutputCharset", _chewing_output_charset_values);
146
 
        return type;
147
 
}
148
 
 
149
 
static const GEnumValue _chewing_flag_values[] = {
150
 
        { CHEWING_FLAG_PLAIN_ZHUYIN, (char *)"CHEWING_FLAG_PLAIN_ZHUYIN", (char *)"plain-zhuyin" },
151
 
        { CHEWING_FLAG_FORCE_LOWERCASE_ENGLISH, (char *)"CHEWING_FLAG_FORCE_LOWERCASE_ENGLISH", (char *)"force-lowercase-english" },
152
 
        { CHEWING_FLAG_NUMPAD_ALWAYS_NUMBER, (char *)"CHEWING_FLAG_NUMPAD_ALWAYS_NUMBER", (char *)"numpad-always-number" },
153
 
        { CHEWING_FLAG_EASY_SYMBOL_INPUT, (char *)"CHEWING_FLAG_EASY_SYMBOL_INPUT", (char *)"easy-symbol-input" },
154
 
        { 0, NULL, NULL }
155
 
};
156
 
 
157
 
GType
158
 
chewing_flag_get_type (void)
159
 
{
160
 
        static GType type = 0;
161
 
        if ___GOB_UNLIKELY(type == 0)
162
 
                type = g_enum_register_static ("ChewingFlag", _chewing_flag_values);
163
 
        return type;
164
 
}
165
 
 
166
 
static const GEnumValue _engine_status_values[] = {
167
 
        { ENGINE_STATUS_INITIALIZED, (char *)"ENGINE_STATUS_INITIALIZED", (char *)"initialized" },
168
 
        { ENGINE_STATUS_ENABLED, (char *)"ENGINE_STATUS_ENABLED", (char *)"enabled" },
169
 
        { ENGINE_STATUS_FOCUS_IN, (char *)"ENGINE_STATUS_FOCUS_IN", (char *)"focus-in" },
170
 
        { ENGINE_STATUS_SHOW_CANDIDATE, (char *)"ENGINE_STATUS_SHOW_CANDIDATE", (char *)"show-candidate" },
171
 
        { ENGINE_STATUS_NEED_COMMIT, (char *)"ENGINE_STATUS_NEED_COMMIT", (char *)"need-commit" },
172
 
        { ENGINE_STATUS_FORCE_COMMIT, (char *)"ENGINE_STATUS_FORCE_COMMIT", (char *)"force-commit" },
173
 
        { 0, NULL, NULL }
174
 
};
175
 
 
176
 
GType
177
 
engine_status_get_type (void)
178
 
{
179
 
        static GType type = 0;
180
 
        if ___GOB_UNLIKELY(type == 0)
181
 
                type = g_enum_register_static ("EngineStatus", _engine_status_values);
182
 
        return type;
183
 
}
184
 
 
185
 
 
186
 
#line 147 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
187
 
 
188
 
extern gboolean ibus_chewing_verbose;
189
 
//extern IBusConfig *iConfig;
190
 
 
191
 
#define IBUS_CHEWING_MAIN
192
 
#include "IBusChewingEngine-def.c"
193
 
 
194
 
#ifndef IBUS_1_3
195
 
IBusKeymap *ibus_keymap_get(gchar *keymap_name){
196
 
#ifdef IBUS_1_1
197
 
    return NULL;
198
 
#endif /* IBUS_1_1 */
199
 
#ifdef IBUS_1_2
200
 
    return ibus_keymap_new(keymap_name);
201
 
#endif /* IBUS_1_2 */
202
 
}
203
 
#endif /* IBUS_1_3 */
204
 
 
205
 
#line 206 "ibus-chewing-engine.c"
206
 
/* self casting macros */
207
 
#define SELF(x) IBUS_CHEWING_ENGINE(x)
208
 
#define SELF_CONST(x) IBUS_CHEWING_ENGINE_CONST(x)
209
 
#define IS_SELF(x) IBUS_IS_CHEWING_ENGINE(x)
210
 
#define TYPE_SELF IBUS_TYPE_CHEWING_ENGINE
211
 
#define SELF_CLASS(x) IBUS_CHEWING_ENGINE_CLASS(x)
212
 
 
213
 
#define SELF_GET_CLASS(x) IBUS_CHEWING_ENGINE_GET_CLASS(x)
214
 
 
215
 
/* self typedefs */
216
 
typedef IBusChewingEngine Self;
217
 
typedef IBusChewingEngineClass SelfClass;
218
 
 
219
 
/* here are local prototypes */
220
 
#line 238 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
221
 
static void ibus_chewing_engine_init (IBusChewingEngine * self) G_GNUC_UNUSED;
222
 
#line 223 "ibus-chewing-engine.c"
223
 
#line 261 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
224
 
static void ibus_chewing_engine_class_init (IBusChewingEngineClass * klass) G_GNUC_UNUSED;
225
 
#line 226 "ibus-chewing-engine.c"
226
 
#line 269 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
227
 
static void ibus_chewing_engine_load_setting (IBusChewingEngine * self) G_GNUC_UNUSED;
228
 
#line 229 "ibus-chewing-engine.c"
229
 
#line 340 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
230
 
static gchar * ibus_chewing_engine_make_preedit_string (IBusChewingEngine * self, glong * zhuyin_item_written_ptr) G_GNUC_UNUSED;
231
 
#line 232 "ibus-chewing-engine.c"
232
 
#line 407 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
233
 
static void ibus_chewing_engine_show_lookup_table (IBusChewingEngine * self, gboolean isShow) G_GNUC_UNUSED;
234
 
#line 235 "ibus-chewing-engine.c"
235
 
#line 418 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
236
 
static void ibus_chewing_engine_update_lookup_table (IBusChewingEngine * self) G_GNUC_UNUSED;
237
 
#line 238 "ibus-chewing-engine.c"
238
 
#line 447 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
239
 
static IBusText * ibus_chewing_engine_decorate_preedit (IBusChewingEngine * self, gchar * preeditBuf, gint * chiSymbolCursor, gint zhuyin_item_written) G_GNUC_UNUSED;
240
 
#line 241 "ibus-chewing-engine.c"
241
 
#line 490 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
242
 
static void ibus_chewing_engine_update_aux_string (IBusChewingEngine * self, IBusText * preeditIText) G_GNUC_UNUSED;
243
 
#line 244 "ibus-chewing-engine.c"
244
 
#line 517 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
245
 
static void ibus_chewing_engine_update_preedit (IBusChewingEngine * self, IBusText * preeditIText, gint chiSymbolCursor) G_GNUC_UNUSED;
246
 
#line 247 "ibus-chewing-engine.c"
247
 
#line 667 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
248
 
static IBusProperty * ibus_chewing_engine_get_iBusProperty (IBusChewingEngine * self, const gchar * prop_name) G_GNUC_UNUSED;
249
 
#line 250 "ibus-chewing-engine.c"
250
 
#line 713 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
251
 
static void ibus_chewing_engine_determine_input_mode (IBusChewingEngine * self) G_GNUC_UNUSED;
252
 
#line 253 "ibus-chewing-engine.c"
253
 
#line 815 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
254
 
static void ___18_ibus_chewing_engine_reset (IBusEngine * engine) G_GNUC_UNUSED;
255
 
#line 256 "ibus-chewing-engine.c"
256
 
#line 833 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
257
 
static void ___19_ibus_chewing_engine_page_up (IBusEngine * engine) G_GNUC_UNUSED;
258
 
#line 259 "ibus-chewing-engine.c"
259
 
#line 841 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
260
 
static void ___1a_ibus_chewing_engine_page_down (IBusEngine * engine) G_GNUC_UNUSED;
261
 
#line 262 "ibus-chewing-engine.c"
262
 
#line 848 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
263
 
static void ___1b_ibus_chewing_engine_cursor_up (IBusEngine * engine) G_GNUC_UNUSED;
264
 
#line 265 "ibus-chewing-engine.c"
265
 
#line 855 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
266
 
static void ___1c_ibus_chewing_engine_cursor_down (IBusEngine * engine) G_GNUC_UNUSED;
267
 
#line 268 "ibus-chewing-engine.c"
268
 
#line 862 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
269
 
static void ___1d_ibus_chewing_engine_enable (IBusEngine * engine) G_GNUC_UNUSED;
270
 
#line 271 "ibus-chewing-engine.c"
271
 
#line 875 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
272
 
static void ___1e_ibus_chewing_engine_disable (IBusEngine * engine) G_GNUC_UNUSED;
273
 
#line 274 "ibus-chewing-engine.c"
274
 
#line 885 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
275
 
static void ___1f_ibus_chewing_engine_focus_in (IBusEngine * engine) G_GNUC_UNUSED;
276
 
#line 277 "ibus-chewing-engine.c"
277
 
#line 921 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
278
 
static void ___20_ibus_chewing_engine_focus_out (IBusEngine * engine) G_GNUC_UNUSED;
279
 
#line 280 "ibus-chewing-engine.c"
280
 
#line 930 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
281
 
static void ___21_ibus_chewing_engine_property_activate (IBusEngine * engine, const gchar * prop_name, guint prop_state) G_GNUC_UNUSED;
282
 
#line 283 "ibus-chewing-engine.c"
283
 
#line 957 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
284
 
static void ___22_ibus_chewing_engine_property_show (IBusEngine * engine, const gchar * prop_name) G_GNUC_UNUSED;
285
 
#line 286 "ibus-chewing-engine.c"
286
 
#line 966 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
287
 
static void ___23_ibus_chewing_engine_property_hide (IBusEngine * engine, const gchar * prop_name) G_GNUC_UNUSED;
288
 
#line 289 "ibus-chewing-engine.c"
289
 
 
290
 
/* pointer to the class of our parent */
291
 
static IBusEngineClass *parent_class = NULL;
292
 
 
293
 
/* Short form macros */
294
 
#define self_load_setting ibus_chewing_engine_load_setting
295
 
#define self_set_lookup_table_label ibus_chewing_engine_set_lookup_table_label
296
 
#define self_make_preedit_string ibus_chewing_engine_make_preedit_string
297
 
#define self_show_lookup_table ibus_chewing_engine_show_lookup_table
298
 
#define self_update_lookup_table ibus_chewing_engine_update_lookup_table
299
 
#define self_decorate_preedit ibus_chewing_engine_decorate_preedit
300
 
#define self_update_aux_string ibus_chewing_engine_update_aux_string
301
 
#define self_update_preedit ibus_chewing_engine_update_preedit
302
 
#define self_update ibus_chewing_engine_update
303
 
#define self_refresh_property ibus_chewing_engine_refresh_property
304
 
#define self_refresh_property_list ibus_chewing_engine_refresh_property_list
305
 
#define self_hide_property_list ibus_chewing_engine_hide_property_list
306
 
#define self_save_config ibus_chewing_engine_save_config
307
 
#define self_save_config_all ibus_chewing_engine_save_config_all
308
 
#define self_is_selectKey ibus_chewing_engine_is_selectKey
309
 
#define self_set_selKeys_string ibus_chewing_engine_set_selKeys_string
310
 
#define self_get_iBusProperty ibus_chewing_engine_get_iBusProperty
311
 
#define self_handle_Default ibus_chewing_engine_handle_Default
312
 
#define self_determine_input_mode ibus_chewing_engine_determine_input_mode
313
 
#define self_commit ibus_chewing_engine_commit
314
 
#define self_force_commit ibus_chewing_engine_force_commit
315
 
GType
316
 
ibus_chewing_engine_get_type (void)
317
 
{
318
 
        static GType type = 0;
319
 
 
320
 
        if ___GOB_UNLIKELY(type == 0) {
321
 
                static const GTypeInfo info = {
322
 
                        sizeof (IBusChewingEngineClass),
323
 
                        (GBaseInitFunc) NULL,
324
 
                        (GBaseFinalizeFunc) NULL,
325
 
                        (GClassInitFunc) ibus_chewing_engine_class_init,
326
 
                        (GClassFinalizeFunc) NULL,
327
 
                        NULL /* class_data */,
328
 
                        sizeof (IBusChewingEngine),
329
 
                        0 /* n_preallocs */,
330
 
                        (GInstanceInitFunc) ibus_chewing_engine_init,
331
 
                        NULL
332
 
                };
333
 
 
334
 
                type = g_type_register_static (IBUS_TYPE_ENGINE, "IBusChewingEngine", &info, (GTypeFlags)0);
335
 
        }
336
 
 
337
 
        return type;
338
 
}
339
 
 
340
 
/* a macro for creating a new object of our type */
341
 
#define GET_NEW ((IBusChewingEngine *)g_object_new(ibus_chewing_engine_get_type(), NULL))
342
 
 
343
 
/* a function for creating a new object of our type */
344
 
#include <stdarg.h>
345
 
static IBusChewingEngine * GET_NEW_VARG (const char *first, ...) G_GNUC_UNUSED;
346
 
static IBusChewingEngine *
347
 
GET_NEW_VARG (const char *first, ...)
348
 
{
349
 
        IBusChewingEngine *ret;
350
 
        va_list ap;
351
 
        va_start (ap, first);
352
 
        ret = (IBusChewingEngine *)g_object_new_valist (ibus_chewing_engine_get_type (), first, ap);
353
 
        va_end (ap);
354
 
        return ret;
355
 
}
356
 
 
357
 
 
358
 
static void
359
 
___finalize(GObject *obj_self)
360
 
{
361
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::finalize"
362
 
        IBusChewingEngine *self G_GNUC_UNUSED = IBUS_CHEWING_ENGINE (obj_self);
363
 
        gpointer priv G_GNUC_UNUSED = self->_priv;
364
 
        if(G_OBJECT_CLASS(parent_class)->finalize) \
365
 
                (* G_OBJECT_CLASS(parent_class)->finalize)(obj_self);
366
 
#line 168 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
367
 
        if(self->context) { chewing_delete ((gpointer) self->context); self->context = NULL; }
368
 
#line 369 "ibus-chewing-engine.c"
369
 
#line 188 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
370
 
        if(self->table) { ibus_lookup_table_clear ((gpointer) self->table); self->table = NULL; }
371
 
#line 372 "ibus-chewing-engine.c"
372
 
#line 197 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
373
 
        if(self->chieng_prop) { g_object_unref ((gpointer) self->chieng_prop); self->chieng_prop = NULL; }
374
 
#line 375 "ibus-chewing-engine.c"
375
 
#line 206 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
376
 
        if(self->alnumSize_prop) { g_object_unref ((gpointer) self->alnumSize_prop); self->alnumSize_prop = NULL; }
377
 
#line 378 "ibus-chewing-engine.c"
378
 
#line 215 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
379
 
        if(self->settings_prop) { g_object_unref ((gpointer) self->settings_prop); self->settings_prop = NULL; }
380
 
#line 381 "ibus-chewing-engine.c"
381
 
#line 218 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
382
 
        if(self->prop_list) { g_object_unref ((gpointer) self->prop_list); self->prop_list = NULL; }
383
 
#line 384 "ibus-chewing-engine.c"
384
 
#line 225 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
385
 
        if(self->_priv->pDisplay) { XCloseDisplay ((gpointer) self->_priv->pDisplay); self->_priv->pDisplay = NULL; }
386
 
#line 387 "ibus-chewing-engine.c"
387
 
}
388
 
#undef __GOB_FUNCTION__
389
 
 
390
 
#line 238 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
391
 
static void 
392
 
ibus_chewing_engine_init (IBusChewingEngine * self G_GNUC_UNUSED)
393
 
{
394
 
#line 395 "ibus-chewing-engine.c"
395
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::init"
396
 
        self->_priv = G_TYPE_INSTANCE_GET_PRIVATE(self,IBUS_TYPE_CHEWING_ENGINE,IBusChewingEnginePrivate);
397
 
#line 147 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
398
 
        self->context = NULL;
399
 
#line 400 "ibus-chewing-engine.c"
400
 
#line 147 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
401
 
        self->syncCapsLock_local = CHEWING_MODIFIER_SYNC_FROM_KEYBOARD;
402
 
#line 403 "ibus-chewing-engine.c"
403
 
#line 172 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
404
 
        self->setting_dialog = 
405
 
        GTK_WIDGET(maker_dialog_new_full(_("Setting"),3,page_labels,1,button_labels,button_responses));
406
 
#line 407 "ibus-chewing-engine.c"
407
 
#line 172 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
408
 
        self->inputMode = CHEWING_INPUT_MODE_BYPASS;
409
 
#line 410 "ibus-chewing-engine.c"
410
 
#line 172 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
411
 
        self->flags = 0;
412
 
#line 413 "ibus-chewing-engine.c"
413
 
#line 172 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
414
 
        self->_priv->statusFlags = 0;
415
 
#line 416 "ibus-chewing-engine.c"
416
 
#line 172 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
417
 
        self->table = NULL;
418
 
#line 419 "ibus-chewing-engine.c"
419
 
#line 190 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
420
 
        self->chieng_prop = 
421
 
        g_object_ref_sink (
422
 
            ibus_property_new("chewing_chieng_prop",PROP_TYPE_NORMAL,
423
 
                SELF_GET_CLASS(self)->chieng_prop_label_chi,
424
 
                NULL, NULL, TRUE, TRUE,
425
 
                PROP_STATE_UNCHECKED, NULL))
426
 
        ;
427
 
#line 428 "ibus-chewing-engine.c"
428
 
#line 199 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
429
 
        self->alnumSize_prop = 
430
 
        g_object_ref_sink (
431
 
            ibus_property_new("chewing_alnumSize_prop",PROP_TYPE_NORMAL,
432
 
                SELF_GET_CLASS(self)->alnumSize_prop_label_half,
433
 
                NULL, NULL, TRUE, TRUE,
434
 
                PROP_STATE_UNCHECKED, NULL))
435
 
        ;
436
 
#line 437 "ibus-chewing-engine.c"
437
 
#line 208 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
438
 
        self->settings_prop = 
439
 
        g_object_ref_sink (
440
 
            ibus_property_new("chewing_settings_prop",PROP_TYPE_TOGGLE,
441
 
                SELF_GET_CLASS(self)->settings_prop_label,
442
 
                PKGDATADIR "/icons/settings.png", NULL, TRUE, TRUE,
443
 
                PROP_STATE_UNCHECKED, NULL))
444
 
        ;
445
 
#line 446 "ibus-chewing-engine.c"
446
 
#line 217 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
447
 
        self->prop_list =  g_object_ref_sink (ibus_prop_list_new()) ;
448
 
#line 449 "ibus-chewing-engine.c"
449
 
#line 217 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
450
 
        self->config = NULL;
451
 
#line 452 "ibus-chewing-engine.c"
452
 
#line 222 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
453
 
        self->keymap_us = ibus_keymap_get("us");
454
 
#line 455 "ibus-chewing-engine.c"
455
 
#line 224 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
456
 
        self->_priv->pDisplay = XOpenDisplay( NULL );
457
 
#line 458 "ibus-chewing-engine.c"
458
 
#line 224 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
459
 
        self->_priv->key_last = 0;
460
 
#line 461 "ibus-chewing-engine.c"
461
 
 {
462
 
#line 238 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
463
 
 
464
 
          /* initialize the object here */
465
 
        G_DEBUG_MSG(1,"[I1] init() %sinitialized",(self->_priv->statusFlags & ENGINE_STATUS_INITIALIZED)? "": "un" );
466
 
        if (!(self->_priv->statusFlags & ENGINE_STATUS_INITIALIZED)){
467
 
            maker_dialog_set_verbose_level(MAKER_DIALOG(self->setting_dialog),ibus_chewing_verbose);
468
 
            gchar buf[100];
469
 
            g_snprintf(buf,100,"%s/.chewing",getenv("HOME"));
470
 
 
471
 
            chewing_Init(CHEWING_DATADIR, buf);
472
 
 
473
 
            self->context=chewing_new();
474
 
            chewing_set_ChiEngMode(self->context,CHINESE_MODE);
475
 
            self->inputMode=CHEWING_INPUT_MODE_SELECTING_DONE;
476
 
 
477
 
            /* init properties */
478
 
            ibus_prop_list_append(self->prop_list,self->chieng_prop);
479
 
            ibus_prop_list_append(self->prop_list,self->alnumSize_prop);
480
 
            ibus_prop_list_append(self->prop_list,self->settings_prop);
481
 
 
482
 
            ibus_chewing_engine_set_status_flag(self,ENGINE_STATUS_INITIALIZED);
483
 
        }
484
 
    
485
 
#line 486 "ibus-chewing-engine.c"
486
 
 }
487
 
}
488
 
#undef __GOB_FUNCTION__
489
 
#line 261 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
490
 
static void 
491
 
ibus_chewing_engine_class_init (IBusChewingEngineClass * klass G_GNUC_UNUSED)
492
 
{
493
 
#line 494 "ibus-chewing-engine.c"
494
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::class_init"
495
 
        GObjectClass *g_object_class G_GNUC_UNUSED = (GObjectClass*) klass;
496
 
        IBusEngineClass *ibus_engine_class = (IBusEngineClass *)klass;
497
 
 
498
 
        g_type_class_add_private(klass,sizeof(IBusChewingEnginePrivate));
499
 
#line 230 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
500
 
        klass->chieng_prop_label_chi = g_object_ref_sink(ibus_text_new_from_static_string(_("Chi")));
501
 
#line 502 "ibus-chewing-engine.c"
502
 
#line 231 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
503
 
        klass->chieng_prop_label_eng = g_object_ref_sink(ibus_text_new_from_static_string(_("Eng")));
504
 
#line 505 "ibus-chewing-engine.c"
505
 
#line 232 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
506
 
        klass->alnumSize_prop_label_full = g_object_ref_sink(ibus_text_new_from_static_string(_("Full")));
507
 
#line 508 "ibus-chewing-engine.c"
508
 
#line 233 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
509
 
        klass->alnumSize_prop_label_half = g_object_ref_sink(ibus_text_new_from_static_string(_("Half")));
510
 
#line 511 "ibus-chewing-engine.c"
511
 
#line 235 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
512
 
        klass->settings_prop_label = g_object_ref_sink(ibus_text_new_from_static_string(_("Settings")));
513
 
#line 514 "ibus-chewing-engine.c"
514
 
#line 236 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
515
 
        klass->emptyText = g_object_ref_sink(ibus_text_new_from_static_string(""));
516
 
#line 517 "ibus-chewing-engine.c"
517
 
 
518
 
        parent_class = g_type_class_ref (IBUS_TYPE_ENGINE);
519
 
 
520
 
#line 815 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
521
 
        ibus_engine_class->reset = ___18_ibus_chewing_engine_reset;
522
 
#line 833 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
523
 
        ibus_engine_class->page_up = ___19_ibus_chewing_engine_page_up;
524
 
#line 841 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
525
 
        ibus_engine_class->page_down = ___1a_ibus_chewing_engine_page_down;
526
 
#line 848 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
527
 
        ibus_engine_class->cursor_up = ___1b_ibus_chewing_engine_cursor_up;
528
 
#line 855 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
529
 
        ibus_engine_class->cursor_down = ___1c_ibus_chewing_engine_cursor_down;
530
 
#line 862 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
531
 
        ibus_engine_class->enable = ___1d_ibus_chewing_engine_enable;
532
 
#line 875 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
533
 
        ibus_engine_class->disable = ___1e_ibus_chewing_engine_disable;
534
 
#line 885 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
535
 
        ibus_engine_class->focus_in = ___1f_ibus_chewing_engine_focus_in;
536
 
#line 921 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
537
 
        ibus_engine_class->focus_out = ___20_ibus_chewing_engine_focus_out;
538
 
#line 930 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
539
 
        ibus_engine_class->property_activate = ___21_ibus_chewing_engine_property_activate;
540
 
#line 957 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
541
 
        ibus_engine_class->property_show = ___22_ibus_chewing_engine_property_show;
542
 
#line 966 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
543
 
        ibus_engine_class->property_hide = ___23_ibus_chewing_engine_property_hide;
544
 
#line 545 "ibus-chewing-engine.c"
545
 
        g_object_class->finalize = ___finalize;
546
 
 {
547
 
#line 261 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
548
 
 
549
 
#ifdef IBUS_1_1
550
 
        ibus_engine_class->process_key_event = ibus_chewing_engine_process_key_event;
551
 
#else
552
 
        ibus_engine_class->process_key_event = ibus_chewing_engine_process_key_event_1_2;
553
 
#endif /* IBUS_1_1 */
554
 
    
555
 
#line 556 "ibus-chewing-engine.c"
556
 
 }
557
 
}
558
 
#undef __GOB_FUNCTION__
559
 
 
560
 
 
561
 
 
562
 
#line 269 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
563
 
static void 
564
 
ibus_chewing_engine_load_setting (IBusChewingEngine * self)
565
 
{
566
 
#line 567 "ibus-chewing-engine.c"
567
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::load_setting"
568
 
#line 269 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
569
 
        g_return_if_fail (self != NULL);
570
 
#line 269 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
571
 
        g_return_if_fail (IBUS_IS_CHEWING_ENGINE (self));
572
 
#line 573 "ibus-chewing-engine.c"
573
 
{
574
 
#line 269 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
575
 
        
576
 
#define BUFFER_SIZE_LOCAL 200
577
 
        G_DEBUG_MSG(3,"[I3] load_setting()");
578
 
        GList  *connections_list=ibus_service_get_connections(IBUS_SERVICE(self));
579
 
        g_assert(connections_list);
580
 
        g_assert(connections_list->data);
581
 
        IBusConnection *iConnection=(IBusConnection *) connections_list->data;
582
 
        self->config=ibus_config_new(iConnection);
583
 
 
584
 
        int i;
585
 
        gchar buf[BUFFER_SIZE_LOCAL];
586
 
        GValue gValue={0};
587
 
 
588
 
        for (i=0; propSpecs[i].valueType!=G_TYPE_INVALID;i++){
589
 
            G_DEBUG_MSG(4,"[I4]  load_setting(), i=%d",i);
590
 
            if (ibus_config_get_value(self->config, "engine/Chewing",propSpecs[i].key, &gValue)){
591
 
                switch(propSpecs[i].valueType){
592
 
                    case G_TYPE_BOOLEAN:
593
 
                        buf[0]=(g_value_get_boolean(&gValue))? '1' : '0';
594
 
                        buf[1]='\0';
595
 
                        break;
596
 
                    case G_TYPE_UINT:
597
 
                        g_snprintf(buf,BUFFER_SIZE_LOCAL,"%u",
598
 
                                g_value_get_uint(&gValue));
599
 
                        break;
600
 
                    case G_TYPE_INT:
601
 
                        g_snprintf(buf,BUFFER_SIZE_LOCAL,"%d",
602
 
                                g_value_get_int(&gValue));
603
 
                        break;
604
 
                    case G_TYPE_STRING:
605
 
                        g_strlcpy(buf,g_value_get_string(&gValue), BUFFER_SIZE_LOCAL);
606
 
                        break;
607
 
                    default:
608
 
                        break;
609
 
 
610
 
                }
611
 
            }else{
612
 
                g_warning("[WW] %s /desktop/ibus/engine/Chewing/%s, %s %s",
613
 
                        _("Warning: cannot load configure key"),
614
 
                        propSpecs[i].key,
615
 
                        (propSpecs[i].defaultValue)? _(" Use default value:") : _(" No default value, skipped.") ,
616
 
                        (propSpecs[i].defaultValue)? propSpecs[i].defaultValue : ""
617
 
                        );
618
 
                if (propSpecs[i].defaultValue){
619
 
                    g_strlcpy(buf,propSpecs[i].defaultValue, BUFFER_SIZE_LOCAL);
620
 
                }else{
621
 
                    continue;
622
 
                }
623
 
            }
624
 
            /* Add property to dialog */
625
 
            maker_dialog_add_property(MAKER_DIALOG(self->setting_dialog),&propSpecs[i],buf,self);
626
 
            maker_dialog_apply_widget_value(MAKER_DIALOG(self->setting_dialog),propSpecs[i].key);
627
 
            g_value_unset(&gValue);
628
 
        }
629
 
 
630
 
        for (i=0; page_labels[i]!=NULL;i++){
631
 
            maker_dialog_align_labels(MAKER_DIALOG(self->setting_dialog),page_labels[i],1.0f, 0.5f);
632
 
        }
633
 
        gtk_widget_hide(self->setting_dialog);
634
 
#undef BUFFER_SIZE_LOCAL
635
 
    }}
636
 
#line 637 "ibus-chewing-engine.c"
637
 
#undef __GOB_FUNCTION__
638
 
 
639
 
#line 331 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
640
 
void 
641
 
ibus_chewing_engine_set_lookup_table_label (IBusChewingEngine * self, const gchar * labels)
642
 
{
643
 
#line 644 "ibus-chewing-engine.c"
644
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::set_lookup_table_label"
645
 
#line 331 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
646
 
        g_return_if_fail (self != NULL);
647
 
#line 331 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
648
 
        g_return_if_fail (IBUS_IS_CHEWING_ENGINE (self));
649
 
#line 650 "ibus-chewing-engine.c"
650
 
{
651
 
#line 331 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
652
 
        
653
 
        int i,len=strlen(labels);
654
 
        g_array_set_size(self->table->labels,0);
655
 
        for(i=0;i<len;i++){
656
 
            IBusText *text=ibus_text_new_from_unichar((gunichar) labels[i]);
657
 
            ibus_lookup_table_append_label (self->table,text);
658
 
        }
659
 
    }}
660
 
#line 661 "ibus-chewing-engine.c"
661
 
#undef __GOB_FUNCTION__
662
 
 
663
 
#line 340 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
664
 
static gchar * 
665
 
ibus_chewing_engine_make_preedit_string (IBusChewingEngine * self, glong * zhuyin_item_written_ptr)
666
 
{
667
 
#line 668 "ibus-chewing-engine.c"
668
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::make_preedit_string"
669
 
#line 340 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
670
 
        g_return_val_if_fail (self != NULL, (gchar * )0);
671
 
#line 340 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
672
 
        g_return_val_if_fail (IBUS_IS_CHEWING_ENGINE (self), (gchar * )0);
673
 
#line 674 "ibus-chewing-engine.c"
674
 
{
675
 
#line 340 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
676
 
        
677
 
        gchar *buff_str=chewing_buffer_String(self->context);
678
 
        G_DEBUG_MSG(4, "[I4] make_preedit_string(): chewing_buffer_String=%s ",
679
 
                buff_str);
680
 
 
681
 
        int chiSymbolCursor = chewing_cursor_Current(self->context);
682
 
        int zhuyin_count;
683
 
        int zhuyin_tone=-1;
684
 
 
685
 
        gchar *zhuyin_str=chewing_zuin_String(self->context,&zhuyin_count);
686
 
        *zhuyin_item_written_ptr= (glong) zhuyin_count;
687
 
        G_DEBUG_MSG(5, "[I5]  make_preedit_string(): chewing_zuin_String=%s count=%d inputMode=%d",
688
 
                zhuyin_str,zhuyin_count,self->inputMode);
689
 
 
690
 
        switch(self->inputMode){
691
 
            case CHEWING_INPUT_MODE_EDITING:
692
 
                g_strlcpy(self->_priv->zhuyin_latest,zhuyin_str,ZHUYIN_BUFFER_SIZE);
693
 
                zhuyin_tone=0;
694
 
                break;
695
 
            case CHEWING_INPUT_MODE_SELECTING:
696
 
                zhuyin_tone=get_tone(chewing_get_KBType(self->context),self->_priv->key_last);
697
 
                add_tone(self->_priv->zhuyin_latest,zhuyin_tone);
698
 
                if (zhuyin_tone>0 ){
699
 
                    if (self->flags & CHEWING_FLAG_PLAIN_ZHUYIN){
700
 
                        /* Open candidate selection window */
701
 
                        if (chewing_get_spaceAsSelection(self->context)){
702
 
                            chewing_handle_Space(self->context);
703
 
                        }else{
704
 
                            chewing_handle_Down(self->context);
705
 
                        }
706
 
                    }
707
 
                }
708
 
                break;
709
 
            case CHEWING_INPUT_MODE_SELECTING_DONE:
710
 
                self->_priv->zhuyin_latest[0]='\0';
711
 
                zhuyin_tone=-1;
712
 
                if (zhuyin_count)
713
 
                    self->inputMode=CHEWING_INPUT_MODE_EDITING;
714
 
                break;
715
 
            default:
716
 
                /* BYPASS */
717
 
                break;
718
 
 
719
 
        }
720
 
 
721
 
        gsize len=strlen(zhuyin_str)+strlen(buff_str);
722
 
        gchar *preeditBuf=g_new(gchar, len+1);
723
 
        preeditBuf[0]='\0';
724
 
        if (chiSymbolCursor>0){
725
 
            g_utf8_strncpy(preeditBuf, buff_str, chiSymbolCursor);
726
 
        }
727
 
        gsize zhuyin_start=strlen(preeditBuf);
728
 
        /* Inserting zhuyinBuf */
729
 
        if (zhuyin_count>0){
730
 
            g_strlcat(preeditBuf,zhuyin_str,len+1);
731
 
        }
732
 
        /* Append rest chiSymbolBuf */
733
 
        g_strlcat(preeditBuf,buff_str+zhuyin_start, len+1);
734
 
 
735
 
        g_free(buff_str);
736
 
        g_free(zhuyin_str);
737
 
        G_DEBUG_MSG(4, "[I4]  make_preedit_string(): return preedit=%s zhuyin_latest=%s zhuyin_tone=%d inputMode=%d",
738
 
                preeditBuf, self->_priv->zhuyin_latest,zhuyin_tone,self->inputMode);
739
 
 
740
 
        return preeditBuf;
741
 
    }}
742
 
#line 743 "ibus-chewing-engine.c"
743
 
#undef __GOB_FUNCTION__
744
 
 
745
 
#line 407 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
746
 
static void 
747
 
ibus_chewing_engine_show_lookup_table (IBusChewingEngine * self, gboolean isShow)
748
 
{
749
 
#line 750 "ibus-chewing-engine.c"
750
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::show_lookup_table"
751
 
#line 407 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
752
 
        g_return_if_fail (self != NULL);
753
 
#line 407 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
754
 
        g_return_if_fail (IBUS_IS_CHEWING_ENGINE (self));
755
 
#line 756 "ibus-chewing-engine.c"
756
 
{
757
 
#line 407 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
758
 
        
759
 
        ibus_engine_update_lookup_table(IBUS_ENGINE(self),self->table,isShow);
760
 
        if (isShow){
761
 
            ibus_engine_show_lookup_table(IBUS_ENGINE(self));
762
 
            ibus_chewing_engine_set_status_flag(self,ENGINE_STATUS_SHOW_CANDIDATE);
763
 
        }else{
764
 
            ibus_engine_hide_lookup_table(IBUS_ENGINE(self));
765
 
            ibus_chewing_engine_clear_status_flag(self,ENGINE_STATUS_SHOW_CANDIDATE);
766
 
        }
767
 
    }}
768
 
#line 769 "ibus-chewing-engine.c"
769
 
#undef __GOB_FUNCTION__
770
 
 
771
 
#line 418 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
772
 
static void 
773
 
ibus_chewing_engine_update_lookup_table (IBusChewingEngine * self)
774
 
{
775
 
#line 776 "ibus-chewing-engine.c"
776
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::update_lookup_table"
777
 
#line 418 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
778
 
        g_return_if_fail (self != NULL);
779
 
#line 418 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
780
 
        g_return_if_fail (IBUS_IS_CHEWING_ENGINE (self));
781
 
#line 782 "ibus-chewing-engine.c"
782
 
{
783
 
#line 418 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
784
 
        
785
 
        ibus_lookup_table_clear(self->table);
786
 
        int choicePerPage=chewing_cand_ChoicePerPage(self->context);
787
 
        int i=0;
788
 
        char *candidate=NULL;
789
 
        IBusText *iText=NULL;
790
 
 
791
 
        G_DEBUG_MSG(4,"[I4] update_lookup_table() TotalChoice=%d CurrentPage=%d",
792
 
                chewing_cand_TotalChoice(self->context),chewing_cand_CurrentPage(self->context));
793
 
        if (chewing_cand_TotalChoice(self->context) >0){
794
 
            chewing_cand_Enumerate(self->context);
795
 
            for(i=0;i<choicePerPage;i++){
796
 
                if (chewing_cand_hasNext(self->context)){
797
 
                    candidate=chewing_cand_String(self->context);
798
 
                    iText=g_object_ref_sink(ibus_text_new_from_string (candidate));
799
 
                    ibus_lookup_table_append_candidate(self->table,iText);
800
 
                    g_free(candidate);
801
 
                    g_object_unref (iText);
802
 
                }else{
803
 
                    break;
804
 
                }
805
 
            }
806
 
            self_show_lookup_table(self, TRUE);
807
 
        }else{
808
 
            self_show_lookup_table(self, FALSE);
809
 
        }
810
 
    }}
811
 
#line 812 "ibus-chewing-engine.c"
812
 
#undef __GOB_FUNCTION__
813
 
 
814
 
#line 447 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
815
 
static IBusText * 
816
 
ibus_chewing_engine_decorate_preedit (IBusChewingEngine * self, gchar * preeditBuf, gint * chiSymbolCursor, gint zhuyin_item_written)
817
 
{
818
 
#line 819 "ibus-chewing-engine.c"
819
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::decorate_preedit"
820
 
#line 447 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
821
 
        g_return_val_if_fail (self != NULL, (IBusText * )0);
822
 
#line 447 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
823
 
        g_return_val_if_fail (IBUS_IS_CHEWING_ENGINE (self), (IBusText * )0);
824
 
#line 825 "ibus-chewing-engine.c"
825
 
{
826
 
#line 447 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
827
 
        
828
 
        IBusText *iText=g_object_ref_sink(ibus_text_new_from_string(preeditBuf));
829
 
        *chiSymbolCursor = chewing_cursor_Current(self->context);
830
 
        G_DEBUG_MSG(4,"[I4] decorate_preedit() chiSymbolCursor=%d preeditBuf=%s statusFlags=%x",
831
 
                *chiSymbolCursor,preeditBuf, self->_priv->statusFlags);
832
 
        g_free(preeditBuf);
833
 
 
834
 
        gint cursorRight=0;
835
 
        gint charLen=(gint) g_utf8_strlen(iText->text, -1);
836
 
        switch(self->inputMode){
837
 
            case CHEWING_INPUT_MODE_SELECTING:
838
 
                cursorRight=*chiSymbolCursor + MAX(zhuyin_item_written, 1);
839
 
                break;
840
 
            case CHEWING_INPUT_MODE_EDITING:
841
 
            case CHEWING_INPUT_MODE_SELECTING_DONE:
842
 
            default: /* BYPASS */
843
 
                cursorRight=*chiSymbolCursor + MAX(zhuyin_item_written, 1);
844
 
                break;
845
 
        }
846
 
 
847
 
        G_DEBUG_MSG(5,"[I5]  decorate_preedit() charLen=%d cursorRight=%d", charLen, cursorRight);
848
 
        if (*chiSymbolCursor< cursorRight){
849
 
            ibus_text_append_attribute (iText, IBUS_ATTR_TYPE_FOREGROUND, 0x00ffffff,
850
 
                    *chiSymbolCursor, cursorRight);
851
 
            ibus_text_append_attribute (iText, IBUS_ATTR_TYPE_BACKGROUND, 0x00000000,
852
 
                    *chiSymbolCursor, cursorRight);
853
 
        }
854
 
 
855
 
        IntervalType it;
856
 
        chewing_interval_Enumerate(self->context);
857
 
        while(chewing_interval_hasNext(self->context)){
858
 
            chewing_interval_Get(self->context,&it);
859
 
            G_DEBUG_MSG(6,"[I6]  decorate_preedit() it.from=%d it.to=%d", it.from, it.to);
860
 
            if (it.to-it.from >1){
861
 
                ibus_text_append_attribute (iText, IBUS_ATTR_TYPE_UNDERLINE, IBUS_ATTR_UNDERLINE_DOUBLE,
862
 
                        it.from, it.to);
863
 
            }
864
 
        }
865
 
        ibus_text_append_attribute (iText, IBUS_ATTR_TYPE_UNDERLINE, IBUS_ATTR_UNDERLINE_SINGLE,
866
 
                0, -1);
867
 
        return iText;
868
 
    }}
869
 
#line 870 "ibus-chewing-engine.c"
870
 
#undef __GOB_FUNCTION__
871
 
 
872
 
#line 490 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
873
 
static void 
874
 
ibus_chewing_engine_update_aux_string (IBusChewingEngine * self, IBusText * preeditIText)
875
 
{
876
 
#line 877 "ibus-chewing-engine.c"
877
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::update_aux_string"
878
 
#line 490 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
879
 
        g_return_if_fail (self != NULL);
880
 
#line 490 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
881
 
        g_return_if_fail (IBUS_IS_CHEWING_ENGINE (self));
882
 
#line 883 "ibus-chewing-engine.c"
883
 
{
884
 
#line 490 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
885
 
        
886
 
        G_DEBUG_MSG(4,"[I4] update_aux_string() statusFlags=%x", self->_priv->statusFlags);
887
 
        IBusText *iText=NULL;
888
 
        switch (self->_priv->inputStyle){
889
 
            case CHEWING_INPUT_STYLE_IN_APPLICATION:
890
 
                if (chewing_aux_Length(self->context)>0){
891
 
                    gchar *aux_string=chewing_aux_String(self->context);
892
 
                    iText=g_object_ref_sink(ibus_text_new_from_string (aux_string));
893
 
                    ibus_engine_update_auxiliary_text(IBUS_ENGINE(self),iText,TRUE);
894
 
                    g_object_unref (iText);
895
 
                    ibus_engine_show_auxiliary_text(IBUS_ENGINE(self));
896
 
                    g_free(aux_string);
897
 
                }else{
898
 
                    ibus_engine_hide_auxiliary_text(IBUS_ENGINE(self));
899
 
                }
900
 
                break;
901
 
            case CHEWING_INPUT_STYLE_IN_CANDIDATE:
902
 
                if (self->inputMode==CHEWING_INPUT_MODE_BYPASS){
903
 
                    ibus_engine_hide_auxiliary_text(IBUS_ENGINE(self));
904
 
                }else{
905
 
                    ibus_engine_update_auxiliary_text(IBUS_ENGINE(self),preeditIText,TRUE);
906
 
                    ibus_engine_show_auxiliary_text(IBUS_ENGINE(self));
907
 
                }
908
 
                break;
909
 
        }
910
 
    }}
911
 
#line 912 "ibus-chewing-engine.c"
912
 
#undef __GOB_FUNCTION__
913
 
 
914
 
#line 517 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
915
 
static void 
916
 
ibus_chewing_engine_update_preedit (IBusChewingEngine * self, IBusText * preeditIText, gint chiSymbolCursor)
917
 
{
918
 
#line 919 "ibus-chewing-engine.c"
919
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::update_preedit"
920
 
#line 517 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
921
 
        g_return_if_fail (self != NULL);
922
 
#line 517 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
923
 
        g_return_if_fail (IBUS_IS_CHEWING_ENGINE (self));
924
 
#line 925 "ibus-chewing-engine.c"
925
 
{
926
 
#line 517 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
927
 
        
928
 
        G_DEBUG_MSG(5,"[I5] update_preedit() text=%s statusFlags=%x", preeditIText->text, self->_priv->statusFlags);
929
 
        switch (self->_priv->inputStyle){
930
 
            case CHEWING_INPUT_STYLE_IN_APPLICATION:
931
 
                ibus_engine_update_preedit_text (IBUS_ENGINE(self),preeditIText, chiSymbolCursor, TRUE);
932
 
                break;
933
 
            case CHEWING_INPUT_STYLE_IN_CANDIDATE:
934
 
                ibus_engine_update_preedit_text (IBUS_ENGINE(self),SELF_GET_CLASS(self)->emptyText, 0, TRUE);
935
 
                break;
936
 
        }
937
 
        G_DEBUG_MSG(5,"[I5]  update_preedit(): return");
938
 
    }}
939
 
#line 940 "ibus-chewing-engine.c"
940
 
#undef __GOB_FUNCTION__
941
 
 
942
 
#line 530 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
943
 
gboolean 
944
 
ibus_chewing_engine_update (IBusChewingEngine * self)
945
 
{
946
 
#line 947 "ibus-chewing-engine.c"
947
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::update"
948
 
#line 530 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
949
 
        g_return_val_if_fail (self != NULL, (gboolean )0);
950
 
#line 530 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
951
 
        g_return_val_if_fail (IBUS_IS_CHEWING_ENGINE (self), (gboolean )0);
952
 
#line 953 "ibus-chewing-engine.c"
953
 
{
954
 
#line 530 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
955
 
        
956
 
        G_DEBUG_MSG(3,"[I3] update() statusFlags=%x", self->_priv->statusFlags);
957
 
        self_determine_input_mode(self);
958
 
        gint chiSymbolCursor;
959
 
        glong zhuyin_item_written;
960
 
        self_commit(self);
961
 
        gchar *preeditBuf=self_make_preedit_string(self, &zhuyin_item_written);
962
 
        IBusText *iText=self_decorate_preedit(self, preeditBuf, &chiSymbolCursor, zhuyin_item_written);
963
 
 
964
 
        self_update_aux_string(self, iText);
965
 
        self_update_preedit(self, iText, chiSymbolCursor);
966
 
        g_object_unref(iText);
967
 
        G_DEBUG_MSG(4,"[I4]  update() inputMode=%d nPhoneSeq=%d statusFlags=%x",
968
 
                self->inputMode,
969
 
                chewing_get_phoneSeqLen(self->context),
970
 
                self->_priv->statusFlags);
971
 
        self_update_lookup_table(self);
972
 
        gboolean ret=TRUE;
973
 
 
974
 
        if (chewing_keystroke_CheckAbsorb(self->context)){
975
 
            ret=TRUE;
976
 
        }else if (chewing_keystroke_CheckIgnore(self->context)){
977
 
            ret=FALSE;
978
 
        }
979
 
        G_DEBUG_MSG(4,"[I4]  update() return %s",(ret)? "TRUE": "FALSE");
980
 
        return ret;
981
 
    }}
982
 
#line 983 "ibus-chewing-engine.c"
983
 
#undef __GOB_FUNCTION__
984
 
 
985
 
#line 558 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
986
 
void 
987
 
ibus_chewing_engine_refresh_property (IBusChewingEngine * self, const gchar * prop_name)
988
 
{
989
 
#line 990 "ibus-chewing-engine.c"
990
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::refresh_property"
991
 
#line 558 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
992
 
        g_return_if_fail (self != NULL);
993
 
#line 558 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
994
 
        g_return_if_fail (IBUS_IS_CHEWING_ENGINE (self));
995
 
#line 996 "ibus-chewing-engine.c"
996
 
{
997
 
#line 558 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
998
 
        
999
 
        G_DEBUG_MSG(2,"[I2] refresh_property(%s)",prop_name);
1000
 
        if (strcmp(prop_name,"chewing_chieng_prop")==0){
1001
 
            if (chewing_get_ChiEngMode(self->context)){
1002
 
                /* Chinese  */
1003
 
                ibus_property_set_label(self->chieng_prop,SELF_GET_CLASS(self)->chieng_prop_label_chi);
1004
 
            }else{
1005
 
                /* English */
1006
 
                ibus_property_set_label(self->chieng_prop,SELF_GET_CLASS(self)->chieng_prop_label_eng);
1007
 
            }
1008
 
            ibus_engine_update_property(IBUS_ENGINE(self),self->chieng_prop);
1009
 
        }else if (strcmp(prop_name,"chewing_alnumSize_prop")==0){
1010
 
            if (chewing_get_ShapeMode(self->context)){
1011
 
                /* Full-Sized Shape */
1012
 
                ibus_property_set_label(self->alnumSize_prop,SELF_GET_CLASS(self)->alnumSize_prop_label_full);
1013
 
            }else{
1014
 
                /* Half-Sized Shape */
1015
 
                ibus_property_set_label(self->alnumSize_prop,SELF_GET_CLASS(self)->alnumSize_prop_label_half);
1016
 
            }
1017
 
            ibus_engine_update_property(IBUS_ENGINE(self),self->alnumSize_prop);
1018
 
        }
1019
 
        G_DEBUG_MSG(2,"[I2] refresh_property(%s) finished",prop_name);
1020
 
    }}
1021
 
#line 1022 "ibus-chewing-engine.c"
1022
 
#undef __GOB_FUNCTION__
1023
 
 
1024
 
/**
1025
 
 * ibus_chewing_engine_refresh_property_list:
1026
 
 * @self: this instances.
1027
 
 *
1028
 
 * Refresh the property list (language bar).
1029
 
 **/
1030
 
#line 588 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1031
 
void 
1032
 
ibus_chewing_engine_refresh_property_list (IBusChewingEngine * self)
1033
 
{
1034
 
#line 1035 "ibus-chewing-engine.c"
1035
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::refresh_property_list"
1036
 
#line 588 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1037
 
        g_return_if_fail (self != NULL);
1038
 
#line 588 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1039
 
        g_return_if_fail (IBUS_IS_CHEWING_ENGINE (self));
1040
 
#line 1041 "ibus-chewing-engine.c"
1041
 
{
1042
 
#line 588 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1043
 
        
1044
 
        self_refresh_property(self,"chewing_chieng_prop");
1045
 
 
1046
 
        self_refresh_property(self,"chewing_alnumSize_prop");
1047
 
 
1048
 
        self_refresh_property(self,"chewing_settings_prop");
1049
 
        if (self->_priv->statusFlags & (ENGINE_STATUS_ENABLED | ENGINE_STATUS_FOCUS_IN)){
1050
 
            ibus_engine_register_properties(IBUS_ENGINE(self),self->prop_list);
1051
 
            IBUS_ENGINE_GET_CLASS(self)->property_show(IBUS_ENGINE(self),"chewing_chieng_prop");
1052
 
            IBUS_ENGINE_GET_CLASS(self)->property_show(IBUS_ENGINE(self),"chewing_alnumSize_prop");
1053
 
            IBUS_ENGINE_GET_CLASS(self)->property_show(IBUS_ENGINE(self),"chewing_settings_prop");
1054
 
        }
1055
 
    }}
1056
 
#line 1057 "ibus-chewing-engine.c"
1057
 
#undef __GOB_FUNCTION__
1058
 
 
1059
 
/**
1060
 
 * ibus_chewing_engine_hide_property_list:
1061
 
 * @self: this instances.
1062
 
 *
1063
 
 * Hide the property list (language bar).
1064
 
 **/
1065
 
#line 608 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1066
 
void 
1067
 
ibus_chewing_engine_hide_property_list (IBusChewingEngine * self)
1068
 
{
1069
 
#line 1070 "ibus-chewing-engine.c"
1070
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::hide_property_list"
1071
 
#line 608 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1072
 
        g_return_if_fail (self != NULL);
1073
 
#line 608 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1074
 
        g_return_if_fail (IBUS_IS_CHEWING_ENGINE (self));
1075
 
#line 1076 "ibus-chewing-engine.c"
1076
 
{
1077
 
#line 608 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1078
 
        
1079
 
        IBUS_ENGINE_GET_CLASS(self)->property_hide(IBUS_ENGINE(self),"chewing_chieng_prop");
1080
 
        IBUS_ENGINE_GET_CLASS(self)->property_hide(IBUS_ENGINE(self),"chewing_alnumSize_prop");
1081
 
        IBUS_ENGINE_GET_CLASS(self)->property_hide(IBUS_ENGINE(self),"chewing_settings_prop");
1082
 
    }}
1083
 
#line 1084 "ibus-chewing-engine.c"
1084
 
#undef __GOB_FUNCTION__
1085
 
 
1086
 
/**
1087
 
 * ibus_chewing_engine_save_config:
1088
 
 * @self: this instances.
1089
 
 * @key_suffix: key to be set.
1090
 
 * @returns: TRUE if successful, FALSE otherwise.
1091
 
 *
1092
 
 * Save the property value to disk.
1093
 
 **/
1094
 
#line 622 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1095
 
gboolean 
1096
 
ibus_chewing_engine_save_config (IBusChewingEngine * self, const gchar * key_suffix)
1097
 
{
1098
 
#line 1099 "ibus-chewing-engine.c"
1099
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::save_config"
1100
 
#line 622 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1101
 
        g_return_val_if_fail (self != NULL, (gboolean )0);
1102
 
#line 622 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1103
 
        g_return_val_if_fail (IBUS_IS_CHEWING_ENGINE (self), (gboolean )0);
1104
 
#line 1105 "ibus-chewing-engine.c"
1105
 
{
1106
 
#line 622 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1107
 
        
1108
 
        G_DEBUG_MSG(1,"[I1] save_config(%s,-)",key_suffix);
1109
 
        GValue gValue={0};
1110
 
        maker_dialog_get_widget_value(MAKER_DIALOG(self->setting_dialog),key_suffix,&gValue);
1111
 
        return ibus_config_set_value (self->config,"engine/Chewing",key_suffix,&gValue);
1112
 
    }}
1113
 
#line 1114 "ibus-chewing-engine.c"
1114
 
#undef __GOB_FUNCTION__
1115
 
 
1116
 
/**
1117
 
 * ibus_chewing_engine_save_config_all:
1118
 
 * @self: this instances.
1119
 
 * @key_suffix: key to be set.
1120
 
 * @returns: TRUE if all successful, FALSE otherwise.
1121
 
 *
1122
 
 * Save alll property values to disk.
1123
 
 **/
1124
 
#line 637 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1125
 
gboolean 
1126
 
ibus_chewing_engine_save_config_all (IBusChewingEngine * self)
1127
 
{
1128
 
#line 1129 "ibus-chewing-engine.c"
1129
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::save_config_all"
1130
 
#line 637 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1131
 
        g_return_val_if_fail (self != NULL, (gboolean )0);
1132
 
#line 637 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1133
 
        g_return_val_if_fail (IBUS_IS_CHEWING_ENGINE (self), (gboolean )0);
1134
 
#line 1135 "ibus-chewing-engine.c"
1135
 
{
1136
 
#line 637 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1137
 
        
1138
 
        int i;
1139
 
        gboolean success=TRUE;
1140
 
        for(i=0;propSpecs[i].valueType!=G_TYPE_INVALID;i++){
1141
 
            if (!self_save_config(self,propSpecs[i].key)){
1142
 
                success=FALSE;
1143
 
            }
1144
 
        }
1145
 
        return success;
1146
 
    }}
1147
 
#line 1148 "ibus-chewing-engine.c"
1148
 
#undef __GOB_FUNCTION__
1149
 
 
1150
 
#line 648 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1151
 
gboolean 
1152
 
ibus_chewing_engine_is_selectKey (IBusChewingEngine * self, guint keyval)
1153
 
{
1154
 
#line 1155 "ibus-chewing-engine.c"
1155
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::is_selectKey"
1156
 
#line 648 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1157
 
        g_return_val_if_fail (self != NULL, (gboolean )0);
1158
 
#line 648 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1159
 
        g_return_val_if_fail (IBUS_IS_CHEWING_ENGINE (self), (gboolean )0);
1160
 
#line 1161 "ibus-chewing-engine.c"
1161
 
{
1162
 
#line 648 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1163
 
        
1164
 
        int j;
1165
 
        for (j=0;j< MAX_SELKEY;j++){
1166
 
            if (self->selKeys[j]==keyval){
1167
 
                return TRUE;
1168
 
            }
1169
 
        }
1170
 
        return FALSE;
1171
 
    }}
1172
 
#line 1173 "ibus-chewing-engine.c"
1173
 
#undef __GOB_FUNCTION__
1174
 
 
1175
 
#line 658 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1176
 
void 
1177
 
ibus_chewing_engine_set_selKeys_string (IBusChewingEngine * self, const gchar * selKeys_str)
1178
 
{
1179
 
#line 1180 "ibus-chewing-engine.c"
1180
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::set_selKeys_string"
1181
 
#line 658 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1182
 
        g_return_if_fail (self != NULL);
1183
 
#line 658 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1184
 
        g_return_if_fail (IBUS_IS_CHEWING_ENGINE (self));
1185
 
#line 1186 "ibus-chewing-engine.c"
1186
 
{
1187
 
#line 658 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1188
 
        
1189
 
        int j;
1190
 
        int len_min= MIN(strlen(selKeys_str), MAX_SELKEY);
1191
 
        for (j=0;j< len_min;j++){
1192
 
            self->selKeys[j]=(int) selKeys_str[j];
1193
 
        }
1194
 
        chewing_set_selKey(self->context, self->selKeys,len_min);
1195
 
    }}
1196
 
#line 1197 "ibus-chewing-engine.c"
1197
 
#undef __GOB_FUNCTION__
1198
 
 
1199
 
#line 667 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1200
 
static IBusProperty * 
1201
 
ibus_chewing_engine_get_iBusProperty (IBusChewingEngine * self, const gchar * prop_name)
1202
 
{
1203
 
#line 1204 "ibus-chewing-engine.c"
1204
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::get_iBusProperty"
1205
 
#line 667 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1206
 
        g_return_val_if_fail (self != NULL, (IBusProperty * )0);
1207
 
#line 667 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1208
 
        g_return_val_if_fail (IBUS_IS_CHEWING_ENGINE (self), (IBusProperty * )0);
1209
 
#line 1210 "ibus-chewing-engine.c"
1210
 
{
1211
 
#line 667 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1212
 
        
1213
 
        if (strcmp(prop_name,"chewing_chieng_prop")==0){
1214
 
            return self->chieng_prop;
1215
 
        }else if (strcmp(prop_name,"chewing_alnumSize_prop")==0){
1216
 
            return self->alnumSize_prop;
1217
 
        }else if (strcmp(prop_name,"chewing_settings_prop")==0){
1218
 
            return self->settings_prop;
1219
 
        }
1220
 
        G_DEBUG_MSG(2,"[I2] get_iBusProperty(%s): NULL is returned",prop_name);
1221
 
        return NULL;
1222
 
    }}
1223
 
#line 1224 "ibus-chewing-engine.c"
1224
 
#undef __GOB_FUNCTION__
1225
 
 
1226
 
#line 679 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1227
 
void 
1228
 
ibus_chewing_engine_handle_Default (IBusChewingEngine * self, guint keyval, gboolean shiftPressed)
1229
 
{
1230
 
#line 1231 "ibus-chewing-engine.c"
1231
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::handle_Default"
1232
 
#line 679 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1233
 
        g_return_if_fail (self != NULL);
1234
 
#line 679 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1235
 
        g_return_if_fail (IBUS_IS_CHEWING_ENGINE (self));
1236
 
#line 1237 "ibus-chewing-engine.c"
1237
 
{
1238
 
#line 679 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1239
 
        
1240
 
        G_DEBUG_MSG(2,"[I2] handle_Default(-,%u) plainZhuyin=%s inputMode=%d",
1241
 
                keyval,(self->flags & CHEWING_FLAG_PLAIN_ZHUYIN)? "TRUE": "FALSE",self->inputMode);
1242
 
        ibus_chewing_engine_set_status_flag(self, ENGINE_STATUS_NEED_COMMIT);
1243
 
#ifdef EASY_SYMBOL_INPUT_WORK_AROUND
1244
 
        if (self->flags & CHEWING_FLAG_EASY_SYMBOL_INPUT){
1245
 
            /* If shift is pressed, turn on the  easySymbolInput, turn off
1246
 
             * otherwise
1247
 
             */
1248
 
            chewing_set_easySymbolInput(self->context,(shiftPressed)? 1:0);
1249
 
        }
1250
 
#endif
1251
 
        if (self->flags & CHEWING_FLAG_FORCE_LOWERCASE_ENGLISH){
1252
 
            if (isupper(keyval) && !shiftPressed){
1253
 
                keyval=tolower(keyval);
1254
 
            }else if (islower(keyval) && shiftPressed){
1255
 
                keyval=toupper(keyval);
1256
 
            }
1257
 
        }
1258
 
        chewing_handle_Default(self->context,keyval);
1259
 
        if (self->flags & CHEWING_FLAG_PLAIN_ZHUYIN){
1260
 
            if (self_is_selectKey(self,self->_priv->key_last) &&
1261
 
                    self->inputMode==CHEWING_INPUT_MODE_SELECTING){
1262
 
                chewing_handle_Enter(self->context);
1263
 
                self->inputMode= CHEWING_INPUT_MODE_SELECTING_DONE;
1264
 
            }
1265
 
        }
1266
 
    }}
1267
 
#line 1268 "ibus-chewing-engine.c"
1268
 
#undef __GOB_FUNCTION__
1269
 
 
1270
 
#line 713 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1271
 
static void 
1272
 
ibus_chewing_engine_determine_input_mode (IBusChewingEngine * self)
1273
 
{
1274
 
#line 1275 "ibus-chewing-engine.c"
1275
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::determine_input_mode"
1276
 
#line 713 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1277
 
        g_return_if_fail (self != NULL);
1278
 
#line 713 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1279
 
        g_return_if_fail (IBUS_IS_CHEWING_ENGINE (self));
1280
 
#line 1281 "ibus-chewing-engine.c"
1281
 
{
1282
 
#line 713 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1283
 
        
1284
 
        gint zhuyin_count=-1;
1285
 
        gchar *str_ptr=chewing_zuin_String(self->context,&zhuyin_count);
1286
 
        G_DEBUG_MSG(3, "[I3] determine_input_mode(): chewing_zuin_String=%s count=%d inputMode=%d",
1287
 
                str_ptr,zhuyin_count,self->inputMode);
1288
 
 
1289
 
        int zhuyin_tone=-1;
1290
 
        if (zhuyin_count>0){
1291
 
            /* Incomplete Character*/
1292
 
            self->inputMode=CHEWING_INPUT_MODE_EDITING;
1293
 
        }else{
1294
 
            /* Character/Phrase is completed. */
1295
 
            if (self->inputMode==CHEWING_INPUT_MODE_EDITING){
1296
 
                /* In EDITING mode */
1297
 
                zhuyin_tone=get_tone(chewing_get_KBType(self->context),self->_priv->key_last);
1298
 
                if (zhuyin_tone>0 ){
1299
 
                    if (self->flags & CHEWING_FLAG_PLAIN_ZHUYIN){
1300
 
                        /* For plain zhuyin, Enter SELECTING mode */
1301
 
                        self->inputMode=CHEWING_INPUT_MODE_SELECTING;
1302
 
                    }else{
1303
 
                        /* For normal zhuyin, Enter SELECTING mode */
1304
 
                        self->inputMode=CHEWING_INPUT_MODE_SELECTING_DONE;
1305
 
                    }
1306
 
                }
1307
 
            }else if (self->inputMode==CHEWING_INPUT_MODE_BYPASS){
1308
 
                /* In BYPASS mode */
1309
 
                if (chewing_buffer_Len(self->context)>0){
1310
 
                    /* Has punctuation mark in buffer */
1311
 
                    self->inputMode=CHEWING_INPUT_MODE_SELECTING;
1312
 
                }
1313
 
            }else if (self->inputMode==CHEWING_INPUT_MODE_SELECTING_DONE){
1314
 
                /* In SELECTING_DONE mode */
1315
 
                /* One of selection keys is pressed */
1316
 
            }else{
1317
 
                /* In SELECTING mode */
1318
 
            }
1319
 
        }
1320
 
 
1321
 
        if (chewing_buffer_Len(self->context)+ zhuyin_count==0){
1322
 
            /* If preedit buffer is empty, then enter BYPASS mode.*/
1323
 
            /* So cursor keys can be used freely. */
1324
 
            self->inputMode=CHEWING_INPUT_MODE_BYPASS;
1325
 
            self->_priv->zhuyin_latest[0]='\0';
1326
 
        }
1327
 
        g_free(str_ptr);
1328
 
        G_DEBUG_MSG(3, "[I3]  determine_input_mode() return: zhuyin_latest=%s zhuyin_tone=%d inputMode=%d",
1329
 
                self->_priv->zhuyin_latest,zhuyin_tone,self->inputMode);
1330
 
    }}
1331
 
#line 1332 "ibus-chewing-engine.c"
1332
 
#undef __GOB_FUNCTION__
1333
 
 
1334
 
#line 763 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1335
 
gboolean 
1336
 
ibus_chewing_engine_commit (IBusChewingEngine * self)
1337
 
{
1338
 
#line 1339 "ibus-chewing-engine.c"
1339
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::commit"
1340
 
#line 763 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1341
 
        g_return_val_if_fail (self != NULL, (gboolean )0);
1342
 
#line 763 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1343
 
        g_return_val_if_fail (IBUS_IS_CHEWING_ENGINE (self), (gboolean )0);
1344
 
#line 1345 "ibus-chewing-engine.c"
1345
 
{
1346
 
#line 763 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1347
 
        
1348
 
        gint commit=chewing_commit_Check(self->context);
1349
 
        G_DEBUG_MSG(2,"[I2] commit() %s statusFlags=%x", (commit) ? "TRUE": "FALSE", self->_priv->statusFlags);
1350
 
        if ((self->_priv->statusFlags & ENGINE_STATUS_NEED_COMMIT) && commit){
1351
 
            IBusText *iText=NULL;
1352
 
 
1353
 
            gchar *commit_string=chewing_commit_String(self->context);
1354
 
            G_DEBUG_MSG(3,"[I3]  commit() commit:%s", commit_string);
1355
 
            iText=g_object_ref_sink(ibus_text_new_from_string(commit_string));
1356
 
            ibus_engine_commit_text(IBUS_ENGINE(self),iText);
1357
 
            g_free(commit_string);
1358
 
            g_object_unref(iText);
1359
 
            if (!chewing_buffer_Check(self->context)){
1360
 
                /* Buffer is clean */
1361
 
                ibus_chewing_engine_clear_status_flag(self, ENGINE_STATUS_NEED_COMMIT | ENGINE_STATUS_FORCE_COMMIT );
1362
 
            }else if (self->_priv->statusFlags & ENGINE_STATUS_FORCE_COMMIT){
1363
 
                /* Flush the buffer  */
1364
 
                chewing_handle_Enter(self->context);
1365
 
                commit_string=chewing_commit_String(self->context);
1366
 
                iText=g_object_ref_sink(ibus_text_new_from_string(commit_string));
1367
 
                ibus_engine_commit_text(IBUS_ENGINE(self),iText);
1368
 
                g_free(commit_string);
1369
 
                g_object_unref(iText);
1370
 
                ibus_chewing_engine_clear_status_flag(self, ENGINE_STATUS_FORCE_COMMIT );
1371
 
            }
1372
 
        }
1373
 
        return commit;
1374
 
    }}
1375
 
#line 1376 "ibus-chewing-engine.c"
1376
 
#undef __GOB_FUNCTION__
1377
 
 
1378
 
#line 792 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1379
 
void 
1380
 
ibus_chewing_engine_force_commit (IBusChewingEngine * self)
1381
 
{
1382
 
#line 1383 "ibus-chewing-engine.c"
1383
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::force_commit"
1384
 
#line 792 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1385
 
        g_return_if_fail (self != NULL);
1386
 
#line 792 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1387
 
        g_return_if_fail (IBUS_IS_CHEWING_ENGINE (self));
1388
 
#line 1389 "ibus-chewing-engine.c"
1389
 
{
1390
 
#line 792 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1391
 
        
1392
 
        G_DEBUG_MSG(3,"[I3] force_commit() buffer=%d, commit=%d statusFlags=%x",
1393
 
                chewing_buffer_Check(self->context),chewing_commit_Check(self->context), self->_priv->statusFlags);
1394
 
        /* Remove the incomplete zhuyin symbol */
1395
 
        if (self->inputMode==CHEWING_INPUT_MODE_EDITING)
1396
 
            chewing_handle_Esc(self->context);
1397
 
        if (chewing_buffer_Check(self->context)){
1398
 
            if (!chewing_commit_Check(self->context)){
1399
 
                /* Close candidate window */
1400
 
                if (self->_priv->statusFlags & ENGINE_STATUS_SHOW_CANDIDATE){
1401
 
                    chewing_handle_Esc(self->context);
1402
 
                }
1403
 
                chewing_handle_Enter(self->context);
1404
 
            }
1405
 
            ibus_chewing_engine_set_status_flag(self, ENGINE_STATUS_NEED_COMMIT | ENGINE_STATUS_FORCE_COMMIT);
1406
 
            self_update(self);
1407
 
        }
1408
 
    }}
1409
 
#line 1410 "ibus-chewing-engine.c"
1410
 
#undef __GOB_FUNCTION__
1411
 
 
1412
 
#line 815 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1413
 
static void 
1414
 
___18_ibus_chewing_engine_reset (IBusEngine * engine G_GNUC_UNUSED)
1415
 
#line 1416 "ibus-chewing-engine.c"
1416
 
#define PARENT_HANDLER(___engine) \
1417
 
        { if(IBUS_ENGINE_CLASS(parent_class)->reset) \
1418
 
                (* IBUS_ENGINE_CLASS(parent_class)->reset)(___engine); }
1419
 
{
1420
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::reset"
1421
 
{
1422
 
#line 816 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1423
 
        
1424
 
        G_DEBUG_MSG(1,"[I1] reset");
1425
 
        Self *self=SELF(engine);
1426
 
        if (self->_priv->statusFlags & ENGINE_STATUS_NEED_COMMIT){
1427
 
            /* Force commit non-empty preedit buffer */
1428
 
            self_force_commit(self);
1429
 
        }
1430
 
        ibus_lookup_table_clear(self->table);
1431
 
        /* Save KBType type, becaue chewing_Reset() will reset it to default.
1432
 
         */
1433
 
        int kbType=chewing_get_KBType(self->context);
1434
 
        chewing_Reset(self->context);
1435
 
        chewing_set_KBType(self->context,kbType);
1436
 
        ibus_engine_hide_auxiliary_text(IBUS_ENGINE(engine));
1437
 
        ibus_engine_hide_lookup_table(IBUS_ENGINE(self));
1438
 
    }}
1439
 
#line 1440 "ibus-chewing-engine.c"
1440
 
#undef __GOB_FUNCTION__
1441
 
#undef PARENT_HANDLER
1442
 
 
1443
 
#line 833 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1444
 
static void 
1445
 
___19_ibus_chewing_engine_page_up (IBusEngine * engine G_GNUC_UNUSED)
1446
 
#line 1447 "ibus-chewing-engine.c"
1447
 
#define PARENT_HANDLER(___engine) \
1448
 
        { if(IBUS_ENGINE_CLASS(parent_class)->page_up) \
1449
 
                (* IBUS_ENGINE_CLASS(parent_class)->page_up)(___engine); }
1450
 
{
1451
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::page_up"
1452
 
{
1453
 
#line 834 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1454
 
        
1455
 
        Self *self=SELF(engine);
1456
 
        chewing_handle_PageUp(self->context);
1457
 
        self_update(self);
1458
 
    }}
1459
 
#line 1460 "ibus-chewing-engine.c"
1460
 
#undef __GOB_FUNCTION__
1461
 
#undef PARENT_HANDLER
1462
 
 
1463
 
#line 841 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1464
 
static void 
1465
 
___1a_ibus_chewing_engine_page_down (IBusEngine * engine G_GNUC_UNUSED)
1466
 
#line 1467 "ibus-chewing-engine.c"
1467
 
#define PARENT_HANDLER(___engine) \
1468
 
        { if(IBUS_ENGINE_CLASS(parent_class)->page_down) \
1469
 
                (* IBUS_ENGINE_CLASS(parent_class)->page_down)(___engine); }
1470
 
{
1471
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::page_down"
1472
 
{
1473
 
#line 842 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1474
 
        
1475
 
        Self *self=SELF(engine);
1476
 
        chewing_handle_PageDown(self->context);
1477
 
        self_update(self);
1478
 
    }}
1479
 
#line 1480 "ibus-chewing-engine.c"
1480
 
#undef __GOB_FUNCTION__
1481
 
#undef PARENT_HANDLER
1482
 
 
1483
 
#line 848 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1484
 
static void 
1485
 
___1b_ibus_chewing_engine_cursor_up (IBusEngine * engine G_GNUC_UNUSED)
1486
 
#line 1487 "ibus-chewing-engine.c"
1487
 
#define PARENT_HANDLER(___engine) \
1488
 
        { if(IBUS_ENGINE_CLASS(parent_class)->cursor_up) \
1489
 
                (* IBUS_ENGINE_CLASS(parent_class)->cursor_up)(___engine); }
1490
 
{
1491
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::cursor_up"
1492
 
{
1493
 
#line 849 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1494
 
        
1495
 
        Self *self=SELF(engine);
1496
 
        chewing_handle_Up(self->context);
1497
 
        self_update(self);
1498
 
    }}
1499
 
#line 1500 "ibus-chewing-engine.c"
1500
 
#undef __GOB_FUNCTION__
1501
 
#undef PARENT_HANDLER
1502
 
 
1503
 
#line 855 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1504
 
static void 
1505
 
___1c_ibus_chewing_engine_cursor_down (IBusEngine * engine G_GNUC_UNUSED)
1506
 
#line 1507 "ibus-chewing-engine.c"
1507
 
#define PARENT_HANDLER(___engine) \
1508
 
        { if(IBUS_ENGINE_CLASS(parent_class)->cursor_down) \
1509
 
                (* IBUS_ENGINE_CLASS(parent_class)->cursor_down)(___engine); }
1510
 
{
1511
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::cursor_down"
1512
 
{
1513
 
#line 856 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1514
 
        
1515
 
        Self *self=SELF(engine);
1516
 
        chewing_handle_Down(self->context);
1517
 
        self_update(self);
1518
 
    }}
1519
 
#line 1520 "ibus-chewing-engine.c"
1520
 
#undef __GOB_FUNCTION__
1521
 
#undef PARENT_HANDLER
1522
 
 
1523
 
#line 862 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1524
 
static void 
1525
 
___1d_ibus_chewing_engine_enable (IBusEngine * engine G_GNUC_UNUSED)
1526
 
#line 1527 "ibus-chewing-engine.c"
1527
 
#define PARENT_HANDLER(___engine) \
1528
 
        { if(IBUS_ENGINE_CLASS(parent_class)->enable) \
1529
 
                (* IBUS_ENGINE_CLASS(parent_class)->enable)(___engine); }
1530
 
{
1531
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::enable"
1532
 
{
1533
 
#line 863 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1534
 
        
1535
 
        G_DEBUG_MSG(2,"[I2] enable()");
1536
 
        Self *self=SELF(engine);
1537
 
 
1538
 
        if (!self->config){
1539
 
            self_load_setting(self);
1540
 
        }
1541
 
        self_refresh_property_list(self);
1542
 
        self->inputMode=CHEWING_INPUT_MODE_SELECTING_DONE;
1543
 
        ibus_chewing_engine_set_status_flag(self, ENGINE_STATUS_ENABLED);
1544
 
    }}
1545
 
#line 1546 "ibus-chewing-engine.c"
1546
 
#undef __GOB_FUNCTION__
1547
 
#undef PARENT_HANDLER
1548
 
 
1549
 
#line 875 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1550
 
static void 
1551
 
___1e_ibus_chewing_engine_disable (IBusEngine * engine G_GNUC_UNUSED)
1552
 
#line 1553 "ibus-chewing-engine.c"
1553
 
#define PARENT_HANDLER(___engine) \
1554
 
        { if(IBUS_ENGINE_CLASS(parent_class)->disable) \
1555
 
                (* IBUS_ENGINE_CLASS(parent_class)->disable)(___engine); }
1556
 
{
1557
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::disable"
1558
 
{
1559
 
#line 876 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1560
 
        
1561
 
        G_DEBUG_MSG(2,"[I2] disable()");
1562
 
        Self *self=SELF(engine);
1563
 
        self_force_commit(self);
1564
 
        self_hide_property_list(self);
1565
 
        self->inputMode=CHEWING_INPUT_MODE_BYPASS;
1566
 
        ibus_chewing_engine_clear_status_flag(self,ENGINE_STATUS_ENABLED);
1567
 
    }}
1568
 
#line 1569 "ibus-chewing-engine.c"
1569
 
#undef __GOB_FUNCTION__
1570
 
#undef PARENT_HANDLER
1571
 
 
1572
 
#line 885 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1573
 
static void 
1574
 
___1f_ibus_chewing_engine_focus_in (IBusEngine * engine G_GNUC_UNUSED)
1575
 
#line 1576 "ibus-chewing-engine.c"
1576
 
#define PARENT_HANDLER(___engine) \
1577
 
        { if(IBUS_ENGINE_CLASS(parent_class)->focus_in) \
1578
 
                (* IBUS_ENGINE_CLASS(parent_class)->focus_in)(___engine); }
1579
 
{
1580
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::focus_in"
1581
 
{
1582
 
#line 886 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1583
 
        
1584
 
        Self *self=SELF(engine);
1585
 
        if (!self->config){
1586
 
            self_load_setting(self);
1587
 
        }
1588
 
        self_refresh_property_list(self);
1589
 
 
1590
 
        /* Sync Caps_Lock and ChiEngMode */
1591
 
        guint modifiers=keyModifier_get(self->_priv->pDisplay);
1592
 
        gint caps_is_lock=(modifiers & IBUS_LOCK_MASK)!=0;
1593
 
        G_DEBUG_MSG(2,"[I2] focus_in(): statusFlags=%d ChiEng=%d IBUS_LOCK=%d",
1594
 
                self->_priv->statusFlags,
1595
 
                chewing_get_ChiEngMode(self->context),caps_is_lock);
1596
 
        if (chewing_get_ChiEngMode(self->context)==caps_is_lock){
1597
 
            /* Caps_lock and ChiEngMode does not agree each other */
1598
 
            switch(self->syncCapsLock_local){
1599
 
                case CHEWING_MODIFIER_SYNC_FROM_KEYBOARD:
1600
 
                    chewing_set_ChiEngMode(self->context,!caps_is_lock);
1601
 
                    break;
1602
 
                case CHEWING_MODIFIER_SYNC_FROM_IM:
1603
 
                    /* fake event won't go through process_key_event */
1604
 
                    key_send_fake_event(IBUS_Caps_Lock,self->_priv->pDisplay);
1605
 
                    break;
1606
 
                default:
1607
 
                    g_warning("Caps_lock and ChiEngMode does not agree each other!");
1608
 
                    break;
1609
 
 
1610
 
            }
1611
 
        }
1612
 
        self_refresh_property_list(self);
1613
 
        self_update(self);
1614
 
        ibus_chewing_engine_set_status_flag(self, ENGINE_STATUS_FOCUS_IN);
1615
 
        G_DEBUG_MSG(4,"[I4] focus_in(): return");
1616
 
    }}
1617
 
#line 1618 "ibus-chewing-engine.c"
1618
 
#undef __GOB_FUNCTION__
1619
 
#undef PARENT_HANDLER
1620
 
 
1621
 
#line 921 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1622
 
static void 
1623
 
___20_ibus_chewing_engine_focus_out (IBusEngine * engine G_GNUC_UNUSED)
1624
 
#line 1625 "ibus-chewing-engine.c"
1625
 
#define PARENT_HANDLER(___engine) \
1626
 
        { if(IBUS_ENGINE_CLASS(parent_class)->focus_out) \
1627
 
                (* IBUS_ENGINE_CLASS(parent_class)->focus_out)(___engine); }
1628
 
{
1629
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::focus_out"
1630
 
{
1631
 
#line 922 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1632
 
        
1633
 
        Self *self=SELF(engine);
1634
 
        G_DEBUG_MSG(2,"[I2] focus_out(): statusFlags=%d",self->_priv->statusFlags);
1635
 
        self_force_commit(self);
1636
 
        ibus_chewing_engine_clear_status_flag(self, ENGINE_STATUS_FOCUS_IN);
1637
 
        G_DEBUG_MSG(5,"[I5]  focus_out(): return");
1638
 
    }}
1639
 
#line 1640 "ibus-chewing-engine.c"
1640
 
#undef __GOB_FUNCTION__
1641
 
#undef PARENT_HANDLER
1642
 
 
1643
 
#line 930 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1644
 
static void 
1645
 
___21_ibus_chewing_engine_property_activate (IBusEngine * engine G_GNUC_UNUSED, const gchar * prop_name, guint prop_state)
1646
 
#line 1647 "ibus-chewing-engine.c"
1647
 
#define PARENT_HANDLER(___engine,___prop_name,___prop_state) \
1648
 
        { if(IBUS_ENGINE_CLASS(parent_class)->property_activate) \
1649
 
                (* IBUS_ENGINE_CLASS(parent_class)->property_activate)(___engine,___prop_name,___prop_state); }
1650
 
{
1651
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::property_activate"
1652
 
{
1653
 
#line 931 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1654
 
        
1655
 
        G_DEBUG_MSG(2,"[I2] property_activate(-, %s, %u)", prop_name, prop_state);
1656
 
        Self *self=SELF(engine);
1657
 
        gboolean needRefresh=TRUE;
1658
 
        if (strcmp(prop_name,"chewing_chieng_prop")==0){
1659
 
            /* Toggle Chinese <-> English */
1660
 
            chewing_set_ChiEngMode(self->context, !chewing_get_ChiEngMode(self->context));
1661
 
        }else if (strcmp(prop_name,"chewing_alnumSize_prop")==0){
1662
 
            /* Toggle Full <-> Half */
1663
 
            chewing_set_ShapeMode(self->context, !chewing_get_ShapeMode(self->context));
1664
 
        }else if (strcmp(prop_name,"chewing_settings_prop")==0){
1665
 
            if (self->settings_prop->state==PROP_STATE_UNCHECKED){
1666
 
                if (gtk_dialog_run(GTK_DIALOG(self->setting_dialog))==GTK_RESPONSE_OK){
1667
 
                    self_save_config_all(self);
1668
 
                }
1669
 
                gtk_widget_hide(self->setting_dialog);
1670
 
                self->settings_prop->state=PROP_STATE_UNCHECKED;
1671
 
            }
1672
 
        }else{
1673
 
            G_DEBUG_MSG(2,"[I2]  property_activate(-, %s, %u) not recognized",prop_name, prop_state);
1674
 
            needRefresh=FALSE;
1675
 
        }
1676
 
        if (needRefresh)
1677
 
            self_refresh_property(self,prop_name);
1678
 
    }}
1679
 
#line 1680 "ibus-chewing-engine.c"
1680
 
#undef __GOB_FUNCTION__
1681
 
#undef PARENT_HANDLER
1682
 
 
1683
 
#line 957 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1684
 
static void 
1685
 
___22_ibus_chewing_engine_property_show (IBusEngine * engine G_GNUC_UNUSED, const gchar * prop_name)
1686
 
#line 1687 "ibus-chewing-engine.c"
1687
 
#define PARENT_HANDLER(___engine,___prop_name) \
1688
 
        { if(IBUS_ENGINE_CLASS(parent_class)->property_show) \
1689
 
                (* IBUS_ENGINE_CLASS(parent_class)->property_show)(___engine,___prop_name); }
1690
 
{
1691
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::property_show"
1692
 
{
1693
 
#line 958 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1694
 
        
1695
 
        G_DEBUG_MSG(2,"[I2] property_show(-, %s)",prop_name);
1696
 
        Self *self=SELF(engine);
1697
 
        IBusProperty *prop=self_get_iBusProperty(self, prop_name);
1698
 
        ibus_property_set_visible(prop,TRUE);
1699
 
        ibus_engine_update_property(engine,prop);
1700
 
    }}
1701
 
#line 1702 "ibus-chewing-engine.c"
1702
 
#undef __GOB_FUNCTION__
1703
 
#undef PARENT_HANDLER
1704
 
 
1705
 
#line 966 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1706
 
static void 
1707
 
___23_ibus_chewing_engine_property_hide (IBusEngine * engine G_GNUC_UNUSED, const gchar * prop_name)
1708
 
#line 1709 "ibus-chewing-engine.c"
1709
 
#define PARENT_HANDLER(___engine,___prop_name) \
1710
 
        { if(IBUS_ENGINE_CLASS(parent_class)->property_hide) \
1711
 
                (* IBUS_ENGINE_CLASS(parent_class)->property_hide)(___engine,___prop_name); }
1712
 
{
1713
 
#define __GOB_FUNCTION__ "IBus:Chewing:Engine::property_hide"
1714
 
{
1715
 
#line 967 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1716
 
        
1717
 
        G_DEBUG_MSG(2,"[I2] property_hide(-, %s)",prop_name);
1718
 
        Self *self=SELF(engine);
1719
 
        IBusProperty *prop=self_get_iBusProperty(self, prop_name);
1720
 
        ibus_property_set_visible(prop,FALSE);
1721
 
        ibus_engine_update_property(engine,prop);
1722
 
    }}
1723
 
#line 1724 "ibus-chewing-engine.c"
1724
 
#undef __GOB_FUNCTION__
1725
 
#undef PARENT_HANDLER
1726
 
 
1727
 
#line 976 "/home/dchen/ibus-chewing/src/IBusChewingEngine.gob"
1728
 
 
1729
 
#include "IBusChewingEngine-keys.c"
1730
 
 
1731
 
#line 1732 "ibus-chewing-engine.c"