summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2009-03-04 18:11:55 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2009-03-04 18:11:55 +0800
commitfa8b528ae670b04ec75f3c634dec032e7eee0cca (patch)
treedb062f2f9c1f768b2d054c36b49c335863dc205d
parent2fd4b2e2a4c53fb51e3c9b2a2909e1425bcd3252 (diff)
downloadibus-fa8b528ae670b04ec75f3c634dec032e7eee0cca.tar.gz
ibus-fa8b528ae670b04ec75f3c634dec032e7eee0cca.tar.xz
ibus-fa8b528ae670b04ec75f3c634dec032e7eee0cca.zip
Implement ibus_prop_list_update_property.
-rw-r--r--src/ibusproperty.c48
-rw-r--r--src/ibusproperty.h2
2 files changed, 47 insertions, 3 deletions
diff --git a/src/ibusproperty.c b/src/ibusproperty.c
index 0976363..5162ef0 100644
--- a/src/ibusproperty.c
+++ b/src/ibusproperty.c
@@ -320,8 +320,8 @@ void
ibus_property_set_sub_props (IBusProperty *prop,
IBusPropList *prop_list)
{
- g_return_if_fail (IBUS_IS_PROPERTY (prop));
- g_return_if_fail (IBUS_IS_PROP_LIST (prop_list) || prop_list == NULL);
+ g_assert (IBUS_IS_PROPERTY (prop));
+ g_assert (IBUS_IS_PROP_LIST (prop_list) || prop_list == NULL);
if (prop->sub_props) {
g_object_unref (prop->sub_props);
@@ -335,6 +335,36 @@ ibus_property_set_sub_props (IBusProperty *prop,
prop->sub_props = ibus_prop_list_new ();
}
+gboolean
+ibus_property_update (IBusProperty *prop,
+ IBusProperty *prop_update)
+{
+ g_assert (IBUS_IS_PROPERTY (prop));
+ g_assert (IBUS_IS_PROPERTY (prop_update));
+
+ if (g_strcmp0 (prop->key, prop_update->key) != 0) {
+ return ibus_prop_list_update_property (prop->sub_props, prop_update);
+ }
+
+ g_free (prop->icon);
+ prop->icon = g_strdup (prop_update->icon);
+
+ if (prop->label) {
+ g_object_unref (prop->label);
+ }
+ prop->label = (IBusText *) g_object_ref (prop_update->label);
+
+ if (prop->tooltip) {
+ g_object_unref (prop->tooltip);
+ }
+ prop->tooltip = (IBusText *) g_object_ref (prop_update->tooltip);
+ prop->visible = prop_update->visible;
+ prop->state = prop_update->state;
+ prop->sensitive = prop_update->sensitive;
+
+ return TRUE;
+}
+
GType
ibus_prop_list_get_type (void)
{
@@ -525,7 +555,19 @@ ibus_prop_list_get (IBusPropList *prop_list,
gboolean
ibus_prop_list_update_property (IBusPropList *prop_list,
- IBusProperty *prop)
+ 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, IBusPropList *, i);
+ if (ibus_property_update (prop, prop_update)) {
+ return TRUE;
+ }
+ }
+
return FALSE;
}
diff --git a/src/ibusproperty.h b/src/ibusproperty.h
index 7cd90c9..19ff33c 100644
--- a/src/ibusproperty.h
+++ b/src/ibusproperty.h
@@ -126,6 +126,8 @@ void ibus_property_set_visible (IBusProperty *prop,
gboolean visible);
void ibus_property_set_sub_props(IBusProperty *prop,
IBusPropList *prop_list);
+gboolean ibus_property_update (IBusProperty *prop,
+ IBusProperty *prop_update);
GType ibus_prop_list_get_type ();
IBusPropList *ibus_prop_list_new ();