Separate IBusProperty and IBusPropList.
authorPeng Huang <shawn.p.huang@gmail.com>
Tue, 12 Jan 2010 10:32:56 +0000 (18:32 +0800)
committerPeng Huang <shawn.p.huang@gmail.com>
Tue, 12 Jan 2010 10:32:56 +0000 (18:32 +0800)
src/Makefile.am
src/ibus.h
src/ibusengine.h
src/ibusinputcontext.c
src/ibuspanelservice.h
src/ibusproperty.c
src/ibusproperty.h
src/ibusproplist.c [new file with mode: 0644]
src/ibusproplist.h [new file with mode: 0644]

index daa2cc51b5456ccd36183d794a47368253f6919c..774504da557782189ffbf10f793eb7e228e8c5fc 100644 (file)
@@ -56,6 +56,7 @@ ibus_public_h_sources = \
        ibusattribute.h \
        ibusattrlist.h \
        ibusproperty.h \
+       ibusproplist.h \
        ibuslookuptable.h \
        ibusinputcontext.h \
        ibusconfig.h \
@@ -96,6 +97,7 @@ ibus_c_sources = \
        ibusattribute.c \
        ibusattrlist.c \
        ibusproperty.c \
+       ibusproplist.c \
        ibuslookuptable.c \
        ibusinputcontext.c \
        ibusconfig.c \
index 7b842056f5a9d10f61e4c41bab784f8fe4ec0def..d724b6a7614d5283b17e2e9f8f491245c01b7482 100644 (file)
@@ -36,6 +36,7 @@
 #include <ibusfactory.h>
 #include <ibusengine.h>
 #include <ibusproperty.h>
+#include <ibusproplist.h>
 #include <ibuslookuptable.h>
 #include <ibusbus.h>
 #include <ibuskeysyms.h>
index df92e0ae4a739cbd4f41ba4ab2ccab141e2fba19..8031a25040f081b34a8a0b43c9a7220795b171aa 100644 (file)
@@ -34,7 +34,7 @@
 #include "ibusservice.h"
 #include "ibusattribute.h"
 #include "ibuslookuptable.h"
-#include "ibusproperty.h"
+#include "ibusproplist.h"
 
 /*
  * Type macros.
index c1a5035a8d526bbefe267976c8c61653f45f2866..6d8a2de12184d7ba0e8af2a94e1591bd077e0039 100644 (file)
@@ -23,7 +23,7 @@
 #include "ibusinputcontext.h"
 #include "ibusattribute.h"
 #include "ibuslookuptable.h"
-#include "ibusproperty.h"
+#include "ibusproplist.h"
 
 #define IBUS_INPUT_CONTEXT_GET_PRIVATE(o)  \
    (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_INPUT_CONTEXT, IBusInputContextPrivate))
index 32c3934b1f30c969dcd9893721a306ad50a04498..5c05bac727b250e79cd6b878af51f8902b6885c2 100644 (file)
@@ -31,7 +31,7 @@
 #include "ibusconnection.h"
 #include "ibuslookuptable.h"
 #include "ibusservice.h"
-#include "ibusproperty.h"
+#include "ibusproplist.h"
 
 /*
  * Type macros.
index 6111239256778c1ce77a0f93e290448e24d72568..491fd7aa5d4ebb41bf2d76bfd12beda63d6b24f3 100644 (file)
@@ -19,6 +19,7 @@
  * Boston, MA 02111-1307, USA.
  */
 #include "ibusproperty.h"
+#include "ibusproplist.h"
 
 /* functions prototype */
 static void         ibus_property_class_init    (IBusPropertyClass  *klass);
