Sync to I29fc45cc5bd693eb796d4ea256c0b23afe39b192
authorSung-jae Park <nicesj.park@samsung.com>
Sun, 31 Mar 2013 23:28:53 +0000 (23:28 +0000)
committerSung-jae Park <nicesj.park@samsung.com>
Sun, 31 Mar 2013 23:28:53 +0000 (23:28 +0000)
    Add new event path & change pixmap 24 to 32.

    Accessibility event paths are added.

    Fix the bug of size changed event handler.
    Because of invalid fbfile, the size of a box is resetted.
    I used instance id instead of fb id,.
    So the box buffer info indicates invalid uri
    This patch will fix it.

    master will send a new fbid when it sending the size,changed event.
    Then the viewer will get it and update the fbinfo using received fbid.

    Remove unnecessary parameter checking code.
    Maybe accidently remained.
    Add hold scroll event path.
    Some box wants to hold the viewer's scroller when they handling their events.

Change-Id: If1832b1c841cb5c3e793103f3d728ed36c116bdc

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

index 5d26a30..fc859a5 100644 (file)
@@ -43,12 +43,12 @@ enum content_event_type {
        CONTENT_EVENT_MOUSE_SET         = 0x00000020, /*!< LB mouse set auto event for livebox */
        CONTENT_EVENT_MOUSE_UNSET       = 0x00000040, /*!< LB mouse unset auto event for livebox */
 
-       CONTENT_EVENT_ACCESS_READ       = 0x00000100, /*!< LB accessibility read for livebox */
-       CONTENT_EVENT_ACCESS_READ_NEXT  = 0x00000200, /*!< LB accessibility read next for livebox */
-       CONTENT_EVENT_ACCESS_READ_PREV  = 0x00000400, /*!< LB accessibility read prev for livebox */
+       CONTENT_EVENT_ACCESS_HIGHLIGHT  = 0x00000100, /*!< LB accessibility: Hightlight a object */
+       CONTENT_EVENT_ACCESS_HIGHLIGHT_NEXT     = 0x00000200, /*!< LB accessibility: Set highlight to next object */
+       CONTENT_EVENT_ACCESS_HIGHLIGHT_PREV     = 0x00000400, /*!< LB accessibility: Set highlight to prev object */
        CONTENT_EVENT_ACCESS_ACTIVATE   = 0x00000800, /*!< LB accessibility activate */
-       CONTENT_EVENT_ACCESS_UP         = 0x00001000, /*!< LB accessibility up */
-       CONTENT_EVENT_ACCESS_DOWN       = 0x00002000, /*!< LB accessibility down */
+       CONTENT_EVENT_ACCESS_VALUE_CHANGE       = 0x00001000, /*!< LB accessibility up */
+       CONTENT_EVENT_ACCESS_SCROLL     = 0x00002000, /*!< LB accessibility down */
 
        CONTENT_EVENT_KEY_DOWN          = 0x00100000, /*!< LB key press */
        CONTENT_EVENT_KEY_UP            = 0x00200000, /*!< LB key release */
@@ -75,19 +75,19 @@ enum content_event_type {
        PD_MOUSE_SET                    = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_SET,
        PD_MOUSE_UNSET                  = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_UNSET,
 
-       LB_ACCESS_READ                  = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_READ,
-       LB_ACCESS_READ_NEXT             = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_READ_NEXT,
-       LB_ACCESS_READ_PREV             = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_READ_PREV,
+       LB_ACCESS_HIGHLIGHT             = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_HIGHLIGHT,
+       LB_ACCESS_HIGHLIGHT_NEXT        = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_HIGHLIGHT_NEXT,
+       LB_ACCESS_HIGHLIGHT_PREV        = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_HIGHLIGHT_PREV,
        LB_ACCESS_ACTIVATE              = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_ACTIVATE,
-       LB_ACCESS_UP                    = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_UP,
-       LB_ACCESS_DOWN                  = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_DOWN,
+       LB_ACCESS_VALUE_CHANGE          = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_VALUE_CHANGE,
+       LB_ACCESS_SCROLL                = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_SCROLL,
 
-       PD_ACCESS_READ                  = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_READ,
-       PD_ACCESS_READ_NEXT             = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_READ_NEXT,
-       PD_ACCESS_READ_PREV             = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_READ_PREV,
+       PD_ACCESS_HIGHLIGHT             = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_HIGHLIGHT,
+       PD_ACCESS_HIGHLIGHT_NEXT        = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_HIGHLIGHT_NEXT,
+       PD_ACCESS_HIGHLIGHT_PREV        = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_HIGHLIGHT_PREV,
        PD_ACCESS_ACTIVATE              = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_ACTIVATE,
-       PD_ACCESS_UP                    = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_UP,
-       PD_ACCESS_DOWN                  = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_DOWN,
+       PD_ACCESS_VALUE_CHANGE          = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_VALUE_CHANGE,
+       PD_ACCESS_SCROLL                = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_ACCESS_MASK | CONTENT_EVENT_ACCESS_SCROLL,
 
        LB_KEY_DOWN                     = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_DOWN,
        LB_KEY_UP                       = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_UP,
@@ -133,6 +133,9 @@ enum livebox_event_type { /*!< livebox_event_handler_set Event list */
        LB_EVENT_PD_CREATED, /*!< If a PD is created even if you didn't call the livebox_create_pd API */
        LB_EVENT_PD_DESTROYED, /*!< If a PD is destroyed even if you didn't call the livebox_destroy_pd API */
 
+       LB_EVENT_HOLD_SCROLL, /*!< If the screen should be freezed */
+       LB_EVENT_RELEASE_SCROLL, /*!< If the screen can be scrolled */
+
        LB_EVENT_IGNORED, /*!< Request is ignored */
 };
 
index 994c068..e7b3954 100644 (file)
@@ -1,6 +1,6 @@
 Name: liblivebox-viewer
 Summary: Library for developing the application.
-Version: 0.10.3
+Version: 0.11.0
 Release: 1
 Group: HomeTF/Livebox
 License: Flora License
index 3a483fc..c565cd8 100644 (file)
@@ -66,6 +66,32 @@ static struct packet *master_fault_package(pid_t pid, int handle, const struct p
        return NULL;
 }
 
+static struct packet *master_hold_scroll(pid_t pid, int handle, const struct packet *packet)
+{
+       struct livebox *handler;
+       const char *pkgname;
+       const char *id;
+       int seize;
+       int ret;
+
+       ret = packet_get(packet, "ssi", &pkgname, &id, &seize);
+       if (ret != 3) {
+               ErrPrint("Invalid argument\n");
+               goto out;
+       }
+
+       handler = lb_find_livebox(pkgname, id);
+       if (!handler) {
+               ErrPrint("Instance(%s) is not exists\n", id);
+               goto out;
+       }
+
+       lb_invoke_event_handler(handler, seize ? LB_EVENT_HOLD_SCROLL : LB_EVENT_RELEASE_SCROLL);
+
+out:
+       return NULL;
+}
+
 static struct packet *master_pinup(pid_t pid, int handle, const struct packet *packet)
 {
        const char *pkgname;
@@ -236,9 +262,9 @@ static struct packet *master_lb_updated(pid_t pid, int handle, const struct pack
        lb_set_priority(handler, priority);
        lb_set_content(handler, content);
        lb_set_title(handler, title);
+       lb_set_size(handler, lb_w, lb_h);
 
        if (lb_text_lb(handler)) {
-               lb_set_size(handler, lb_w, lb_h);
                (void)parse_desc(handler, livebox_filename(handler), 0);
                /*!
                 * \note
@@ -247,13 +273,11 @@ static struct packet *master_lb_updated(pid_t pid, int handle, const struct pack
                 */
                goto out;
        } else if (lb_get_lb_fb(handler)) {
-               lb_set_size(handler, lb_w, lb_h);
                lb_set_lb_fb(handler, fbfile);
                ret = fb_sync(lb_get_lb_fb(handler));
                if (ret < 0)
                        ErrPrint("Failed to do sync FB (%s - %s) (%d)\n", pkgname, util_basename(util_uri_to_path(id)), ret);
        } else {
-               lb_set_size(handler, lb_w, lb_h);
                ret = 0;
        }
 
@@ -421,6 +445,7 @@ static struct packet *master_size_changed(pid_t pid, int handle, const struct pa
        struct livebox *handler;
        const char *pkgname;
        const char *id;
+       const char *fbfile;
        int status;
        int ret;
        int w;
@@ -432,13 +457,13 @@ static struct packet *master_size_changed(pid_t pid, int handle, const struct pa
                goto out;
        }
 
-       ret = packet_get(packet, "ssiiii", &pkgname, &id, &is_pd, &w, &h, &status);
-       if (ret != 6) {
+       ret = packet_get(packet, "sssiiii", &pkgname, &id, &fbfile, &is_pd, &w, &h, &status);
+       if (ret != 7) {
                ErrPrint("Invalid argument\n");
                goto out;
        }
 
-       DbgPrint("Size is changed: %dx%d (%s)\n", w, h, id);
+       DbgPrint("Size is changed: %dx%d (%s), fb: [%s]\n", w, h, id, fbfile);
 
        handler = lb_find_livebox(pkgname, id);
        if (!handler) {
@@ -476,8 +501,15 @@ static struct packet *master_size_changed(pid_t pid, int handle, const struct pa
                         * If there is a created LB FB, 
                         * Update it too.
                         */
-                       if (lb_get_lb_fb(handler))
-                               (void)lb_set_lb_fb(handler, id);
+                       if (lb_get_lb_fb(handler)) {
+                               lb_set_lb_fb(handler, fbfile);
+
+                               ret = fb_sync(lb_get_lb_fb(handler));
+                               if (ret < 0)
+                                       ErrPrint("Failed to do sync FB (%s - %s)\n", pkgname, util_basename(util_uri_to_path(id)));
+
+                               /* Just update the size info only. */
+                       }
 
                        /*!
                         * \NOTE
@@ -848,6 +880,10 @@ static struct method s_table[] = {
                .handler = master_pinup,
        },
        {
+               .cmd = "scroll",
+               .handler = master_hold_scroll,
+       },
+       {
                .cmd = NULL,
                .handler = NULL,
        },
index d1fe2de..4aa5cfc 100644 (file)
--- a/src/fb.c
+++ b/src/fb.c
@@ -227,7 +227,7 @@ static inline __attribute__((always_inline)) int sync_for_pixmap(struct fb_info
         * Use the 24 bits Pixmap for Video player
         */
        xim = XShmCreateImage(s_info.disp, s_info.visual,
-                               24 /* (s_info.depth << 3) */, ZPixmap, NULL,
+                               (s_info.depth << 3), ZPixmap, NULL,
                                &si,
                                info->w, info->h);
        if (xim == NULL) {
index 826cf4b..b9303c3 100644 (file)
@@ -595,7 +595,7 @@ EAPI struct livebox *livebox_add_with_size(const char *pkgname, const char *cont
        int width = 0;
        int height = 0;
 
-       if (!pkgname || !cluster || !category || width < 0 || height < 0) {
+       if (!pkgname || !cluster || !category) {
                ErrPrint("Invalid arguments: pkgname[%p], cluster[%p], category[%p]\n",
                                                                pkgname, cluster, category);
                return NULL;
@@ -1104,7 +1104,7 @@ EAPI int livebox_content_event(struct livebox *handler, enum content_event_type
 {
        int w = 1;
        int h = 1;
-       char cmd[20] = { '\0', };
+       char cmd[32] = { '\0', };
        char *ptr = cmd;
 
        if (!handler) {
@@ -1179,24 +1179,27 @@ EAPI int livebox_content_event(struct livebox *handler, enum content_event_type
                *ptr++ = 'b';
        }
 
+       /*!
+        * Must be short than 29 bytes.
+        */
        switch ((type & ~CONTENT_EVENT_PD_MASK)) {
-       case CONTENT_EVENT_ACCESS_READ | CONTENT_EVENT_ACCESS_MASK:
-               strcpy(ptr, "_access_read");
+       case CONTENT_EVENT_ACCESS_HIGHLIGHT | CONTENT_EVENT_ACCESS_MASK:
+               strcpy(ptr, "_access_hl");
                break;
-       case CONTENT_EVENT_ACCESS_READ_PREV | CONTENT_EVENT_ACCESS_MASK:
-               strcpy(ptr, "_access_read_prev");
+       case CONTENT_EVENT_ACCESS_HIGHLIGHT_PREV | CONTENT_EVENT_ACCESS_MASK:
+               strcpy(ptr, "_access_hl_prev");
                break;
-       case CONTENT_EVENT_ACCESS_READ_NEXT | CONTENT_EVENT_ACCESS_MASK:
-               strcpy(ptr, "_access_read_next");
+       case CONTENT_EVENT_ACCESS_HIGHLIGHT_NEXT | CONTENT_EVENT_ACCESS_MASK:
+               strcpy(ptr, "_access_hl_next");
                break;
        case CONTENT_EVENT_ACCESS_ACTIVATE | CONTENT_EVENT_ACCESS_MASK:
                strcpy(ptr, "_access_activate");
                break;
-       case CONTENT_EVENT_ACCESS_UP | CONTENT_EVENT_ACCESS_MASK:
-               strcpy(ptr, "_access_up");
+       case CONTENT_EVENT_ACCESS_VALUE_CHANGE | CONTENT_EVENT_ACCESS_MASK:
+               strcpy(ptr, "_access_value_change");
                break;
-       case CONTENT_EVENT_ACCESS_DOWN | CONTENT_EVENT_ACCESS_MASK:
-               strcpy(ptr, "_access_down");
+       case CONTENT_EVENT_ACCESS_SCROLL | CONTENT_EVENT_ACCESS_MASK:
+               strcpy(ptr, "_access_scroll");
                break;
        case CONTENT_EVENT_MOUSE_ENTER | CONTENT_EVENT_MOUSE_MASK:
                strcpy(ptr, "_mouse_enter");