From befd0bddd1b5bc36c3729988a7c9cc6b5b390641 Mon Sep 17 00:00:00 2001 From: Matt Porter Date: Wed, 28 Dec 2016 00:50:41 +0200 Subject: meta-ti: weston: remove unneeded ivi shell patches and use standard ivi-controller The meta-arago layer included a number of ivi shell patches that are not needed in AGL. One multi screen patch conflicts with another bbappend causing build issues as it's already included by a less specific layer. Further, the added "simple TI layout controller", autolaunch, and screenshooter features are all unneeded in AGL. These are removed to reduce the amount of non-essential patches we carry within AGL. As a result of this, all weston.ini directives which use the "simple TI layout controller" directives are removed and weston.ini is switched to use the standard ivi-controller so that WindowManager may run and access the ILM API. The end result is that WindowManager and HomeScreen may now be launched after boot successfully. Change-Id: I8d777fbd4c02acbf9d3ccaeb215b651a8562d5bb Signed-off-by: Matt Porter --- ...dd-autolaunch-and-launch-rules-functional.patch | 467 ---------------- .../0001-ivi-shell-Add-screenshooter-option.patch | 29 - ...ix-TODO-which-expects-only-one-screen-in-.patch | 33 -- ...layer-controller-ti-Improve-functionality.patch | 326 ------------ ...ulti-screen-support-to-calcuration-of-a-m.patch | 95 ---- ...l-avoid-update_prop-on-invisible-surfaces.patch | 77 --- ...ix-layout_layer.view_list-is-not-initiliz.patch | 44 -- ...convert-from-screen-to-global-coordinates.patch | 70 --- ...emove-a-code-which-expects-only-a-screen-.patch | 30 -- ...ll-layout-Export-surface-destroy-callback.patch | 60 --- ...ll-Add-simple-IVI-shell-layout-controller.patch | 589 --------------------- .../weston/weston/dra7xx-evm/weston.ini | 26 +- .../recipes-arago/weston/weston_1.9.0.bbappend | 14 - 13 files changed, 1 insertion(+), 1859 deletions(-) delete mode 100644 meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-Add-autolaunch-and-launch-rules-functional.patch delete mode 100644 meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-Add-screenshooter-option.patch delete mode 100644 meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-fix-TODO-which-expects-only-one-screen-in-.patch delete mode 100644 meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-layer-controller-ti-Improve-functionality.patch delete mode 100644 meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0002-ivi-shell-multi-screen-support-to-calcuration-of-a-m.patch delete mode 100644 meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0003-ivi-shell-avoid-update_prop-on-invisible-surfaces.patch delete mode 100644 meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0004-ivi-shell-fix-layout_layer.view_list-is-not-initiliz.patch delete mode 100644 meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-ivi-shell-convert-from-screen-to-global-coordinates.patch delete mode 100644 meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0006-ivi-shell-remove-a-code-which-expects-only-a-screen-.patch delete mode 100644 meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0007-ivi-shell-layout-Export-surface-destroy-callback.patch delete mode 100644 meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0008-ivi-shell-Add-simple-IVI-shell-layout-controller.patch diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-Add-autolaunch-and-launch-rules-functional.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-Add-autolaunch-and-launch-rules-functional.patch deleted file mode 100644 index b6b32aef7..000000000 --- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-Add-autolaunch-and-launch-rules-functional.patch +++ /dev/null @@ -1,467 +0,0 @@ -From 2e731255404e0efb0df1ede8d0b0a32ac011b420 Mon Sep 17 00:00:00 2001 -From: Volodymyr Riazantsev -Date: Sat, 16 Jul 2016 02:53:25 -0400 -Subject: [PATCH] ivi-shell: Add autolaunch and launch rules functionality - -Add ability to select application for autolaunch. -Also launch rules settings are added. - -Signed-off-by: Volodymyr Riazantsev -Signed-off-by: Karthik Ramanan ---- - ivi-shell/ivi-layout-controller-ti.c | 293 +++++++++++++++++++++++++++++++---- - 1 file changed, 259 insertions(+), 34 deletions(-) - -diff --git a/ivi-shell/ivi-layout-controller-ti.c b/ivi-shell/ivi-layout-controller-ti.c -index b7cf436..4a2d648 100644 ---- a/ivi-shell/ivi-layout-controller-ti.c -+++ b/ivi-shell/ivi-layout-controller-ti.c -@@ -27,6 +27,9 @@ - #include - #include - -+#include -+#include -+ - #include "ivi-layout-export.h" - - #ifndef container_of -@@ -56,13 +59,24 @@ if (__dl__ & debug_level) \ - #define pr_wrn(...) __print_log(DL_WRN, "W: " __VA_ARGS__) - #define TRACE() __print_log(DL_DBG, "TR: %s - %d\n", __func__, __LINE__) - -- --#define WINDOWS_TITLE_HEIGHT 30 - #define DEFAULT_SURFACE_ID_FOR_WL_SHELL_APP 0x80000000 - - /***************************************************************************** - * structure, globals - ****************************************************************************/ -+ -+struct hmi_launch_rule { -+#define MAX_APP_NAME_LEN 64 -+ char app_name[MAX_APP_NAME_LEN]; -+ int screen_id; -+ int order; -+ int autofocus; -+ int mode; -+ int32_t src_rect[4]; -+ int32_t dest_rect[4]; -+ int32_t crop_rect[4]; -+}; -+ - struct hmi_controller_layer { - struct ivi_layout_layer *ivilayer; - uint32_t id_layer; -@@ -75,6 +89,7 @@ struct hmi_controller_layer { - struct wl_list link; - struct wl_list screen_link; - struct wl_list surfaces_list; -+ struct hmi_launch_rule *rule; - }; - - struct hmi_controller_surface { -@@ -82,6 +97,7 @@ struct hmi_controller_surface { - void *ivisurf; - struct wl_list link; - struct wl_listener destroy_listener; -+ int conf_num; - }; - - struct hmi_controller_screen { -@@ -93,6 +109,8 @@ struct hmi_server_setting { - uint32_t base_layer_id; - int32_t panel_height; - char *ivi_homescreen; -+ char *homescreen_app; -+ struct wl_array rules; - }; - - struct hmi_controller { -@@ -108,6 +126,7 @@ struct hmi_controller { - struct wl_listener destroy_listener; - struct wl_client *user_interface; - struct wl_list layers_list; -+ - }; - - const struct ivi_controller_interface *ivi_controller_interface; -@@ -143,6 +162,42 @@ mem_alloc(size_t size, char *file, int32_t line) - - #define MEM_ALLOC(s) mem_alloc((s),__FILE__,__LINE__) - -+static int -+get_process_name_by_pid(pid_t pid, char *name, int size) -+{ -+ char proc_name[256] = "/proc/"; -+ char n[512] = {0}; -+ char *_n; -+ -+ sprintf(&proc_name[strlen(proc_name)], "%d/exe", (int)pid); -+ -+ if (!name -+ || access(proc_name, R_OK) -+ || (readlink(proc_name, n, sizeof(n)) <= 0)) { -+ -+ return -1; -+ } -+ -+ _n = strrchr(n, '/'); -+ strncpy(name, _n ? (_n + 1) : n, size); -+ -+ return 0; -+} -+ -+static struct hmi_launch_rule -+*get_rule(struct wl_array *arr, const char *app_name) -+{ -+ struct hmi_launch_rule *rule = NULL; -+ -+ wl_array_for_each(rule, arr) { -+ if (!strcmp(app_name, rule->app_name)) -+ return rule; -+ } -+ -+ return NULL; -+} -+ -+ - /** - * Internal method to create ivi_layer with hmi_controller_layer and - * add to a ivi_screen -@@ -177,6 +232,42 @@ create_layer(struct ivi_layout_screen *iviscrn, - - } - -+static void -+register_layer_on_screen(struct hmi_controller *hmi_ctrl, -+ int i, -+ struct hmi_controller_layer *nlayer) -+{ -+ unsigned cnt, j = 0; -+ struct hmi_controller_layer *layer = NULL; -+ struct ivi_layout_layer **layers; -+ -+ if (nlayer->rule && nlayer->rule->order == 0) { -+ wl_list_insert(&hmi_ctrl->screens[i].layers_list, &nlayer->screen_link); -+ } else { -+ wl_list_for_each(layer, &hmi_ctrl->screens[i].layers_list, screen_link) { -+ if (layer->rule && (layer->rule->order == 0)) -+ continue; -+ else -+ break; -+ } -+ wl_list_insert(layer->screen_link.prev, &nlayer->screen_link); -+ } -+ -+ cnt = wl_list_length(&hmi_ctrl->screens[i].layers_list); -+ -+ layers = calloc(cnt, sizeof(*layers)); -+ -+ wl_list_for_each_reverse(layer, &hmi_ctrl->screens[i].layers_list, screen_link) { -+ layers[j++] = layer->ivilayer; -+ } -+ -+ ivi_controller_interface->screen_set_render_order(hmi_ctrl->screens[i].iviscrn, layers, cnt); -+ -+ free(layers); -+ -+ ivi_controller_interface->commit_changes(); -+} -+ - static struct hmi_controller_layer - *get_layer_for_surface(struct hmi_controller *hmi_ctrl - , struct ivi_layout_surface *ivisurf -@@ -188,6 +279,9 @@ static struct hmi_controller_layer - struct wl_client *client; - struct ivi_layout_screen *iviscrn = NULL; - struct weston_output *output = NULL; -+ char proc_name[256]; -+ struct hmi_launch_rule *rule; -+ - pid_t pid; - uid_t uid; - gid_t gid; -@@ -213,13 +307,21 @@ static struct hmi_controller_layer - - pr_dbg("Existed layer for PID=%d was not found. Creating new\n", pid); - -- for(;; i++) { -- if (wl_list_empty(&hmi_ctrl->screens[i].layers_list) || -- (i == (hmi_ctrl->screens_count - 1))) -- break; -- }; -+ get_process_name_by_pid(pid, proc_name, sizeof(proc_name)); - -- iviscrn = hmi_ctrl->screens[i].iviscrn; -+ rule = get_rule(&hmi_ctrl->hmi_setting->rules, proc_name); -+ -+ if (rule && (rule->screen_id >= 0) && (rule->screen_id < hmi_ctrl->screens_count)) { -+ iviscrn = hmi_ctrl->screens[rule->screen_id].iviscrn; -+ i = rule->screen_id; -+ } else { -+ for(;; i++) { -+ if (wl_list_empty(&hmi_ctrl->screens[i].layers_list) || -+ (i == (hmi_ctrl->screens_count - 1))) -+ break; -+ }; -+ iviscrn = hmi_ctrl->screens[i].iviscrn; -+ } - - layer = calloc(1, sizeof *layer); - -@@ -230,14 +332,16 @@ static struct hmi_controller_layer - wl_list_init(&layer->surfaces_list); - - layer->width = output->width; -- layer->height = output->height + WINDOWS_TITLE_HEIGHT; -+ layer->height = output->height; - layer->id_layer = hmi_ctrl->hmi_setting->base_layer_id++; - layer->pid = pid; -+ layer->rule = rule; - - create_layer(iviscrn, layer); - - wl_list_insert(&hmi_ctrl->layers_list, &layer->link); -- wl_list_insert(&hmi_ctrl->screens[i].layers_list, &layer->screen_link); -+ -+ register_layer_on_screen(hmi_ctrl, i, layer); - - return layer; - -@@ -350,41 +454,77 @@ set_notification_configure_surface(struct ivi_layout_surface *ivisurf, - struct hmi_controller_layer *hmi_ctrl_layer = NULL; - struct weston_surface *surface; - struct hmi_controller_surface *hmi_ctrl_surf = NULL; -+ int src_rect[4] = {0}; -+ int dest_rect[4] = {0}; - - wl_list_for_each(hmi_ctrl_layer, &hmi_ctrl->layers_list, link) { - wl_list_for_each(hmi_ctrl_surf, &hmi_ctrl_layer->surfaces_list, link) { - if (hmi_ctrl_surf->ivisurf == ivisurf) { -- pr_dbg("Surface was already configured. Skip add to list\n"); - goto found; - } - } - } - -- hmi_ctrl_layer = NULL; -+ return; - found: - surface = ivi_controller_interface->surface_get_weston_surface(ivisurf); - -- if (surface) { -- -- ivi_controller_interface->surface_set_source_rectangle( -- ivisurf, 0, WINDOWS_TITLE_HEIGHT, surface->width, -- surface->height); -- --#if 0 -- ivi_controller_interface->surface_set_destination_rectangle( -- ivisurf, 0, 0, surface->width, surface->height); --#else -- if (hmi_ctrl_layer) { -- ivi_controller_interface->surface_set_destination_rectangle( -- ivisurf, 0, 0, hmi_ctrl_layer->width, hmi_ctrl_layer->height); -- } else { -- ivi_controller_interface->surface_set_destination_rectangle( -- ivisurf, 0, 0, surface->width, surface->height); -+ if (!surface) -+ return; -+ -+ src_rect[2] = dest_rect[2] = surface->width; -+ src_rect[3] = dest_rect[3] = surface->height; -+ -+ if (hmi_ctrl_layer && hmi_ctrl_layer->rule) { -+ -+ if (hmi_ctrl_layer->rule->mode >= 0) { -+ switch (hmi_ctrl_layer->rule->mode) { -+ case 1: -+ dest_rect[2] = hmi_ctrl_layer->width; -+ dest_rect[3] = hmi_ctrl_layer->height; -+ break; -+ -+ default: -+ /* No changes, using requested size */ -+ break; -+ } -+ } -+ -+ if (hmi_ctrl_layer->rule->crop_rect[0] >= 0) { -+ src_rect[0] += hmi_ctrl_layer->rule->crop_rect[0]; -+ src_rect[1] += hmi_ctrl_layer->rule->crop_rect[1]; -+ src_rect[2] -= (hmi_ctrl_layer->rule->crop_rect[0] -+ + hmi_ctrl_layer->rule->crop_rect[2]); -+ src_rect[3] -= (hmi_ctrl_layer->rule->crop_rect[1] -+ + hmi_ctrl_layer->rule->crop_rect[3]); -+ } -+ -+ if (hmi_ctrl_layer->rule->dest_rect[0] >= 0 || -+ hmi_ctrl_layer->rule->dest_rect[1] >= 0 || -+ hmi_ctrl_layer->rule->dest_rect[2] >= 0 || -+ hmi_ctrl_layer->rule->dest_rect[3] >= 0) { -+ -+ dest_rect[0] = hmi_ctrl_layer->rule->dest_rect[0]; -+ dest_rect[1] = hmi_ctrl_layer->rule->dest_rect[1]; -+ dest_rect[2] = hmi_ctrl_layer->rule->dest_rect[2] > 0 ? -+ hmi_ctrl_layer->rule->dest_rect[2] : dest_rect[2] ; -+ dest_rect[3] = hmi_ctrl_layer->rule->dest_rect[3] > 0 ? -+ hmi_ctrl_layer->rule->dest_rect[3] : dest_rect[3] ; - } --#endif -- ivi_controller_interface->surface_set_visibility(ivisurf, true); -- ivi_controller_interface->commit_changes(); - } -+ -+ ivi_controller_interface->surface_set_source_rectangle(ivisurf -+ , src_rect[0], src_rect[1] -+ , src_rect[2], src_rect[3]); -+ -+ ivi_controller_interface->surface_set_destination_rectangle(ivisurf -+ , dest_rect[0], dest_rect[1] -+ , dest_rect[2], dest_rect[3]); -+ -+ ivi_controller_interface->surface_set_visibility(ivisurf, true); -+ ivi_controller_interface->commit_changes(); -+ -+ hmi_ctrl_surf->conf_num++; - } - - static struct hmi_server_setting * -@@ -393,6 +533,9 @@ hmi_server_setting_create(struct weston_compositor *ec) - struct hmi_server_setting *setting = MEM_ALLOC(sizeof(*setting)); - struct weston_config *config = ec->config; - struct weston_config_section *shell_section = NULL; -+ const char *name = NULL; -+ -+ setting->panel_height = 30; - - shell_section = weston_config_get_section(config, "ivi-shell", - NULL, NULL); -@@ -400,7 +543,78 @@ hmi_server_setting_create(struct weston_compositor *ec) - weston_config_section_get_uint(shell_section, "base-layer-id", - &setting->base_layer_id, 1000); - -- setting->panel_height = 30; -+ if ((shell_section = weston_config_get_section(config, "ivi-autolaunch", -+ NULL, NULL))) { -+ weston_config_section_get_string(shell_section, "path", -+ &setting->homescreen_app, NULL); -+ } -+ -+ -+ wl_array_init(&setting->rules); -+ -+ while (weston_config_next_section(config, &shell_section, &name)) { -+ int screen_id; -+ int order; -+ int mode; -+ int focus_on; -+ int crop_rect[4] = {-1, -1, -1, -1}; -+ int src_rect[4] = {-1, -1, -1, -1}; -+ int dest_rect[4] = {-1, -1, -1, -1}; -+ char *app_name; -+ char *buff; -+ struct hmi_launch_rule *rule = NULL; -+ -+ if (0 != strcmp(name, "ivi-layout-rule")) -+ continue; -+ -+ if (0 != weston_config_section_get_string(shell_section, "application", -+ &app_name, NULL)) -+ continue; -+ -+ weston_config_section_get_int(shell_section, "order", &order, -1); -+ weston_config_section_get_int(shell_section, "mode", &mode, -1); -+ weston_config_section_get_int(shell_section, "focus_on", &focus_on, -1); -+ weston_config_section_get_int(shell_section, "screen", &screen_id, -1); -+ -+ if (0 == weston_config_section_get_string(shell_section, "crop_rect", -+ &buff, NULL)) { -+ sscanf(buff, "%d,%d,%d,%d", crop_rect + 0, -+ crop_rect + 1, -+ crop_rect + 2, -+ crop_rect + 3); -+ } -+ -+ if (0 == weston_config_section_get_string(shell_section, "src_rect", -+ &buff, NULL)) { -+ sscanf(buff, "%d,%d,%d,%d", src_rect + 0, -+ src_rect + 1, -+ src_rect + 2, -+ src_rect + 3); -+ } -+ -+ if (0 == weston_config_section_get_string(shell_section, "dest_rect", -+ &buff, NULL)) { -+ sscanf(buff, "%d,%d,%d,%d", dest_rect + 0, -+ dest_rect + 1, -+ dest_rect + 2, -+ dest_rect + 3); -+ } -+ -+ rule = wl_array_add(&setting->rules, sizeof(*rule)); -+ -+ if (rule) { -+ rule->screen_id = screen_id; -+ rule->order = order; -+ rule->mode = mode; -+ rule->autofocus = focus_on; -+ -+ strncpy(rule->app_name, app_name, sizeof(rule->app_name)); -+ -+ memcpy(rule->src_rect, src_rect, sizeof(rule->src_rect)); -+ memcpy(rule->dest_rect, dest_rect, sizeof(rule->dest_rect)); -+ memcpy(rule->crop_rect, crop_rect, sizeof(rule->crop_rect)); -+ } -+ } - - return setting; - } -@@ -415,6 +629,15 @@ hmi_controller_destroy(struct wl_listener *listener, void *data) - free(hmi_ctrl); - } - -+static void hmi_controller_launch_homescreen(struct hmi_controller *hmi_ctrl) -+{ -+ if (hmi_ctrl->hmi_setting->homescreen_app) { -+ if(system(hmi_ctrl->hmi_setting->homescreen_app)) { -+ ; -+ } -+ } -+} -+ - static struct hmi_controller * - hmi_controller_create(struct weston_compositor *ec) - { -@@ -429,9 +652,10 @@ hmi_controller_create(struct weston_compositor *ec) - - ivi_controller_interface->get_screens(&screen_length, &pp_screen); - -- for (i = screen_length; i-- ; j++) { -+ for (i = screen_length; i--;) { - - iviscrn = pp_screen[i]; -+ j = ivi_controller_interface->get_id_of_screen(iviscrn); - hmi_ctrl->screens[j].iviscrn = iviscrn; - wl_list_init(&hmi_ctrl->screens[i].layers_list); - -@@ -506,7 +730,6 @@ controller_module_init(struct weston_compositor *ec, - { - struct hmi_controller *hmi_ctrl = NULL; - -- - if (interface_version < sizeof(struct ivi_controller_interface)) { - weston_log("ivi-layout-controller-ti: version mismatch of controller interface"); - return -1; -@@ -528,5 +751,7 @@ controller_module_init(struct weston_compositor *ec, - - weston_log("ivi-layout-controller-ti: Successfully started."); - -+ hmi_controller_launch_homescreen(hmi_ctrl); -+ - return 0; - } --- -2.4.5 - diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-Add-screenshooter-option.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-Add-screenshooter-option.patch deleted file mode 100644 index aa45011b9..000000000 --- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-Add-screenshooter-option.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 6189fb7936f469eab53db712f31dc8276075ff5e Mon Sep 17 00:00:00 2001 -From: Volodymyr Riazantsev -Date: Tue, 16 Aug 2016 23:47:23 -0400 -Subject: [PATCH] ivi-shell: Add screenshooter option - -Add ability to capture the screen. - -Signed-off-by: Volodymyr Riazantsev -Signed-off-by: Karthik Ramanan ---- - ivi-shell/ivi-shell.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/ivi-shell/ivi-shell.c b/ivi-shell/ivi-shell.c -index 1720705..5637d8e 100644 ---- a/ivi-shell/ivi-shell.c -+++ b/ivi-shell/ivi-shell.c -@@ -456,6 +456,8 @@ module_init(struct weston_compositor *compositor, - argc, argv) < 0) - goto out_settings; - -+ screenshooter_create(compositor); -+ - retval = 0; - - out_settings: --- -2.4.5 - diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-fix-TODO-which-expects-only-one-screen-in-.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-fix-TODO-which-expects-only-one-screen-in-.patch deleted file mode 100644 index d2af15eca..000000000 --- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-fix-TODO-which-expects-only-one-screen-in-.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 93ceff13467e7fb1bee38c0ab6f587f5f99cc594 Mon Sep 17 00:00:00 2001 -From: Nobuhiko Tanibata -Date: Wed, 25 Nov 2015 23:36:09 +0900 -Subject: [PATCH 1/7] ivi-shell: fix TODO which expects only one screen in the - system. - -It just return the first screen found in screen list. - -Signed-off-by: Nobuhiko Tanibata -Reviewed-by: Pekka Paalanen ---- - ivi-shell/ivi-layout.c | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c -index a04076e..efc0da5 100644 ---- a/ivi-shell/ivi-layout.c -+++ b/ivi-shell/ivi-layout.c -@@ -1484,9 +1484,8 @@ ivi_layout_get_screen_from_id(uint32_t id_screen) - struct ivi_layout_screen *iviscrn = NULL; - - wl_list_for_each(iviscrn, &layout->screen_list, link) { --/* FIXME : select iviscrn from screen_list by id_screen */ -- return iviscrn; -- break; -+ if (iviscrn->id_screen == id_screen) -+ return iviscrn; - } - - return NULL; --- -2.4.5 - diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-layer-controller-ti-Improve-functionality.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-layer-controller-ti-Improve-functionality.patch deleted file mode 100644 index 7db49341e..000000000 --- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-layer-controller-ti-Improve-functionality.patch +++ /dev/null @@ -1,326 +0,0 @@ -From 70f5b755b00d5eab576ed897a8301367b0e367a6 Mon Sep 17 00:00:00 2001 -From: Volodymyr Riazantsev -Date: Sat, 16 Jul 2016 02:53:25 -0400 -Subject: [PATCH] ivi-shell: layer-controller-ti: Improve functionality - -Functionality improved: - - * can launch multiple application on start - * handle keyboard focus: - - TAB-LEFTALT can be used for switch focus - - focus history; - - focus on new application. - -Signed-off-by: Volodymyr Riazantsev -Signed-off-by: Karthik Ramanan ---- - ivi-shell/ivi-layout-controller-ti.c | 167 +++++++++++++++++++++++++++++++---- - 1 file changed, 148 insertions(+), 19 deletions(-) - -diff --git a/ivi-shell/ivi-layout-controller-ti.c b/ivi-shell/ivi-layout-controller-ti.c -index 4a2d648..9be51d1 100644 ---- a/ivi-shell/ivi-layout-controller-ti.c -+++ b/ivi-shell/ivi-layout-controller-ti.c -@@ -30,6 +30,8 @@ - #include - #include - -+#include -+ - #include "ivi-layout-export.h" - - #ifndef container_of -@@ -85,6 +87,7 @@ struct hmi_controller_layer { - int32_t width; - int32_t height; - int32_t num_surfaces; -+ int32_t focus; - pid_t pid; - struct wl_list link; - struct wl_list screen_link; -@@ -96,8 +99,10 @@ struct hmi_controller_surface { - void *controller; - void *ivisurf; - struct wl_list link; -+ struct wl_list focus_link; - struct wl_listener destroy_listener; - int conf_num; -+ int focus; - }; - - struct hmi_controller_screen { -@@ -106,11 +111,12 @@ struct hmi_controller_screen { - }; - - struct hmi_server_setting { -- uint32_t base_layer_id; -- int32_t panel_height; -- char *ivi_homescreen; -- char *homescreen_app; -- struct wl_array rules; -+ uint32_t base_layer_id; -+ int32_t panel_height; -+ char *ivi_homescreen; -+ char *homescreen_app; -+ struct wl_array autolaunch_apps; -+ struct wl_array rules; - }; - - struct hmi_controller { -@@ -126,6 +132,7 @@ struct hmi_controller { - struct wl_listener destroy_listener; - struct wl_client *user_interface; - struct wl_list layers_list; -+ struct wl_list focus_history_list; - - }; - -@@ -350,12 +357,59 @@ exit: - } - - static void -+move_kbd_focus(struct hmi_controller_surface *ivisurf, struct hmi_controller *hmi_ctrl, bool history) -+{ -+ struct hmi_controller_layer *layer; -+ struct hmi_controller_surface *surf; -+ struct weston_seat *seat; -+ struct weston_keyboard *keyboard; -+ struct weston_surface *surface; -+ -+ wl_list_for_each(layer, &hmi_ctrl->layers_list, link) { -+ wl_list_for_each(surf, &layer->surfaces_list, link) { -+ if (surf->focus) { -+ surf->focus = 0; -+ wl_list_insert(&hmi_ctrl->focus_history_list, &surf->focus_link); -+ break; -+ } -+ } -+ } -+ -+ wl_list_for_each(seat, &hmi_ctrl->compositor->seat_list, link) { -+ if(!strcmp("default", seat->seat_name)) -+ break; -+ } -+ -+ keyboard = weston_seat_get_keyboard(seat); -+ -+ if (!keyboard) -+ return; -+ -+ if (ivisurf) { -+ surface = ivi_controller_interface->surface_get_weston_surface(ivisurf->ivisurf); -+ weston_keyboard_set_focus(keyboard, surface); -+ ivisurf->focus = 1; -+ -+ if (NULL != ivisurf->focus_link.next) -+ wl_list_remove(&ivisurf->focus_link); -+ -+ } else if (history && !wl_list_empty(&hmi_ctrl->focus_history_list)) { -+ struct hmi_controller_surface *s = -+ wl_container_of(hmi_ctrl->focus_history_list.next, s, focus_link); -+ wl_list_remove(&s->focus_link); -+ surface = ivi_controller_interface->surface_get_weston_surface(s->ivisurf); -+ weston_keyboard_set_focus(keyboard, surface); -+ s->focus = 1; -+ } -+} -+ -+static void - set_notification_create_surface(struct ivi_layout_surface *ivisurf, - void *userdata) - { - struct hmi_controller *hmi_ctrl = userdata; -- struct hmi_controller_layer *hmi_ctrl_layer = NULL; -- struct hmi_controller_surface *hmi_ctrl_surf = NULL; -+ struct hmi_controller_layer *hmi_ctrl_layer; -+ struct hmi_controller_surface *hmi_ctrl_surf; - struct ivi_layout_layer *dest_layer; - struct weston_surface *surface; - -@@ -378,6 +432,7 @@ set_notification_create_surface(struct ivi_layout_surface *ivisurf, - hmi_ctrl_surf = calloc(1, sizeof(*hmi_ctrl_surf)); - hmi_ctrl_surf->ivisurf = ivisurf; - wl_list_init(&hmi_ctrl_surf->link); -+ wl_list_init(&hmi_ctrl_surf->focus_link); - wl_list_insert(&hmi_ctrl_layer->surfaces_list, &hmi_ctrl_surf->link); - - -@@ -419,6 +474,9 @@ remove: - - wl_list_remove(&surf->link); - -+ if (surf->focus) -+ move_kbd_focus(NULL, hmi_ctrl, true); -+ - ivi_controller_interface->layer_remove_surface(dest_layer, ivisurf); - - if (wl_list_empty(&hmi_ctrl_layer->surfaces_list)) { -@@ -451,9 +509,10 @@ set_notification_configure_surface(struct ivi_layout_surface *ivisurf, - void *userdata) - { - struct hmi_controller *hmi_ctrl = userdata; -- struct hmi_controller_layer *hmi_ctrl_layer = NULL; -+ struct hmi_controller_layer *hmi_ctrl_layer; - struct weston_surface *surface; -- struct hmi_controller_surface *hmi_ctrl_surf = NULL; -+ struct weston_seat *seat = NULL; -+ struct hmi_controller_surface *hmi_ctrl_surf; - int src_rect[4] = {0}; - int dest_rect[4] = {0}; - -@@ -511,6 +570,16 @@ found: - dest_rect[3] = hmi_ctrl_layer->rule->dest_rect[3] > 0 ? - hmi_ctrl_layer->rule->dest_rect[3] : dest_rect[3] ; - } -+ -+ if (hmi_ctrl_layer->rule->autofocus) { -+ -+ wl_list_for_each(seat, &hmi_ctrl->compositor->seat_list, link) { -+ if(!strcmp("default", seat->seat_name)) -+ break; -+ } -+ -+ move_kbd_focus(hmi_ctrl_surf, hmi_ctrl, false); -+ } - } - - ivi_controller_interface->surface_set_source_rectangle(ivisurf -@@ -522,6 +591,7 @@ found: - , dest_rect[2], dest_rect[3]); - - ivi_controller_interface->surface_set_visibility(ivisurf, true); -+ - ivi_controller_interface->commit_changes(); - - hmi_ctrl_surf->conf_num++; -@@ -543,14 +613,9 @@ hmi_server_setting_create(struct weston_compositor *ec) - weston_config_section_get_uint(shell_section, "base-layer-id", - &setting->base_layer_id, 1000); - -- if ((shell_section = weston_config_get_section(config, "ivi-autolaunch", -- NULL, NULL))) { -- weston_config_section_get_string(shell_section, "path", -- &setting->homescreen_app, NULL); -- } -- -- - wl_array_init(&setting->rules); -+ wl_array_init(&setting->autolaunch_apps); -+ wl_array_init(&setting->autolaunch_apps); - - while (weston_config_next_section(config, &shell_section, &name)) { - int screen_id; -@@ -564,6 +629,12 @@ hmi_server_setting_create(struct weston_compositor *ec) - char *buff; - struct hmi_launch_rule *rule = NULL; - -+ if (!strcmp(name, "ivi-autolaunch")) { -+ char **s = wl_array_add(&setting->autolaunch_apps, sizeof(*s)); -+ weston_config_section_get_string(shell_section, "path", s, NULL); -+ continue; -+ } -+ - if (0 != strcmp(name, "ivi-layout-rule")) - continue; - -@@ -573,7 +644,7 @@ hmi_server_setting_create(struct weston_compositor *ec) - - weston_config_section_get_int(shell_section, "order", &order, -1); - weston_config_section_get_int(shell_section, "mode", &mode, -1); -- weston_config_section_get_int(shell_section, "focus_on", &focus_on, -1); -+ weston_config_section_get_int(shell_section, "focus_on", &focus_on, 0); - weston_config_section_get_int(shell_section, "screen", &screen_id, -1); - - if (0 == weston_config_section_get_string(shell_section, "crop_rect", -@@ -631,8 +702,10 @@ hmi_controller_destroy(struct wl_listener *listener, void *data) - - static void hmi_controller_launch_homescreen(struct hmi_controller *hmi_ctrl) - { -- if (hmi_ctrl->hmi_setting->homescreen_app) { -- if(system(hmi_ctrl->hmi_setting->homescreen_app)) { -+ char **app; -+ -+ wl_array_for_each(app, &hmi_ctrl->hmi_setting->autolaunch_apps) { -+ if(system(*app)) { - ; - } - } -@@ -674,6 +747,7 @@ hmi_controller_create(struct weston_compositor *ec) - &hmi_ctrl->destroy_listener); - - wl_list_init(&hmi_ctrl->layers_list); -+ wl_list_init(&hmi_ctrl->focus_history_list); - - free(pp_screen); - pp_screen = NULL; -@@ -719,6 +793,57 @@ initialize(struct hmi_controller *hmi_ctrl) - return 1; - } - -+static void -+switch_focus_bindings(struct weston_keyboard *keyboard, uint32_t time, -+ uint32_t key, void *data) -+{ -+ struct hmi_controller *hmi_ctrl = data; -+ struct hmi_controller_layer *hmi_ctrl_layer, *next_l, *cycle_l = NULL; -+ struct hmi_controller_surface *hmi_ctrl_surf; -+ bool pp = false; -+ -+ wl_list_for_each(hmi_ctrl_layer, &hmi_ctrl->layers_list, link) { -+ wl_list_for_each(hmi_ctrl_surf, &hmi_ctrl_layer->surfaces_list, link) { -+ if (hmi_ctrl_surf->focus) { -+ goto ff; -+ } -+ } -+ } -+ -+ hmi_ctrl_surf = NULL; -+ pp = true; -+ -+ff: -+ wl_list_for_each(next_l, &hmi_ctrl->layers_list, link) { -+ -+ if (pp) { -+ if (next_l->rule && next_l->rule->autofocus) { -+ cycle_l = next_l; -+ break; -+ } -+ } else { -+ if (next_l == hmi_ctrl_layer) { -+ pp = true; -+ continue; -+ } else { -+ if (next_l->rule && next_l->rule->autofocus) { -+ cycle_l = next_l; -+ break; -+ } -+ } -+ } -+ } -+ -+ if (!cycle_l) -+ return; -+ -+ move_kbd_focus(container_of(cycle_l->surfaces_list.next -+ , struct hmi_controller_surface -+ , link) -+ , hmi_ctrl, false); -+} -+ -+ - /***************************************************************************** - * exported functions - ****************************************************************************/ -@@ -753,5 +878,9 @@ controller_module_init(struct weston_compositor *ec, - - hmi_controller_launch_homescreen(hmi_ctrl); - -+ weston_compositor_add_key_binding(ec, KEY_TAB , MODIFIER_ALT, -+ switch_focus_bindings, hmi_ctrl); -+ weston_install_debug_key_binding(ec, 0); -+ - return 0; - } --- -2.4.5 - diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0002-ivi-shell-multi-screen-support-to-calcuration-of-a-m.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0002-ivi-shell-multi-screen-support-to-calcuration-of-a-m.patch deleted file mode 100644 index 35835f08c..000000000 --- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0002-ivi-shell-multi-screen-support-to-calcuration-of-a-m.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 5c3c97aecadd59231e3b99a021080b019e1bbea4 Mon Sep 17 00:00:00 2001 -From: Nobuhiko Tanibata -Date: Wed, 9 Dec 2015 15:39:26 +0900 -Subject: [PATCH 2/7] ivi-shell: multi screen support to calcuration of a mask - of weston_surface. - -A weston_surface is transformed to multi screen coordinate, global -coordinate by matrix:m now. - -Additionally, a mask needs to be calucated, taking account into, -- multi screen coordination: a destination rectangle of layer in the - coordination is easily calcurated by adding weston_output.{x,y} in - simple. This is because there is no scaled and rotated transformation. -- intersect inside of a screen the layer is assigned to. This is because - overlapped region of weston surface in another screen shall not be - displayed according to ivi use case. - -Signed-off-by: Nobuhiko Tanibata -Reviewed-by: Pekka Paalanen ---- - ivi-shell/ivi-layout.c | 36 +++++++++++++++++++++++++++++++----- - 1 file changed, 31 insertions(+), 5 deletions(-) - -diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c -index efc0da5..c8ea270 100644 ---- a/ivi-shell/ivi-layout.c -+++ b/ivi-shell/ivi-layout.c -@@ -665,15 +665,24 @@ calc_inverse_matrix_transform(const struct weston_matrix *matrix, - - /** - * This computes the whole transformation matrix:m from surface-local -- * coordinates to global coordinates. It is assumed that -- * weston_view::geometry.{x,y} are zero. -+ * coordinates to multi screens coordinate, which is global coordinates. -+ * It is assumed that weston_view::geometry.{x,y} are zero. - * - * Additionally, this computes the mask on surface-local coordinates as a - * ivi_rectangle. This can be set to weston_view_set_mask. - * - * The mask is computed by following steps -- * - destination rectangle of layer is inversed to surface-local cooodinates -- * by inversed matrix:m. -+ * - destination rectangle of layer is tansformed to multi screen coordinate, -+ * global coordinates. This is done by adding weston_output.{x,y} in simple -+ * because there is no scaled and rotated transformation. -+ * - destination rectangle of layer in multi screens coordinate needs to be -+ * intersected inside of a screen the layer is assigned to. This is because -+ * overlapped region of weston surface in another screen shall not be -+ * displayed according to ivi use case. -+ * - destination rectangle of layer -+ * - in multi screen coordinates, -+ * - and intersected inside of an assigned screen, -+ * is inversed to surface-local cooodinates by inversed matrix:m. - * - the area is intersected by intersected area between weston_surface and - * source rectangle of ivi_surface. - */ -@@ -706,7 +715,17 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface( - lp->dest_y, - lp->dest_width, - lp->dest_height }; -+ struct ivi_rectangle screen_dest_rect = { output->x, -+ output->y, -+ output->width, -+ output->height }; -+ struct ivi_rectangle layer_dest_rect_in_global = -+ { lp->dest_x + output->x, -+ lp->dest_y + output->y, -+ lp->dest_width, -+ lp->dest_height }; - struct ivi_rectangle surface_result; -+ struct ivi_rectangle layer_dest_rect_in_global_intersected; - - /* - * the whole transformation matrix:m from surface-local -@@ -729,9 +748,16 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface( - ivi_rectangle_intersect(&surface_source_rect, &weston_surface_rect, - &surface_result); - -+ /* -+ * destination rectangle of layer in multi screens coordinate -+ * is intersected to avoid displaying outside of an assigned screen. -+ */ -+ ivi_rectangle_intersect(&layer_dest_rect_in_global, &screen_dest_rect, -+ &layer_dest_rect_in_global_intersected); -+ - /* calc masking area of weston_surface from m */ - calc_inverse_matrix_transform(m, -- &layer_dest_rect, -+ &layer_dest_rect_in_global_intersected, - &surface_result, - result); - } --- -2.4.5 - diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0003-ivi-shell-avoid-update_prop-on-invisible-surfaces.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0003-ivi-shell-avoid-update_prop-on-invisible-surfaces.patch deleted file mode 100644 index 2509713ba..000000000 --- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0003-ivi-shell-avoid-update_prop-on-invisible-surfaces.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 679cc873528ffb3fd94306a01dcf9d6ffa8eb120 Mon Sep 17 00:00:00 2001 -From: Nobuhiko Tanibata -Date: Wed, 9 Dec 2015 15:36:58 +0900 -Subject: [PATCH 3/7] ivi-shell: avoid update_prop() on invisible surfaces - -For multi screen support, ivi_layout_screen to be taken account into -property change in commitChanges. - -Property change is now done in update_prop so to consider ivi_screen -property for caluculating transform of weston surface, ivi_layout_screen - is added as a parameter of update_prop. - -However, update_prop of weston_view of a ivi_surface can not be done -even if it is set on a screen. The propoerty change shall be done only -when a visibility of ivi_surface or ivi_layer which contains the -ivi_surface is ON. Such a condition shall be checked at commit_changes -as well to avoid calling update_prop, which actually updates -weston_views. - -Signed-off-by: Nobuhiko Tanibata -Reviewed-by: Pekka Paalanen ---- - ivi-shell/ivi-layout.c | 23 +++++++++++++++++++---- - 1 file changed, 19 insertions(+), 4 deletions(-) - -diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c -index c8ea270..9dbebb3 100644 ---- a/ivi-shell/ivi-layout.c -+++ b/ivi-shell/ivi-layout.c -@@ -763,16 +763,17 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface( - } - - static void --update_prop(struct ivi_layout_layer *ivilayer, -+update_prop(struct ivi_layout_screen *iviscrn, -+ struct ivi_layout_layer *ivilayer, - struct ivi_layout_surface *ivisurf) - { - struct weston_view *tmpview; - struct ivi_rectangle r; - bool can_calc = true; - -- if (!ivilayer->event_mask && !ivisurf->event_mask) { -+ /*In case of no prop change, this just returns*/ -+ if (!ivilayer->event_mask && !ivisurf->event_mask) - return; -- } - - update_opacity(ivilayer, ivisurf); - -@@ -828,8 +829,22 @@ commit_changes(struct ivi_layout *layout) - - wl_list_for_each(iviscrn, &layout->screen_list, link) { - wl_list_for_each(ivilayer, &iviscrn->order.layer_list, order.link) { -+ /* -+ * If ivilayer is invisible, weston_view of ivisurf doesn't -+ * need to be modified. -+ */ -+ if (ivilayer->prop.visibility == false) -+ continue; -+ - wl_list_for_each(ivisurf, &ivilayer->order.surface_list, order.link) { -- update_prop(ivilayer, ivisurf); -+ /* -+ * If ivilayer is invisible, weston_view of ivisurf doesn't -+ * need to be modified. -+ */ -+ if (ivisurf->prop.visibility == false) -+ continue; -+ -+ update_prop(iviscrn, ivilayer, ivisurf); - } - } - } --- -2.4.5 - diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0004-ivi-shell-fix-layout_layer.view_list-is-not-initiliz.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0004-ivi-shell-fix-layout_layer.view_list-is-not-initiliz.patch deleted file mode 100644 index ea5ef0024..000000000 --- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0004-ivi-shell-fix-layout_layer.view_list-is-not-initiliz.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 2a07b287851c974d684aa152486a63062aadd219 Mon Sep 17 00:00:00 2001 -From: Nobuhiko Tanibata -Date: Wed, 25 Nov 2015 23:36:57 +0900 -Subject: [PATCH 4/7] ivi-shell: fix layout_layer.view_list is not initilized - per a screen. - -This is potential bug when it supports several screens. If view_list is -initilized here, the views, which are set by the previous screen, are -cleared. So View list shall be initilized in front of wl_list_for_each -of all screens. - -Signed-off-by: Nobuhiko Tanibata -Reviewed-by: Pekka Paalanen ---- - ivi-shell/ivi-layout.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c -index 9dbebb3..a7c5e22 100644 ---- a/ivi-shell/ivi-layout.c -+++ b/ivi-shell/ivi-layout.c -@@ -1000,6 +1000,9 @@ commit_screen_list(struct ivi_layout *layout) - struct ivi_layout_layer *ivilayer = NULL; - struct ivi_layout_layer *next = NULL; - struct ivi_layout_surface *ivisurf = NULL; -+ -+ /* Clear view list of layout ivi_layer */ -+ wl_list_init(&layout->layout_layer.view_list.link); - - wl_list_for_each(iviscrn, &layout->screen_list, link) { - if (iviscrn->order.dirty) { -@@ -1024,9 +1027,6 @@ commit_screen_list(struct ivi_layout *layout) - iviscrn->order.dirty = 0; - } - -- /* Clear view list of layout ivi_layer */ -- wl_list_init(&layout->layout_layer.view_list.link); -- - wl_list_for_each(ivilayer, &iviscrn->order.layer_list, order.link) { - if (ivilayer->prop.visibility == false) - continue; --- -2.4.5 - diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-ivi-shell-convert-from-screen-to-global-coordinates.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-ivi-shell-convert-from-screen-to-global-coordinates.patch deleted file mode 100644 index f22af13e6..000000000 --- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-ivi-shell-convert-from-screen-to-global-coordinates.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 26c4fc86516626e2e463171e4016ccd851125342 Mon Sep 17 00:00:00 2001 -From: Nobuhiko Tanibata -Date: Wed, 9 Dec 2015 15:38:41 +0900 -Subject: [PATCH 5/7] ivi-shell: convert from screen to global coordinates - -In single screen, the coordinates of layer local coordinates are the -same as global coordinates. However, to support multi screens, the -layer-local coordinates shall be transformed to multi screen coordinates, -which is global coordinates. The abosolute coordinates of a screen in global -stored in (x,y) of output of its weston output so it shall be used to -transform layer-local to global coordinates. - -Signed-off-by: Nobuhiko Tanibata -Reviewed-by: Pekka Paalanen ---- - ivi-shell/ivi-layout.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c -index a7c5e22..c7506de 100644 ---- a/ivi-shell/ivi-layout.c -+++ b/ivi-shell/ivi-layout.c -@@ -688,6 +688,7 @@ calc_inverse_matrix_transform(const struct weston_matrix *matrix, - */ - static void - calc_surface_to_global_matrix_and_mask_to_weston_surface( -+ struct ivi_layout_screen *iviscrn, - struct ivi_layout_layer *ivilayer, - struct ivi_layout_surface *ivisurf, - struct weston_matrix *m, -@@ -695,6 +696,7 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface( - { - const struct ivi_layout_surface_properties *sp = &ivisurf->prop; - const struct ivi_layout_layer_properties *lp = &ivilayer->prop; -+ struct weston_output *output = iviscrn->output; - struct ivi_rectangle weston_surface_rect = { 0, - 0, - ivisurf->surface->width, -@@ -732,7 +734,9 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface( - * coordinates to global coordinates, which is computed by - * two steps, - * - surface-local coordinates to layer-local coordinates -- * - layer-local coordinates to global coordinates -+ * - layer-local coordinates to a single screen-local coordinates -+ * - a single screen-local coordinates to multi screen coordinates, -+ * which is global coordinates. - */ - calc_transformation_matrix(&surface_source_rect, - &surface_dest_rect, -@@ -742,6 +746,8 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface( - &layer_dest_rect, - lp->orientation, m); - -+ weston_matrix_translate(m, output->x, output->y, 0.0f); -+ - /* this intersected ivi_rectangle would be used for masking - * weston_surface - */ -@@ -798,7 +804,7 @@ update_prop(struct ivi_layout_screen *iviscrn, - weston_matrix_init(&ivisurf->transform.matrix); - - calc_surface_to_global_matrix_and_mask_to_weston_surface( -- ivilayer, ivisurf, &ivisurf->transform.matrix, &r); -+ iviscrn, ivilayer, ivisurf, &ivisurf->transform.matrix, &r); - - if (tmpview != NULL) { - weston_view_set_mask(tmpview, r.x, r.y, r.width, r.height); --- -2.4.5 - diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0006-ivi-shell-remove-a-code-which-expects-only-a-screen-.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0006-ivi-shell-remove-a-code-which-expects-only-a-screen-.patch deleted file mode 100644 index e0f5de37d..000000000 --- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0006-ivi-shell-remove-a-code-which-expects-only-a-screen-.patch +++ /dev/null @@ -1,30 +0,0 @@ -From ba9399549000bf581c5b309dd7a26ee818159d70 Mon Sep 17 00:00:00 2001 -From: Nobuhiko Tanibata -Date: Wed, 25 Nov 2015 23:37:09 +0900 -Subject: [PATCH 6/7] ivi-shell: remove a code which expects only a screen in - the system. - -It breaks from wl_list_for_each of screens when the frist screen found. - -Signed-off-by: Nobuhiko Tanibata -Reviewed-by: Pekka Paalanen ---- - ivi-shell/ivi-layout.c | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c -index c7506de..85cb457 100644 ---- a/ivi-shell/ivi-layout.c -+++ b/ivi-shell/ivi-layout.c -@@ -1056,8 +1056,6 @@ commit_screen_list(struct ivi_layout *layout) - ivisurf->surface->output = iviscrn->output; - } - } -- -- break; - } - } - --- -2.4.5 - diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0007-ivi-shell-layout-Export-surface-destroy-callback.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0007-ivi-shell-layout-Export-surface-destroy-callback.patch deleted file mode 100644 index 1fe7cf5aa..000000000 --- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0007-ivi-shell-layout-Export-surface-destroy-callback.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 9f47b84c94c71ef8bb1459c4c2b2759343432558 Mon Sep 17 00:00:00 2001 -From: Volodymyr Riazantsev -Date: Fri, 1 Jul 2016 22:38:43 -0400 -Subject: [PATCH 7/8] ivi-shell: layout: Export surface destroy callback - -[HACK] -Some applications still using regular shell interface and -thereby must be handled through weston native notifications. - -Only one and single notification callback accepted and it can be -in external module. - -So we need to export call back for remove surface inside layout -controlled. - -This is a obvious hack. - -Signed-off-by: Volodymyr Riazantsev -Signed-off-by: Karthik Ramanan ---- - ivi-shell/ivi-layout-export.h | 7 +++++++ - ivi-shell/ivi-layout.c | 4 +++- - 2 files changed, 10 insertions(+), 1 deletion(-) - -diff --git a/ivi-shell/ivi-layout-export.h b/ivi-shell/ivi-layout-export.h -index 7f93c82..f5ea54e 100644 ---- a/ivi-shell/ivi-layout-export.h -+++ b/ivi-shell/ivi-layout-export.h -@@ -823,6 +823,13 @@ struct ivi_controller_interface { - * \return id of ivi_screen - */ - uint32_t (*get_id_of_screen)(struct ivi_layout_screen *iviscrn); -+ -+ /** -+ * \brief HACK. Destroy surface. -+ * -+ */ -+ void (*surface_destroy)(struct ivi_layout_surface *ivisurf); -+ - }; - - #ifdef __cplusplus -diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c -index 85cb457..7d2daa1 100644 ---- a/ivi-shell/ivi-layout.c -+++ b/ivi-shell/ivi-layout.c -@@ -3016,7 +3016,9 @@ static struct ivi_controller_interface ivi_controller_interface = { - /** - * screen controller interfaces part2 - */ -- .get_id_of_screen = ivi_layout_get_id_of_screen -+ .get_id_of_screen = ivi_layout_get_id_of_screen, -+ -+ .surface_destroy = ivi_layout_surface_destroy - }; - - int --- -2.4.5 - diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0008-ivi-shell-Add-simple-IVI-shell-layout-controller.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0008-ivi-shell-Add-simple-IVI-shell-layout-controller.patch deleted file mode 100644 index 4e63c7a0b..000000000 --- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0008-ivi-shell-Add-simple-IVI-shell-layout-controller.patch +++ /dev/null @@ -1,589 +0,0 @@ -From c89c2d63db3cbe83fb1ddd983e4b0ffe87fab296 Mon Sep 17 00:00:00 2001 -From: Volodymyr Riazantsev -Date: Fri, 1 Jul 2016 00:28:50 -0400 -Subject: [PATCH 8/8] ivi-shell: Add simple IVI shell layout controller - -Simple IVI shell layout controller. -Assign only one application to primary display. -Second and rest application will go to secondary display if it's -present. - -Signed-off-by: Volodymyr Riazantsev -Signed-off-by: Karthik Ramanan ---- - Makefile.am | 12 +- - ivi-shell/ivi-layout-controller-ti.c | 532 +++++++++++++++++++++++++++++++++++ - 2 files changed, 543 insertions(+), 1 deletion(-) - create mode 100644 ivi-shell/ivi-layout-controller-ti.c - -diff --git a/Makefile.am b/Makefile.am -index 55aed6d..a9fe3c8 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -868,7 +868,8 @@ if ENABLE_IVI_SHELL - - module_LTLIBRARIES += \ - $(ivi_shell) \ -- $(hmi_controller) -+ $(hmi_controller) \ -+ $(layout_controller) - - ivi_shell = ivi-shell.la - ivi_shell_la_LDFLAGS = -module -avoid-version -@@ -903,6 +904,15 @@ nodist_hmi_controller_la_SOURCES = \ - - BUILT_SOURCES += $(nodist_hmi_controller_la_SOURCES) - -+layout_controller = layout-controller.la -+layout_controller_la_LDFLAGS = -module -avoid-version -+layout_controller_la_LIBADD = $(COMPOSITOR_LIBS) libshared.la -+layout_controller_la_CFLAGS = $(AM_CFLAGS) $(COMPOSITOR_CFLAGS) -+layout_controller_la_SOURCES = \ -+ ivi-shell/ivi-layout-export.h \ -+ ivi-shell/ivi-layout-controller-ti.c \ -+ shared/helpers.h -+ - endif - - -diff --git a/ivi-shell/ivi-layout-controller-ti.c b/ivi-shell/ivi-layout-controller-ti.c -new file mode 100644 -index 0000000..b7cf436 ---- /dev/null -+++ b/ivi-shell/ivi-layout-controller-ti.c -@@ -0,0 +1,532 @@ -+/* -+ * Copyright (C) 2016 GlobalLogic Inc -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject to -+ * the following conditions: -+ * -+ * The above copyright notice and this permission notice (including the -+ * next paragraph) shall be included in all copies or substantial -+ * portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -+ * SOFTWARE. -+ */ -+ -+#include -+#include -+#include -+ -+#include "ivi-layout-export.h" -+ -+#ifndef container_of -+#define container_of(ptr, type, member) ({ \ -+ const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \ -+ (type *)( (char *)__mptr - offsetof(type,member) );}) -+#endif -+ -+#ifndef BIT -+#define BIT(bit) (1 << (bit)) -+#endif -+ -+#define __MODULE__ "layout-controller" -+#define DL_ERR BIT(0) -+#define DL_WRN BIT(1) -+#define DL_DBG BIT(2) -+#define DL_ALL (~0) -+ -+static unsigned debug_level = DL_ALL; -+ -+#define __print_log(__dl__, ... ) \ -+if (__dl__ & debug_level) \ -+ fprintf(__dl__ == DL_ERR ? stderr : stdout," ["__MODULE__"]:" __VA_ARGS__); -+ -+#define pr_err(...) __print_log(DL_ERR, "E: " __VA_ARGS__) -+#define pr_dbg(...) __print_log(DL_DBG, "D: " __VA_ARGS__) -+#define pr_wrn(...) __print_log(DL_WRN, "W: " __VA_ARGS__) -+#define TRACE() __print_log(DL_DBG, "TR: %s - %d\n", __func__, __LINE__) -+ -+ -+#define WINDOWS_TITLE_HEIGHT 30 -+#define DEFAULT_SURFACE_ID_FOR_WL_SHELL_APP 0x80000000 -+ -+/***************************************************************************** -+ * structure, globals -+ ****************************************************************************/ -+struct hmi_controller_layer { -+ struct ivi_layout_layer *ivilayer; -+ uint32_t id_layer; -+ int32_t x; -+ int32_t y; -+ int32_t width; -+ int32_t height; -+ int32_t num_surfaces; -+ pid_t pid; -+ struct wl_list link; -+ struct wl_list screen_link; -+ struct wl_list surfaces_list; -+}; -+ -+struct hmi_controller_surface { -+ void *controller; -+ void *ivisurf; -+ struct wl_list link; -+ struct wl_listener destroy_listener; -+}; -+ -+struct hmi_controller_screen { -+ struct ivi_layout_screen *iviscrn; -+ struct wl_list layers_list; -+}; -+ -+struct hmi_server_setting { -+ uint32_t base_layer_id; -+ int32_t panel_height; -+ char *ivi_homescreen; -+}; -+ -+struct hmi_controller { -+ int32_t current_layer; -+ int32_t current_screen; -+ int32_t screens_count; -+ int32_t workspace_count; -+ -+ struct hmi_server_setting *hmi_setting; -+ struct hmi_controller_screen screens[4]; -+ struct hmi_controller_layer application_layer; -+ struct weston_compositor *compositor; -+ struct wl_listener destroy_listener; -+ struct wl_client *user_interface; -+ struct wl_list layers_list; -+}; -+ -+const struct ivi_controller_interface *ivi_controller_interface; -+ -+static void -+hmi_ctrl_surface_destroy(struct wl_listener *listener, void *data); -+ -+int -+controller_module_init(struct weston_compositor *ec, -+ int *argc, char *argv[], -+ const struct ivi_controller_interface *interface, -+ size_t interface_version); -+ -+/***************************************************************************** -+ * local functions -+ ****************************************************************************/ -+static void * -+fail_on_null(void *p, size_t size, char *file, int32_t line) -+{ -+ if (size && !p) { -+ weston_log("%s(%d) %zd: out of memory\n", file, line, size); -+ exit(EXIT_FAILURE); -+ } -+ -+ return p; -+} -+ -+static void * -+mem_alloc(size_t size, char *file, int32_t line) -+{ -+ return fail_on_null(calloc(1, size), size, file, line); -+} -+ -+#define MEM_ALLOC(s) mem_alloc((s),__FILE__,__LINE__) -+ -+/** -+ * Internal method to create ivi_layer with hmi_controller_layer and -+ * add to a ivi_screen -+ */ -+static void -+create_layer(struct ivi_layout_screen *iviscrn, -+ struct hmi_controller_layer *layer) -+{ -+ int32_t ret = 0; -+ -+ layer->ivilayer = -+ ivi_controller_interface->layer_create_with_dimension(layer->id_layer, -+ layer->width, -+ layer->height); -+ assert(layer->ivilayer != NULL); -+ -+ ret = ivi_controller_interface->screen_add_layer(iviscrn, layer->ivilayer); -+ -+ assert(!ret); -+ -+ ret = ivi_controller_interface->layer_set_destination_rectangle(layer->ivilayer, -+ layer->x, layer->y, -+ layer->width, -+ layer->height); -+ assert(!ret); -+ -+ ret = ivi_controller_interface->layer_set_visibility(layer->ivilayer, true); -+ -+ assert(!ret); -+ -+ ivi_controller_interface->commit_changes(); -+ -+} -+ -+static struct hmi_controller_layer -+*get_layer_for_surface(struct hmi_controller *hmi_ctrl -+ , struct ivi_layout_surface *ivisurf -+ , bool create) -+{ -+ struct hmi_controller_layer *layer; -+ struct weston_surface *surface; -+ int32_t i = 0; -+ struct wl_client *client; -+ struct ivi_layout_screen *iviscrn = NULL; -+ struct weston_output *output = NULL; -+ pid_t pid; -+ uid_t uid; -+ gid_t gid; -+ -+ surface = ivi_controller_interface->surface_get_weston_surface(ivisurf); -+ -+ if (!surface) -+ goto exit; -+ -+ client = wl_resource_get_client(surface->resource); -+ -+ wl_client_get_credentials(client, &pid, &uid, &gid); -+ -+ wl_list_for_each(layer, &hmi_ctrl->layers_list, link) { -+ if (layer->pid == pid) { -+ pr_dbg("Existed layer for PID=%d was found\n", pid); -+ return layer; -+ } -+ } -+ -+ if (!(create && hmi_ctrl->screens_count)) -+ goto exit; -+ -+ pr_dbg("Existed layer for PID=%d was not found. Creating new\n", pid); -+ -+ for(;; i++) { -+ if (wl_list_empty(&hmi_ctrl->screens[i].layers_list) || -+ (i == (hmi_ctrl->screens_count - 1))) -+ break; -+ }; -+ -+ iviscrn = hmi_ctrl->screens[i].iviscrn; -+ -+ layer = calloc(1, sizeof *layer); -+ -+ output = ivi_controller_interface->screen_get_output(iviscrn); -+ -+ wl_list_init(&layer->link); -+ wl_list_init(&layer->screen_link); -+ wl_list_init(&layer->surfaces_list); -+ -+ layer->width = output->width; -+ layer->height = output->height + WINDOWS_TITLE_HEIGHT; -+ layer->id_layer = hmi_ctrl->hmi_setting->base_layer_id++; -+ layer->pid = pid; -+ -+ create_layer(iviscrn, layer); -+ -+ wl_list_insert(&hmi_ctrl->layers_list, &layer->link); -+ wl_list_insert(&hmi_ctrl->screens[i].layers_list, &layer->screen_link); -+ -+ return layer; -+ -+exit: -+ return NULL; -+} -+ -+static void -+set_notification_create_surface(struct ivi_layout_surface *ivisurf, -+ void *userdata) -+{ -+ struct hmi_controller *hmi_ctrl = userdata; -+ struct hmi_controller_layer *hmi_ctrl_layer = NULL; -+ struct hmi_controller_surface *hmi_ctrl_surf = NULL; -+ struct ivi_layout_layer *dest_layer; -+ struct weston_surface *surface; -+ -+ wl_list_for_each(hmi_ctrl_layer, &hmi_ctrl->layers_list, link) { -+ wl_list_for_each(hmi_ctrl_surf, &hmi_ctrl_layer->surfaces_list, link) { -+ if (hmi_ctrl_surf->ivisurf == ivisurf) { -+ pr_dbg("Surface was already configured. Skip add to list\n"); -+ return; -+ } -+ } -+ } -+ -+ pr_dbg("Surface create: add to list and get the layer\n"); -+ -+ hmi_ctrl_layer = get_layer_for_surface(hmi_ctrl, ivisurf, true); -+ dest_layer = hmi_ctrl_layer->ivilayer; -+ -+ ivi_controller_interface->layer_add_surface(dest_layer, ivisurf); -+ -+ hmi_ctrl_surf = calloc(1, sizeof(*hmi_ctrl_surf)); -+ hmi_ctrl_surf->ivisurf = ivisurf; -+ wl_list_init(&hmi_ctrl_surf->link); -+ wl_list_insert(&hmi_ctrl_layer->surfaces_list, &hmi_ctrl_surf->link); -+ -+ -+ /* -+ * Set destroy signal for surface -+ * HACK: We trying to track surfaces were created by wl_shell_emulator -+ */ -+ if (ivi_controller_interface->get_id_of_surface(ivisurf) >= -+ DEFAULT_SURFACE_ID_FOR_WL_SHELL_APP) { -+ surface = ivi_controller_interface->surface_get_weston_surface(ivisurf); -+ hmi_ctrl_surf->destroy_listener.notify = hmi_ctrl_surface_destroy; -+ wl_signal_add(&surface->destroy_signal, &hmi_ctrl_surf->destroy_listener); -+ hmi_ctrl_surf->controller = userdata; -+ } -+} -+ -+static void -+set_notification_remove_surface(struct ivi_layout_surface *ivisurf, -+ void *userdata) -+{ -+ struct hmi_controller *hmi_ctrl = userdata; -+ struct hmi_controller_layer *hmi_ctrl_layer = NULL; -+ struct hmi_controller_surface *surf = NULL; -+ struct ivi_layout_layer *dest_layer; -+ -+ wl_list_for_each(hmi_ctrl_layer, &hmi_ctrl->layers_list, link) { -+ wl_list_for_each(surf, &hmi_ctrl_layer->surfaces_list, link) { -+ if (surf->ivisurf == ivisurf) { -+ pr_dbg("Surface remove: surface was found\n"); -+ goto remove; -+ } -+ } -+ } -+ -+ goto exit; -+ -+remove: -+ dest_layer = hmi_ctrl_layer->ivilayer; -+ -+ wl_list_remove(&surf->link); -+ -+ ivi_controller_interface->layer_remove_surface(dest_layer, ivisurf); -+ -+ if (wl_list_empty(&hmi_ctrl_layer->surfaces_list)) { -+ wl_list_remove(&hmi_ctrl_layer->link); -+ wl_list_remove(&hmi_ctrl_layer->screen_link); -+ ivi_controller_interface->layer_destroy(dest_layer); -+ free(hmi_ctrl_layer); -+ } -+ -+ free(surf); -+ -+exit: -+ ivi_controller_interface->commit_changes(); -+} -+ -+static void -+hmi_ctrl_surface_destroy(struct wl_listener *listener, void *data) -+{ -+ struct hmi_controller_surface *hmi_ctrl_surface = -+ container_of(listener, struct hmi_controller_surface, -+ destroy_listener); -+ -+ pr_dbg("Try to remove surface by direct notification\n"); -+ -+ ivi_controller_interface->surface_destroy(hmi_ctrl_surface->ivisurf); -+} -+ -+static void -+set_notification_configure_surface(struct ivi_layout_surface *ivisurf, -+ void *userdata) -+{ -+ struct hmi_controller *hmi_ctrl = userdata; -+ struct hmi_controller_layer *hmi_ctrl_layer = NULL; -+ struct weston_surface *surface; -+ struct hmi_controller_surface *hmi_ctrl_surf = NULL; -+ -+ wl_list_for_each(hmi_ctrl_layer, &hmi_ctrl->layers_list, link) { -+ wl_list_for_each(hmi_ctrl_surf, &hmi_ctrl_layer->surfaces_list, link) { -+ if (hmi_ctrl_surf->ivisurf == ivisurf) { -+ pr_dbg("Surface was already configured. Skip add to list\n"); -+ goto found; -+ } -+ } -+ } -+ -+ hmi_ctrl_layer = NULL; -+found: -+ surface = ivi_controller_interface->surface_get_weston_surface(ivisurf); -+ -+ if (surface) { -+ -+ ivi_controller_interface->surface_set_source_rectangle( -+ ivisurf, 0, WINDOWS_TITLE_HEIGHT, surface->width, -+ surface->height); -+ -+#if 0 -+ ivi_controller_interface->surface_set_destination_rectangle( -+ ivisurf, 0, 0, surface->width, surface->height); -+#else -+ if (hmi_ctrl_layer) { -+ ivi_controller_interface->surface_set_destination_rectangle( -+ ivisurf, 0, 0, hmi_ctrl_layer->width, hmi_ctrl_layer->height); -+ } else { -+ ivi_controller_interface->surface_set_destination_rectangle( -+ ivisurf, 0, 0, surface->width, surface->height); -+ } -+#endif -+ ivi_controller_interface->surface_set_visibility(ivisurf, true); -+ ivi_controller_interface->commit_changes(); -+ } -+} -+ -+static struct hmi_server_setting * -+hmi_server_setting_create(struct weston_compositor *ec) -+{ -+ struct hmi_server_setting *setting = MEM_ALLOC(sizeof(*setting)); -+ struct weston_config *config = ec->config; -+ struct weston_config_section *shell_section = NULL; -+ -+ shell_section = weston_config_get_section(config, "ivi-shell", -+ NULL, NULL); -+ -+ weston_config_section_get_uint(shell_section, "base-layer-id", -+ &setting->base_layer_id, 1000); -+ -+ setting->panel_height = 30; -+ -+ return setting; -+} -+ -+static void -+hmi_controller_destroy(struct wl_listener *listener, void *data) -+{ -+ struct hmi_controller *hmi_ctrl = -+ container_of(listener, struct hmi_controller, destroy_listener); -+ -+ free(hmi_ctrl->hmi_setting); -+ free(hmi_ctrl); -+} -+ -+static struct hmi_controller * -+hmi_controller_create(struct weston_compositor *ec) -+{ -+ struct ivi_layout_screen **pp_screen = NULL; -+ struct ivi_layout_screen *iviscrn = NULL; -+ int32_t screen_length = 0; -+ struct hmi_controller *hmi_ctrl = MEM_ALLOC(sizeof(*hmi_ctrl)); -+ int i, j = 0; -+ -+ hmi_ctrl->hmi_setting = hmi_server_setting_create(ec); -+ hmi_ctrl->compositor = ec; -+ -+ ivi_controller_interface->get_screens(&screen_length, &pp_screen); -+ -+ for (i = screen_length; i-- ; j++) { -+ -+ iviscrn = pp_screen[i]; -+ hmi_ctrl->screens[j].iviscrn = iviscrn; -+ wl_list_init(&hmi_ctrl->screens[i].layers_list); -+ -+ hmi_ctrl->screens_count++; -+ } -+ -+ ivi_controller_interface->add_notification_create_surface( -+ set_notification_create_surface, hmi_ctrl); -+ ivi_controller_interface->add_notification_remove_surface( -+ set_notification_remove_surface, hmi_ctrl); -+ ivi_controller_interface->add_notification_configure_surface( -+ set_notification_configure_surface, hmi_ctrl); -+ -+ hmi_ctrl->destroy_listener.notify = hmi_controller_destroy; -+ wl_signal_add(&hmi_ctrl->compositor->destroy_signal, -+ &hmi_ctrl->destroy_listener); -+ -+ wl_list_init(&hmi_ctrl->layers_list); -+ -+ free(pp_screen); -+ pp_screen = NULL; -+ -+ return hmi_ctrl; -+} -+ -+WL_EXPORT const struct wl_interface ivi_hmi_controller_interface = { -+ "ivi_layout_controller", 1, -+ 0, NULL, -+ 0, NULL, -+}; -+ -+static void -+bind_hmi_controller(struct wl_client *client, -+ void *data, uint32_t version, uint32_t id) -+{ -+ struct hmi_controller *hmi_ctrl = data; -+ -+ if (hmi_ctrl->user_interface != client) { -+ struct wl_resource *res = wl_client_get_object(client, 1); -+ wl_resource_post_error(res, -+ WL_DISPLAY_ERROR_INVALID_OBJECT, -+ "hmi-controller failed: permission denied"); -+ return; -+ } -+ -+ wl_resource_create(client, &ivi_hmi_controller_interface, 1, id); -+} -+ -+static int32_t -+initialize(struct hmi_controller *hmi_ctrl) -+{ -+ struct config_command { -+ char *key; -+ uint32_t *dest; -+ }; -+ -+ struct weston_config *config = hmi_ctrl->compositor->config; -+ -+ weston_config_get_section(config, "ivi-shell", NULL, NULL); -+ -+ return 1; -+} -+ -+/***************************************************************************** -+ * exported functions -+ ****************************************************************************/ -+WL_EXPORT int -+controller_module_init(struct weston_compositor *ec, -+ int *argc, char *argv[], -+ const struct ivi_controller_interface *interface, -+ size_t interface_version) -+{ -+ struct hmi_controller *hmi_ctrl = NULL; -+ -+ -+ if (interface_version < sizeof(struct ivi_controller_interface)) { -+ weston_log("ivi-layout-controller-ti: version mismatch of controller interface"); -+ return -1; -+ } -+ -+ ivi_controller_interface = interface; -+ -+ hmi_ctrl = hmi_controller_create(ec); -+ -+ if (!initialize(hmi_ctrl)) { -+ return -1; -+ } -+ -+ if (wl_global_create(ec->wl_display, -+ &ivi_hmi_controller_interface, 1, -+ hmi_ctrl, bind_hmi_controller) == NULL) { -+ return -1; -+ } -+ -+ weston_log("ivi-layout-controller-ti: Successfully started."); -+ -+ return 0; -+} --- -2.4.5 - diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/dra7xx-evm/weston.ini b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/dra7xx-evm/weston.ini index 7e009fc2b..f812b23c5 100644 --- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/dra7xx-evm/weston.ini +++ b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/dra7xx-evm/weston.ini @@ -3,33 +3,9 @@ backend=drm-backend.so shell=ivi-shell.so [ivi-shell] -ivi-module=layout-controller.so,wl-shell-emulator.so +ivi-module=ivi-controller.so,wl-shell-emulator.so ivi-input-module=ivi-input-controller.so -[ivi-layout-rule] -application=HomeScreen -screen=0 -mode=1 - [output] name=Unknown-1 transform=270 - -#Retain this section as a reference -#[ivi-layout-rule] -## Application name -#application=some_app -## mode:0 - native size, 1 - full screen -#mode=1 -## order:0 - always on top -#order=0 -## screen id -#screen=2 -## src_rect ignored -#src_rect=1,2,3,4 -## destination -#dest_rect=5,6,7,8 -## borders to crop (left,top,righ,bot) -#crop_rect=9,10,11,12 -## ignored -#focus_on=1 diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston_1.9.0.bbappend b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston_1.9.0.bbappend index 3c35ad821..34aeca46f 100644 --- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston_1.9.0.bbappend +++ b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston_1.9.0.bbappend @@ -19,17 +19,3 @@ SRC_URI += " \ " RDEPENDS_${PN}_remove = "weston-conf" - -SRC_URI += " \ - file://0001-ivi-shell-fix-TODO-which-expects-only-one-screen-in-.patch \ - file://0002-ivi-shell-multi-screen-support-to-calcuration-of-a-m.patch \ - file://0003-ivi-shell-avoid-update_prop-on-invisible-surfaces.patch \ - file://0004-ivi-shell-fix-layout_layer.view_list-is-not-initiliz.patch \ - file://0005-ivi-shell-convert-from-screen-to-global-coordinates.patch \ - file://0006-ivi-shell-remove-a-code-which-expects-only-a-screen-.patch \ - file://0007-ivi-shell-layout-Export-surface-destroy-callback.patch \ - file://0008-ivi-shell-Add-simple-IVI-shell-layout-controller.patch \ - file://0001-ivi-shell-Add-autolaunch-and-launch-rules-functional.patch \ - file://0001-ivi-shell-layer-controller-ti-Improve-functionality.patch \ - file://0001-ivi-shell-Add-screenshooter-option.patch \ - " -- cgit 1.2.3-korg