@@ -31,16 +32,6 @@ static gboolean     ibus_property_deserialize   (IBusProperty       *prop,
 static gboolean     ibus_property_copy          (IBusProperty       *dest,
                                                  const IBusProperty *src);
 
-static void         ibus_prop_list_class_init   (IBusPropListClass  *klass);
-static void         ibus_prop_list_init         (IBusPropList       *prop_list);
-static void         ibus_prop_list_destroy      (IBusPropList       *prop_list);
-static gboolean     ibus_prop_list_serialize    (IBusPropList       *prop_list,
-                                                 IBusMessageIter    *iter);
-static gboolean     ibus_prop_list_deserialize  (IBusPropList       *prop_list,
-                                                 IBusMessageIter    *iter);
-static gboolean     ibus_prop_list_copy         (IBusPropList       *dest,
-                                                 const IBusPropList *src);
-
 static IBusSerializableClass *parent_class = NULL;
 
 GType
@@ -415,211 +406,4 @@ ibus_property_update (IBusProperty *prop,
     return TRUE;
 }
 
-GType
-ibus_prop_list_get_type (void)
-{
-    static GType type = 0;
-
-    static const GTypeInfo type_info = {
-        sizeof (IBusPropListClass),
-        (GBaseInitFunc)     NULL,
-        (GBaseFinalizeFunc) NULL,
-        (GClassInitFunc)    ibus_prop_list_class_init,
-        NULL,               /* class finialize */
-        NULL,               /* class data */
-        sizeof (IBusProperty),
-        0,
-        (GInstanceInitFunc) ibus_prop_list_init,
-    };
-
-    if (type == 0) {
-        type = g_type_register_static (IBUS_TYPE_SERIALIZABLE,
-                                       "IBusPropList",
-                                       &type_info,
-                                       0);
-    }
-
-    return type;
-}
-
-static void
-ibus_prop_list_class_init (IBusPropListClass *klass)
-{
-    IBusObjectClass *object_class = IBUS_OBJECT_CLASS (klass);
-    IBusSerializableClass *serializable_class = IBUS_SERIALIZABLE_CLASS (klass);
-
-    parent_class = (IBusSerializableClass *) g_type_class_peek_parent (klass);
-
-    object_class->destroy = (IBusObjectDestroyFunc) ibus_prop_list_destroy;
 
-    serializable_class->serialize   = (IBusSerializableSerializeFunc) ibus_prop_list_serialize;
-    serializable_class->deserialize = (IBusSerializableDeserializeFunc) ibus_prop_list_deserialize;
-    serializable_class->copy        = (IBusSerializableCopyFunc) ibus_prop_list_copy;
-
-    g_string_append (serializable_class->signature, "av");
-}
-
-static void
-ibus_prop_list_init (IBusPropList *prop_list)
-{
-    prop_list->properties = g_array_new (TRUE, TRUE, sizeof (IBusProperty *));
-}
-
-static void
-ibus_prop_list_destroy (IBusPropList *prop_list)
-{
-    IBusProperty **p;
-    gint i;
-
-    p = (IBusProperty **) g_array_free (prop_list->properties, FALSE);
-
-    for (i = 0; p[i] != NULL; i++) {
-        g_object_unref (p[i]);
-    }
-    g_free (p);
-
-    IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *) prop_list);
-}
-
-static gboolean
-ibus_prop_list_serialize (IBusPropList    *prop_list,
-                          IBusMessageIter *iter)
-{
-    gboolean retval;
-    IBusMessageIter array_iter;
-    IBusProperty *prop;
-    guint i;
-
-    retval = parent_class->serialize ((IBusSerializable *) prop_list, iter);
-    g_return_val_if_fail (retval, FALSE);
-
-    retval = ibus_message_iter_open_container (iter, IBUS_TYPE_ARRAY, "v", &array_iter);
-    g_return_val_if_fail (retval, FALSE);
-
-    i = 0;
-
-    while ((prop = ibus_prop_list_get (prop_list, i)) != NULL) {
-        retval = ibus_message_iter_append (&array_iter, IBUS_TYPE_PROPERTY, &prop);
-        g_return_val_if_fail (retval, FALSE);
-        i ++;
-    }
-
-    retval = ibus_message_iter_close_container (iter, &array_iter);
-    g_return_val_if_fail (retval, FALSE);
-
-    return TRUE;
-}
-
-gboolean
-ibus_prop_list_deserialize (IBusPropList    *prop_list,
-                            IBusMessageIter *iter)
-{
-    gboolean retval;
-    IBusMessageIter array_iter;
-    IBusSerializable *object;
-
-    retval = parent_class->deserialize ((IBusSerializable *) prop_list, iter);
-    g_return_val_if_fail (retval, FALSE);
-
-    g_return_val_if_fail (IBUS_IS_PROP_LIST (prop_list), FALSE);
-
-    retval = ibus_message_iter_recurse (iter, IBUS_TYPE_ARRAY, &array_iter);
-    g_return_val_if_fail (retval, FALSE);
-
-    while (ibus_message_iter_get_arg_type (&array_iter) != G_TYPE_INVALID) {
-        retval = ibus_message_iter_get (&array_iter, IBUS_TYPE_PROPERTY, &object);
-        g_return_val_if_fail (retval, FALSE);
-        ibus_message_iter_next (&array_iter);
-
-        ibus_prop_list_append (prop_list, (IBusProperty *)object);
-        g_object_unref (object);
-    }
-
-    ibus_message_iter_next (iter);
-
-    return TRUE;
-}
-
-
-
-static gboolean
-ibus_prop_list_copy (IBusPropList       *dest,
-                     const IBusPropList *src)
-{
-    gboolean retval;
-    IBusProperty *prop;
-    guint i;
-
-    retval = parent_class->copy ((IBusSerializable *) dest,
-                                 (const IBusSerializable *) src);
-    g_return_val_if_fail (retval, FALSE);
-
-    g_return_val_if_fail (IBUS_IS_PROP_LIST (dest), FALSE);
-    g_return_val_if_fail (IBUS_IS_PROP_LIST (src), FALSE);
-
-    i = 0;
-    while ((prop = ibus_prop_list_get ((IBusPropList *)src, i)) != NULL) {
-        prop = (IBusProperty *) ibus_serializable_copy ((IBusSerializable *) prop);
-        ibus_prop_list_append (dest, prop);
-        g_object_unref (prop);
-        i ++;
-    }
-    return TRUE;
-}
-
-
-IBusPropList *
-ibus_prop_list_new ()
-{
-    IBusPropList *prop_list;
-
-    prop_list = g_object_new (IBUS_TYPE_PROP_LIST, NULL);
-
-    return prop_list;
-}
-
-void
-ibus_prop_list_append (IBusPropList *prop_list,
-                       IBusProperty *prop)
-{
-    g_assert (IBUS_IS_PROP_LIST (prop_list));
-    g_assert (IBUS_IS_PROPERTY (prop));
-
-    g_object_ref (prop);
-
-    g_array_append_val (prop_list->properties, prop);
-}
-
-IBusProperty *
-ibus_prop_list_get (IBusPropList *prop_list,
-                    guint         index)
-{
-    g_assert (IBUS_IS_PROP_LIST (prop_list));
-
-
-    if (index >= prop_list->properties->len)
-        return NULL;
-
-    return g_array_index (prop_list->properties, IBusProperty *, index);
-}
-
-
-
-gboolean
-ibus_prop_list_update_property (IBusPropList *prop_list,
-                                IBusProperty *prop_update)
-{
-    g_assert (IBUS_IS_PROP_LIST (prop_list));
-    g_assert (IBUS_IS_PROPERTY (prop_update));
-
-    gint i;
-
-    for (i = 0; i < prop_list->properties->len; i ++) {
-        IBusProperty *prop = g_array_index (prop_list->properties, IBusProperty *, i);
-        if (ibus_property_update (prop, prop_update)) {
-            return TRUE;
-        }
-    }
-
-    return FALSE;
-}
index 565da1ddc1dfc43b9611b83fee185233e62f2325..972772292295664225d3c4bc67b15b41a4fcc6ce 100644 (file)
@@ -56,63 +56,6 @@ G_BEGIN_DECLS
 #define IBUS_PROPERTY_GET_CLASS(obj)   \
     (G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_TYPE_PROPERTY, IBusPropertyClass))
 
