From 5eea6bfe70ba1815bda1ba22a28c584f9d5f6a64 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Wed, 8 Dec 2010 18:06:11 +0900 Subject: [PATCH] Apply iok patch from fedora. --- src/engine.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 43 insertions(+), 0 deletions(-) diff --git a/src/engine.c b/src/engine.c index f8e7fe5..3143428 100644 --- a/src/engine.c +++ b/src/engine.c @@ -35,6 +35,7 @@ struct _IBusM17NEngine { IBusProperty *status_prop; IBusProperty *setup_prop; IBusPropList *prop_list; + IBusProperty *show_iok_prop; }; struct _IBusM17NEngineClass { @@ -46,6 +47,7 @@ struct _IBusM17NEngineClass { guint preedit_background; gint preedit_underline; gint lookup_table_orientation; + gboolean use_iok; MInputMethod *im; }; @@ -309,6 +311,9 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass) } engine_name = g_strdup_printf ("m17n:%s:%s", lang, name); klass->config_section = g_strdup_printf ("engine/M17N/%s/%s", lang, name); + /* whether to use iok - maybe good to move this to default.xml */ + klass->use_iok = g_strcmp0 (name, "inscript") == 0 || + g_strcmp0 (name, "inscript2") == 0; g_free (lang); g_free (name); @@ -411,6 +416,7 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n) { IBusText* label; IBusText* tooltip; + IBusM17NEngineClass *klass = (IBusM17NEngineClass *) G_OBJECT_GET_CLASS (m17n); m17n->status_prop = ibus_property_new ("status", PROP_TYPE_NORMAL, @@ -436,10 +442,26 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n) NULL); g_object_ref_sink (m17n->setup_prop); + label = ibus_text_new_from_string ("iok"); + m17n->show_iok_prop = ibus_property_new ("iok", + PROP_TYPE_NORMAL, + label, + "/usr/share/pixmaps/iok.xpm", + label, + TRUE, + FALSE, + 0, + NULL); + g_object_ref_sink (m17n->show_iok_prop); + + if (klass->use_iok) + ibus_property_set_visible (m17n->show_iok_prop, TRUE); + m17n->prop_list = ibus_prop_list_new (); g_object_ref_sink (m17n->prop_list); ibus_prop_list_append (m17n->prop_list, m17n->status_prop); ibus_prop_list_append (m17n->prop_list, m17n->setup_prop); + ibus_prop_list_append (m17n->prop_list, m17n->show_iok_prop); m17n->table = ibus_lookup_table_new (9, 0, TRUE, TRUE); g_object_ref_sink (m17n->table); @@ -524,6 +546,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n) m17n->setup_prop = NULL; } + if (m17n->show_iok_prop) { + g_object_unref (m17n->show_iok_prop); + m17n->show_iok_prop = NULL; + } + if (m17n->table) { g_object_unref (m17n->table); m17n->table = NULL; @@ -827,6 +854,22 @@ ibus_m17n_engine_property_activate (IBusEngine *engine, LIBEXECDIR, engine_name); g_spawn_command_line_async (setup, NULL); g_free (setup); + } else if (g_strcmp0 (prop_name, "iok") == 0) { + 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)) { + gchar *iok; + + iok = g_strdup_printf ("/usr/bin/iok -n %s", lang); + g_debug ("keymap name = %s,prop_name=%s, prop_state=%d", + engine_name, prop_name, prop_state); + g_spawn_command_line_async(iok, NULL); + g_free (iok); + } + g_free (lang); + g_free (name); } parent_class->property_activate (engine, prop_name, prop_state); } -- 1.7.3.4