diff options
| author | Peng Huang <shawn.p.huang@gmail.com> | 2010-05-17 10:41:11 +0800 |
|---|---|---|
| committer | Peng Huang <shawn.p.huang@gmail.com> | 2010-05-17 10:41:11 +0800 |
| commit | 51438d761eb28fc9c19efc7eef82681ebdc86e65 (patch) | |
| tree | e4376d04599181443cfd85c12c9c9edc8c6794b4 /src/Engine.cc | |
| parent | 28d811bfa3676d1f96ec7b366caedececb6cc60b (diff) | |
| parent | c5aefb2ca27010474d12032f51be840c92ed4770 (diff) | |
| download | ibus-libpinyin-51438d761eb28fc9c19efc7eef82681ebdc86e65.tar.gz ibus-libpinyin-51438d761eb28fc9c19efc7eef82681ebdc86e65.tar.xz ibus-libpinyin-51438d761eb28fc9c19efc7eef82681ebdc86e65.zip | |
Merge branch 'bopomofo'
Conflicts:
ibus-pinyin.spec.in
Diffstat (limited to 'src/Engine.cc')
| -rw-r--r-- | src/Engine.cc | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/src/Engine.cc b/src/Engine.cc index 7894df0..175fc6e 100644 --- a/src/Engine.cc +++ b/src/Engine.cc @@ -4,6 +4,7 @@ #include <ibus.h> #include "Engine.h" #include "PinyinEngine.h" +#include "BopomofoEngine.h" namespace PY { /* code of engine class of GObject */ @@ -26,7 +27,7 @@ struct _IBusPinyinEngine { IBusEngine parent; /* members */ - PinyinEngine engine; + Engine *engine; }; struct _IBusPinyinEngineClass { @@ -36,6 +37,10 @@ struct _IBusPinyinEngineClass { /* functions prototype */ static void ibus_pinyin_engine_class_init (IBusPinyinEngineClass *klass); static void ibus_pinyin_engine_init (IBusPinyinEngine *pinyin); +static GObject* ibus_pinyin_engine_constructor (GType type, + guint n_construct_params, + GObjectConstructParam *construct_params); + static void ibus_pinyin_engine_destroy (IBusPinyinEngine *pinyin); static gboolean ibus_pinyin_engine_process_key_event (IBusEngine *engine, @@ -84,10 +89,11 @@ G_DEFINE_TYPE (IBusPinyinEngine, ibus_pinyin_engine, IBUS_TYPE_ENGINE) static void ibus_pinyin_engine_class_init (IBusPinyinEngineClass *klass) { - // GObjectClass *object_class = G_OBJECT_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); IBusObjectClass *ibus_object_class = IBUS_OBJECT_CLASS (klass); IBusEngineClass *engine_class = IBUS_ENGINE_CLASS (klass); + object_class->constructor = ibus_pinyin_engine_constructor; ibus_object_class->destroy = (IBusObjectDestroyFunc) ibus_pinyin_engine_destroy; engine_class->process_key_event = ibus_pinyin_engine_process_key_event; @@ -115,13 +121,36 @@ ibus_pinyin_engine_init (IBusPinyinEngine *pinyin) { if (g_object_is_floating (pinyin)) g_object_ref_sink (pinyin); // make engine sink - new (& (pinyin->engine)) PinyinEngine (IBUS_ENGINE (pinyin)); +} + +static GObject* +ibus_pinyin_engine_constructor (GType type, + guint n_construct_params, + GObjectConstructParam *construct_params) +{ + IBusPinyinEngine *engine; + const gchar *name; + + engine = (IBusPinyinEngine *) G_OBJECT_CLASS (ibus_pinyin_engine_parent_class)->constructor ( + type, + n_construct_params, + construct_params); + name = ibus_engine_get_name ((IBusEngine *) engine); + + if (name && + (std::strcmp (name, "bopomofo") == 0 || std::strcmp (name, "bopomofo-debug") == 0)) { + engine->engine = new BopomofoEngine (IBUS_ENGINE (engine)); + } + else { + engine->engine = new PinyinEngine (IBUS_ENGINE (engine)); + } + return (GObject *) engine; } static void ibus_pinyin_engine_destroy (IBusPinyinEngine *pinyin) { - pinyin->engine.~PinyinEngine (); + delete pinyin->engine; ((IBusObjectClass *) ibus_pinyin_engine_parent_class)->destroy ((IBusObject *)pinyin); } @@ -132,7 +161,7 @@ ibus_pinyin_engine_process_key_event (IBusEngine *engine, guint modifiers) { IBusPinyinEngine *pinyin = (IBusPinyinEngine *) engine; - return pinyin->engine.processKeyEvent (keyval, keycode, modifiers); + return pinyin->engine->processKeyEvent (keyval, keycode, modifiers); } static void @@ -141,7 +170,7 @@ ibus_pinyin_engine_property_activate (IBusEngine *engine, guint prop_state) { IBusPinyinEngine *pinyin = (IBusPinyinEngine *) engine; - pinyin->engine.propertyActivate (prop_name, prop_state); + pinyin->engine->propertyActivate (prop_name, prop_state); } static void ibus_pinyin_engine_candidate_clicked (IBusEngine *engine, @@ -150,7 +179,7 @@ ibus_pinyin_engine_candidate_clicked (IBusEngine *engine, guint state) { IBusPinyinEngine *pinyin = (IBusPinyinEngine *) engine; - pinyin->engine.candidateClicked (index, button, state); + pinyin->engine->candidateClicked (index, button, state); } #define FUNCTION(name, Name) \ @@ -158,7 +187,7 @@ ibus_pinyin_engine_candidate_clicked (IBusEngine *engine, ibus_pinyin_engine_##name (IBusEngine *engine) \ { \ IBusPinyinEngine *pinyin = (IBusPinyinEngine *) engine; \ - pinyin->engine.Name (); \ + pinyin->engine->Name (); \ ((IBusEngineClass *) ibus_pinyin_engine_parent_class) \ ->name (engine); \ } @@ -173,5 +202,9 @@ FUNCTION(cursor_up, cursorUp) FUNCTION(cursor_down, cursorDown) #undef FUNCTION +Engine::~Engine (void) +{ +} + }; |
