Set manual render when viewer iconify state change 61/141961/4 accepted/tizen/3.0/common/20170808.133310 accepted/tizen/3.0/ivi/20170808.070429 accepted/tizen/3.0/mobile/20170808.070356 accepted/tizen/3.0/tv/20170808.070407 accepted/tizen/3.0/wearable/20170808.070417 submit/tizen_3.0/20170804.031922
authorHyunho Kang <hhstark.kang@samsung.com>
Wed, 2 Aug 2017 06:15:56 +0000 (15:15 +0900)
committerHyunho Kang <hhstark.kang@samsung.com>
Thu, 3 Aug 2017 07:37:53 +0000 (16:37 +0900)
Change-Id: Ib73fae789848a01c90c90ea47c9a9ff5e6b27295
Signed-off-by: Hyunho Kang <hhstark.kang@samsung.com>
watch-control/src/control.c

index 8751ab1f732663da409a6c9a85d83e0659edde6e..be9f8d26f7c0bcaeeadbd0b734e52deedc791df0 100644 (file)
@@ -31,6 +31,7 @@
 #include <pkgmgr-info.h>
 #include <aul_app_com.h>
 #include <aul_screen_connector.h>
+#include <Ecore_Wayland.h>
 
 #define API __attribute__((visibility("default")))
 
@@ -65,6 +66,9 @@ static char *viewer_appid;
 static int __is_dead_signal_connected;
 static aul_app_com_connection_h __conn_dead_signal;
 static unsigned int __watch_rid;
+static bool __manual_render;
+static bool __iconified = false;
+static bool __is_binded = false;
 
 static GList *__dead_cbs;
 struct dead_cb_s {
@@ -73,6 +77,7 @@ struct dead_cb_s {
 };
 
 GQueue *__pending_queue;
+static int __change_viewer_visibility(bool visible);
 
 static void __process_pending_status(int status, unsigned int surf)
 {
@@ -131,6 +136,29 @@ static void __win_resized(void *data, Evas *e, Evas_Object *obj, void *event_inf
        __default_height = h;
 }
 
+static Eina_Bool __iconify_state_changed(void *data, int type, void *event)
+{
+       Evas *evas = evas_object_evas_get(__win);
+       Ecore_Evas *ee = ecore_evas_ecore_evas_get(evas);
+       Ecore_Wl_Event_Window_Iconify_State_Change *ev =
+                       (Ecore_Wl_Event_Window_Iconify_State_Change *)event;
+
+       LOGI("Iconify state changed, %d, %d", ev->iconified, EINA_TRUE);
+       if (ev->iconified == EINA_FALSE && __iconified && !__is_binded) {
+               __change_viewer_visibility(true);
+               ecore_evas_manual_render_set(ee, EINA_TRUE);
+               screen_connector_toolkit_evas_send_visibility(__win,
+                               VISIBILITY_TYPE_UNOBSCURED);
+               __manual_render = true;
+               __iconified = false;
+               LOGI("Manual render true");
+       } else if (ev->iconified == EINA_TRUE){
+               __iconified = true;
+       }
+
+       return ECORE_CALLBACK_PASS_ON;
+}
+
 static int __watch_viewer_init(Evas_Object *win)
 {
        if (__watch_viewer_initialized)
@@ -147,7 +175,9 @@ static int __watch_viewer_init(Evas_Object *win)
 
        __win_resized(NULL, NULL, win, NULL); /* init */
        evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, __win_resized, NULL);
-
+       ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_ICONIFY_STATE_CHANGE,
+                       __iconify_state_changed, NULL);
+       __manual_render = false;
        __watch_viewer_initialized = 1;
 
        return 0;
@@ -212,10 +242,24 @@ static void __screen_connector_toolkit_evas_removed_cb(const char *appid, const
                evas_object_data_set(__win, "tbm,watch", NULL);
 }
 
-static void __screen_connector_toolkit_evas_updated_cb(const char *appid, const char *instance_id, int pid,
+static void __screen_connector_toolkit_evas_updated_cb(
+               const char *appid, const char *instance_id, int pid,
        Evas_Object *image, void *data)
 {
-       evas_object_smart_callback_call(__win, WATCH_SMART_SIGNAL_UPDATED, image);
+       Evas *evas;
+       Ecore_Evas *ee;
+
+       evas_object_smart_callback_call(
+                       __win, WATCH_SMART_SIGNAL_UPDATED, image);
+       if (__manual_render) {
+               __manual_render = false;
+               evas = evas_object_evas_get(__win);
+               ee = ecore_evas_ecore_evas_get(evas);
+               ecore_evas_manual_render_set(ee, EINA_FALSE);
+               LOGI("set manual false");
+       } else {
+               LOGI("updated");
+       }
 }
 
 API int watch_manager_set_resource_id(int resource_id)
@@ -581,6 +625,9 @@ API int watch_manager_window_bind(Evas_Object *win)
        if (!__toolkit || !win)
                return -1;
 
+       LOGI("Bind");
+       __is_binded = true;
+
        return screen_connector_toolkit_evas_bind(__toolkit, win);
 }
 
@@ -589,6 +636,9 @@ API int watch_manager_window_unbind(void)
        if (!__toolkit)
                return -1;
 
+       LOGI("Unbind");
+       __is_binded = false;
+
        return screen_connector_toolkit_evas_unbind(__toolkit);
 }