47affbc
From cf1fa1bc72d6d7ad71e928df1c3aa938069cfd9e Mon Sep 17 00:00:00 2001
63b857f
From: fujiwarat <takao.fujiwara1@gmail.com>
47affbc
Date: Wed, 29 Jun 2011 16:50:51 +0900
47affbc
Subject: [PATCH] Add symbol property in IBusEngineDesc.
63b857f
63b857f
---
47affbc
 ibus/enginedesc.py   |   15 +++++++++------
47affbc
 src/ibusenginedesc.c |   40 ++++++++++++++++++++++++++++++++++++++++
47affbc
 src/ibusenginedesc.h |   10 ++++++++++
47affbc
 3 files changed, 59 insertions(+), 6 deletions(-)
63b857f
d8d42f1
diff --git a/ibus/enginedesc.py b/ibus/enginedesc.py
47affbc
index e8a8982..3ca7f24 100644
d8d42f1
--- a/ibus/enginedesc.py
d8d42f1
+++ b/ibus/enginedesc.py
d8d42f1
@@ -31,7 +31,7 @@ from serializable import *
d8d42f1
 class EngineDesc(Serializable):
d8d42f1
     __gtype_name__ = "PYIBusEngineDesc"
d8d42f1
     __NAME__ = "IBusEngineDesc"
d8d42f1
-    def __init__(self, name="", longname="", description="", language="", license="", author="", icon="", layout="", hotkeys="", rank=0):
47affbc
+    def __init__(self, name="", longname="", description="", language="", license="", author="", icon="", layout="", hotkeys="", rank=0, symbol=""):
d8d42f1
         super(EngineDesc, self).__init__()
d8d42f1
         self.__name = name
d8d42f1
         self.__longname = longname
d8d42f1
@@ -43,6 +43,7 @@ class EngineDesc(Serializable):
d8d42f1
         self.__layout = layout
d8d42f1
         self.__rank = rank
d8d42f1
         self.__hotkeys = hotkeys
47affbc
+        self.__symbol = symbol
d8d42f1
 
d8d42f1
     def get_name(self):
d8d42f1
         return self.__name
d8d42f1
@@ -74,6 +75,9 @@ class EngineDesc(Serializable):
d8d42f1
     def get_hotkeys(self):
d8d42f1
         return self.__hotkeys
d8d42f1
 
47affbc
+    def get_symbol(self):
47affbc
+        return self.__symbol
d8d42f1
+
d8d42f1
     name        = property(get_name)
d8d42f1
     longname    = property(get_longname)
d8d42f1
     description = property(get_description)
d8d42f1
@@ -84,6 +88,7 @@ class EngineDesc(Serializable):
d8d42f1
     layout      = property(get_layout)
d8d42f1
     rank        = property(get_rank)
d8d42f1
     hotkeys     = property(get_hotkeys)
47affbc
+    symbol      = property(get_symbol)
d8d42f1
 
d8d42f1
     def serialize(self, struct):
d8d42f1
         super(EngineDesc, self).serialize(struct)
47affbc
@@ -97,8 +102,7 @@ class EngineDesc(Serializable):
47affbc
         struct.append(dbus.String(self.__layout))
d8d42f1
         struct.append(dbus.UInt32(self.__rank))
d8d42f1
         struct.append(dbus.String(self.__hotkeys))
47affbc
-        # New properties of EngineDesc will use dict for serialize
d8d42f1
-        struct.append(dbus.Array({}, signature=None))
47affbc
+        struct.append(dbus.String(self.__symbol))
d8d42f1
 
d8d42f1
     def deserialize(self, struct):
d8d42f1
         super(EngineDesc, self).deserialize(struct)
47affbc
@@ -112,11 +116,10 @@ class EngineDesc(Serializable):
47affbc
         self.__layout = struct.pop(0)
d8d42f1
         self.__rank = struct.pop(0)
d8d42f1
         self.__hotkeys = struct.pop(0)
47affbc
-        # New properties of EngineDesc will use dict for serialize
d8d42f1
-        #value = struct.pop(0)
47affbc
+        self.__symbol = struct.pop(0)
d8d42f1
 
d8d42f1
 def test():
d8d42f1
-    engine = EngineDesc("Hello", "", "", "", "", "", "", "", "")
d8d42f1
+    engine = EngineDesc("Hello", "", "", "", "", "", "", "", "", 0, "")
d8d42f1
     value = serialize_object(engine)
d8d42f1
     engine = deserialize_object(value)
d8d42f1
 
63b857f
diff --git a/src/ibusenginedesc.c b/src/ibusenginedesc.c
47affbc
index ca5ef60..fa3a768 100644
63b857f
--- a/src/ibusenginedesc.c
63b857f
+++ b/src/ibusenginedesc.c
47affbc
@@ -39,6 +39,7 @@ enum {
63b857f
     PROP_LAYOUT,
63b857f
     PROP_RANK,
63b857f
     PROP_HOTKEYS,
47affbc
+    PROP_SYMBOL,
63b857f
 };
63b857f
 
63b857f
 
