static GObject* ibus_m17n_engine_constructor (GType type, guint n_construct_params, GObjectConstructParam *construct_params) { IBusM17NEngine *m17n; GObjectClass *object_class; IBusM17NEngineClass *klass; m17n = (IBusM17NEngine *) G_OBJECT_CLASS (parent_class)->constructor (type, n_construct_params, construct_params); object_class = G_OBJECT_GET_CLASS (m17n); klass = (IBusM17NEngineClass *) object_class; if (klass->im == NULL) { const gchar *engine_name; gchar *lang = NULL, *name = NULL; engine_name = ibus_engine_get_name ((IBusEngine *) m17n); if (!ibus_m17n_scan_engine_name (engine_name, &lang, &name)) { g_free (lang); g_free (name); return NULL; } klass->im = minput_open_im (msymbol (lang), msymbol (name), NULL); g_free (lang); g_free (name); if (klass->im == NULL) { g_warning ("Can not find m17n keymap %s", engine_name); g_object_unref (m17n); return NULL; } mplist_put (klass->im->driver.callback_list, Minput_preedit_start, ibus_m17n_engine_callback); mplist_put (klass->im->driver.callback_list, Minput_preedit_draw, ibus_m17n_engine_callback); mplist_put (klass->im->driver.callback_list, Minput_preedit_done, ibus_m17n_engine_callback); mplist_put (klass->im->driver.callback_list, Minput_status_start, ibus_m17n_engine_callback); mplist_put (klass->im->driver.callback_list, Minput_status_draw, ibus_m17n_engine_callback); mplist_put (klass->im->driver.callback_list, Minput_status_done, ibus_m17n_engine_callback); mplist_put (klass->im->driver.callback_list, Minput_candidates_start, ibus_m17n_engine_callback); mplist_put (klass->im->driver.callback_list, Minput_candidates_draw, ibus_m17n_engine_callback); mplist_put (klass->im->driver.callback_list, Minput_candidates_done, ibus_m17n_engine_callback); mplist_put (klass->im->driver.callback_list, Minput_set_spot, ibus_m17n_engine_callback); mplist_put (klass->im->driver.callback_list, Minput_toggle, ibus_m17n_engine_callback); /* Does not set reset callback, uses the default callback in m17n. mplist_put (klass->im->driver.callback_list, Minput_reset, ibus_m17n_engine_callback); */ mplist_put (klass->im->driver.callback_list, Minput_get_surrounding_text, ibus_m17n_engine_callback); mplist_put (klass->im->driver.callback_list, Minput_delete_surrounding_text, ibus_m17n_engine_callback); } m17n->context = minput_create_ic (klass->im, m17n); return (GObject *) m17n; }
static void ibus_m17n_engine_property_activate (IBusEngine *engine, const gchar *prop_name, guint prop_state) { IBusM17NEngine *m17n = (IBusM17NEngine *) engine; #ifdef HAVE_SETUP if (g_strcmp0 (prop_name, "setup") == 0) { const gchar *engine_name; gchar *setup; engine_name = ibus_engine_get_name ((IBusEngine *) m17n); g_assert (engine_name); setup = g_strdup_printf ("%s/ibus-setup-m17n --name %s", LIBEXECDIR, engine_name); g_spawn_command_line_async (setup, NULL); g_free (setup); } #endif /* HAVE_SETUP */ parent_class->property_activate (engine, prop_name, prop_state); }
static GObject* ibus_lanxang_engine_constructor (GType type, guint n_construct_params, GObjectConstructParam *construct_params) { IBusLanXangEngine *engine; const gchar *name; engine = (IBusLanXangEngine *) G_OBJECT_CLASS (ibus_lanxang_engine_parent_class)->constructor ( type, n_construct_params, construct_params); name = ibus_engine_get_name (IBUS_ENGINE (engine)); if (name && strcmp (name, "lanxang-tham") == 0) { engine->lx_iengine = g_object_new (LX_TYPE_THAM_ENGINE, NULL); } else if (name && strcmp (name, "lanxang-tn") == 0) { engine->lx_iengine = g_object_new (LX_TYPE_TN_ENGINE, NULL); } return G_OBJECT (engine); }