diff options
author | Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp> | 2014-06-16 18:36:57 +0900 |
---|---|---|
committer | Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp> | 2014-06-30 11:35:26 +0900 |
commit | 921a6367afe79d3a99e9278e64b7d1d3c80d6eeb (patch) | |
tree | dec8d5f125a0fc73f3235586a24c17ce229fa746 | |
parent | e5991dd245cc1a142f5a1b725611a482db1586a1 (diff) | |
download | wayland-ivi-extension-921a6367afe79d3a99e9278e64b7d1d3c80d6eeb.tar.gz |
weston-ivi-shell: bug fix. Send correct events for layer.
Signed-off-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@denso.co.jp>
-rwxr-xr-x | weston-ivi-shell/src/ivi-controller.c | 94 |
1 files changed, 37 insertions, 57 deletions
diff --git a/weston-ivi-shell/src/ivi-controller.c b/weston-ivi-shell/src/ivi-controller.c index 59765cc..7ed8325 100755 --- a/weston-ivi-shell/src/ivi-controller.c +++ b/weston-ivi-shell/src/ivi-controller.c @@ -496,7 +496,8 @@ send_surface_prop(struct ivi_layout_surface *layout_surface, static void send_layer_add_event(struct ivilayer *ivilayer, - struct wl_resource *resource) + struct wl_resource *resource, + enum ivi_layout_notification_mask mask) { struct ivi_layout_screen **pArray = NULL; uint32_t length = 0; @@ -506,7 +507,6 @@ send_layer_add_event(struct ivilayer *ivilayer, struct link_screen *next = NULL; struct iviscreen *iviscrn = NULL; struct ivishell *shell = ivilayer->shell; - int found = 0; struct wl_client *client = wl_resource_get_client(resource); struct wl_resource *resource_output = NULL; @@ -518,64 +518,44 @@ send_layer_add_event(struct ivilayer *ivilayer, } /* Send Null to cancel added layer */ - wl_list_for_each_safe(link_scrn, next, &ivilayer->list_screen, link) { - for (i = 0, found = 0; i < (int)length; i++) { - if (pArray[i] == link_scrn->screen->layout_screen) { - /* No need to send event, if new layer doesn't be added. */ - found = 1; - break; - } - } - if (found != 0) { - continue; + if (mask & IVI_NOTIFICATION_REMOVE) { + wl_list_for_each_safe(link_scrn, next, &ivilayer->list_screen, link) { + ivi_controller_layer_send_screen(resource, NULL); + wl_list_remove(&link_scrn->link); + free(link_scrn); + link_scrn = NULL; } - - ivi_controller_layer_send_screen(resource, NULL); - wl_list_remove(&link_scrn->link); - free(link_scrn); - link_scrn = NULL; } - - for (i = 0; i < (int)length; i++) { - found = 0; - wl_list_for_each(link_scrn, &ivilayer->list_screen, link) { - if (pArray[i] == link_scrn->screen->layout_screen) { - /* No need to send event, if new screen doesn't be added. */ - found = 1; - break; + else if (mask & IVI_NOTIFICATION_ADD) { + for (i = 0; i < (int)length; i++) { + /* Create list_screen */ + link_scrn = calloc(1, sizeof(*link_scrn)); + if (NULL == link_scrn) { + continue; } - } - if (found != 0) { - continue; - } - - /* Create list_screen */ - link_scrn = calloc(1, sizeof(*link_scrn)); - if (NULL == link_scrn) { - continue; - } - wl_list_init(&link_scrn->link); - link_scrn->screen = NULL; - wl_list_for_each(iviscrn, &shell->list_screen, link) { - if (iviscrn->layout_screen == pArray[i]) { - link_scrn->screen = iviscrn; - break; + wl_list_init(&link_scrn->link); + link_scrn->screen = NULL; + wl_list_for_each(iviscrn, &shell->list_screen, link) { + if (iviscrn->layout_screen == pArray[i]) { + link_scrn->screen = iviscrn; + break; + } } - } - if (link_scrn->screen == NULL) { - free(link_scrn); - link_scrn = NULL; - continue; - } - wl_list_insert(&ivilayer->list_screen, &link_scrn->link); - - /* Send new layer event */ - resource_output = - wl_resource_find_for_client(&iviscrn->output->resource_list, - client); - if (resource_output != NULL) { - ivi_controller_layer_send_screen(resource, resource_output); + if (link_scrn->screen == NULL) { + free(link_scrn); + link_scrn = NULL; + continue; + } + wl_list_insert(&ivilayer->list_screen, &link_scrn->link); + + /* Send new layer event */ + resource_output = + wl_resource_find_for_client(&iviscrn->output->resource_list, + client); + if (resource_output != NULL) { + ivi_controller_layer_send_screen(resource, resource_output); + } } } @@ -616,10 +596,10 @@ send_layer_event(struct wl_resource *resource, prop->visibility); } if (mask & IVI_NOTIFICATION_ADD) { - send_layer_add_event(ivilayer, resource); + send_layer_add_event(ivilayer, resource, IVI_NOTIFICATION_ADD); } if (mask & IVI_NOTIFICATION_REMOVE) { - send_layer_add_event(ivilayer, resource); + send_layer_add_event(ivilayer, resource, IVI_NOTIFICATION_REMOVE); } } |