Sync with the latest tizen 2.4 81/44681/1
authorSung-jae Park <nicesj.park@samsung.com>
Fri, 24 Jul 2015 13:49:15 +0000 (22:49 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Fri, 24 Jul 2015 13:49:15 +0000 (22:49 +0900)
Change-Id: I4399ff312a2f34c4d7897736537a53b78f132ddf

packaging/libwidget_viewer.spec
widget_viewer/CMakeLists.txt
widget_viewer/include/widget_viewer.h
widget_viewer/src/client.c
widget_viewer_evas/doc/widget_viewer_evas_doc.h
widget_viewer_evas/src/widget_viewer_evas.c

index a468791..512de69 100644 (file)
@@ -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
index c0544ab..1cda0b1 100644 (file)
@@ -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})
index 0d682b0..4dce72a 100644 (file)
@@ -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
index a45b379..70e7eac 100644 (file)
@@ -36,6 +36,7 @@
 #include <widget_service_internal.h>
 #include <widget_cmd_list.h>
 #include <widget_buffer.h>
+#include <widget_conf.h>
 #include <secure_socket.h>
 
 #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;
 }
 
index ddee95b..8fbaef5 100644 (file)
@@ -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 <widget_viewer_evas.h>
  * @section CAPI_WIDGET_VIEWER_EVAS_MODULE_OVERVIEW Overview
index a7ca8f9..9ce0938 100644 (file)
@@ -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);
                }
        }