Control iconify state according to resume/pause
authorhyunho <hhstark.kang@samsung.com>
Wed, 30 May 2018 01:37:41 +0000 (10:37 +0900)
committerhyunho <hhstark.kang@samsung.com>
Thu, 14 Jun 2018 04:35:57 +0000 (13:35 +0900)
Change-Id: Idd952efc564fe6c8f92f646aaf076fe947ea2791
Signed-off-by: hyunho <hhstark.kang@samsung.com>
src/efl_base/widget_app.c

index 9386044..ba8be44 100644 (file)
 #endif
 
 #define LOG_TAG "CAPI_WIDGET_APPLICATION"
+#define ICONIFY_TIMEOUT 500
 
 struct instance_data {
        Evas_Object *win;
+       guint iconify_timer;
+       bool is_iconified;
 };
 
 struct app_cb_info {
@@ -141,6 +144,8 @@ static int __class_destroy(widget_base_instance_h instance_h,
        data = (struct instance_data *)widget_base_context_get_user_data(instance_h);
        if (data != NULL) {
                widget_base_context_set_user_data(instance_h, NULL);
+               if (data->iconify_timer > 0)
+                       g_source_remove(data->iconify_timer);
                free(data);
        }
 
@@ -149,11 +154,36 @@ static int __class_destroy(widget_base_instance_h instance_h,
        return ret;
 }
 
+static gboolean __iconify_timeout_cb(gpointer user_data)
+{
+       struct instance_data *data = user_data;
+       Ecore_Wl2_Window *win = ecore_evas_wayland2_window_get(
+                       ecore_evas_ecore_evas_get(evas_object_evas_get(data->win)));
+
+       if (win) {
+               ecore_wl2_window_iconified_set(win, EINA_TRUE);
+               data->is_iconified = true;
+               _D("set iconify true");
+       }
+
+       data->iconify_timer = 0;
+
+       return G_SOURCE_REMOVE;
+}
+
 static int __class_pause(widget_base_instance_h instance_h, void *class_data)
 {
        int ret = 0;
        struct app_class_cb_info *callback_data =
                        (struct app_class_cb_info *)class_data;
+       struct instance_data *data = (struct instance_data *)
+                       widget_base_context_get_user_data(instance_h);
+
+       if (data->iconify_timer > 0)
+               g_source_remove(data->iconify_timer);
+
+       data->iconify_timer = g_timeout_add(ICONIFY_TIMEOUT,
+                       __iconify_timeout_cb, data);
 
        widget_base_class_on_pause(instance_h);
        if (callback_data && callback_data->callback.pause) {
@@ -170,6 +200,24 @@ static int __class_resume(widget_base_instance_h instance_h, void *class_data)
        int ret = 0;
        struct app_class_cb_info *callback_data =
                        (struct app_class_cb_info *)class_data;
+       Ecore_Wl2_Window *win;
+       struct instance_data *data = (struct instance_data *)
+                       widget_base_context_get_user_data(instance_h);
+
+       if (data->iconify_timer > 0) {
+               g_source_remove(data->iconify_timer);
+               data->iconify_timer = 0;
+       }
+
+       if (data->is_iconified) {
+               win = ecore_evas_wayland2_window_get(
+                       ecore_evas_ecore_evas_get(evas_object_evas_get(data->win)));
+               if (win) {
+                       ecore_wl2_window_iconified_set(win, EINA_FALSE);
+                       data->is_iconified = false;
+                       _D("set iconify false");
+               }
+       }
 
        widget_base_class_on_resume(instance_h);
        if (callback_data && callback_data->callback.resume) {