Fix prevent issues & accessibility handler updated
authorSung-jae Park <nicesj.park@samsung.com>
Fri, 12 Apr 2013 04:17:54 +0000 (13:17 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Fri, 12 Apr 2013 04:18:52 +0000 (13:18 +0900)
Fix the issues which are reported by prevent.

Clear the callback when processing the result callback.
User can call again in its result callback.
Update version

Add an event for accessibility unhighlight.
Update version

Change-Id: I62e14c0aa42e6d17cc127c6030176519bb411750

include/livebox.h
packaging/liblivebox-viewer.spec
src/client.c
src/livebox.c

index f262a5e..c569180 100644 (file)
@@ -86,6 +86,7 @@ enum access_event_type {
        ACCESS_EVENT_ACTIVATE           = 0x00000800, /*!< LB accessibility activate */
        ACCESS_EVENT_VALUE_CHANGE       = 0x00001000, /*!< LB accessibility up */
        ACCESS_EVENT_SCROLL             = 0x00002000, /*!< LB accessibility down */
+       ACCESS_EVENT_UNHIGHLIGHT        = 0x00004000, /*!< LB accessibility unhighlight */
 
        LB_ACCESS_HIGHLIGHT             = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_HIGHLIGHT,
        LB_ACCESS_HIGHLIGHT_NEXT        = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_HIGHLIGHT_NEXT,
@@ -93,6 +94,7 @@ enum access_event_type {
        LB_ACCESS_ACTIVATE              = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_ACTIVATE,
        LB_ACCESS_VALUE_CHANGE          = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_VALUE_CHANGE,
        LB_ACCESS_SCROLL                = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_SCROLL,
+       LB_ACCESS_UNHIGHLIGHT           = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_UNHIGHLIGHT,
 
        PD_ACCESS_HIGHLIGHT             = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_HIGHLIGHT,
        PD_ACCESS_HIGHLIGHT_NEXT        = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_HIGHLIGHT_NEXT,
@@ -100,6 +102,7 @@ enum access_event_type {
        PD_ACCESS_ACTIVATE              = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_ACTIVATE,
        PD_ACCESS_VALUE_CHANGE          = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_VALUE_CHANGE,
        PD_ACCESS_SCROLL                = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_SCROLL,
+       PD_ACCESS_UNHIGHLIGHT           = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_UNHIGHLIGHT,
 };
 
 /* Exported to user app */
index 1b3ea3c..86cabc5 100644 (file)
@@ -1,6 +1,6 @@
 Name: liblivebox-viewer
 Summary: Library for developing the application.
-Version: 0.12.0
+Version: 0.12.2
 Release: 1
 Group: HomeTF/Livebox
 License: Flora License
index b9da06a..54f0650 100644 (file)
@@ -101,9 +101,10 @@ static struct packet *master_pinup(pid_t pid, int handle, const struct packet *p
        struct livebox *handler;
        char *new_content;
        int ret;
+       int status;
        int pinup;
 
-       ret = packet_get(packet, "iisss", &ret, &pinup, &pkgname, &id, &content);
+       ret = packet_get(packet, "iisss", &status, &pinup, &pkgname, &id, &content);
        if (ret != 5) {
                ErrPrint("Invalid argument\n");
                goto out;
@@ -115,7 +116,7 @@ static struct packet *master_pinup(pid_t pid, int handle, const struct packet *p
                goto out;
        }
 
-       if (ret == 0) {
+       if (status == 0) {
                new_content = strdup(content);
                if (new_content) {
                        free(handler->content);
@@ -123,16 +124,23 @@ static struct packet *master_pinup(pid_t pid, int handle, const struct packet *p
                        handler->is_pinned_up = pinup;
                } else {
                        ErrPrint("Heap: %s\n", strerror(errno));
-                       ret = LB_STATUS_ERROR_MEMORY;
+                       status = LB_STATUS_ERROR_MEMORY;
                }
        }
 
        if (handler->pinup_cb) {
-               handler->pinup_cb(handler, ret, handler->pinup_cbdata);
+               ret_cb_t cb;
+               void *cbdata;
+
+               /* Make sure that user can call pinup API in its result callback */
+               cb = handler->pinup_cb;
+               cbdata = handler->pinup_cbdata;
 
-               handler->pinup_cb = NULL; /*!< Reset pinup cb */
+               handler->pinup_cb = NULL;
                handler->pinup_cbdata = NULL;
-       } else if (ret == 0) {
+
+               cb(handler, status, cbdata);
+       } else if (status == 0) {
                lb_invoke_event_handler(handler, LB_EVENT_PINUP_CHANGED);
        }
 
@@ -175,6 +183,8 @@ static struct packet *master_deleted(pid_t pid, int handle, const struct packet
        }
 
        if (handler->created_cb) {
+               ret_cb_t cb;
+               void *cbdata;
                /*!
                 * \note
                 *
@@ -196,16 +206,26 @@ static struct packet *master_deleted(pid_t pid, int handle, const struct packet
                }
 
                DbgPrint("Call the created cb with LB_STATUS_ERROR_CANCEL\n");
-               handler->created_cb(handler, LB_STATUS_ERROR_CANCEL, handler->created_cbdata);
+               cb = handler->created_cb;
+               cbdata = handler->created_cbdata;
+
                handler->created_cb = NULL;
                handler->created_cbdata = NULL;
+
+               cb(handler, LB_STATUS_ERROR_CANCEL, cbdata);
        } else if (handler->id) {
                if (handler->deleted_cb) {
-                       DbgPrint("Call the deleted cb\n");
-                       handler->deleted_cb(handler, LB_STATUS_SUCCESS, handler->deleted_cbdata);
+                       ret_cb_t cb;
+                       void *cbdata;
+
+                       cb = handler->deleted_cb;
+                       cbdata = handler->deleted_cbdata;
 
                        handler->deleted_cb = NULL;
                        handler->deleted_cbdata = NULL;
+
+                       DbgPrint("Call the deleted cb\n");
+                       cb(handler, LB_STATUS_SUCCESS, cbdata);
                } else {
                        DbgPrint("Call the lb,deleted\n");
                        lb_invoke_event_handler(handler, LB_EVENT_DELETED);
@@ -379,9 +399,16 @@ static struct packet *master_access_status(pid_t pid, int handle, const struct p
        DbgPrint("Access status: %d\n", status);
 
        if (handler->access_event_cb) {
-               handler->access_event_cb(handler, status, handler->access_event_cbdata);
+               ret_cb_t cb;
+               void *cbdata;
+
+               cb = handler->access_event_cb;
+               cbdata = handler->access_event_cbdata;
+
                handler->access_event_cb = NULL;
                handler->access_event_cbdata = NULL;
+
+               cb(handler, status, cbdata);
        } else {
                ErrPrint("Invalid event[%s]\n", id);
        }
@@ -532,11 +559,17 @@ static struct packet *master_pd_created(pid_t pid, int handle, const struct pack
        handler->is_pd_created = (status == 0);
 
        if (handler->pd_created_cb) {
-               DbgPrint("pd_created_cb (%s) - %d\n", buf_id, status);
-               handler->pd_created_cb(handler, status, handler->pd_created_cbdata);
+               ret_cb_t cb;
+               void *cbdata;
+
+               cb = handler->pd_created_cb;
+               cbdata = handler->pd_created_cbdata;
 
                handler->pd_created_cb = NULL;
                handler->pd_created_cbdata = NULL;
+
+               DbgPrint("pd_created_cb (%s) - %d\n", buf_id, status);
+               cb(handler, status, cbdata);
        } else if (status == 0) {
                DbgPrint("LB_EVENT_PD_CREATED (%s) - %d\n", buf_id, status);
                lb_invoke_event_handler(handler, LB_EVENT_PD_CREATED);
@@ -574,11 +607,17 @@ static struct packet *master_pd_destroyed(pid_t pid, int handle, const struct pa
        handler->is_pd_created = 0;
 
        if (handler->pd_destroyed_cb) {
-               DbgPrint("Invoke the PD Destroyed CB\n");
-               handler->pd_destroyed_cb(handler, status, handler->pd_destroyed_cbdata);
+               ret_cb_t cb;
+               void *cbdata;
+
+               cb = handler->pd_destroyed_cb;
+               cbdata = handler->pd_destroyed_cbdata;
 
                handler->pd_destroyed_cb = NULL;
                handler->pd_destroyed_cbdata = NULL;
+
+               DbgPrint("Invoke the PD Destroyed CB\n");
+               cb(handler, status, cbdata);
        } else if (status == 0) {
                DbgPrint("Invoke the LB_EVENT_PD_DESTROYED event\n");
                lb_invoke_event_handler(handler, LB_EVENT_PD_DESTROYED);
@@ -680,10 +719,16 @@ static struct packet *master_update_mode(pid_t pid, int handle, const struct pac
                lb_set_update_mode(handler, active_mode);
 
        if (handler->update_mode_cb) {
-               handler->update_mode_cb(handler, status, handler->update_mode_cbdata);
+               ret_cb_t cb;
+               void *cbdata;
+
+               cb = handler->update_mode_cb;
+               cbdata = handler->update_mode_cbdata;
 
                handler->update_mode_cb = NULL;
                handler->update_mode_cbdata = NULL;
+
+               cb(handler, status, cbdata);
        } else {
                lb_invoke_event_handler(handler, LB_EVENT_UPDATE_MODE_CHANGED);
        }
@@ -769,20 +814,32 @@ static struct packet *master_size_changed(pid_t pid, int handle, const struct pa
                         * So I added some log before & after call the user callback.
                         */
                        if (handler->size_changed_cb) {
-                               handler->size_changed_cb(handler, status, handler->size_cbdata);
+                               ret_cb_t cb;
+                               void *cbdata;
+
+                               cb = handler->size_changed_cb;
+                               cbdata = handler->size_cbdata;
 
                                handler->size_changed_cb = NULL;
                                handler->size_cbdata = NULL;
+
+                               cb(handler, status, cbdata);
                        } else {
                                lb_invoke_event_handler(handler, LB_EVENT_LB_SIZE_CHANGED);
                        }
                } else {
                        DbgPrint("LB is not resized: %dx%d (%d)\n", w, h, status);
                        if (handler->size_changed_cb) {
-                               handler->size_changed_cb(handler, status, handler->size_cbdata);
+                               ret_cb_t cb;
+                               void *cbdata;
+
+                               cb = handler->size_changed_cb;
+                               cbdata = handler->size_cbdata;
 
                                handler->size_changed_cb = NULL;
                                handler->size_cbdata = NULL;
+
+                               cb(handler, status, cbdata);
                        }
                }
        }
@@ -822,10 +879,16 @@ static struct packet *master_period_changed(pid_t pid, int handle, const struct
                lb_set_period(handler, period);
 
        if (handler->period_changed_cb) {
-               handler->period_changed_cb(handler, status, handler->group_cbdata);
+               ret_cb_t cb;
+               void *cbdata;
+
+               cb = handler->period_changed_cb;
+               cbdata = handler->period_cbdata;
 
                handler->period_changed_cb = NULL;
                handler->period_cbdata = NULL;
+
+               cb(handler, status, cbdata);
        } else if (status == 0) {
                lb_invoke_event_handler(handler, LB_EVENT_PERIOD_CHANGED);
        }
@@ -871,10 +934,16 @@ static struct packet *master_group_changed(pid_t pid, int handle, const struct p
                (void)lb_set_group(handler, cluster, category);
 
        if (handler->group_changed_cb) {
-               handler->group_changed_cb(handler, status, handler->group_cbdata);
+               ret_cb_t cb;
+               void *cbdata;
+
+               cb = handler->group_changed_cb;
+               cbdata = handler->group_cbdata;
 
                handler->group_changed_cb = NULL;
                handler->group_cbdata = NULL;
+
+               cb(handler, status, cbdata);
        } else if (status == 0) {
                lb_invoke_event_handler(handler, LB_EVENT_GROUP_CHANGED);
        }
@@ -1055,11 +1124,17 @@ static struct packet *master_created(pid_t pid, int handle, const struct packet
                 */
 
                if (handler->created_cb) {
-                       DbgPrint("Invoke the created_cb\n");
-                       handler->created_cb(handler, ret, handler->created_cbdata);
+                       ret_cb_t cb;
+                       void *cbdata;
+
+                       cb = handler->created_cb;
+                       cbdata = handler->created_cbdata;
 
                        handler->created_cb = NULL;
                        handler->created_cbdata = NULL;
+
+                       DbgPrint("Invoke the created_cb\n");
+                       cb(handler, ret, cbdata);
                } else {
                        DbgPrint("Invoke the lb,created\n");
                        lb_invoke_event_handler(handler, LB_EVENT_CREATED);
index a518b09..cb698c7 100644 (file)
@@ -163,7 +163,7 @@ static void update_mode_cb(struct livebox *handler, const struct packet *result,
                DbgPrint("Resize request is failed: %d\n", ret);
                goto errout;
        }
-       
+
        return;
 
 errout:
@@ -1371,6 +1371,9 @@ EAPI int livebox_access_event(struct livebox *handler, enum access_event_type ty
        case ACCESS_EVENT_SCROLL:
                strcpy(ptr, "_access_scroll");
                break;
+       case ACCESS_EVENT_UNHIGHLIGHT:
+               strcpy(ptr, "_access_unhighlight");
+               break;
        default:
                return LB_STATUS_ERROR_INVALID;
        }