Send the updated event for double buffered canvas.
authorSung-jae Park <nicesj.park@samsung.com>
Tue, 28 Oct 2014 12:57:50 +0000 (21:57 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Tue, 28 Oct 2014 12:57:50 +0000 (21:57 +0900)
[model] Redwood,Kiran,B3(Wearable)
[binary_type] AP
[customer] Docomo/Orange/ATT/Open
[issue#] N/A
[problem]
[cause]
[solution]
[team] HomeTF
[request]
[horizontal_expansion]

Change-Id: Iccfbac39abf64f8a7660ad4623143785ba94e024

include/dynamicbox.h
src/dynamicbox.c
src/virtual_window.c

index 7668a6d..5fbaf6d 100644 (file)
@@ -835,6 +835,10 @@ extern void *dynamicbox_snapshot_window_add(const char *id, int size_type);
 extern int dynamicbox_snapshot_window_flush(void *snapshot_win, double timeout, dynamicbox_flush_cb flush_cb, void *data);
 
 /**
+ */
+extern int dynamicbox_send_updated_by_idx(dynamicbox_buffer_h handle, int idx);
+
+/**
  * @}
  */
 
index 704717c..70d98c2 100644 (file)
@@ -29,6 +29,7 @@
 #include <dynamicbox_provider.h>
 #include <dynamicbox_provider_buffer.h>
 #include <dynamicbox_conf.h>
+#include <dynamicbox_buffer.h>
 #include <Evas.h>
 
 #include "debug.h"
 #define FILE_SCHEMA    "file://"
 
 struct block {
-       unsigned int idx;
-
-       char *type;
-       char *part;
-       char *data;
-       char *option;
-       char *id;
-       char *file;
-       char *target_id;
+    unsigned int idx;
+
+    char *type;
+    char *part;
+    char *data;
+    char *option;
+    char *id;
+    char *file;
+    char *target_id;
 };
 
 struct dynamicbox_desc {
-       FILE *fp;
-       int for_pd;
+    FILE *fp;
+    int for_pd;
 
-       unsigned int last_idx;
+    unsigned int last_idx;
 
-       struct dlist *block_list;
+    struct dlist *block_list;
 };
 
 struct dynamicbox_buffer_data {
-       int is_gbar;
-       int accelerated;
+    int is_gbar;
+    int accelerated;
 
-       /* for Buffer event wrapper */
-       int (*handler)(dynamicbox_buffer_h , dynamicbox_buffer_event_data_t, void *);
-       void *cbdata;
+    /* for Buffer event wrapper */
+    int (*handler)(dynamicbox_buffer_h , dynamicbox_buffer_event_data_t, void *);
+    void *cbdata;
 
-       char *content;
-       char *title;
-       char *icon;
-       char *name;
+    char *content;
+    char *title;
+    char *icon;
+    char *name;
 };
 
 /**
  * @brief These functions are defined in the data-provider-slave
  */
 static struct info {
-       const char *(*find_pkgname)(const char *filename);
-       int (*request_update_by_id)(const char *uri);
-       int (*trigger_update_monitor)(const char *id, int is_gbar);
-       int (*update_extra_info)(const char *id, const char *content, const char *title, const char *icon, const char *name);
-
-       int is_slave;
-       union _updated {
-               struct _slave {
-                       int (*dbox)(const char *pkgname, const char *id, int x, int y, int w, int h);
-                       int (*gbar)(const char *pkgname, const char *id, const char *descfile, int x, int y, int w, int h);
-               } slave;
-
-               struct _app {
-                       int (*dbox)(const char *id, int x, int y, int w, int h);
-                       int (*gbar)(const char *id, int x, int y, int w, int h);
-               } app;
-       } updated;
+    const char *(*find_pkgname)(const char *filename);
+    int (*request_update_by_id)(const char *uri);
+    int (*trigger_update_monitor)(const char *id, int is_gbar);
+    int (*update_extra_info)(const char *id, const char *content, const char *title, const char *icon, const char *name);
+
+    enum load_type {
+       LOAD_TYPE_UNKNOWN = -1,
+       LOAD_TYPE_SLAVE   = 0,
+       LOAD_TYPE_APP     = 1
+    } type;
+
+    union _updated {
+       struct _slave {
+           int (*dbox)(const char *pkgname, const char *id, int idx, int x, int y, int w, int h);
+           int (*gbar)(const char *pkgname, const char *id, int idx, const char *descfile, int x, int y, int w, int h);
+       } slave;
+
+       struct _app {
+           int (*dbox)(const char *id, int x, int y, int w, int h);
+           int (*gbar)(const char *id, int x, int y, int w, int h);
+           int (*dbox_extra)(const char *id, int idx, int x, int y, int w, int h);
+           int (*gbar_extra)(const char *id, int idx, int x, int y, int w, int h);
+       } app;
+    } updated;
 } s_info = {
-       .find_pkgname = NULL,
-       .request_update_by_id = NULL,
-       .trigger_update_monitor = NULL,
-       .update_extra_info = NULL,
-       .is_slave = -1, /* Not initialized */
+    .find_pkgname = NULL,
+    .request_update_by_id = NULL,
+    .trigger_update_monitor = NULL,
+    .update_extra_info = NULL,
+    .type = LOAD_TYPE_UNKNOWN, /* Not initialized */
 };
 
 #define FUNC_PREFIX                               "dynamicbox_"
 #define FUNC_DYNAMICBOX_SEND_UPDATED              FUNC_PREFIX "send_updated"
 #define FUNC_DYNAMICBOX_SEND_DESC_UPDATED         FUNC_PREFIX "send_desc_updated"
+
 #define FUNC_DYNAMICBOX_PROVIDER_APP_DBOX_UPDATED FUNC_PREFIX "provider_app_dbox_updated"
 #define FUNC_DYNAMICBOX_PROVIDER_APP_GBAR_UPDATED FUNC_PREFIX "provider_app_gbar_updated"
+#define FUNC_DYNAMICBOX_PROVIDER_APP_DBOX_EXTRA_UPDATED FUNC_PREFIX "provider_app_dbox_extra_updated"
+#define FUNC_DYNAMICBOX_PROVIDER_APP_GBAR_EXTRA_UPDATED FUNC_PREFIX "provider_app_gbar_extra_updated"
+
 #define FUNC_DYNAMICBOX_FIND_PKGNAME              FUNC_PREFIX "find_pkgname"
 #define FUNC_DYNAMICBOX_REQUEST_UPDATE_BY_ID      FUNC_PREFIX "request_update_by_id"
 #define FUNC_DYNAMICBOX_TRIGGER_UPDATE_MONITOR    FUNC_PREFIX "trigger_update_monitor"
@@ -116,114 +128,126 @@ static struct info {
 
 static inline void load_update_function(void)
 {
-       /* Must to be checked the slave function first. */
-       s_info.updated.slave.dbox = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_SEND_UPDATED);
-       s_info.updated.slave.gbar = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_SEND_DESC_UPDATED);
-       if (s_info.updated.slave.dbox && s_info.updated.slave.gbar) {
-               s_info.is_slave = 1;
-               DbgPrint("Slave detected\n");
-       } else {
-               s_info.updated.app.dbox = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_PROVIDER_APP_DBOX_UPDATED);
-               s_info.updated.app.gbar = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_PROVIDER_APP_GBAR_UPDATED);
-               if (s_info.updated.app.dbox && s_info.updated.app.gbar) {
-                       s_info.is_slave = 0;
-                       DbgPrint("App detected\n");
-               }
+    /* Must to be checked the slave function first. */
+    s_info.updated.slave.dbox = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_SEND_UPDATED);
+    s_info.updated.slave.gbar = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_SEND_DESC_UPDATED);
+    if (s_info.updated.slave.dbox && s_info.updated.slave.gbar) {
+       s_info.type = LOAD_TYPE_SLAVE;
+       DbgPrint("Slave detected\n");
+    } else {
+       s_info.updated.app.dbox = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_PROVIDER_APP_DBOX_UPDATED);
+       s_info.updated.app.gbar = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_PROVIDER_APP_GBAR_UPDATED);
+       s_info.updated.app.dbox_extra = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_PROVIDER_APP_DBOX_EXTRA_UPDATED);
+       s_info.updated.app.gbar_extra = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_PROVIDER_APP_GBAR_EXTRA_UPDATED);
+       if (s_info.updated.app.dbox && s_info.updated.app.gbar
+          && s_info.updated.app.dbox_extra && s_info.updated.app.gbar_extra)
+        {
+           s_info.type = LOAD_TYPE_APP;
+           DbgPrint("App detected\n");
        }
