From 8d87dba10ca19b24a724ccdc9e0235d963d71569 Mon Sep 17 00:00:00 2001 From: Sung-jae Park Date: Fri, 24 Jul 2015 22:49:15 +0900 Subject: [PATCH] Sync with the latest tizen 2.4 Change-Id: I4399ff312a2f34c4d7897736537a53b78f132ddf --- packaging/libwidget_viewer.spec | 2 +- widget_viewer/CMakeLists.txt | 7 +- widget_viewer/include/widget_viewer.h | 6 +- widget_viewer/src/client.c | 178 ++++++++++++++++-------- widget_viewer_evas/doc/widget_viewer_evas_doc.h | 4 +- widget_viewer_evas/src/widget_viewer_evas.c | 12 +- 6 files changed, 137 insertions(+), 72 deletions(-) diff --git a/packaging/libwidget_viewer.spec b/packaging/libwidget_viewer.spec index a468791..512de69 100644 --- a/packaging/libwidget_viewer.spec +++ b/packaging/libwidget_viewer.spec @@ -2,7 +2,7 @@ Name: libwidget_viewer Summary: Library for developing the application -Version: 1.1.4 +Version: 1.1.5 Release: 1 Group: Applications/Core Applications License: Flora-1.1 diff --git a/widget_viewer/CMakeLists.txt b/widget_viewer/CMakeLists.txt index c0544ab..1cda0b1 100644 --- a/widget_viewer/CMakeLists.txt +++ b/widget_viewer/CMakeLists.txt @@ -82,9 +82,10 @@ ADD_DEFINITIONS("-D_USE_ECORE_TIME_GET") #ADD_DEFINITIONS("-DFLOG") ADD_DEFINITIONS("-DMASTER_PKGNAME=\"data-provider-master\"") ADD_DEFINITIONS("-DINFO_SOCKET=\"/opt/usr/share/live_magazine/.live.socket\"") -ADD_DEFINITIONS("-DCLIENT_SOCKET=\"/opt/usr/share/live_magazine/.client.socket\"") -ADD_DEFINITIONS("-DSLAVE_SOCKET=\"/opt/usr/share/live_magazine/.slave.socket\"") -ADD_DEFINITIONS("-DSERVICE_SOCKET=\"/opt/usr/share/live_magazine/.service.socket\"") +ADD_DEFINITIONS("-DCLIENT_SOCKET=\"/tmp/.data-provider-master-client.socket\"") +ADD_DEFINITIONS("-DSLAVE_SOCKET=\"/tmp/.data-provider-master-slave.socket\"") +ADD_DEFINITIONS("-DSHARED_SOCKET=\"/tmp/.data-provider-master-fd.socket\"") +ADD_DEFINITIONS("-DSERVICE_SOCKET=\"/tmp/.data-provider-master-service.socket\"") ADD_LIBRARY(${PROJECT_NAME} SHARED ${BUILD_SOURCE}) SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${VERSION_MAJOR}) diff --git a/widget_viewer/include/widget_viewer.h b/widget_viewer/include/widget_viewer.h index 0d682b0..4dce72a 100644 --- a/widget_viewer/include/widget_viewer.h +++ b/widget_viewer/include/widget_viewer.h @@ -280,8 +280,8 @@ typedef struct widget_damage_region { * @since_tizen 2.3.1 */ typedef struct widget_mouse_event_info { - double x; /**< X coordinates of Mouse Event */ - double y; /**< Y coordinates of Mouse Event */ + double x; /**< X coordinates of Mouse Event */ + double y; /**< Y coordinates of Mouse Event */ double ratio_w; double ratio_h; } *widget_mouse_event_info_s; @@ -1638,4 +1638,4 @@ extern int widget_viewer_notify_orientation_of_viewer(int orientation); } #endif -#endif // __WIDGET_VIEWER_H +#endif diff --git a/widget_viewer/src/client.c b/widget_viewer/src/client.c index a45b379..70e7eac 100644 --- a/widget_viewer/src/client.c +++ b/widget_viewer/src/client.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include "debug.h" @@ -57,12 +58,14 @@ int errno; static struct info { int fd; int direct_fd; + int master_direct_fd; guint timer_id; char *client_addr; char *direct_addr; } s_info = { .fd = -1, .direct_fd = -1, + .master_direct_fd = -1, .timer_id = 0, .client_addr = NULL, .direct_addr = NULL, @@ -1929,6 +1932,25 @@ out: return NULL; } +static struct method s_direct_table[] = { + { + .cmd = CMD_STR_WIDGET_UPDATED, /* pkgname, id, lb_w, lb_h, priority, ret */ + .handler = master_widget_updated, + }, + { + .cmd = CMD_STR_GBAR_UPDATED, /* pkgname, id, descfile, pd_w, pd_h, ret */ + .handler = master_gbar_updated, + }, + { + .cmd = CMD_STR_EXTRA_UPDATED, + .handler = master_extra_updated, + }, + { + .cmd = NULL, + .handler = NULL, + }, +}; + static struct method s_table[] = { { /* WIDGET_UPDATED */ .cmd = CMD_STR_WIDGET_UPDATED, /* pkgname, id, widget_w, widget_h, priority, ret */ @@ -2044,6 +2066,29 @@ static struct method s_table[] = { }, }; +static void make_direct_connection(void) +{ + struct packet *packet; + int ret; + + s_info.master_direct_fd = com_core_packet_client_init(SHARED_SOCKET, 0, s_direct_table); + if (s_info.master_direct_fd < 0) { + ErrPrint("Failed to create a connection\n"); + return; + } + + packet = packet_create_noack(CMD_STR_DIRECT_HELLO, "s", client_direct_addr()); + if (!packet) { + ErrPrint("Packet is not valid\n"); + return; + } + + ret = com_core_packet_send_only(s_info.master_direct_fd, packet); + packet_destroy(packet); + + DbgPrint("Direct connection request is sent: %d\n", ret); +} + static void acquire_cb(widget_h handler, const struct packet *result, void *data) { if (!result) { @@ -2057,18 +2102,69 @@ static void acquire_cb(widget_h handler, const struct packet *result, void *data } else { DbgPrint("Acquire returns: %d (%d)\n", ret, extra_buffer_count); conf_set_extra_buffer_count(extra_buffer_count); + /** + * Now the master has client object. + * We can make a direct connection handler from now. + */ + make_direct_connection(); } } return; } +static void prepare_direct_update(void) +{ + char path[MAX_DIRECT_ADDR]; + + if (!conf_direct_update()) { + return; + } + + if (s_info.direct_addr) { + DbgPrint("Direct path is already initiated: %s\n", s_info.direct_addr); + return; + } + + if (!strncmp(s_info.client_addr, COM_CORE_REMOTE_SCHEME, strlen(COM_CORE_REMOTE_SCHEME))) { + ErrPrint("Remote model is not support this\n"); + return; + } + + snprintf(path, sizeof(path) - 1, "%s/.%d.%lf.widget.viewer", WIDGET_CONF_IMAGE_PATH, getpid(), util_timestamp()); + + s_info.direct_addr = strdup(path); + if (!s_info.direct_addr) { + ErrPrint("strdup: %d\n", errno); + return; + } + + s_info.direct_fd = com_core_packet_server_init(client_direct_addr(), s_direct_table); + if (s_info.direct_fd < 0) { + ErrPrint("Failed to prepare server: %s\n", client_direct_addr()); + free(s_info.direct_addr); + s_info.direct_addr = NULL; + return; + } + + DbgPrint("Direct update is prepared: %s - %d\n", client_direct_addr(), client_direct_fd()); +} + static inline int make_connection(void) { struct packet *packet; unsigned int cmd = CMD_ACQUIRE; int ret; + /** + * @note + * Before creating a connection with master, + * Initiate the private channel for getting the updated event from providers + * And this channel should be created after the master is launched. + * Or the master will delete all files in the shared folder. + */ + prepare_direct_update(); + DbgPrint("Let's making connection!\n"); s_info.fd = com_core_packet_client_init(client_addr(), 0, s_table); @@ -2097,7 +2193,9 @@ static inline int make_connection(void) static int connected_cb(int handle, void *data) { - master_rpc_check_and_fire_consumer(); + if (s_info.fd == handle) { + master_rpc_check_and_fire_consumer(); + } return 0; } @@ -2162,57 +2260,10 @@ static int disconnected_cb(int handle, void *data) return 0; } -static struct method s_direct_table[] = { - { - .cmd = CMD_STR_WIDGET_UPDATED, /* pkgname, id, lb_w, lb_h, priority, ret */ - .handler = master_widget_updated, - }, - { - .cmd = CMD_STR_GBAR_UPDATED, /* pkgname, id, descfile, pd_w, pd_h, ret */ - .handler = master_gbar_updated, - }, - { - .cmd = CMD_STR_EXTRA_UPDATED, - .handler = master_extra_updated, - }, - { - .cmd = NULL, - .handler = NULL, - }, -}; - -static void prepare_direct_update(void) -{ - char path[MAX_DIRECT_ADDR]; - - if (!conf_direct_update()) { - return; - } - - if (!strncmp(s_info.client_addr, COM_CORE_REMOTE_SCHEME, strlen(COM_CORE_REMOTE_SCHEME))) { - ErrPrint("Remote model is not support this\n"); - return; - } - - snprintf(path, sizeof(path) - 1, "/tmp/.%d.%lf.widget.viewer", getpid(), util_timestamp()); - - s_info.direct_addr = strdup(path); - if (!s_info.direct_addr) { - ErrPrint("strdup: %d\n", errno); - return; - } - - s_info.direct_fd = com_core_packet_server_init(client_direct_addr(), s_direct_table); - if (s_info.direct_fd < 0) { - ErrPrint("Failed to prepare server: %s\n", client_direct_addr()); - return; - } - - DbgPrint("Direct update is prepared: %s - %d\n", client_direct_addr(), client_direct_fd()); -} - int client_init(int use_thread) { + widget_conf_init(); + com_core_packet_use_thread(use_thread); s_info.client_addr = vconf_get_str(VCONFKEY_MASTER_CLIENT_ADDR); @@ -2231,14 +2282,6 @@ int client_init(int use_thread) com_core_add_event_callback(CONNECTOR_DISCONNECTED, disconnected_cb, NULL); com_core_add_event_callback(CONNECTOR_CONNECTED, connected_cb, NULL); - /** - * @note - * Before creating a connection with master, - * Initiate the private channel for getting the updated event from providers - * How could we propagates the our address to every providers? - */ - prepare_direct_update(); - if (vconf_notify_key_changed(VCONFKEY_MASTER_STARTED, master_started_cb, NULL) < 0) { ErrPrint("Failed to add vconf for service state\n"); } else { @@ -2282,19 +2325,34 @@ int client_fini(void) com_core_del_event_callback(CONNECTOR_DISCONNECTED, disconnected_cb, NULL); com_core_del_event_callback(CONNECTOR_CONNECTED, connected_cb, NULL); - com_core_packet_client_fini(s_info.fd); - s_info.fd = -1; + + if (s_info.fd >= 0) { + com_core_packet_client_fini(s_info.fd); + s_info.fd = -1; + } + + if (s_info.master_direct_fd >= 0) { + com_core_packet_client_fini(s_info.master_direct_fd); + s_info.master_direct_fd = -1; + } if (s_info.direct_fd >= 0) { com_core_packet_server_fini(s_info.direct_fd); s_info.direct_fd = -1; } + if (s_info.timer_id > 0) { + g_source_remove(s_info.timer_id); + s_info.timer_id = 0; + } + free(s_info.client_addr); s_info.client_addr = NULL; free(s_info.direct_addr); s_info.direct_addr = NULL; + + widget_conf_reset(); return WIDGET_ERROR_NONE; } diff --git a/widget_viewer_evas/doc/widget_viewer_evas_doc.h b/widget_viewer_evas/doc/widget_viewer_evas_doc.h index ddee95b..8fbaef5 100644 --- a/widget_viewer_evas/doc/widget_viewer_evas_doc.h +++ b/widget_viewer_evas/doc/widget_viewer_evas_doc.h @@ -15,9 +15,9 @@ */ /** - * @defgroup CAPI_WIDGET_VIEWER_EVAS_MODULE Widget Viewer Evas + * @defgroup CAPI_WIDGET_VIEWER_EVAS_MODULE Widget Viewer * @ingroup CAPI_WIDGET_FRAMEWORK - * @brief API for widget viewer evas (widget screen, home screen, ...) + * @brief API for widget viewer (widget screen, home screen, ...) * @section CAPI_WIDGET_VIEWER_EVAS_MODULE_HEADER Required Header * \#include * @section CAPI_WIDGET_VIEWER_EVAS_MODULE_OVERVIEW Overview diff --git a/widget_viewer_evas/src/widget_viewer_evas.c b/widget_viewer_evas/src/widget_viewer_evas.c index a7ca8f9..9ce0938 100644 --- a/widget_viewer_evas/src/widget_viewer_evas.c +++ b/widget_viewer_evas/src/widget_viewer_evas.c @@ -2849,6 +2849,9 @@ static void __widget_up_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_ if (data->down.geo.x != x || data->down.geo.y != y || data->is.field.scroll_x || data->is.field.scroll_y || data->is.field.cancel_click == CANCEL_USER) { widget_viewer_feed_mouse_event(data->handle, WIDGET_MOUSE_ON_HOLD, &minfo); data->is.field.cancel_click = CANCEL_PROCESSED; + } else if ((up->event_flags & EVAS_EVENT_FLAG_ON_HOLD) == EVAS_EVENT_FLAG_ON_HOLD) { + widget_viewer_feed_mouse_event(data->handle, WIDGET_MOUSE_ON_HOLD, &minfo); + data->is.field.cancel_click = CANCEL_PROCESSED; } /** @@ -2889,11 +2892,17 @@ static void __widget_up_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_ if (data->down.geo.x != x || data->down.geo.y != y || data->is.field.scroll_x || data->is.field.scroll_y || data->is.field.cancel_click == CANCEL_USER || abs(data->x - data->down.x) > CLICK_REGION || abs(data->y - data->down.y) > CLICK_REGION) { widget_viewer_feed_mouse_event(data->handle, WIDGET_MOUSE_ON_HOLD, &minfo); data->is.field.cancel_click = CANCEL_PROCESSED; + } else if ((up->event_flags & EVAS_EVENT_FLAG_ON_HOLD) == EVAS_EVENT_FLAG_ON_HOLD) { + widget_viewer_feed_mouse_event(data->handle, WIDGET_MOUSE_ON_HOLD, &minfo); + data->is.field.cancel_click = CANCEL_PROCESSED; } } else { if (data->down.geo.x != x || data->down.geo.y != y || data->is.field.scroll_x || data->is.field.scroll_y || data->is.field.cancel_click == CANCEL_USER) { widget_viewer_feed_mouse_event(data->handle, WIDGET_MOUSE_ON_HOLD, &minfo); data->is.field.cancel_click = CANCEL_PROCESSED; + } else if ((up->event_flags & EVAS_EVENT_FLAG_ON_HOLD) == EVAS_EVENT_FLAG_ON_HOLD) { + widget_viewer_feed_mouse_event(data->handle, WIDGET_MOUSE_ON_HOLD, &minfo); + data->is.field.cancel_click = CANCEL_PROCESSED; } } @@ -3721,7 +3730,6 @@ static void update_visibility(struct widget_data *data) } } } else { - DbgPrint("Immediate resume\n"); delayed_resume_timer_cb(data); } } else { @@ -3746,10 +3754,8 @@ static void update_visibility(struct widget_data *data) } if (is_visible) { - DbgPrint("Immediate resume\n"); delayed_resume_timer_cb(data); } else { - DbgPrint("Immediate pause\n"); widget_viewer_set_visibility(data->handle, WIDGET_HIDE_WITH_PAUSE); } } -- 2.7.4