47affbc
@@ -54,6 +55,7 @@ struct _IBusEngineDescPrivate {
63b857f
     gchar      *layout;
63b857f
     guint       rank;
63b857f
     gchar      *hotkeys;
47affbc
+    gchar      *symbol;
63b857f
 };
63b857f
 
63b857f
 #define IBUS_ENGINE_DESC_GET_PRIVATE(o)  \
47affbc
@@ -232,6 +234,19 @@ ibus_engine_desc_class_init (IBusEngineDescClass *class)
63b857f
                         "The hotkeys of engine description",
63b857f
                         "",
63b857f
                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
63b857f
+
63b857f
+    /**
47affbc
+     * IBusEngineDesc:symbol:
63b857f
+     *
63b857f
+     * The symbol chars of engine description instead of icon image
63b857f
+     */
63b857f
+    g_object_class_install_property (gobject_class,
47affbc
+                    PROP_SYMBOL,
47affbc
+                    g_param_spec_string ("symbol",
47affbc
+                        "description symbol",
63b857f
+                        "The icon symbol chars of engine description",
63b857f
+                        "",
47affbc
+                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
63b857f
 }
63b857f
 
63b857f
 static void
47affbc
@@ -249,6 +264,7 @@ ibus_engine_desc_init (IBusEngineDesc *desc)
63b857f
     desc->priv->layout = NULL;
63b857f
     desc->priv->rank = 0;
63b857f
     desc->priv->hotkeys = NULL;
47affbc
+    desc->priv->symbol = NULL;
63b857f
 }
63b857f
 
63b857f
 static void
47affbc
@@ -263,6 +279,7 @@ ibus_engine_desc_destroy (IBusEngineDesc *desc)
63b857f
     g_free (desc->priv->icon);
63b857f
     g_free (desc->priv->layout);
63b857f
     g_free (desc->priv->hotkeys);
47affbc
+    g_free (desc->priv->symbol);
63b857f
 
63b857f
     IBUS_OBJECT_CLASS (ibus_engine_desc_parent_class)->destroy (IBUS_OBJECT (desc));
63b857f
 }
47affbc
@@ -313,6 +330,10 @@ ibus_engine_desc_set_property (IBusEngineDesc *desc,
63b857f
         g_assert (desc->priv->hotkeys == NULL);
63b857f
         desc->priv->hotkeys = g_value_dup_string (value);
63b857f
         break;
47affbc
+    case PROP_SYMBOL:
47affbc
+        g_assert (desc->priv->symbol == NULL);
47affbc
+        desc->priv->symbol = g_value_dup_string (value);
63b857f
+        break;
63b857f
     default:
63b857f
         G_OBJECT_WARN_INVALID_PROPERTY_ID (desc, prop_id, pspec);
63b857f
     }
47affbc
@@ -355,6 +376,9 @@ ibus_engine_desc_get_property (IBusEngineDesc *desc,
63b857f
     case PROP_HOTKEYS:
63b857f
         g_value_set_string (value, ibus_engine_desc_get_hotkeys (desc));
63b857f
         break;
47affbc
+    case PROP_SYMBOL:
47affbc
+        g_value_set_string (value, ibus_engine_desc_get_symbol (desc));
63b857f
+        break;
63b857f
     default:
63b857f
         G_OBJECT_WARN_INVALID_PROPERTY_ID (desc, prop_id, pspec);
63b857f
     }
47affbc
@@ -371,6 +395,10 @@ ibus_engine_desc_serialize (IBusEngineDesc  *desc,
47affbc
     /* End dict iter */
47affbc
 
47affbc
 #define NOTNULL(s) ((s) != NULL ? (s) : "")
47affbc
+    /* If you will add a new property, you can append it at the end and
47affbc
+     * you should not change the serialized order of name, longname,
47affbc
+     * description, ... because the order is also used in other applications
47affbc
+     * likes ibus-qt. */
47affbc
     g_variant_builder_add (builder, "s", NOTNULL (desc->priv->name));
47affbc
     g_variant_builder_add (builder, "s", NOTNULL (desc->priv->longname));
47affbc
     g_variant_builder_add (builder, "s", NOTNULL (desc->priv->description));
47affbc
@@ -381,7 +409,9 @@ ibus_engine_desc_serialize (IBusEngineDesc  *desc,
47affbc
     g_variant_builder_add (builder, "s", NOTNULL (desc->priv->layout));
63b857f
     g_variant_builder_add (builder, "u", desc->priv->rank);
63b857f
     g_variant_builder_add (builder, "s", NOTNULL (desc->priv->hotkeys));
47affbc
+    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->symbol));
63b857f
 #undef NOTNULL
63b857f
+
63b857f
     return TRUE;
63b857f
 }
63b857f
 