-/* define IBusPropList macros */
-/**
- * IBUS_TYPE_PROP_LIST:
- * @returns: IBusPropList GType.
- *
- * Returns GType of IBus property list.
- */
-#define IBUS_TYPE_PROP_LIST             \
-    (ibus_prop_list_get_type ())
-
-/**
- * IBUS_PROP_LIST:
- * @obj: An object which is subject to casting.
- *
- * Casts an IBUS_PROP_LIST or derived pointer into a (IBusPropList*) pointer.
- * Depending on the current debugging level, this function may invoke
- * certain runtime checks to identify invalid casts.
- */
-#define IBUS_PROP_LIST(obj)             \
-    (G_TYPE_CHECK_INSTANCE_CAST ((obj), IBUS_TYPE_PROP_LIST, IBusPropList))
-
-/**
- * IBUS_PROP_LIST_CLASS:
- * @klass: A class to be casted.
- *
- * Casts a derived IBusPropListClass structure into a IBusPropListClass structure.
- */
-#define IBUS_PROP_LIST_CLASS(klass)     \
-    (G_TYPE_CHECK_CLASS_CAST ((klass), IBUS_TYPE_PROP_LIST, IBusPropListClass))
-
-/**
- * IBUS_IS_PROP_LIST:
- * @obj: Instance to check for being a IBUS_PROP_LIST.
- *
- * Checks whether a valid GTypeInstance pointer is of type IBUS_PROP_LIST.
- */
-#define IBUS_IS_PROP_LIST(obj)          \
-    (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IBUS_TYPE_PROP_LIST))
-
-/**
- * IBUS_IS_PROP_LIST_CLASS:
- * @klass: A class to be checked.
- *
- * Checks whether class "is a" valid IBusPropListClass structure of type IBUS_PROP_LIST or derived.
- */
-#define IBUS_IS_PROP_LIST_CLASS(klass)  \
-    (G_TYPE_CHECK_CLASS_TYPE ((klass), IBUS_TYPE_PROP_LIST))
-
-/**
- * IBUS_PROP_LIST_GET_CLASS:
- * @obj: An object.
- *
- * Get the class of a given object and cast the class to IBusPropListClass.
- */
-#define IBUS_PROP_LIST_GET_CLASS(obj)   \
-    (G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_TYPE_PROP_LIST, IBusPropListClass))
-
 /**
  * IBusPropType:
  * @PROP_TYPE_NORMAL: Property is shown as normal text.
@@ -202,23 +145,6 @@ struct _IBusPropertyClass {
     IBusSerializableClass parent;
 };
 
-/**
- * IBusPropList:
- * @properties: GArray that holds IBusProperties.
- *
- * An array of IBusProperties.
- */
-struct _IBusPropList {
-    IBusSerializable parent;
-
-    /*< public >*/
-    GArray *properties;
-};
-
-struct _IBusPropListClass {
-    IBusSerializableClass parent;
-};
-
 GType            ibus_property_get_type     ();
 
 /**
@@ -331,47 +257,5 @@ void             ibus_property_set_sub_props(IBusProperty   *prop,
 gboolean         ibus_property_update       (IBusProperty   *prop,
                                              IBusProperty   *prop_update);
 
-GType            ibus_prop_list_get_type    ();
-
-/**
- * ibus_prop_list_new:
- * @returns: A newly allocated IBusPropList.
- *
- * New a IBusPropList.
- */
-IBusPropList    *ibus_prop_list_new         ();
-
-/**
- * ibus_prop_list_append:
- * @prop_list: An IBusPropList.
- * @prop: IBusProperty to be append to @prop_list.
- *
- * Append an IBusProperty to an IBusPropList, and increase reference.
- */
-void             ibus_prop_list_append      (IBusPropList   *prop_list,
-                                             IBusProperty   *prop);
-
-/**
- * ibus_prop_list_get:
- * @prop_list: An IBusPropList.
- * @index: Index of an IBusPropList.
- * @returns: IBusProperty at given index, NULL if no such IBusProperty.
- *
- * Returns IBusProperty at given index. Borrowed reference.
- */
-IBusProperty    *ibus_prop_list_get         (IBusPropList   *prop_list,
-                                             guint           index);
-
-/**
- * ibus_prop_list_update_property:
- * @prop_list: An IBusPropList.
- * @prop: IBusProperty to be update.
- * @returns: TRUE if succeeded, FALSE otherwise.
- *
- * Update an IBusProperty in IBusPropList.
- */
-gboolean         ibus_prop_list_update_property
-                                            (IBusPropList   *prop_list,
-                                             IBusProperty   *prop);
 G_END_DECLS
 #endif
