color_class: fix errors which can occur in specific scenarios
authorJee-Yong Um <jc9.um@samsung.com>
Wed, 21 Dec 2016 10:22:32 +0000 (19:22 +0900)
committerWonki Kim <wonki_.kim@samsung.com>
Mon, 2 Jan 2017 05:37:11 +0000 (14:37 +0900)
Signed-Off-By: Jee-Yong Um <jc9.um@samsung.com>
Change-Id: I3a0e504c7c800ae56eae7fef6d332a0dab484825

src/lib/elm_object.h
src/lib/elm_widget.c

index 02a5627..1374e02 100644 (file)
@@ -1036,5 +1036,5 @@ EAPI void             elm_object_color_class_del(Evas_Object *obj, const char *c
  * @elseif WEARABLE @since_tizen 3.0
  * @endif
  */
-EAPI void             elm_object_color_class_del(Evas_Object *obj, const char *color_class);
+EAPI void             elm_object_color_class_clear(Evas_Object *obj);
 //
index 69d8dd1..0c0205a 100644 (file)
@@ -7224,6 +7224,8 @@ _elm_widget_color_class_set_internal(Evas_Object *obj, Evas_Object *edje, const
                             { r2, g2, b2, a2 },
                             { r3, g3, b3, a3 } };
 
+   if (!color_class) return EINA_FALSE;
+
    buf = _elm_widget_edje_class_get(eo_class_get(obj), NULL, color_class);
 
 #define TEMP_COLOR(x, y) \
@@ -7260,6 +7262,8 @@ _elm_widget_color_class_get_internal(Evas_Object *obj, Evas_Object *edje, const
    Eina_Bool int_ret = EINA_TRUE;
    Eina_Stringshare *buf;
 
+   if (!color_class) return EINA_FALSE;
+
    buf = _elm_widget_edje_class_get(eo_class_get(obj), elm_widget_style_get(obj), color_class);
 
    int_ret &= edje_object_color_class_get(edje, buf,
@@ -7378,12 +7382,19 @@ _elm_widget_class_color3_get(Eo *obj, Elm_Widget_Smart_Data *sd EINA_UNUSED, con
 EOLIAN void
 _elm_widget_class_color_del(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd, const char *color_class)
 {
-   edje_object_color_class_del(sd->resize_obj, color_class);
+   Eina_Stringshare *buf;
+
+   if (!eo_isa(obj, ELM_LAYOUT_CLASS)) return;
+
+   buf = _elm_widget_edje_class_get(eo_class_get(obj), NULL, color_class);
+   edje_object_color_class_del(sd->resize_obj, buf);
+   eina_stringshare_del(buf);
 }
 
 EOLIAN void
 _elm_widget_class_color_clear(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd)
 {
+   if (!eo_isa(obj, ELM_LAYOUT_CLASS)) return;
    edje_object_color_class_clear(sd->resize_obj);
 }
 
@@ -7554,17 +7565,20 @@ _elm_widget_item_edje_get(Eo *obj, Elm_Widget_Item_Data *sd)
 EOLIAN void
 _elm_widget_item_class_color_del(Eo *obj EINA_UNUSED, Elm_Widget_Item_Data *sd, const char *color_class)
 {
+   Eina_Stringshare *buf;
    Evas_Object *edje;
    Edje_Color_Class *cc = NULL;
 
    if (!color_class) return;
 
-   eina_hash_del(sd->color_classes, color_class, cc);
+   buf = _elm_widget_edje_class_get(eo_class_get(obj), NULL, color_class);
+   eina_hash_del(sd->color_classes, buf, cc);
 
    edje = _elm_widget_item_edje_get(obj, sd);
-   if (!edje) return;
+   if (edje)
+     edje_object_color_class_del(edje, color_class);
 
-   edje_object_color_class_del(edje, color_class);
+   eina_stringshare_del(buf);
 }
 
 EOLIAN void