#define ERR_BUFFER_SIZE 1024
#define WIDGET_PRIVILEGE "http://tizen.org/privilege/widget.viewer"
-#define WIDGET_RESTART_TIMEOUT 5000
+#define WIDGET_LAUNCH_TIMEOUT 5000
/*!
* \note
Evas_Object *win;
GHashTable *widget_table;
GHashTable *instance_cnt_table;
- GList *restart_list;
- char *restarting_instance_id;
- int restart_timer;
+ char *launching_instance_id;
+ GList *launch_list;
+ int launch_timer;
} s_info = {
.w = 0,
.h = 0,
.win = NULL,
.widget_table = NULL,
.instance_cnt_table = NULL,
- .restart_list = NULL,
- .restarting_instance_id = NULL,
- .restart_timer = 0
+ .launching_instance_id = NULL,
+ .launch_list = NULL,
+ .launch_timer = 0
};
struct pending_item {
static int __default_delayed_resuming_time = 100;
static bool __is_delayed_resuming_mode;
static void __destroy_widget_info(gpointer data);
-static gboolean __restart_timeout_cb(gpointer user_data);
-static int __find_restart_info(gconstpointer a, gconstpointer b);
-static void __remove_restart_info(const char *instance_id);
-static void __restart_instance(void);
-static void __remove_restart_timer(void);
+static gboolean __launch_timeout_cb(gpointer user_data);
+static int __find_launch_info(gconstpointer a, gconstpointer b);
+static void __remove_launch_info(const char *instance_id);
+static void __launch_instance(void);
+static void __remove_launch_timer(void);
static void __destroy_pending_item(gpointer data)
{
LOGD("instance_id(%s), event(%s)", info->instance_id, item->event);
}
-static void __add_restart_list(const char *instance_id)
+static void __add_launch_list(const char *instance_id)
{
GList *list;
- char *restart_instance_id;
+ char *dup_instance_id;
if (!instance_id) {
LOGE("Invalid parameter");/* LCOV_EXCL_LINE */
return;/* LCOV_EXCL_LINE */
}
- list = g_list_find_custom(s_info.restart_list, instance_id, __find_restart_info);
+ list = g_list_find_custom(s_info.launch_list, instance_id, __find_launch_info);
if (list != NULL) {
- LOGW("already in restart list(%s)", instance_id);
+ LOGW("already in launch list(%s)", instance_id);
return;
}
- restart_instance_id = strdup(instance_id);
- if (restart_instance_id == NULL) {
+ dup_instance_id = strdup(instance_id);
+ if (dup_instance_id == NULL) {
LOGE("Out Of Memory");
return;
}
- s_info.restart_list = g_list_append(s_info.restart_list, restart_instance_id);
- LOGW("add restart(%s)", instance_id);
+ s_info.launch_list = g_list_append(s_info.launch_list, dup_instance_id);
+ LOGW("add launch(%s)", dup_instance_id);
}
static inline bool __is_widget_feature_enabled(void)
LOGE("Wrong added info, appid(%s) info instance_id(%s), instance_id(%s)",/* LCOV_EXCL_LINE */
appid, info->instance_id, instance_id);/* LCOV_EXCL_LINE */
- if (s_info.restarting_instance_id && info->instance_id &&
- strcmp(s_info.restarting_instance_id, info->instance_id) == 0) {
- __remove_restart_timer();
- __restart_instance();
+ if (s_info.launching_instance_id && info->instance_id &&
+ strcmp(s_info.launching_instance_id, info->instance_id) == 0) {
+ __remove_launch_timer();
+ __launch_instance();
}
-
return;/* LCOV_EXCL_LINE */
}
elm_object_signal_emit(info->layout, "disable", "overlay,text");
info->state = WIDGET_STATE_ATTACHED;
-
- if (s_info.restarting_instance_id &&
- strcmp(s_info.restarting_instance_id, instance_id) == 0) {
- __remove_restart_info(instance_id);
- __remove_restart_timer();
- __restart_instance();
+ if (s_info.launching_instance_id &&
+ strcmp(s_info.launching_instance_id, instance_id) == 0) {
+ __remove_launch_info(instance_id);
+ __remove_launch_timer();
+ __launch_instance();
}
__flush_event_queue(info);
/**
g_queue_push_tail(info->event_queue, GINT_TO_POINTER(event));
}
-static int __find_restart_info(gconstpointer a, gconstpointer b)
+static int __find_launch_info(gconstpointer a, gconstpointer b)
{
if (a == NULL || b == NULL)
return -1;
return -1;
}
-static void __remove_restart_info(const char *instance_id)
+static void __remove_launch_info(const char *instance_id)
{
GList *list;
- char *restart_instance_id;
+ char *launch_instance_id;
- list = g_list_find_custom(s_info.restart_list, instance_id, __find_restart_info);
+ list = g_list_find_custom(s_info.launch_list, instance_id, __find_launch_info);
if (list == NULL)
return;
- restart_instance_id = list->data;
- s_info.restart_list = g_list_remove(s_info.restart_list, restart_instance_id);
- free(restart_instance_id);
+ launch_instance_id = list->data;
+ s_info.launch_list = g_list_remove(s_info.launch_list, launch_instance_id);
+ free(launch_instance_id);
}
-static void __remove_restart_timer()
+static void __remove_launch_timer()
{
- if (s_info.restart_timer <= 0)
+ if (s_info.launch_timer <= 0)
return;
- g_source_remove(s_info.restart_timer);
- s_info.restart_timer = 0;
+ g_source_remove(s_info.launch_timer);
+ s_info.launch_timer = 0;
}
-static void __restart_instance()
+static void __launch_instance()
{
struct widget_info *info;
- char *restart_instance_id;
+ char *instance_id;
int w, h;
int ret;
screen_connector_toolkit_evas_ops ops;
- if (s_info.restart_list == NULL) {
- s_info.restarting_instance_id = NULL;
- s_info.restart_timer = 0;
+ if (s_info.launch_list == NULL) {
+ s_info.launch_timer = 0;
+ s_info.launching_instance_id = NULL;
LOGW("null restart list");
return;
}
- restart_instance_id = s_info.restart_list->data;
- info = g_hash_table_lookup(s_info.widget_table, restart_instance_id);
+ instance_id = s_info.launch_list->data;
+ info = g_hash_table_lookup(s_info.widget_table, instance_id);
evas_object_geometry_get(info->layout, NULL, NULL, &w, &h);
LOGD("Widget launch %s, %d, %d", info->instance_id, w, h);
SCREEN_CONNECTOR_SCREEN_TYPE_WIDGET,
info);
- ret = widget_instance_terminate(info->instance_id);
- if (ret != 0)
- LOGW("widget_instance_terminate failed: %d", ret);
+ if (info->restart) {
+ ret = widget_instance_terminate(info->instance_id);
+ if (ret != 0)
+ LOGW("widget_instance_terminate failed: %d", ret);
+ }
info->pid = widget_instance_launch(info->instance_id, info->content_info, w, h);
info->restart = false;
- s_info.restarting_instance_id = restart_instance_id;
+ if (info->pid < 0) {
+ /* LCOV_EXCL_START */
+ struct widget_evas_event_info event_info;
+ LOGE("Failed to launch an widget");
+ event_info.error = info->pid;
+ event_info.widget_app_id = info->widget_id;
+ event_info.event = WIDGET_EVENT_CREATED;
- s_info.restart_timer = g_timeout_add(WIDGET_RESTART_TIMEOUT,
- __restart_timeout_cb, restart_instance_id);
+ __smart_callback_call(info->layout, WIDGET_SMART_SIGNAL_WIDGET_CREATE_ABORTED, &event_info);
+ __display_overlay_text(info);
+ __remove_launch_info(info->instance_id);
+ __launch_instance();
+ /* LCOV_EXCL_STOP */
+ } else {
+ s_info.launching_instance_id = info->instance_id;
+ s_info.launch_timer = g_timeout_add(WIDGET_LAUNCH_TIMEOUT,
+ __launch_timeout_cb, info->instance_id);
+ }
}
/* LCOV_EXCL_START */
if (widget_instance_info->restart &&
widget_instance_info->pid == target_pid &&
(strcmp(widget_instance_info->widget_id, widget_id) == 0)) {
- __add_restart_list(widget_instance_info->instance_id);
+ __add_launch_list(widget_instance_info->instance_id);
}
}
- if (s_info.restart_timer == 0)
- __restart_instance();
+ if (s_info.launch_timer == 0)
+ __launch_instance();
return 0;
}
/* LCOV_EXCL_STOP */
-static gboolean __restart_timeout_cb(gpointer user_data)
+static gboolean __launch_timeout_cb(gpointer user_data)
{
- char *restart_instance_id = (char *)user_data;
+ char *instance_id = (char *)user_data;
- LOGW("Timeout called !! %s", restart_instance_id);
- __remove_restart_info(restart_instance_id);
- __restart_instance();
+ LOGW("Timeout called !! %s", instance_id);
+ __remove_launch_info(instance_id);
+ __launch_instance();
return G_SOURCE_REMOVE;
}
g_hash_table_remove(s_info.instance_cnt_table, widget_id);
}
}
- __remove_restart_info(instance_id);
+ __remove_launch_info(instance_id);
free(widget_id);
free(instance_id);
{
struct widget_info *info = data;
int x, y, w, h;
- screen_connector_toolkit_evas_ops ops;
struct pending_item *item;
evas_object_geometry_get(layout, &x, &y, &w, &h);
if (!info->disable_loading)
elm_object_part_text_set(layout, "text", T_("IDS_ST_POP_LOADING_ING"));
- ops.added_cb = __screen_connector_toolkit_evas_added_cb;
- ops.removed_cb = __screen_connector_toolkit_evas_removed_cb;
- ops.updated_cb = __screen_connector_toolkit_evas_updated_cb;
-
- if (info->toolkit_h) {
- screen_connector_toolkit_evas_remove(info->toolkit_h);
- info->toolkit_h = NULL;
- }
-
- info->toolkit_h = screen_connector_toolkit_evas_add(&ops, info->instance_id, SCREEN_CONNECTOR_SCREEN_TYPE_WIDGET, info);
-
- LOGW("launch a widget instance: %s", info->instance_id);
- info->pid = widget_instance_launch(info->instance_id, info->content_info, w, h);
- if (info->pid < 0) {
- /* LCOV_EXCL_START */
- struct widget_evas_event_info event_info;
- LOGE("Failed to launch an widget");
- event_info.error = info->pid;
- event_info.widget_app_id = info->widget_id;
- event_info.event = WIDGET_EVENT_CREATED;
-
- __smart_callback_call(info->layout, WIDGET_SMART_SIGNAL_WIDGET_CREATE_ABORTED, &event_info);
- __display_overlay_text(info);
-
- return;
- /* LCOV_EXCL_STOP */
- }
+ __add_launch_list(info->instance_id);
+ if (s_info.launch_timer == 0)
+ __launch_instance();
} else {
/**
* @note
API void widget_viewer_evas_activate_faulted_widget(Evas_Object *widget)
{
struct widget_info *info;
- screen_connector_toolkit_evas_ops ops;
+ int w;
+ int h;
if (!__is_widget_feature_enabled()) {
set_last_result(WIDGET_ERROR_NOT_SUPPORTED);/* LCOV_EXCL_LINE */
aul_widget_write_log(LOG_TAG, "[%s:%d] %s pid : %d",
__FUNCTION__, __LINE__, info->instance_id, info->pid);
if (info->pid < 0) {
-
- struct widget_evas_event_info event_info;
- int w;
- int h;
-
evas_object_geometry_get(info->layout, NULL, NULL, &w, &h);
-
if (!info->disable_preview) {
__create_preview_image(info->layout, info->widget_id);
elm_object_signal_emit(info->layout, "enable", "preview");
elm_object_part_text_set(info->layout, "text", T_("IDS_ST_POP_LOADING_ING"));
elm_object_signal_emit(info->layout, "enable", "text");
}
-
- ops.added_cb = __screen_connector_toolkit_evas_added_cb;
- ops.removed_cb = __screen_connector_toolkit_evas_removed_cb;
- ops.updated_cb = __screen_connector_toolkit_evas_updated_cb;
-
- if (info->toolkit_h) {
- screen_connector_toolkit_evas_remove(info->toolkit_h);
- info->toolkit_h = NULL;
- }
-
- info->toolkit_h = screen_connector_toolkit_evas_add(&ops, info->instance_id, SCREEN_CONNECTOR_SCREEN_TYPE_WIDGET, info);
- info->is_faulted = false;
- info->pid = widget_instance_launch(info->instance_id, info->content_info, w, h);
- if (info->pid < 0) {
- LOGE("Failed to launch an widget");
- event_info.error = info->pid;
- event_info.widget_app_id = info->widget_id;
- event_info.event = WIDGET_EVENT_CREATED;
-
- __smart_callback_call(info->layout, WIDGET_SMART_SIGNAL_WIDGET_CREATE_ABORTED, &event_info);
- __display_overlay_text(info);
-
- return;
- }
+ __add_launch_list(info->instance_id);
+ __launch_instance();
} else {
/**
* @note