47affbc
@@ -394,6 +424,10 @@ ibus_engine_desc_deserialize (IBusEngineDesc *desc,
47affbc
     retval = IBUS_SERIALIZABLE_CLASS (ibus_engine_desc_parent_class)->deserialize ((IBusSerializable *)desc, variant);
47affbc
     g_return_val_if_fail (retval, 0);
47affbc
 
47affbc
+    /* If you will add a new property, you can append it at the end and
47affbc
+     * you should not change the serialized order of name, longname,
47affbc
+     * description, ... because the order is also used in other applications
47affbc
+     * likes ibus-qt. */
47affbc
     g_variant_get_child (variant, retval++, "s", &desc->priv->name);
47affbc
     g_variant_get_child (variant, retval++, "s", &desc->priv->longname);
47affbc
     g_variant_get_child (variant, retval++, "s", &desc->priv->description);
47affbc
@@ -404,6 +438,7 @@ ibus_engine_desc_deserialize (IBusEngineDesc *desc,
47affbc
     g_variant_get_child (variant, retval++, "s", &desc->priv->layout);
63b857f
     g_variant_get_child (variant, retval++, "u", &desc->priv->rank);
63b857f
     g_variant_get_child (variant, retval++, "s", &desc->priv->hotkeys);
47affbc
+    g_variant_get_child (variant, retval++, "s", &desc->priv->symbol);
63b857f
 
63b857f
     return retval;
63b857f
 }
47affbc
@@ -428,6 +463,7 @@ ibus_engine_desc_copy (IBusEngineDesc       *dest,
63b857f
     dest->priv->layout           = g_strdup (src->priv->layout);
63b857f
     dest->priv->rank             = src->priv->rank;
63b857f
     dest->priv->hotkeys          = g_strdup (src->priv->hotkeys);
47affbc
+    dest->priv->symbol           = g_strdup (src->priv->symbol);
63b857f
     return TRUE;
63b857f
 }
63b857f
 
47affbc
@@ -465,6 +501,7 @@ ibus_engine_desc_output (IBusEngineDesc *desc,
63b857f
     OUTPUT_ENTRY_1(icon);
63b857f
     OUTPUT_ENTRY_1(layout);
63b857f
     OUTPUT_ENTRY_1(hotkeys);
47affbc
+    OUTPUT_ENTRY_1(symbol);
63b857f
     g_string_append_indent (output, indent + 1);
63b857f
     g_string_append_printf (output, "<rank>%u</rank>\n", desc->priv->rank);
63b857f
 #undef OUTPUT_ENTRY
47affbc
@@ -498,6 +535,7 @@ ibus_engine_desc_parse_xml_node (IBusEngineDesc *desc,
63b857f
         PARSE_ENTRY_1(icon);
63b857f
         PARSE_ENTRY_1(layout);
63b857f
         PARSE_ENTRY_1(hotkeys);
47affbc
+        PARSE_ENTRY_1(symbol);
63b857f
 #undef PARSE_ENTRY
63b857f
 #undef PARSE_ENTRY_1
63b857f
         if (g_strcmp0 (sub_node->name , "rank") == 0) {
47affbc
@@ -526,6 +564,7 @@ IBUS_ENGINE_DESC_GET_PROPERTY (icon, const gchar *)
63b857f
 IBUS_ENGINE_DESC_GET_PROPERTY (layout, const gchar *)
63b857f
 IBUS_ENGINE_DESC_GET_PROPERTY (rank, guint)
63b857f
 IBUS_ENGINE_DESC_GET_PROPERTY (hotkeys, const gchar *)
47affbc
+IBUS_ENGINE_DESC_GET_PROPERTY (symbol, const gchar *)
63b857f
 #undef IBUS_ENGINE_DESC_GET_PROPERTY
63b857f
 
63b857f
 IBusEngineDesc *
47affbc
@@ -573,6 +612,7 @@ ibus_engine_desc_new_varargs (const gchar *first_property_name, ...)
63b857f
     g_assert (desc->priv->icon);
63b857f
     g_assert (desc->priv->layout);
63b857f
     g_assert (desc->priv->hotkeys);
47affbc
+    g_assert (desc->priv->symbol);
63b857f
 
63b857f
     return desc;
63b857f
 }
63b857f
diff --git a/src/ibusenginedesc.h b/src/ibusenginedesc.h
47affbc
index 9718b15..76a7adc 100644
63b857f
--- a/src/ibusenginedesc.h
63b857f
+++ b/src/ibusenginedesc.h
63b857f
@@ -249,6 +249,16 @@ guint            ibus_engine_desc_get_rank      (IBusEngineDesc *info);
63b857f
 const gchar     *ibus_engine_desc_get_hotkeys   (IBusEngineDesc *info);
63b857f
 
63b857f
 /**
47affbc
+ * ibus_engine_desc_get_symbol:
63b857f
+ * @info: An IBusEngineDesc
47affbc
+ * @returns: symbol property in IBusEngineDesc
63b857f
+ *
47affbc
+ * Return the symbol property in IBusEngineDesc. It should not be freed.
63b857f
+ */
47affbc
+const gchar     *ibus_engine_desc_get_symbol
63b857f
+                                                (IBusEngineDesc *info);
63b857f
+
63b857f
+/**
63b857f
  * ibus_engine_desc_output:
63b857f
  * @info: An IBusEngineDesc
63b857f
  * @output: XML-formatted Input method engine description.
63b857f
-- 
47affbc
1.7.5.4
63b857f