Use screen_connector API for changing visibility 75/132275/1
authorJunghoon Park <jh9216.park@samsung.com>
Wed, 24 May 2017 05:14:57 +0000 (14:14 +0900)
committerHyunho Kang <hhstark.kang@samsung.com>
Fri, 2 Jun 2017 05:23:08 +0000 (14:23 +0900)
- Instead of widget instance APIs,screen connector APIs should be used
  to notify the display server
- The events for the visibility will be sent to widget apps via the display server

Change-Id: Icb87e2217ece723d5e0dbdc2ab2e42d6a0a5c453
Signed-off-by: Junghoon Park <jh9216.park@samsung.com>
widget_viewer_evas/src/widget_viewer_evas.c

index 83cce82..376b398 100644 (file)
@@ -220,23 +220,71 @@ static struct pending_item *__create_pending_item(const char *event,
        return item;
 }
 
-static void __process_pending_item(struct pending_item *item, const char *instance_id)
+static int __instance_pause(struct widget_info *info)
+{
+       Evas_Object *tbm_obj;
+
+       if (!info) {
+               LOGE("instance id is invalid");
+               return -1;
+       }
+
+       if (!info->layout) {
+               LOGE("invalid layout object");
+               return -1;
+       }
+
+       tbm_obj = elm_object_part_content_get(info->layout, "tbm,widget");
+       if (!tbm_obj) {
+               LOGE("widget object is invalid");
+               return -1;
+       }
+
+       return screen_connector_toolkit_evas_send_visibility(tbm_obj,
+                       VISIBILITY_TYPE_FULLY_OBSCURED);
+}
+
+static int __instance_resume(struct widget_info *info)
+{
+       Evas_Object *tbm_obj;
+
+       if (!info) {
+               LOGE("instance id is invalid");
+               return -1;
+       }
+
+       if (!info->layout) {
+               LOGE("invalid layout object");
+               return -1;
+       }
+
+       tbm_obj = elm_object_part_content_get(info->layout, "tbm,widget");
+       if (!tbm_obj) {
+               LOGE("widget object is invalid");
+               return -1;
+       }
+
+       return screen_connector_toolkit_evas_send_visibility(tbm_obj,
+                       VISIBILITY_TYPE_UNOBSCURED);
+}
+
+static void __process_pending_item(struct pending_item *item, struct widget_info *info)
 {
        int ret;
 
        if (!strcmp(item->event, "resize")) {
-               ret = widget_instance_resize(instance_id, item->w, item->h);
+               ret = widget_instance_resize(info->instance_id, item->w, item->h);
        } else if (!strcmp(item->event, "resume")) {
-               ret = widget_instance_resume(instance_id);
+               ret = __instance_resume(info);
        } else if (!strcmp(item->event, "pause")) {
-               ret = widget_instance_pause(instance_id);
+               ret = __instance_pause(info);
        } else {
                LOGW("Unknown event(%s)", item->event);
                return;
        }
 
        LOGD("instance_id(%s), event(%s), result(%d)",
-                       instance_id, item->event, ret);
+                       info->instance_id, item->event, ret);
 }
 
 static void __flush_pending_queue(struct widget_info *info)
@@ -250,7 +298,7 @@ static void __flush_pending_queue(struct widget_info *info)
 
        while (!g_queue_is_empty(info->pending_queue)) {
                item = g_queue_pop_head(info->pending_queue);
-               __process_pending_item(item, info->instance_id);
+               __process_pending_item(item, info);
                __destroy_pending_item(item);
        }
 
@@ -747,6 +795,8 @@ EAPI int widget_viewer_evas_notify_resumed_status_of_viewer(void)
        struct widget_info *info;
        struct pending_item *item;
        int ret;
+       Evas_Object *tbm_obj;
+       bool is_visible;
 
        if (!is_widget_feature_enabled())
                return WIDGET_ERROR_NOT_SUPPORTED;
@@ -761,7 +811,25 @@ EAPI int widget_viewer_evas_notify_resumed_status_of_viewer(void)
                info = (struct widget_info *)value;
                if (info) {
                        if (info->is_created) {
-                               ret = widget_instance_resume(info->instance_id);
+
+                               if (!info->layout) {
+                                       LOGE("widget(%s) layout is invalid", info->instance_id);
+                                       continue;
+                               }
+
+                               tbm_obj = elm_object_part_content_get(info->layout, "tbm,widget");
+                               if (!tbm_obj) {
+                                       LOGE("widget(%s) object is invalid", info->instance_id);
+                                       continue;
+                               }
+
+                               ret = screen_connector_toolkit_evas_is_visible(tbm_obj, &is_visible);
+                               if (ret < 0 || !is_visible) {
+                                       LOGE("widget(%s) object is invisible", info->instance_id);
+                                       continue;
+                               }
+
+                               ret = __instance_resume(info);
                                if (ret < 0) {
                                        ErrPrint("Fail to resume the widget(%s):(%d)",
                                                        info->instance_id, ret);
@@ -797,7 +865,7 @@ EAPI int widget_viewer_evas_notify_paused_status_of_viewer(void)
                info = (struct widget_info *)value;
                if (info) {
                        if (info->is_created) {
-                               ret = widget_instance_pause(info->instance_id);
+                               ret = __instance_pause(info);
                                if (ret < 0) {
                                        ErrPrint("Fail to pause the widget(%s):(%d)",
                                                        info->instance_id, ret);
@@ -1184,7 +1252,7 @@ EAPI int widget_viewer_evas_pause_widget(Evas_Object *widget)
        }
 
        if (info->is_created) {
-               ret = widget_instance_pause(info->instance_id);
+               ret = __instance_pause(info);
                if (ret < 0) {
                        ErrPrint("Fail to pause the widget(%p):(%d)", widget, ret);
                        return ret;
@@ -1228,7 +1296,7 @@ EAPI int widget_viewer_evas_resume_widget(Evas_Object *widget)
        }
 
        if (info->is_created) {
-               ret = widget_instance_resume(info->instance_id);
+               ret = __instance_resume(info);
                if (ret < 0) {
                        ErrPrint("Fail to resume the widget(%p):(%d)", widget, ret);
                        return ret;