#include <bundle.h>
#include <aul.h>
+#include <aul_widget.h>
#include <dlog.h>
#include <Elementary.h>
#include <widget_errno.h>
#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 {
void *user_data;
};
+static GList *__class_data_list;
+
static int __class_resize(widget_base_instance_h instance_h, int w, int h,
void *class_data)
{
widget_base_class_on_resize(instance_h, w, h);
data = (struct instance_data *)
widget_base_context_get_user_data(instance_h);
+
+ if (!data) {
+ _E("widget_base_context_get_user_data() returns null");
+
+ return -1;
+ }
+
if (data->win)
evas_object_resize(data->win, w, h);
else
ret = callback_data->callback.create(
(widget_context_h)instance_h,
content, w, h, callback_data->user_data);
+ aul_widget_write_log(LOG_TAG, "[%s:%d] ret : %d",
+ __FUNCTION__, __LINE__, ret);
}
return ret;
}
if (callback_data && callback_data->callback.destroy) {
ret = callback_data->callback.destroy(
(widget_context_h)instance_h,
- reason, content, callback_data->user_data);
+ reason, content, callback_data->user_data);
+ aul_widget_write_log(LOG_TAG, "[%s:%d] ret : %d",
+ __FUNCTION__, __LINE__, ret);
}
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);
}
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) {
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) {
return -1;
}
_D("widget app is created");
+ aul_widget_write_log(LOG_TAG, "[%s:%d]", __FUNCTION__, __LINE__);
return 0;
}
callback->terminate(cb_info->user_data);
widget_base_on_terminate();
_D("widget app is terminated");
-
+ aul_widget_write_log(LOG_TAG, "[%s:%d]", __FUNCTION__, __LINE__);
return 0;
}
elm_exit();
}
+static void __widget_app_trim_memory(void *data)
+{
+ _D("Trim memory");
+ elm_cache_all_flush();
+ widget_base_on_trim_memory();
+}
+
EXPORT_API int widget_app_main(int argc, char **argv,
widget_app_lifecycle_callback_s *callback, void *user_data)
{
ops.finish = __widget_app_finish;
ops.run = __widget_app_run;
ops.exit = __widget_app_exit;
+ ops.trim_memory = __widget_app_trim_memory;
cb_info.callback = callback;
cb_info.user_data = user_data;
r = widget_base_init(ops, argc, argv, &cb_info);
widget_base_fini();
+ if (__class_data_list) {
+ g_list_free_full(__class_data_list, free);
+ __class_data_list = NULL;
+ }
+
return r;
}
Evas_Object **win)
{
Evas_Object *ret_win = NULL;
- Ecore_Wl_Window *wl_win;
+ Ecore_Wl2_Window *wl_win;
struct instance_data *data;
char buffer[256];
int rots[3] = {0};
elm_win_wm_rotation_preferred_rotation_set(ret_win, -1);
elm_win_wm_rotation_available_rotations_set(ret_win, rots, 1);
- wl_win = elm_win_wl_window_get(ret_win);
+ wl_win = ecore_evas_wayland2_window_get(ecore_evas_ecore_evas_get(evas_object_evas_get(ret_win)));
if (wl_win == NULL) {
_E("failed to get wayland window"); /* LCOV_EXCL_LINE */
goto fault;
}
- ecore_wl_window_class_name_set(wl_win, id);
+ ecore_wl2_window_class_set(wl_win, id);
elm_win_aux_hint_add(ret_win, "wm.policy.win.user.geometry", "1");
widget_base_context_window_bind((widget_base_instance_h)context, id, wl_win);
evas_object_data_set(ret_win, "___PLUGID", strdup(buffer));
evas_object_event_callback_add(ret_win, EVAS_CALLBACK_DEL, __win_del_cb, NULL);
- win_id = ecore_wl_window_id_get(wl_win);
+ win_id = ecore_wl2_window_id_get(wl_win);
_D("window created: %d", win_id);
data = (struct instance_data *)widget_base_context_get_user_data(
return NULL;
}
+ __class_data_list = g_list_append(__class_data_list, callback_data);
set_last_result(WIDGET_ERROR_NONE);
return wc;