Request amd to delete widget instance 56/152356/5
authorJunghoon Park <jh9216.park@samsung.com>
Mon, 25 Sep 2017 12:56:16 +0000 (21:56 +0900)
committerSemun Lee <semun.lee@samsung.com>
Thu, 12 Oct 2017 08:08:02 +0000 (08:08 +0000)
- When layout object is deleted, call aul_widget_instance_del() to
  notify current status

Change-Id: Ic0476e82f93e935dd8bdd5c50041dfe99218f15c
Signed-off-by: Junghoon Park <jh9216.park@samsung.com>
(cherry picked from commit d1c6ace1ca9b26095cc64b94434f6fdd6e652f3b)
Signed-off-by: Semun Lee <semun.lee@samsung.com>
widget_viewer_evas/src/widget_viewer_evas.c

index 0a1934bdfe438f0a3e5ed181fc355bb6108bd4eb..3c8f2ad6fab0287e3f20ac23e0a755a1a5582d6c 100644 (file)
@@ -961,6 +961,8 @@ static void __del_cb(void *data, Evas *e, Evas_Object *layout, void *event_info)
        struct widget_info *info = data;
        struct widget_evas_event_info evas_info;
        int *cur_instance_cnt;
+       char *widget_id;
+       char *instance_id;
 
        if (info->restart)
                return;/* LCOV_EXCL_LINE */
@@ -979,17 +981,34 @@ static void __del_cb(void *data, Evas *e, Evas_Object *layout, void *event_info)
                info->event_queue = NULL;
        }
 
+       widget_id = strdup(info->widget_id);
+       if (widget_id == NULL) {
+               ErrPrint("out of memory");
+               return;
+       }
+
+       instance_id = strdup(info->instance_id);
+       if (instance_id == NULL) {
+               ErrPrint("out of memory");
+               free(widget_id);
+               return;
+       }
+
+       if (s_info.widget_table)
+               g_hash_table_remove(s_info.widget_table, info->instance_id);
+
        if (s_info.instance_cnt_table) {
-               cur_instance_cnt = g_hash_table_lookup(s_info.instance_cnt_table, info->widget_id);
+               cur_instance_cnt = g_hash_table_lookup(s_info.instance_cnt_table, widget_id);
                if (cur_instance_cnt != NULL) {
                        (*cur_instance_cnt)--;
+                       aul_widget_instance_del(widget_id, instance_id);
                        if (*cur_instance_cnt == 0)
-                               g_hash_table_remove(s_info.instance_cnt_table, info->widget_id);
+                               g_hash_table_remove(s_info.instance_cnt_table, widget_id);
                }
        }
 
-       if (s_info.widget_table)
-               g_hash_table_remove(s_info.widget_table, info->instance_id);
+       free(widget_id);
+       free(instance_id);
 }
 
 static void __resize_cb(void *data, Evas *e, Evas_Object *layout, void *event_info)