--- ibus-1.4.0/src/ibusproperty.c.orig 2012-01-04 12:31:08.697335369 +0900 +++ ibus-1.4.0/src/ibusproperty.c 2012-01-04 12:58:07.191725794 +0900 @@ -218,6 +218,17 @@ ibus_property_class_init (IBusPropertyCl static void ibus_property_init (IBusProperty *prop) { + prop->key = NULL; + prop->type = 0; + prop->label = NULL; + prop->icon = NULL; + prop->tooltip = NULL; + prop->sensitive = FALSE; + prop->visible = FALSE; + prop->state = 0; + + prop->sub_props = NULL; + prop->priv = IBUS_PROPERTY_GET_PRIVATE (prop); ibus_property_set_label (prop, NULL); @@ -308,6 +319,27 @@ ibus_property_get_property (IBusProperty static void ibus_property_destroy (IBusProperty *prop) { + g_free (prop->key); + prop->key = NULL; + + g_free (prop->icon); + prop->icon = NULL; + + if (prop->label) { + g_object_unref (prop->label); + prop->label = NULL; + } + + if (prop->tooltip) { + g_object_unref (prop->tooltip); + prop->tooltip = NULL; + } + + if (prop->sub_props) { + g_object_unref (prop->sub_props); + prop->sub_props = NULL; + } + g_free (prop->priv->key); prop->priv->key = NULL; @@ -494,6 +526,17 @@ ibus_property_set_label (IBusProperty *p g_assert (IBUS_IS_PROPERTY (prop)); g_return_if_fail (label == NULL || IBUS_IS_TEXT (label)); + if (prop->label) { + g_object_unref (prop->label); + } + + if (label == NULL) { + prop->label = ibus_text_new_from_static_string (""); + } + else { + prop->label = g_object_ref_sink (label); + } + if (prop->priv->label) { g_object_unref (prop->priv->label); } @@ -512,6 +555,9 @@ ibus_property_set_icon (IBusProperty *pr { g_assert (IBUS_IS_PROPERTY (prop)); + g_free (prop->icon); + prop->icon = g_strdup (icon != NULL ? icon : ""); + g_free (prop->priv->icon); prop->priv->icon = g_strdup (icon != NULL ? icon : ""); } @@ -525,6 +571,19 @@ ibus_property_set_tooltip (IBusProperty IBusPropertyPrivate *priv = prop->priv; + if (prop->tooltip) { + g_object_unref (prop->tooltip); + } + + if (tooltip == NULL) { + prop->tooltip = ibus_text_new_from_static_string (""); + g_object_ref_sink (prop->tooltip); + } + else { + prop->tooltip = tooltip; + g_object_ref_sink (prop->tooltip); + } + if (priv->tooltip) { g_object_unref (priv->tooltip); } @@ -544,6 +603,7 @@ ibus_property_set_sensitive (IBusPropert gboolean sensitive) { g_assert (IBUS_IS_PROPERTY (prop)); + prop->sensitive = sensitive; prop->priv->sensitive = sensitive; } @@ -552,6 +612,7 @@ ibus_property_set_visible (IBusProperty gboolean visible) { g_assert (IBUS_IS_PROPERTY (prop)); + prop->visible = visible; prop->priv->visible = visible; } @@ -564,6 +625,7 @@ ibus_property_set_state (IBusProperty * state == PROP_STATE_CHECKED || state == PROP_STATE_INCONSISTENT); + prop->state = state; prop->priv->state = state; } @@ -576,6 +638,19 @@ ibus_property_set_sub_props (IBusPropert IBusPropertyPrivate *priv = prop->priv; + if (prop->sub_props) { + g_object_unref (prop->sub_props); + } + + if (prop_list) { + prop->sub_props = prop_list; + g_object_ref_sink (prop_list); + } + else { + prop->sub_props = ibus_prop_list_new (); + g_object_ref_sink (prop->sub_props); + } + if (priv->sub_props) { g_object_unref (priv->sub_props); } --- ibus-1.4.0/src/ibusproperty.h.orig 2012-01-04 12:30:52.189069565 +0900 +++ ibus-1.4.0/src/ibusproperty.h 2012-01-04 12:34:38.101706419 +0900 @@ -140,6 +140,20 @@ typedef struct _IBusPropListClass IBusPr struct _IBusProperty { /*< private >*/ IBusSerializable parent; + + /*< public >*/ + gchar *key; + gchar *icon; + IBusText *label; + IBusText *tooltip; + + gboolean sensitive; + gboolean visible; + guint type; + guint state; + + IBusPropList *sub_props; + IBusPropertyPrivate *priv; gpointer pdummy[7];