From: hyunho Date: Wed, 30 May 2018 01:37:41 +0000 (+0900) Subject: Control iconify state according to resume/pause X-Git-Tag: submit/tizen/20180614.045222~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ba6b1d532574ddac7a4881d7a8cb1515e1ba23ae;p=platform%2Fcore%2Fappfw%2Fappcore-widget.git Control iconify state according to resume/pause Change-Id: Idd952efc564fe6c8f92f646aaf076fe947ea2791 Signed-off-by: hyunho --- diff --git a/src/efl_base/widget_app.c b/src/efl_base/widget_app.c index 9386044..ba8be44 100644 --- a/src/efl_base/widget_app.c +++ b/src/efl_base/widget_app.c @@ -37,9 +37,12 @@ #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) {