From c18e74986fb1e608e313497d3b3914ab22a4854b Mon Sep 17 00:00:00 2001 From: Peng Huang Date: Thu, 13 May 2010 19:15:39 +0800 Subject: Make bopomofo as a separate input engine. --- src/Engine.cc | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'src/Engine.cc') diff --git a/src/Engine.cc b/src/Engine.cc index 7894df0..7b6bcf5 100644 --- a/src/Engine.cc +++ b/src/Engine.cc @@ -36,6 +36,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 +88,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,7 +120,22 @@ 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; + + engine = (IBusPinyinEngine *) G_OBJECT_CLASS (ibus_pinyin_engine_parent_class)->constructor ( + type, + n_construct_params, + construct_params); + new (& (engine->engine)) PinyinEngine (IBUS_ENGINE (engine)); + + return (GObject *) engine; } static void -- cgit From 35e5f6a5e90dde1b3683774247a4d9bb304bcc3c Mon Sep 17 00:00:00 2001 From: Peng Huang Date: Fri, 14 May 2010 10:44:01 +0800 Subject: Create BopomofoEngine --- src/Engine.cc | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'src/Engine.cc') diff --git a/src/Engine.cc b/src/Engine.cc index 7b6bcf5..175fc6e 100644 --- a/src/Engine.cc +++ b/src/Engine.cc @@ -4,6 +4,7 @@ #include #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 { @@ -128,20 +129,28 @@ ibus_pinyin_engine_constructor (GType type, 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); - new (& (engine->engine)) PinyinEngine (IBUS_ENGINE (engine)); + 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); } @@ -152,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 @@ -161,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, @@ -170,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) \ @@ -178,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); \ } @@ -193,5 +202,9 @@ FUNCTION(cursor_up, cursorUp) FUNCTION(cursor_down, cursorDown) #undef FUNCTION +Engine::~Engine (void) +{ +} + }; -- cgit