+    }
 }
 
-static int send_dbox_updated(const char *pkgname, const char *id, int x, int y, int w, int h)
+static int send_dbox_updated(const char *pkgname, const char *id, int idx, int x, int y, int w, int h)
 {
-       int ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    int ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
 
-       if (s_info.is_slave < 0) {
-               load_update_function();
-       }
+    if (s_info.type == LOAD_TYPE_UNKNOWN) {
+       load_update_function();
+    }
 
-       if (s_info.is_slave == 0) {
-               ret = s_info.updated.app.dbox(id, x, y, w, h);
-       } else if (s_info.is_slave == 1) {
-               ret = s_info.updated.slave.dbox(pkgname, id, x, y, w, h);
+    if (s_info.type == LOAD_TYPE_APP) {
+       if (idx == DBOX_PRIMARY_BUFFER) {
+           ret = s_info.updated.app.dbox(id, x, y, w, h);
        } else {
-               dynamicbox_damage_region_t region = {
-                       .x = x,
-                       .y = y,
-                       .w = w,
-                       .h = h,
-               };
-               ret = dynamicbox_provider_send_updated(pkgname, id, &region);
-       }
+           ret = s_info.updated.app.dbox_extra(id, idx, x, y, w, h);
+       }
+    } else if (s_info.type == LOAD_TYPE_SLAVE) {
+       ret = s_info.updated.slave.dbox(pkgname, id, idx, x, y, w, h);
+    } else {
+       dynamicbox_damage_region_t region = {
+           .x = x,
+           .y = y,
+           .w = w,
+           .h = h,
+       };
+       ret = dynamicbox_provider_send_updated(pkgname, id, &region);
+    }
 
-       return ret;
+    return ret;
 }
 
