Blob Blame History Raw
From c27a0917c26624f1741efeebe20cd5cfb8647a67 Mon Sep 17 00:00:00 2001
From: Daiki Ueno <ueno@unixuser.org>
Date: Mon, 7 Mar 2011 14:57:32 +0900
Subject: [PATCH] Apply iok patch from Fedora.

---
 src/engine.c |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/src/engine.c b/src/engine.c
index 62359c1..362d347 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -37,6 +37,7 @@ struct _IBusM17NEngine {
     IBusProperty    *setup_prop;
 #endif  /* HAVE_SETUP */
     IBusPropList    *prop_list;
+    IBusProperty    *show_iok_prop;
 };
 
 struct _IBusM17NEngineClass {
@@ -48,6 +49,7 @@ struct _IBusM17NEngineClass {
     guint preedit_background;
     gint preedit_underline;
     gint lookup_table_orientation;
+    gboolean use_iok;
 
     MInputMethod *im;
 };
@@ -316,6 +318,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);
 
@@ -420,6 +425,7 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
 {
     IBusText* label;
     IBusText* tooltip;
+    IBusM17NEngineClass *klass = (IBusM17NEngineClass *) G_OBJECT_GET_CLASS (m17n);
 
     m17n->prop_list = ibus_prop_list_new ();
     g_object_ref_sink (m17n->prop_list);
@@ -452,6 +458,23 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
     ibus_prop_list_append (m17n->prop_list, m17n->setup_prop);
 #endif  /* HAVE_SETUP */
 
+    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);
+
+    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);
     m17n->context = NULL;
@@ -537,6 +560,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n)
     }
 #endif  /* HAVE_SETUP */
 
+    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;
@@ -844,6 +872,24 @@ ibus_m17n_engine_property_activate (IBusEngine  *engine,
     }
 #endif  /* HAVE_SETUP */
 
+    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.4