Fix multi class widget bug
authorHyunho Kang <hhstark.kang@samsung.com>
Wed, 4 Jan 2017 06:56:47 +0000 (15:56 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Tue, 10 Jan 2017 03:49:24 +0000 (12:49 +0900)
screen-connector is running based on appid
widget id is different from appid

Change-Id: I766f38d31820e757f835dd26650b3c057eea3d09
Signed-off-by: Hyunho Kang <hhstark.kang@samsung.com>
widget_viewer_evas/src/widget_viewer_evas.c

index 49b44ed..b32f052 100644 (file)
@@ -249,6 +249,23 @@ static void smart_callback_call(Evas_Object *obj, const char *signal, void *cbda
        evas_object_smart_callback_call(obj, signal, cbdata);
 }
 
+static const char *__to_appid(const char *widget_id)
+{
+       const char *appid;
+
+       appid = g_strstr_len(widget_id, strlen(widget_id), "@");
+       if (appid != NULL) {
+               if (strlen(appid) == 1)
+                       return widget_id;
+
+               /* skip @ */
+               appid++;
+       } else {
+               appid = (char *)widget_id;
+       }
+       return appid;
+}
+
 static void __screen_connector_watcher_evas_added_cb(const char *appid, Evas_Object *image, void *data)
 {
        struct widget_info *info;
@@ -266,10 +283,13 @@ static void __screen_connector_watcher_evas_added_cb(const char *appid, Evas_Obj
                return;
        }
 
-       if (info->restart || (strcmp(appid, info->widget_id) != 0))
+       if (info->restart || (info->widget_id == NULL) || (strcmp(appid, __to_appid(info->widget_id)) != 0)) {
+               ErrPrint("Wrong added info, %s %s", appid, info->widget_id);
                return;
+       }
 
-       DbgPrint("widget added: %s, instance : %s, (%p)", appid, info->instance_id, image);
+       DbgPrint("widget added: %s, widget_id : %s, instance : %s, (%p)",
+                       appid, info->widget_id, info->instance_id, image);
        evas_object_geometry_get(image, &x, &y, &w, &h);
        DbgPrint("widget geometry:%d %d %d %d", x, y, w, h);
        elm_object_part_content_set(info->layout, "tbm,widget", image);
@@ -351,6 +371,7 @@ static void __push_event_queue(struct widget_info *info, int event)
        g_queue_push_tail(info->event_queue, GINT_TO_POINTER(event));
 }
 
+
 static int __restart_terminated_widget(const char *widget_id)
 {
 
@@ -387,7 +408,8 @@ static int __restart_terminated_widget(const char *widget_id)
                        ops.added = __screen_connector_watcher_evas_added_cb;
                        ops.removed = __screen_connector_watcher_evas_removed_cb;
                        ops.updated = __screen_connector_watcher_evas_updated_cb;
-                       screen_connector_watcher_evas_add(&ops, widget_instance_info->widget_id, widget_instance_info);
+
+                       screen_connector_watcher_evas_add(&ops, (char *)__to_appid(widget_instance_info->widget_id), widget_instance_info);
                        widget_instance_info->pid = widget_instance_launch(widget_instance_info->instance_id, widget_instance_info->content_info, w, h);
                        widget_instance_info->restart = false;
                }
@@ -770,7 +792,7 @@ static void resize_cb(void *data, Evas *e, Evas_Object *layout, void *event_info
                ops.added = __screen_connector_watcher_evas_added_cb;
                ops.removed = __screen_connector_watcher_evas_removed_cb;
                ops.updated = __screen_connector_watcher_evas_updated_cb;
-               screen_connector_watcher_evas_add(&ops, info->widget_id, info);
+               screen_connector_watcher_evas_add(&ops, (char *)__to_appid(info->widget_id), info);
 
                info->pid = widget_instance_launch(info->instance_id, info->content_info, w, h);
                if (info->pid < 0) {
@@ -1428,7 +1450,7 @@ EAPI void widget_viewer_evas_activate_faulted_widget(Evas_Object *widget)
                ops.added = __screen_connector_watcher_evas_added_cb;
                ops.removed = __screen_connector_watcher_evas_removed_cb;
                ops.updated = __screen_connector_watcher_evas_updated_cb;
-               screen_connector_watcher_evas_add(&ops, info->widget_id, info);
+               screen_connector_watcher_evas_add(&ops, (char *)__to_appid(info->widget_id), info);
                info->pid = widget_instance_launch(info->instance_id, info->content_info, w, h);
                if (info->pid < 0) {
                        ErrPrint("Failed to launch an widget");