-static int send_gbar_updated(const char *pkgname, const char *id, const char *descfile, int x, int y, int w, int h)
+static int send_gbar_updated(const char *pkgname, const char *id, int idx, const char *descfile, int x, int y, int w, int h)
 {
-       int ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    int ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
 
-       if (s_info.is_slave < 0) {
-               load_update_function();
-       }
+    if (s_info.type == LOAD_TYPE_UNKNOWN) {
+       load_update_function();
+    }
 
-       if (s_info.is_slave == 0) {
-               ret = s_info.updated.app.gbar(id, x, y, w, h);
-       } else if (s_info.is_slave == 1) {
-               ret = s_info.updated.slave.gbar(pkgname, id, descfile, x, y, w, h);
+    if (s_info.type == LOAD_TYPE_APP) {
+       if (idx == DBOX_PRIMARY_BUFFER) {
+           ret = s_info.updated.app.gbar(id, x, y, w, h);
        } else {
-               dynamicbox_damage_region_t region = {
-                       .x = x,
-                       .y = y,
-                       .w = w,
-                       .h = h,
-               };
-               ret = dynamicbox_provider_send_desc_updated(pkgname, id, descfile, &region);
-       }
+           ret = s_info.updated.app.gbar_extra(id, idx, x, y, w, h);
+       }
+    } else if (s_info.type == LOAD_TYPE_SLAVE) {
+       ret = s_info.updated.slave.gbar(pkgname, id, idx, descfile, x, y, w, h);
+    } else {
+       dynamicbox_damage_region_t region = {
+           .x = x,
+           .y = y,
+           .w = w,
+           .h = h,
+       };
+       ret = dynamicbox_provider_send_desc_updated(pkgname, id, descfile, &region);
+    }
 
-       return ret;
+    return ret;
 }
 
 static char *id_to_uri(const char *id)
 {
-       char *uri;
-       int uri_len;
+    char *uri;
+    int uri_len;
 
-       uri_len = strlen(id) + strlen(FILE_SCHEMA) + 1;
+    uri_len = strlen(id) + strlen(FILE_SCHEMA) + 1;
 
-       uri = malloc(uri_len);
-       if (!uri) {
-               return NULL;
-       }
+    uri = malloc(uri_len);
+    if (!uri) {
+       return NULL;
+    }
 
-       snprintf(uri, uri_len, FILE_SCHEMA "%s", id);
-       return uri;
+    snprintf(uri, uri_len, FILE_SCHEMA "%s", id);
+    return uri;
 }
 
 static inline int event_handler_wrapper(dynamicbox_buffer_h buffer, dynamicbox_buffer_event_data_t event_info, void *data)
 {
-       const char *pkgname;
-       const char *id;
-       struct dynamicbox_buffer_data *cbdata = data;
-       int ret;
-
-       pkgname = dynamicbox_provider_buffer_pkgname(buffer);
-       if (!pkgname) {
-               ErrPrint("pkgname is not valid\n");
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    const char *pkgname;
+    const char *id;
+    struct dynamicbox_buffer_data *cbdata = data;
+    int ret;
 
-       id = dynamicbox_provider_buffer_id(buffer);
-       if (!id) {
-               ErrPrint("id is not valid[%s]\n", pkgname);
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    pkgname = dynamicbox_provider_buffer_pkgname(buffer);
+    if (!pkgname) {
+       ErrPrint("pkgname is not valid\n");
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       if (cbdata->handler) {
-               ret = cbdata->handler(buffer, event_info, cbdata->cbdata);
-       } else {
-               ret = DBOX_STATUS_ERROR_FAULT;
-       }
+    id = dynamicbox_provider_buffer_id(buffer);
+    if (!id) {
+       ErrPrint("id is not valid[%s]\n", pkgname);
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
+
+    if (cbdata->handler) {
+       ret = cbdata->handler(buffer, event_info, cbdata->cbdata);
+    } else {
+       ret = DBOX_STATUS_ERROR_FAULT;
+    }
 
-       switch (event_info->type) {
+    switch (event_info->type) {
        case DBOX_BUFFER_EVENT_ACCESS_HIGHLIGHT:
        case DBOX_BUFFER_EVENT_ACCESS_HIGHLIGHT_NEXT:
        case DBOX_BUFFER_EVENT_ACCESS_HIGHLIGHT_PREV:
@@ -241,35 +265,35 @@ static inline int event_handler_wrapper(dynamicbox_buffer_h buffer, dynamicbox_b
        case DBOX_BUFFER_EVENT_ACCESS_READ:
        case DBOX_BUFFER_EVENT_ACCESS_ENABLE:
        case DBOX_BUFFER_EVENT_ACCESS_DISABLE:
-               DbgPrint("Accessibility event: %d\n", event_info->type);
-               if (ret < 0) {
-                       (void)dynamicbox_provider_send_access_status(pkgname, id, DBOX_ACCESS_STATUS_ERROR);
-               } else {
-                       (void)dynamicbox_provider_send_access_status(pkgname, id, ret);
-               }
-               break;
+           DbgPrint("Accessibility event: %d\n", event_info->type);
+           if (ret < 0) {
+               (void)dynamicbox_provider_send_access_status(pkgname, id, DBOX_ACCESS_STATUS_ERROR);
+           } else {
+               (void)dynamicbox_provider_send_access_status(pkgname, id, ret);
+           }
+           break;
        case DBOX_BUFFER_EVENT_KEY_UP:
        case DBOX_BUFFER_EVENT_KEY_DOWN:
        case DBOX_BUFFER_EVENT_KEY_FOCUS_IN:
        case DBOX_BUFFER_EVENT_KEY_FOCUS_OUT:
-               DbgPrint("Key event: %d\n", event_info->type);
-               if (ret < 0) {
-                       (void)dynamicbox_provider_send_key_status(pkgname, id, DBOX_KEY_STATUS_ERROR);
-               } else {
-                       (void)dynamicbox_provider_send_key_status(pkgname, id, ret);
-               }
-               break;
+           DbgPrint("Key event: %d\n", event_info->type);
+           if (ret < 0) {
+               (void)dynamicbox_provider_send_key_status(pkgname, id, DBOX_KEY_STATUS_ERROR);
+           } else {
+               (void)dynamicbox_provider_send_key_status(pkgname, id, ret);
+           }
+           break;
        default:
-               break;
-       }
+           break;
+    }
 
-       return ret;
+    return ret;
 }
 
 static inline int default_event_handler(dynamicbox_buffer_h buffer, dynamicbox_buffer_event_data_t event_info, void *data)
 {
-       /* NOP */
-       return 0;
+    /* NOP */
+    return 0;
 }
 
 PUBLIC const int DBOX_DONE = 0x00;
@@ -293,235 +317,235 @@ PUBLIC const int DBOX_SYS_EVENT_DELETED = 0x0800;
 
 PUBLIC struct dynamicbox_desc *dynamicbox_desc_open(const char *filename, int for_pd)
 {
-       struct dynamicbox_desc *handle;
-       char *new_fname;
+    struct dynamicbox_desc *handle;
+    char *new_fname;
 
-       handle = calloc(1, sizeof(*handle));
-       if (!handle) {
-               ErrPrint("Error: %s\n", strerror(errno));
-               return NULL;
-       }
+    handle = calloc(1, sizeof(*handle));
+    if (!handle) {
+       ErrPrint("Error: %s\n", strerror(errno));
+       return NULL;
+    }
 
-       if (for_pd) {
-               int len;
-               len = strlen(filename) + strlen(".desc") + 1;
-               new_fname = malloc(len);
-               if (!new_fname) {
-                       ErrPrint("Error: %s\n", strerror(errno));
-                       free(handle);
-                       return NULL;
-               }
-               snprintf(new_fname, len, "%s.desc", filename);
-       } else {
-               new_fname = strdup(filename);
-               if (!new_fname) {
-                       ErrPrint("Error: %s\n", strerror(errno));
-                       free(handle);
-                       return NULL;
-               }
+    if (for_pd) {
+       int len;
+       len = strlen(filename) + strlen(".desc") + 1;
+       new_fname = malloc(len);
+       if (!new_fname) {
+           ErrPrint("Error: %s\n", strerror(errno));
+           free(handle);
+           return NULL;
+       }
+       snprintf(new_fname, len, "%s.desc", filename);
+    } else {
+       new_fname = strdup(filename);
+       if (!new_fname) {
+           ErrPrint("Error: %s\n", strerror(errno));
+           free(handle);
+           return NULL;
        }
+    }
 
-       DbgPrint("Open a file %s with merge mode %s\n",
-                               new_fname,
-                               access(new_fname, F_OK) == 0 ? "enabled" : "disabled");
+    DbgPrint("Open a file %s with merge mode %s\n",
+           new_fname,
+           access(new_fname, F_OK) == 0 ? "enabled" : "disabled");
 
-       handle->fp = fopen(new_fname, "at");
-       free(new_fname);
-       if (!handle->fp) {
-               ErrPrint("Failed to open a file: %s\n", strerror(errno));
-               free(handle);
-               return NULL;
-       }
+    handle->fp = fopen(new_fname, "at");
+    free(new_fname);
+    if (!handle->fp) {
+       ErrPrint("Failed to open a file: %s\n", strerror(errno));
+       free(handle);
+       return NULL;
+    }
 
-       return handle;
+    return handle;
 }
 
 PUBLIC int dynamicbox_desc_close(struct dynamicbox_desc *handle)
 {
-       struct dlist *l;
-       struct dlist *n;
-       struct block *block;
+    struct dlist *l;
+    struct dlist *n;
+    struct block *block;
 
-       if (!handle) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
-
-       dlist_foreach_safe(handle->block_list, l, n, block) {
-               handle->block_list = dlist_remove(handle->block_list, l);
+    if (!handle) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-               fprintf(handle->fp, "{\n");
-               if (block->type) {
-                       fprintf(handle->fp, "type=%s\n", block->type);
-               }
+    dlist_foreach_safe(handle->block_list, l, n, block) {
+       handle->block_list = dlist_remove(handle->block_list, l);
 
-               if (block->part) {
-                       fprintf(handle->fp, "part=%s\n", block->part);
-               }
+       fprintf(handle->fp, "{\n");
+       if (block->type) {
+           fprintf(handle->fp, "type=%s\n", block->type);
+       }
 
-               if (block->data) {
-                       fprintf(handle->fp, "data=%s\n", block->data);
-               }
+       if (block->part) {
+           fprintf(handle->fp, "part=%s\n", block->part);
+       }
 
-               if (block->option) {
-                       fprintf(handle->fp, "option=%s\n", block->option);
-               }
+       if (block->data) {
+           fprintf(handle->fp, "data=%s\n", block->data);
+       }
 
-               if (block->id) {
-                       fprintf(handle->fp, "id=%s\n", block->id);
-               }
+       if (block->option) {
+           fprintf(handle->fp, "option=%s\n", block->option);
+       }
 
-               if (block->target_id) {
-                       fprintf(handle->fp, "target=%s\n", block->target_id);
-               }
-               fprintf(handle->fp, "}\n");
-
-               free(block->type);
-               free(block->part);
-               free(block->data);
-               free(block->option);
-               free(block->id);
-               free(block->target_id);
-               free(block);
+       if (block->id) {
+           fprintf(handle->fp, "id=%s\n", block->id);
        }
 
-       if (fclose(handle->fp) != 0) {
-               ErrPrint("fclose: %s\n", strerror(errno));
+       if (block->target_id) {
+           fprintf(handle->fp, "target=%s\n", block->target_id);
        }
-       free(handle);
-       return DBOX_STATUS_ERROR_NONE;
+       fprintf(handle->fp, "}\n");
+
+       free(block->type);
+       free(block->part);
+       free(block->data);
+       free(block->option);
+       free(block->id);
+       free(block->target_id);
+       free(block);
+    }
+
+    if (fclose(handle->fp) != 0) {
+       ErrPrint("fclose: %s\n", strerror(errno));
+    }
+    free(handle);
+    return DBOX_STATUS_ERROR_NONE;
 }
 
 PUBLIC int dynamicbox_desc_set_category(struct dynamicbox_desc *handle, const char *id, const char *category)
 {
-       struct block *block;
+    struct block *block;
 
-       if (!handle || !category) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!handle || !category) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       block = calloc(1, sizeof(*block));
-       if (!block) {
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    block = calloc(1, sizeof(*block));
+    if (!block) {
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       block->type = strdup(DBOX_DESC_TYPE_INFO);
-       if (!block->type) {
-               free(block);
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    block->type = strdup(DBOX_DESC_TYPE_INFO);
+    if (!block->type) {
+       free(block);
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       block->part = strdup("category");
-       if (!block->part) {
-               free(block->type);
-               free(block);
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    block->part = strdup("category");
+    if (!block->part) {
+       free(block->type);
+       free(block);
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       block->data = strdup(category);
-       if (!block->data) {
-               free(block->type);
-               free(block->part);
-               free(block);
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    block->data = strdup(category);
+    if (!block->data) {
+       free(block->type);
+       free(block->part);
+       free(block);
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       if (id) {
-               block->id = strdup(id);
-               if (!block->id) {
-                       free(block->data);
-                       free(block->type);
-                       free(block->part);
-                       free(block);
-                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-               }
+    if (id) {
+       block->id = strdup(id);
+       if (!block->id) {
+           free(block->data);
+           free(block->type);
+           free(block->part);
+           free(block);
+           return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
        }
+    }
 
-       block->idx = handle->last_idx++;
-       handle->block_list = dlist_append(handle->block_list, block);
-       return block->idx;
+    block->idx = handle->last_idx++;
+    handle->block_list = dlist_append(handle->block_list, block);
+    return block->idx;
 }
 
 PUBLIC int dynamicbox_desc_set_size(struct dynamicbox_desc *handle, const char *id, int w, int h)
 {
-       struct block *block;
-       char buffer[BUFSIZ];
+    struct block *block;
+    char buffer[BUFSIZ];
 
-       if (!handle) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!handle) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       block = calloc(1, sizeof(*block));
-       if (!block) {
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    block = calloc(1, sizeof(*block));
+    if (!block) {
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       block->type = strdup(DBOX_DESC_TYPE_INFO);
-       if (!block->type) {
-               free(block);
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    block->type = strdup(DBOX_DESC_TYPE_INFO);
+    if (!block->type) {
+       free(block);
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       block->part = strdup("size");
-       if (!block->part) {
-               free(block->type);
-               free(block);
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    block->part = strdup("size");
+    if (!block->part) {
+       free(block->type);
+       free(block);
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       if (id) {
-               block->id = strdup(id);
-               if (!block->id) {
-                       free(block->part);
-                       free(block->type);
-                       free(block);
-                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-               }
+    if (id) {
+       block->id = strdup(id);
+       if (!block->id) {
+           free(block->part);
+           free(block->type);
+           free(block);
+           return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
        }
+    }
 
-       snprintf(buffer, sizeof(buffer), "%dx%d", w, h);
-       block->data = strdup(buffer);
-       if (!block->data) {
-               free(block->part);
-               free(block->type);
-               free(block);
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    snprintf(buffer, sizeof(buffer), "%dx%d", w, h);
+    block->data = strdup(buffer);
+    if (!block->data) {
+       free(block->part);
+       free(block->type);
+       free(block);
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       block->idx = handle->last_idx++;
-       handle->block_list = dlist_append(handle->block_list, block);
-       return block->idx;
+    block->idx = handle->last_idx++;
+    handle->block_list = dlist_append(handle->block_list, block);
+    return block->idx;
 }
 
 PUBLIC int dynamicbox_desc_set_id(struct dynamicbox_desc *handle, int idx, const char *id)
 {
-       struct dlist *l;
-       struct block *block;
-
-       dlist_foreach(handle->block_list, l, block) {
-               if (block->idx == idx) {
-                       if (strcasecmp(block->type, DBOX_DESC_TYPE_SCRIPT)) {
-                               ErrPrint("Invalid block is used\n");
-                               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-                       }
-
-                       free(block->target_id);
-                       block->target_id = NULL;
-
-                       if (!id || !strlen(id)) {
-                               return DBOX_STATUS_ERROR_NONE;
-                       }
-
-                       block->target_id = strdup(id);
-                       if (!block->target_id) {
-                               ErrPrint("Heap: %s\n", strerror(errno));
-                               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-                       }
-
-                       return DBOX_STATUS_ERROR_NONE;
-               }
+    struct dlist *l;
+    struct block *block;
+
+    dlist_foreach(handle->block_list, l, block) {
+       if (block->idx == idx) {
+           if (strcasecmp(block->type, DBOX_DESC_TYPE_SCRIPT)) {
+               ErrPrint("Invalid block is used\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+           }
+
+           free(block->target_id);
+           block->target_id = NULL;
+
+           if (!id || !strlen(id)) {
+               return DBOX_STATUS_ERROR_NONE;
+           }
+
+           block->target_id = strdup(id);
+           if (!block->target_id) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+           }
+
+           return DBOX_STATUS_ERROR_NONE;
        }
+    }
 
-       return DBOX_STATUS_ERROR_NOT_EXIST;
+    return DBOX_STATUS_ERROR_NOT_EXIST;
 }
 
 /*!
@@ -529,104 +553,104 @@ PUBLIC int dynamicbox_desc_set_id(struct dynamicbox_desc *handle, int idx, const
  */
 PUBLIC int dynamicbox_desc_add_block(struct dynamicbox_desc *handle, const char *id, const char *type, const char *part, const char *data, const char *option)
 {
-       struct block *block;
+    struct block *block;
 
-       if (!handle || !type) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!handle || !type) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       if (!part) {
-               part = "";
-       }
+    if (!part) {
+       part = "";
+    }
 
-       if (!data) {
-               data = "";
-       }
+    if (!data) {
+       data = "";
+    }
 
-       block = calloc(1, sizeof(*block));
-       if (!block) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    block = calloc(1, sizeof(*block));
+    if (!block) {
+       ErrPrint("Heap: %s\n", strerror(errno));
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       block->type = strdup(type);
-       if (!block->type) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               free(block);
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    block->type = strdup(type);
+    if (!block->type) {
+       ErrPrint("Heap: %s\n", strerror(errno));
+       free(block);
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       block->part = strdup(part);
-       if (!block->part) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               free(block->type);
-               free(block);
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    block->part = strdup(part);
+    if (!block->part) {
+       ErrPrint("Heap: %s\n", strerror(errno));
+       free(block->type);
+       free(block);
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       block->data = strdup(data);
-       if (!block->data) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               free(block->type);
-               free(block->part);
-               free(block);
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    block->data = strdup(data);
+    if (!block->data) {
+       ErrPrint("Heap: %s\n", strerror(errno));
+       free(block->type);
+       free(block->part);
+       free(block);
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       if (option) {
-               block->option = strdup(option);
-               if (!block->option) {
-                       ErrPrint("Heap: %s\n", strerror(errno));
-                       free(block->data);
-                       free(block->type);
-                       free(block->part);
-                       free(block);
-                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-               }
+    if (option) {
+       block->option = strdup(option);
+       if (!block->option) {
+           ErrPrint("Heap: %s\n", strerror(errno));
+           free(block->data);
+           free(block->type);
+           free(block->part);
+           free(block);
+           return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
        }
+    }
 
-       if (id) {
-               block->id = strdup(id);
-               if (!block->id) {
-                       ErrPrint("Heap: %s\n", strerror(errno));
-                       free(block->option);
-                       free(block->data);
-                       free(block->type);
-                       free(block->part);
-                       free(block);
-                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-               }
+    if (id) {
+       block->id = strdup(id);
+       if (!block->id) {
+           ErrPrint("Heap: %s\n", strerror(errno));
+           free(block->option);
+           free(block->data);
+           free(block->type);
+           free(block->part);
+           free(block);
+           return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
        }
+    }
 
-       block->idx = handle->last_idx++;
-       handle->block_list = dlist_append(handle->block_list, block);
-       return block->idx;
+    block->idx = handle->last_idx++;
+    handle->block_list = dlist_append(handle->block_list, block);
+    return block->idx;
 }
 
 PUBLIC int dynamicbox_desc_del_block(struct dynamicbox_desc *handle, int idx)
 {
-       struct dlist *l;
-       struct block *block;
+    struct dlist *l;
+    struct block *block;
 
-       if (!handle || idx < 0) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!handle || idx < 0) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       dlist_foreach(handle->block_list, l, block) {
-               if (block->idx == idx) {
-                       handle->block_list = dlist_remove(handle->block_list, l);
-                       free(block->type);
-                       free(block->part);
-                       free(block->data);
-                       free(block->option);
-                       free(block->id);
-                       free(block->target_id);
-                       free(block);
-                       return DBOX_STATUS_ERROR_NONE;
-               }
+    dlist_foreach(handle->block_list, l, block) {
+       if (block->idx == idx) {
+           handle->block_list = dlist_remove(handle->block_list, l);
+           free(block->type);
+           free(block->part);
+           free(block->data);
+           free(block->option);
+           free(block->id);
+           free(block->target_id);
+           free(block);
+           return DBOX_STATUS_ERROR_NONE;
        }
+    }
 
-       return DBOX_STATUS_ERROR_NOT_EXIST;
+    return DBOX_STATUS_ERROR_NOT_EXIST;
 }
 
 PUBLIC unsigned int dynamicbox_acquire_extra_buffer(dynamicbox_buffer_h handle, int idx)
@@ -749,528 +773,570 @@ PUBLIC dynamicbox_buffer_h dynamicbox_create_buffer(const char *filename, int is
 
 PUBLIC int dynamicbox_request_update(const char *filename)
 {
-       char *uri;
-       int ret;
+    char *uri;
+    int ret;
 
-       if (!filename) {
-               ErrPrint("Invalid argument\n");
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!filename) {
+       ErrPrint("Invalid argument\n");
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       uri = id_to_uri(filename);
-       if (!uri) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    uri = id_to_uri(filename);
+    if (!uri) {
+       ErrPrint("Heap: %s\n", strerror(errno));
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
+    if (!s_info.request_update_by_id) {
+       s_info.request_update_by_id = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_REQUEST_UPDATE_BY_ID);
        if (!s_info.request_update_by_id) {
-               s_info.request_update_by_id = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_REQUEST_UPDATE_BY_ID);
-               if (!s_info.request_update_by_id) {
-                       ErrPrint("\"dynamicbox_request_update_by_id\" is not exists\n");
-                       free(uri);
-                       return DBOX_STATUS_ERROR_FAULT;
-               }
+           ErrPrint("\"dynamicbox_request_update_by_id\" is not exists\n");
+           free(uri);
+           return DBOX_STATUS_ERROR_FAULT;
        }
+    }
 
-       ret = s_info.request_update_by_id(uri);
-       free(uri);
-       return ret;
+    ret = s_info.request_update_by_id(uri);
+    free(uri);
+    return ret;
 }
 
 PUBLIC unsigned int dynamicbox_resource_id(dynamicbox_buffer_h handle)
 {
-       return dynamicbox_provider_buffer_resource_id(handle);
+    return dynamicbox_provider_buffer_resource_id(handle);
 }
 
 PUBLIC int dynamicbox_release_buffer(dynamicbox_buffer_h handle)
 {
-       DbgPrint("Release buffer\n");
-       return dynamicbox_provider_buffer_release(handle);
+    DbgPrint("Release buffer\n");
+    return dynamicbox_provider_buffer_release(handle);
 }
 
 PUBLIC int dynamicbox_destroy_buffer(dynamicbox_buffer_h handle)
 {
-       struct dynamicbox_buffer_data *user_data;
+    struct dynamicbox_buffer_data *user_data;
 
-       if (!handle) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!handle) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       user_data = dynamicbox_provider_buffer_user_data(handle);
-       if (user_data) {
-               free(user_data->content);
-               free(user_data->title);
-               free(user_data->icon);
-               free(user_data->name);
-               free(user_data);
-               dynamicbox_provider_buffer_set_user_data(handle, NULL);
-       }
+    user_data = dynamicbox_provider_buffer_user_data(handle);
+    if (user_data) {
+       free(user_data->content);
+       free(user_data->title);
+       free(user_data->icon);
+       free(user_data->name);
+       free(user_data);
+       dynamicbox_provider_buffer_set_user_data(handle, NULL);
+    }
 
-       DbgPrint("Destroy buffer\n");
-       return dynamicbox_provider_buffer_destroy(handle);
+    DbgPrint("Destroy buffer\n");
+    return dynamicbox_provider_buffer_destroy(handle);
 }
 
 PUBLIC void *dynamicbox_ref_buffer(dynamicbox_buffer_h handle)
 {
-       struct dynamicbox_buffer_data *user_data;
-       void *data;
-       int w, h, size;
-       int ret;
+    struct dynamicbox_buffer_data *user_data;
+    void *data;
+    int w, h, size;
+    int ret;
 
-       if (!handle) {
-               return NULL;
-       }
+    if (!handle) {
+       return NULL;
+    }
 
-       user_data = dynamicbox_provider_buffer_user_data(handle);
-       if (!user_data) {
-               return NULL;
-       }
+    user_data = dynamicbox_provider_buffer_user_data(handle);
+    if (!user_data) {
+       return NULL;
+    }
 
-       if (user_data->accelerated) {
-               DbgPrint("H/W accelerated buffer is allocated\n");
-               return NULL;
-       }
+    if (user_data->accelerated) {
+       DbgPrint("H/W accelerated buffer is allocated\n");
+       return NULL;
+    }
 
-       ret = dynamicbox_provider_buffer_get_size(handle, &w, &h, &size);
+    ret = dynamicbox_provider_buffer_get_size(handle, &w, &h, &size);
 
-       data = dynamicbox_provider_buffer_ref(handle);
-       if (data && !ret && w > 0 && h > 0 && size > 0) {
-               memset(data, 0, w * h * size);
-               (void)dynamicbox_provider_buffer_sync(handle);
-       }
+    data = dynamicbox_provider_buffer_ref(handle);
+    if (data && !ret && w > 0 && h > 0 && size > 0) {
+       memset(data, 0, w * h * size);
+       (void)dynamicbox_provider_buffer_sync(handle);
+    }
 
-       DbgPrint("Ref buffer %ds%d(%d)\n", w, h, size);
-       return data;
+    DbgPrint("Ref buffer %ds%d(%d)\n", w, h, size);
+    return data;
 }
 
 PUBLIC int dynamicbox_unref_buffer(void *buffer)
 {
-       if (!buffer) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!buffer) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       DbgPrint("Unref buffer\n");
-       return dynamicbox_provider_buffer_unref(buffer);
+    DbgPrint("Unref buffer\n");
+    return dynamicbox_provider_buffer_unref(buffer);
 }
 
 PUBLIC int dynamicbox_sync_buffer(dynamicbox_buffer_h handle)
 {
-       struct dynamicbox_buffer_data *user_data;
-       const char *pkgname;
-       const char *id;
-       int w;
-       int h;
-       int pixel_size;
+    struct dynamicbox_buffer_data *user_data;
+    const char *pkgname;
+    const char *id;
+    int w;
+    int h;
+    int pixel_size;
 
-       if (!handle) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!handle) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       user_data = dynamicbox_provider_buffer_user_data(handle);
-       if (!user_data) {
-               ErrPrint("Invalid buffer\n");
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    user_data = dynamicbox_provider_buffer_user_data(handle);
+    if (!user_data) {
+       ErrPrint("Invalid buffer\n");
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       if (user_data->accelerated) {
-               DbgPrint("H/W Buffer allocated. skip the sync buffer\n");
-               return DBOX_STATUS_ERROR_NONE;
-       }
+    if (user_data->accelerated) {
+       DbgPrint("H/W Buffer allocated. skip the sync buffer\n");
+       return DBOX_STATUS_ERROR_NONE;
+    }
 
-       pkgname = dynamicbox_provider_buffer_pkgname(handle);
-       if (!pkgname) {
-               ErrPrint("Invalid buffer handler\n");
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    pkgname = dynamicbox_provider_buffer_pkgname(handle);
+    if (!pkgname) {
+       ErrPrint("Invalid buffer handler\n");
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       id = dynamicbox_provider_buffer_id(handle);
-       if (!id) {
-               ErrPrint("Invalid buffer handler\n");
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    id = dynamicbox_provider_buffer_id(handle);
+    if (!id) {
+       ErrPrint("Invalid buffer handler\n");
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       (void)dynamicbox_provider_buffer_sync(handle);
+    (void)dynamicbox_provider_buffer_sync(handle);
 
-       if (dynamicbox_provider_buffer_get_size(handle, &w, &h, &pixel_size) < 0) {
-               ErrPrint("Failed to get size (%s)\n", id);
-       }
+    if (dynamicbox_provider_buffer_get_size(handle, &w, &h, &pixel_size) < 0) {
+       ErrPrint("Failed to get size (%s)\n", id);
+    }
 
-       /**
-        * @todo
-        * manipulate the damaged region, so send update event only for the damaged region.
-        * to make more efficient updates
-        */
+    /**
+     * @todo
+     * manipulate the damaged region, so send update event only for the damaged region.
+     * to make more efficient updates
+     */
 
-       if (user_data->is_gbar == 1) {
-               if (send_gbar_updated(pkgname, id, NULL, 0, 0, w, h) < 0) {
-                       ErrPrint("Failed to send PD updated (%s)\n", id);
-               }
-       } else {
-               if (send_dbox_updated(pkgname, id, 0, 0, w, h) < 0) {
-                       ErrPrint("Failed to send updated (%s)\n", id);
-               }
+    if (user_data->is_gbar == 1) {
+       if (send_gbar_updated(pkgname, id, DBOX_PRIMARY_BUFFER, NULL, 0, 0, w, h) < 0) {
+           ErrPrint("Failed to send GBAR updated (%s)\n", id);
+       }
+    } else {
+       if (send_dbox_updated(pkgname, id, DBOX_PRIMARY_BUFFER, 0, 0, w, h) < 0) {
+           ErrPrint("Failed to send updated (%s)\n", id);
        }
+    }
 
-       return DBOX_STATUS_ERROR_NONE;
+    return DBOX_STATUS_ERROR_NONE;
 }
 
-PUBLIC int dynamicbox_support_hw_buffer(dynamicbox_buffer_h handle)
+PUBLIC int dynamicbox_send_updated_by_idx(dynamicbox_buffer_h handle, int idx)
 {
-       if (!handle) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    struct dynamicbox_buffer_data *user_data;
+    const char *pkgname;
+    const char *id;
+    int w;
+    int h;
+    int pixel_size;
+
+    user_data = dynamicbox_provider_buffer_user_data(handle);
+    if (!user_data) {
+       ErrPrint("Invalid buffer\n");
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
+
+    pkgname = dynamicbox_provider_buffer_pkgname(handle);
+    if (!pkgname) {
+       ErrPrint("Invalid buffer handler\n");
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
+
+    id = dynamicbox_provider_buffer_id(handle);
+    if (!id) {
+       ErrPrint("Invalid buffer handler\n");
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
+
+    if (dynamicbox_provider_buffer_get_size(handle, &w, &h, &pixel_size) < 0) {
+       ErrPrint("Failed to get size (%s)\n", id);
+    }
+
+    if (user_data->is_gbar == 1) {
+        if (send_gbar_updated(pkgname, id, idx, NULL, 0, 0, w, h) < 0) {
+           ErrPrint("Failed to send GBAR updated (%s) %d\n", id, idx);
+       }
+    } else {
+       if (send_dbox_updated(pkgname, id, idx, 0, 0, w, h) < 0) {
+           ErrPrint("Failed to send updated (%s) %d\n", id, idx);
        }
+    }
+}
+
+PUBLIC int dynamicbox_support_hw_buffer(dynamicbox_buffer_h handle)
+{
+    if (!handle) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       return dynamicbox_provider_buffer_is_support_hw(handle);
+    return dynamicbox_provider_buffer_is_support_hw(handle);
 }
 
 PUBLIC int dynamicbox_create_hw_buffer(dynamicbox_buffer_h handle)
 {
-       struct dynamicbox_buffer_data *user_data;
-       int ret;
+    struct dynamicbox_buffer_data *user_data;
+    int ret;
 
-       if (!handle) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!handle) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       user_data = dynamicbox_provider_buffer_user_data(handle);
-       if (!user_data) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    user_data = dynamicbox_provider_buffer_user_data(handle);
+    if (!user_data) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       if (user_data->accelerated) {
-               return DBOX_STATUS_ERROR_ALREADY;
-       }
+    if (user_data->accelerated) {
+       return DBOX_STATUS_ERROR_ALREADY;
+    }
 
-       ret = dynamicbox_provider_buffer_create_hw(handle);
-       user_data->accelerated = (ret == 0);
-       return ret;
+    ret = dynamicbox_provider_buffer_create_hw(handle);
+    user_data->accelerated = (ret == 0);
+    return ret;
 }
 
 PUBLIC int dynamicbox_destroy_hw_buffer(dynamicbox_buffer_h handle)
 {
-       struct dynamicbox_buffer_data *user_data;
+    struct dynamicbox_buffer_data *user_data;
 
-       if (!handle) {
-               LOGD("handle is NULL\n");
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!handle) {
+       LOGD("handle is NULL\n");
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       user_data = dynamicbox_provider_buffer_user_data(handle);
-       if (!user_data || !user_data->accelerated) {
-               LOGD("user_data is NULL\n");
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    user_data = dynamicbox_provider_buffer_user_data(handle);
+    if (!user_data || !user_data->accelerated) {
+       LOGD("user_data is NULL\n");
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       user_data->accelerated = 0;
+    user_data->accelerated = 0;
 
-       return dynamicbox_provider_buffer_destroy_hw(handle);
+    return dynamicbox_provider_buffer_destroy_hw(handle);
 }
 
 PUBLIC void *dynamicbox_buffer_hw_buffer(dynamicbox_buffer_h handle)
 {
-       struct dynamicbox_buffer_data *user_data;
+    struct dynamicbox_buffer_data *user_data;
 
-       if (!handle) {
-               return NULL;
-       }
+    if (!handle) {
+       return NULL;
+    }
 
-       user_data = dynamicbox_provider_buffer_user_data(handle);
-       if (!user_data || !user_data->accelerated) {
-               return NULL;
-       }
+    user_data = dynamicbox_provider_buffer_user_data(handle);
+    if (!user_data || !user_data->accelerated) {
+       return NULL;
+    }
 
-       return dynamicbox_provider_buffer_hw_addr(handle);
+    return dynamicbox_provider_buffer_hw_addr(handle);
 }
 
 PUBLIC int dynamicbox_buffer_pre_render(dynamicbox_buffer_h handle)
 {
-       struct dynamicbox_buffer_data *user_data;
+    struct dynamicbox_buffer_data *user_data;
 
-       if (!handle) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!handle) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       user_data = dynamicbox_provider_buffer_user_data(handle);
-       if (!user_data) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    user_data = dynamicbox_provider_buffer_user_data(handle);
+    if (!user_data) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       if (!user_data->accelerated) {
-               return DBOX_STATUS_ERROR_NONE;
-       }
+    if (!user_data->accelerated) {
+       return DBOX_STATUS_ERROR_NONE;
+    }
 
-       /*!
-        * \note
-        * Do preprocessing for accessing the H/W render buffer
-        */
-       return dynamicbox_provider_buffer_pre_render(handle);
+    /*!
+     * \note
+     * Do preprocessing for accessing the H/W render buffer
+     */
+    return dynamicbox_provider_buffer_pre_render(handle);
 }
 
 PUBLIC int dynamicbox_buffer_post_render(dynamicbox_buffer_h handle)
 {
-       int ret;
-       const char *pkgname;
-       const char *id;
-       struct dynamicbox_buffer_data *user_data;
-       int w;
-       int h;
-       int pixel_size;
+    int ret;
+    const char *pkgname;
+    const char *id;
+    struct dynamicbox_buffer_data *user_data;
+    int w;
+    int h;
+    int pixel_size;
 
-       if (!handle) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!handle) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       user_data = dynamicbox_provider_buffer_user_data(handle);
-       if (!user_data) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    user_data = dynamicbox_provider_buffer_user_data(handle);
+    if (!user_data) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       if (!user_data->accelerated) {
-               return DBOX_STATUS_ERROR_NONE;
-       }
+    if (!user_data->accelerated) {
+       return DBOX_STATUS_ERROR_NONE;
+    }
 
-       pkgname = dynamicbox_provider_buffer_pkgname(handle);
-       if (!pkgname) {
-               ErrPrint("Invalid buffer handle\n");
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    pkgname = dynamicbox_provider_buffer_pkgname(handle);
+    if (!pkgname) {
+       ErrPrint("Invalid buffer handle\n");
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       id = dynamicbox_provider_buffer_id(handle);
-       if (!id) {
-               ErrPrint("Invalid buffer handler\n");
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    id = dynamicbox_provider_buffer_id(handle);
+    if (!id) {
+       ErrPrint("Invalid buffer handler\n");
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       ret = dynamicbox_provider_buffer_post_render(handle);
-       if (ret < 0) {
-               ErrPrint("Failed to post render processing\n");
-               return ret;
-       }
+    ret = dynamicbox_provider_buffer_post_render(handle);
+    if (ret < 0) {
+       ErrPrint("Failed to post render processing\n");
+       return ret;
+    }
 
-       if (dynamicbox_provider_buffer_get_size(handle, &w, &h, &pixel_size) < 0) {
-               ErrPrint("Failed to get size (%s)\n", id);
-       }
+    if (dynamicbox_provider_buffer_get_size(handle, &w, &h, &pixel_size) < 0) {
+       ErrPrint("Failed to get size (%s)\n", id);
+    }
 
-       /**
-        * @todo
-        * manipulate the damaged region, so send update event only for the damaged region.
-        * to make more efficient updates
-        */
+    /**
+     * @todo
+     * manipulate the damaged region, so send update event only for the damaged region.
+     * to make more efficient updates
+     */
 
-       if (user_data->is_gbar == 1) {
-               if (send_gbar_updated(pkgname, id, NULL, 0, 0, w, h) < 0) {
-                       ErrPrint("Failed to send PD updated (%s)\n", id);
-               }
-       } else {
-               if (send_dbox_updated(pkgname, id, 0, 0, w, h) < 0) {
-                       ErrPrint("Failed to send updated (%s)\n", id);
-               }
+    if (user_data->is_gbar == 1) {
+       if (send_gbar_updated(pkgname, id, DBOX_PRIMARY_BUFFER, NULL, 0, 0, w, h) < 0) {
+           ErrPrint("Failed to send GBAR updated (%s)\n", id);
        }
+    } else {
+       if (send_dbox_updated(pkgname, id, DBOX_PRIMARY_BUFFER, 0, 0, w, h) < 0) {
+           ErrPrint("Failed to send updated (%s)\n", id);
+       }
+    }
 
-       return DBOX_STATUS_ERROR_NONE;
+    return DBOX_STATUS_ERROR_NONE;
 }
 
 PUBLIC int dynamicbox_buffer_stride(dynamicbox_buffer_h handle)
 {
-       if (!handle) {
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!handle) {
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       return dynamicbox_provider_buffer_stride(handle);
+    return dynamicbox_provider_buffer_stride(handle);
 }
 
 PUBLIC int dynamicbox_content_is_updated(const char *filename, int is_gbar)
 {
+    if (!s_info.trigger_update_monitor) {
+       s_info.trigger_update_monitor = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_TRIGGER_UPDATE_MONITOR);
        if (!s_info.trigger_update_monitor) {
-               s_info.trigger_update_monitor = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_TRIGGER_UPDATE_MONITOR);
-               if (!s_info.trigger_update_monitor) {
-                       ErrPrint("Trigger update monitor function is not exists\n");
-                       return DBOX_STATUS_ERROR_FAULT;
-               }
+           ErrPrint("Trigger update monitor function is not exists\n");
+           return DBOX_STATUS_ERROR_FAULT;
        }
+    }
 
-       return s_info.trigger_update_monitor(filename, is_gbar);
+    return s_info.trigger_update_monitor(filename, is_gbar);
 }
 
 PUBLIC int dynamicbox_request_close_glance_bar(const char *pkgname, const char *id, int reason)
 {
-       char *uri;
-       int schema_len = strlen(FILE_SCHEMA);
-       int ret;
+    char *uri;
+    int schema_len = strlen(FILE_SCHEMA);
+    int ret;
 
-       if (!pkgname || !id) {
-               ErrPrint("Invalid parameters (%s) (%s)\n", pkgname, id);
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-       }
+    if (!pkgname || !id) {
+       ErrPrint("Invalid parameters (%s) (%s)\n", pkgname, id);
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-       if (strncmp(id, FILE_SCHEMA, schema_len)) {
-               uri = id_to_uri(id);
-               if (!uri) {
-                       ErrPrint("Heap: %s\n", strerror(errno));
-                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-               }
-       } else {
-               uri = strdup(id);
-               if (!uri) {
-                       ErrPrint("Heap: %s\n", strerror(errno));
-                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-               }
+    if (strncmp(id, FILE_SCHEMA, schema_len)) {
+       uri = id_to_uri(id);
+       if (!uri) {
+           ErrPrint("Heap: %s\n", strerror(errno));
+           return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+    } else {
+       uri = strdup(id);
+       if (!uri) {
+           ErrPrint("Heap: %s\n", strerror(errno));
+           return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
        }
+    }
 
-       ret = dynamicbox_provider_send_request_close_gbar(pkgname, uri, reason);
-       free(uri);
-       return ret;
+    ret = dynamicbox_provider_send_request_close_gbar(pkgname, uri, reason);
+    free(uri);
+    return ret;
 }
 
 PUBLIC int dynamicbox_freeze_scroller(const char *pkgname, const char *id)
 {
-       char *uri;
-       int ret;
+    char *uri;
+    int ret;
 
-       uri = id_to_uri(id);
-       if (!uri) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    uri = id_to_uri(id);
+    if (!uri) {
+       ErrPrint("Heap: %s\n", strerror(errno));
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       ret = dynamicbox_provider_send_hold_scroll(pkgname, uri, 1);
-       free(uri);
-       return ret;
+    ret = dynamicbox_provider_send_hold_scroll(pkgname, uri, 1);
+    free(uri);
+    return ret;
 }
 
 PUBLIC int dynamicbox_thaw_scroller(const char *pkgname, const char *id)
 {
-       char *uri;
-       int ret;
+    char *uri;
+    int ret;
 
-       uri = id_to_uri(id);
-       if (!uri) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    uri = id_to_uri(id);
+    if (!uri) {
+       ErrPrint("Heap: %s\n", strerror(errno));
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
-       ret = dynamicbox_provider_send_hold_scroll(pkgname, uri, 0);
-       free(uri);
-       return ret;
+    ret = dynamicbox_provider_send_hold_scroll(pkgname, uri, 0);
+    free(uri);
+    return ret;
 }
 
 PUBLIC int dynamicbox_set_extra_info(const char *id, const char *content, const char *title, const char *icon, const char *name)
 {
-       dynamicbox_buffer_h handle;
-       const char *pkgname;
-       char *uri;
+    dynamicbox_buffer_h handle;
+    const char *pkgname;
+    char *uri;
 
-       uri = id_to_uri(id);
-       if (!uri) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
-       }
+    uri = id_to_uri(id);
+    if (!uri) {
+       ErrPrint("Heap: %s\n", strerror(errno));
+       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+    }
 
+    if (!s_info.find_pkgname) {
+       s_info.find_pkgname = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_FIND_PKGNAME);
        if (!s_info.find_pkgname) {
-               s_info.find_pkgname = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_FIND_PKGNAME);
-               if (!s_info.find_pkgname) {
-                       ErrPrint("Failed to find a \"dynamicbox_find_pkgname\"\n");
-                       free(uri);
-                       return DBOX_STATUS_ERROR_FAULT;
-               }
-       }
-
-       pkgname = s_info.find_pkgname(uri);
-       if (!pkgname) {
-               ErrPrint("Failed to find a package (%s)\n", uri);
-               free(uri);
-               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+           ErrPrint("Failed to find a \"dynamicbox_find_pkgname\"\n");
+           free(uri);
+           return DBOX_STATUS_ERROR_FAULT;
        }
+    }
 
-       handle = dynamicbox_provider_buffer_find_buffer(DBOX_TYPE_DBOX, pkgname, uri);
-       if (handle) {
-               struct dynamicbox_buffer_data *user_data;
+    pkgname = s_info.find_pkgname(uri);
+    if (!pkgname) {
+       ErrPrint("Failed to find a package (%s)\n", uri);
+       free(uri);
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+    }
 
-               user_data = dynamicbox_provider_buffer_user_data(handle);
-               if (!user_data) {
-                       ErrPrint("User data is not available\n");
-                       free(uri);
-                       return DBOX_STATUS_ERROR_FAULT;
-               }
+    handle = dynamicbox_provider_buffer_find_buffer(DBOX_TYPE_DBOX, pkgname, uri);
+    if (handle) {
+       struct dynamicbox_buffer_data *user_data;
 
-               if (content && strlen(content)) {
-                       char *_content;
+       user_data = dynamicbox_provider_buffer_user_data(handle);
+       if (!user_data) {
+           ErrPrint("User data is not available\n");
+           free(uri);
+           return DBOX_STATUS_ERROR_FAULT;
+       }
 
-                       _content = strdup(content);
-                       if (_content) {
-                               if (user_data->content) {
-                                       free(user_data->content);
-                               }
+       if (content && strlen(content)) {
+           char *_content;
 
-                               user_data->content = _content;
-                       } else {
-                               ErrPrint("Heap: %s\n", strerror(errno));
-                       }
+           _content = strdup(content);
+           if (_content) {
+               if (user_data->content) {
+                   free(user_data->content);
                }
 
-               if (title && strlen(title)) {
-                       char *_title;
+               user_data->content = _content;
+           } else {
+               ErrPrint("Heap: %s\n", strerror(errno));
+           }
+       }
 
-                       _title = strdup(title);
-                       if (_title) {
-                               if (user_data->title) {
-                                       free(user_data->title);
-                               }
+       if (title && strlen(title)) {
+           char *_title;
 
-                               user_data->title = _title;
-                       } else {
-                               ErrPrint("Heap: %s\n", strerror(errno));
-                       }
+           _title = strdup(title);
+           if (_title) {
+               if (user_data->title) {
+                   free(user_data->title);
                }
 
-               if (icon && strlen(icon)) {
-                       char *_icon;
+               user_data->title = _title;
+           } else {
+               ErrPrint("Heap: %s\n", strerror(errno));
+           }
+       }
 
-                       _icon = strdup(icon);
-                       if (_icon) {
-                               if (user_data->icon) {
-                                       free(user_data->icon);
-                               }
+       if (icon && strlen(icon)) {
+           char *_icon;
 
-                               user_data->icon = _icon;
-                       } else {
-                               ErrPrint("Heap: %s\n", strerror(errno));
-                       }
+           _icon = strdup(icon);
+           if (_icon) {
+               if (user_data->icon) {
+                   free(user_data->icon);
                }
 
-               if (name && strlen(name)) {
-                       char *_name;
+               user_data->icon = _icon;
+           } else {
+               ErrPrint("Heap: %s\n", strerror(errno));
+           }
+       }
 
-                       _name = strdup(name);
-                       if (_name) {
-                               if (user_data->name) {
-                                       free(user_data->name);
-                               }
+       if (name && strlen(name)) {
+           char *_name;
 
-                               user_data->name = _name;
-                       } else {
-                               ErrPrint("Heap: %s\n", strerror(errno));
-                       }
+           _name = strdup(name);
+           if (_name) {
+               if (user_data->name) {
+                   free(user_data->name);
                }
 
-               if (dynamicbox_provider_send_extra_info(pkgname, uri, -1.0f, user_data->content, user_data->title, user_data->icon, user_data->name) < 0) {
-                       ErrPrint("Failed to send extra info (%s)\n", id);
-               }
+               user_data->name = _name;
+           } else {
+               ErrPrint("Heap: %s\n", strerror(errno));
+           }
+       }
 
-               free(uri);
-               return DBOX_STATUS_ERROR_NONE;
+       if (dynamicbox_provider_send_extra_info(pkgname, uri, -1.0f, user_data->content, user_data->title, user_data->icon, user_data->name) < 0) {
+           ErrPrint("Failed to send extra info (%s)\n", id);
        }
+
        free(uri);
+       return DBOX_STATUS_ERROR_NONE;
+    }
+    free(uri);
 
+    if (!s_info.update_extra_info) {
+       s_info.update_extra_info = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_UPDATE_EXTRA_INFO);
        if (!s_info.update_extra_info) {
-               s_info.update_extra_info = dlsym(RTLD_DEFAULT, FUNC_DYNAMICBOX_UPDATE_EXTRA_INFO);
-               if (!s_info.update_extra_info) {
-                       ErrPrint("Failed to find a \"dynamicbox_update_extra_info\"\n");
-                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
-               }
+           ErrPrint("Failed to find a \"dynamicbox_update_extra_info\"\n");
+           return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
+    }
 
-       return s_info.update_extra_info(id, content, title, icon, name);
+    return s_info.update_extra_info(id, content, title, icon, name);
 }
 
 /* End of a file */
index 6b34251..bcd7d8a 100644 (file)
@@ -61,7 +61,12 @@ static struct static_info {
 typedef struct virtual_window_info {
     char *id; /**< Identification */
     dynamicbox_buffer_h handle; /**< Livebox buffer handle */
-    int is_hw; /**< 1 if a buffer is created on the H/W accelerated place or 0 */
+    enum win_type {
+       VWIN_SW_BUF = 0x00, /**< S/W buffer */
+       VWIN_GEM    = 0x01, /**< GEM buffer */
+        VWIN_PIXMAP = 0x02, /**< PIXMAP */
+       VWIN_ERROR  = 0x03  /**< Unknown */
+    } type;
     Ecore_Evas *ee;
     Evas *e;
     int is_gbar;
@@ -70,6 +75,8 @@ typedef struct virtual_window_info {
     int h;
     unsigned int *resource_array;
     int resource_cnt;
+
+    unsigned int front_resource_id;
 } *vwin_info_t;
 
 static inline Evas_Object *get_highlighted_object(Evas_Object *obj)
@@ -565,7 +572,7 @@ static Ecore_X_Pixmap alloc_pixmap_cb(void *data, Ecore_X_Window parent, int w,
     /**
      * Acquire a buffer for canvas.
      */
-    info->is_hw = 0;
+    info->type = VWIN_PIXMAP;
     info->resource_cnt += !!pixmap;
     return pixmap;
 }
@@ -578,7 +585,7 @@ static void free_pixmap_cb(void *data, Ecore_X_Pixmap pixmap)
        return;
     }
 
-    if (info->is_hw) {
+    if (info->type != VWIN_PIXMAP) {
        ErrPrint("Impossible\n");
     }
 
@@ -645,7 +652,7 @@ static void *alloc_fb(void *data, int size)
            buffer = dynamicbox_buffer_hw_buffer(info->handle);
            if (buffer) {
                DbgPrint("HW Accelerated buffer is created %p, (%dx%d)\n", info, info->w, info->h);
-               info->is_hw = 1;
+               info->type = VWIN_GEM;
                return buffer;
            }
        }
@@ -658,7 +665,7 @@ static void *alloc_fb(void *data, int size)
      */
     buffer = dynamicbox_ref_buffer(info->handle);
     DbgPrint("SW buffer is created (%dx%d)\n", info->w, info->h);
-    info->is_hw = 0;
+    info->type = VWIN_SW_BUF;
     return buffer;
 }
 
@@ -693,13 +700,15 @@ static void free_fb(void *data, void *ptr)
        return;
     }
 
-    if (info->is_hw) {
+    if (info->type == VWIN_GEM) {
        if (dynamicbox_destroy_hw_buffer(info->handle) == 0) {
            DbgPrint("HW Accelerated buffer is destroyed\n");
        }
-    } else {
+    } else if (info->type == VWIN_SW_BUF) {
        DbgPrint("SW buffer is destroyed, %p\n", info);
        dynamicbox_unref_buffer(ptr);
+    } else if (info->type == VWIN_PIXMAP) {
+       ErrPrint("Unable to reach to here\n");
     }
 
     if (dynamicbox_release_buffer(info->handle) < 0) {
@@ -730,8 +739,15 @@ static void pre_render_cb(void *data, Evas *e, void *event_info)
        evas_damage_rectangle_add(e, 0, 0, w, h);
     }
 
-    if (info->is_hw) {
+    if (info->type == VWIN_GEM) {
        dynamicbox_buffer_pre_render(info->handle);
+    } else if (info->type == VWIN_PIXMAP) {
+       /**
+        * Only the pixmap type Ecore_Evas uses this variable
+        */
+       info->front_resource_id = ecore_evas_gl_x11_pixmap_get(info->ee);
+    } else if (info->type == VWIN_SW_BUF) {
+       /* Do nothing */
     }
 }
 
@@ -758,9 +774,25 @@ static void post_render_cb(void *data, Evas *e, void *event_info)
        evas_data_argb_unpremul(canvas, w * h);
     }
 
-    if (info->is_hw) {
+    if (info->type == VWIN_GEM) {
        dynamicbox_buffer_post_render(info->handle);
-    } else {
+    } else if (info->type == VWIN_PIXMAP) {
+       int idx;
+
+       for (idx = 0; idx < DYNAMICBOX_CONF_EXTRA_BUFFER_COUNT; idx++) {
+           if (info->front_resource_id == info->resource_array[idx]) {
+               /**
+                */
+               dynamicbox_send_updated_by_idx(info->handle, idx);
+               break;
+           }
+       }
+
+       if (idx == DYNAMICBOX_CONF_EXTRA_BUFFER_COUNT) {
+           /* Send updated event for PRIMARY BUFFER */
+           dynamicbox_send_updated_by_idx(info->handle, DBOX_PRIMARY_BUFFER);
+       }
+    } else if (info->type == VWIN_SW_BUF) {
        dynamicbox_sync_buffer(info->handle);
     }
 }