diff --git a/src/ibusproplist.c b/src/ibusproplist.c
new file mode 100644 (file)
index 0000000..fc96c8b
--- /dev/null
@@ -0,0 +1,243 @@
+/* vim:set et sts=4: */
+/* IBus - The Input Bus
+ * Copyright (C) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
+ * Copyright (C) 2008-2010 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include "ibusproplist.h"
+
+/* functions prototype */
+static void         ibus_prop_list_class_init   (IBusPropListClass  *klass);
+static void         ibus_prop_list_init         (IBusPropList       *prop_list);
+static void         ibus_prop_list_destroy      (IBusPropList       *prop_list);
+static gboolean     ibus_prop_list_serialize    (IBusPropList       *prop_list,
+                                                 IBusMessageIter    *iter);
+static gboolean     ibus_prop_list_deserialize  (IBusPropList       *prop_list,
+                                                 IBusMessageIter    *iter);
+static gboolean     ibus_prop_list_copy         (IBusPropList       *dest,
+                                                 const IBusPropList *src);
+
+static IBusSerializableClass *parent_class = NULL;
+
+GType
+ibus_prop_list_get_type (void)
+{
+    static GType type = 0;
+
+    static const GTypeInfo type_info = {
+        sizeof (IBusPropListClass),
+        (GBaseInitFunc)     NULL,
+        (GBaseFinalizeFunc) NULL,
+        (GClassInitFunc)    ibus_prop_list_class_init,
+        NULL,               /* class finialize */
+        NULL,               /* class data */
+        sizeof (IBusProperty),
+        0,
+        (GInstanceInitFunc) ibus_prop_list_init,
+    };
+
+    if (type == 0) {
+        type = g_type_register_static (IBUS_TYPE_SERIALIZABLE,
+                                       "IBusPropList",
+                                       &type_info,
+                                       0);
+    }
+
+    return type;
+}
+
+static void
+ibus_prop_list_class_init (IBusPropListClass *klass)
+{
+    IBusObjectClass *object_class = IBUS_OBJECT_CLASS (klass);
+    IBusSerializableClass *serializable_class = IBUS_SERIALIZABLE_CLASS (klass);
+
+    parent_class = (IBusSerializableClass *) g_type_class_peek_parent (klass);
+
+    object_class->destroy = (IBusObjectDestroyFunc) ibus_prop_list_destroy;
+
+    serializable_class->serialize   = (IBusSerializableSerializeFunc) ibus_prop_list_serialize;
+    serializable_class->deserialize = (IBusSerializableDeserializeFunc) ibus_prop_list_deserialize;
+    serializable_class->copy        = (IBusSerializableCopyFunc) ibus_prop_list_copy;
+
+    g_string_append (serializable_class->signature, "av");
+}
+
+static void
+ibus_prop_list_init (IBusPropList *prop_list)
+{
+    prop_list->properties = g_array_new (TRUE, TRUE, sizeof (IBusProperty *));
+}
+
+static void
+ibus_prop_list_destroy (IBusPropList *prop_list)
+{
+    IBusProperty **p;
+    gint i;
+
+    p = (IBusProperty **) g_array_free (prop_list->properties, FALSE);
+
+    for (i = 0; p[i] != NULL; i++) {
+        g_object_unref (p[i]);
+    }
+    g_free (p);
+
+    IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *) prop_list);
+}
+
+static gboolean
+ibus_prop_list_serialize (IBusPropList    *prop_list,
+                          IBusMessageIter *iter)
+{
+    gboolean retval;
+    IBusMessageIter array_iter;
+    IBusProperty *prop;
+    guint i;
+
+    retval = parent_class->serialize ((IBusSerializable *) prop_list, iter);
+    g_return_val_if_fail (retval, FALSE);
+
+    retval = ibus_message_iter_open_container (iter, IBUS_TYPE_ARRAY, "v", &array_iter);
+    g_return_val_if_fail (retval, FALSE);
+
+    i = 0;
+
+    while ((prop = ibus_prop_list_get (prop_list, i)) != NULL) {
+        retval = ibus_message_iter_append (&array_iter, IBUS_TYPE_PROPERTY, &prop);
+        g_return_val_if_fail (retval, FALSE);
+        i ++;
+    }
+
+    retval = ibus_message_iter_close_container (iter, &array_iter);
+    g_return_val_if_fail (retval, FALSE);
+
+    return TRUE;
+}
+
+gboolean
+ibus_prop_list_deserialize (IBusPropList    *prop_list,
+                            IBusMessageIter *iter)
+{
+    gboolean retval;
+    IBusMessageIter array_iter;
+    IBusSerializable *object;
+
+    retval = parent_class->deserialize ((IBusSerializable *) prop_list, iter);
+    g_return_val_if_fail (retval, FALSE);
+
+    g_return_val_if_fail (IBUS_IS_PROP_LIST (prop_list), FALSE);
+
+    retval = ibus_message_iter_recurse (iter, IBUS_TYPE_ARRAY, &array_iter);
+    g_return_val_if_fail (retval, FALSE);
+
+    while (ibus_message_iter_get_arg_type (&array_iter) != G_TYPE_INVALID) {
+        retval = ibus_message_iter_get (&array_iter, IBUS_TYPE_PROPERTY, &object);
+        g_return_val_if_fail (retval, FALSE);
+        ibus_message_iter_next (&array_iter);
+
+        ibus_prop_list_append (prop_list, (IBusProperty *)object);
+        g_object_unref (object);
+    }
+
+    ibus_message_iter_next (iter);
+
+    return TRUE;
+}
+
+
+
+static gboolean
+ibus_prop_list_copy (IBusPropList       *dest,
+                     const IBusPropList *src)
+{
+    gboolean retval;
+    IBusProperty *prop;
+    guint i;
+
+    retval = parent_class->copy ((IBusSerializable *) dest,
+                                 (const IBusSerializable *) src);
+    g_return_val_if_fail (retval, FALSE);
+
+    g_return_val_if_fail (IBUS_IS_PROP_LIST (dest), FALSE);
+    g_return_val_if_fail (IBUS_IS_PROP_LIST (src), FALSE);
+
+    i = 0;
+    while ((prop = ibus_prop_list_get ((IBusPropList *)src, i)) != NULL) {
+        prop = (IBusProperty *) ibus_serializable_copy ((IBusSerializable *) prop);
+        ibus_prop_list_append (dest, prop);
+        g_object_unref (prop);
+        i ++;
+    }
+    return TRUE;
+}
+
+
+IBusPropList *
+ibus_prop_list_new ()
+{
+    IBusPropList *prop_list;
+
+    prop_list = g_object_new (IBUS_TYPE_PROP_LIST, NULL);
+
+    return prop_list;
+}
+
+void
+ibus_prop_list_append (IBusPropList *prop_list,
+                       IBusProperty *prop)
+{
+    g_assert (IBUS_IS_PROP_LIST (prop_list));
+    g_assert (IBUS_IS_PROPERTY (prop));
+
+    g_object_ref (prop);
+
+    g_array_append_val (prop_list->properties, prop);
+}
+
+IBusProperty *
+ibus_prop_list_get (IBusPropList *prop_list,
+                    guint         index)
+{
+    g_assert (IBUS_IS_PROP_LIST (prop_list));
+
+
+    if (index >= prop_list->properties->len)
+        return NULL;
+
+    return g_array_index (prop_list->properties, IBusProperty *, index);
+}
+
+
+
+gboolean
+ibus_prop_list_update_property (IBusPropList *prop_list,
+                                IBusProperty *prop_update)
+{
+    g_assert (IBUS_IS_PROP_LIST (prop_list));
+    g_assert (IBUS_IS_PROPERTY (prop_update));
+
+    gint i;
+
+    for (i = 0; i < prop_list->properties->len; i ++) {
+        IBusProperty *prop = g_array_index (prop_list->properties, IBusProperty *, i);
+        if (ibus_property_update (prop, prop_update)) {
+            return TRUE;
+        }
+    }
+
+    return FALSE;
+}
diff --git a/src/ibusproplist.h b/src/ibusproplist.h
new file mode 100644 (file)
index 0000000..4d75fbc
--- /dev/null
@@ -0,0 +1,118 @@
+/* vim:set et sts=4: */
+/* IBus - The Input Bus
+ * Copyright (C) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
+ * Copyright (C) 2008-2010 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/**
+ * SECTION: ibusproperty
+ * @short_description: UI component for input method engine property.
+ * @stability: Stable
+ * @see_also: #IBusEngine
+ *
+ */
+#ifndef __IBUS_PROP_LIST_H_
+#define __IBUS_PROP_LIST_H_
+
+#include "ibusserializable.h"
+#include "ibusproperty.h"
+
+G_BEGIN_DECLS
+
+/*
+ * Type macros.
+ */
+/* define IBusPropList macros */
+#define IBUS_TYPE_PROP_LIST             \
+    (ibus_prop_list_get_type ())
+#define IBUS_PROP_LIST(obj)             \
+    (G_TYPE_CHECK_INSTANCE_CAST ((obj), IBUS_TYPE_PROP_LIST, IBusPropList))
+#define IBUS_PROP_LIST_CLASS(klass)     \
+    (G_TYPE_CHECK_CLASS_CAST ((klass), IBUS_TYPE_PROP_LIST, IBusPropListClass))
+#define IBUS_IS_PROP_LIST(obj)          \
+    (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IBUS_TYPE_PROP_LIST))
+#define IBUS_IS_PROP_LIST_CLASS(klass)  \
+    (G_TYPE_CHECK_CLASS_TYPE ((klass), IBUS_TYPE_PROP_LIST))
+#define IBUS_PROP_LIST_GET_CLASS(obj)   \
+    (G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_TYPE_PROP_LIST, IBusPropListClass))
+
+/*
+typedef struct _IBusPropList IBusPropList;
+typedef struct _IBusPropListClass IBusPropListClass;
+*/
+
+/**
+ * IBusPropList:
+ * @properties: GArray that holds IBusProperties.
+ *
+ * An array of IBusProperties.
+ */
+struct _IBusPropList {
+    IBusSerializable parent;
+
+    /*< public >*/
+    GArray *properties;
+};
+
+struct _IBusPropListClass {
+    IBusSerializableClass parent;
+};
+
+GType            ibus_prop_list_get_type    ();
+
+/**
+ * ibus_prop_list_new:
+ * @returns: A newly allocated IBusPropList.
+ *
+ * New a IBusPropList.
+ */
+IBusPropList    *ibus_prop_list_new         ();
+
+/**
+ * ibus_prop_list_append:
+ * @prop_list: An IBusPropList.
+ * @prop: IBusProperty to be append to @prop_list.
+ *
+ * Append an IBusProperty to an IBusPropList, and increase reference.
+ */
+void             ibus_prop_list_append      (IBusPropList   *prop_list,
+                                             IBusProperty   *prop);
+
+/**
+ * ibus_prop_list_get:
+ * @prop_list: An IBusPropList.
+ * @index: Index of an IBusPropList.
+ * @returns: IBusProperty at given index, NULL if no such IBusProperty.
+ *
+ * Returns IBusProperty at given index. Borrowed reference.
+ */
+IBusProperty    *ibus_prop_list_get         (IBusPropList   *prop_list,
+                                             guint           index);
+
+/**
+ * ibus_prop_list_update_property:
+ * @prop_list: An IBusPropList.
+ * @prop: IBusProperty to be update.
+ * @returns: TRUE if succeeded, FALSE otherwise.
+ *
+ * Update an IBusProperty in IBusPropList.
+ */
+gboolean         ibus_prop_list_update_property
+                                            (IBusPropList   *prop_list,
+                                             IBusProperty   *prop);
+G_END_DECLS
+#endif