meta-ti: weston: remove unneeded ivi shell patches and use standard ivi-controller 89/7889/1
authorMatt Porter <mporter@konsulko.com>
Tue, 27 Dec 2016 22:50:41 +0000 (00:50 +0200)
committerMatt Porter <mporter@konsulko.com>
Tue, 27 Dec 2016 22:50:41 +0000 (00:50 +0200)
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 <mporter@konsulko.com>
13 files changed:
meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-Add-autolaunch-and-launch-rules-functional.patch [deleted file]
meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-Add-screenshooter-option.patch [deleted file]
meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-fix-TODO-which-expects-only-one-screen-in-.patch [deleted file]
meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-ivi-shell-layer-controller-ti-Improve-functionality.patch [deleted file]
meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0002-ivi-shell-multi-screen-support-to-calcuration-of-a-m.patch [deleted file]
meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0003-ivi-shell-avoid-update_prop-on-invisible-surfaces.patch [deleted file]
meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0004-ivi-shell-fix-layout_layer.view_list-is-not-initiliz.patch [deleted file]
meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-ivi-shell-convert-from-screen-to-global-coordinates.patch [deleted file]
meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0006-ivi-shell-remove-a-code-which-expects-only-a-screen-.patch [deleted file]
meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0007-ivi-shell-layout-Export-surface-destroy-callback.patch [deleted file]
meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0008-ivi-shell-Add-simple-IVI-shell-layout-controller.patch [deleted file]
meta-agl-bsp/meta-ti/recipes-arago/weston/weston/dra7xx-evm/weston.ini
meta-agl-bsp/meta-ti/recipes-arago/weston/weston_1.9.0.bbappend

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 (file)
index b6b32ae..0000000
+++ /dev/null
@@ -1,467 +0,0 @@
-From 2e731255404e0efb0df1ede8d0b0a32ac011b420 Mon Sep 17 00:00:00 2001
-From: Volodymyr Riazantsev <volodymyr.riazantsev@globallogic.com>
-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 <volodymyr.riazantsev@globallogic.com>
-Signed-off-by: Karthik Ramanan <a0393906@ti.com>
----
- 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 <string.h>
- #include <assert.h>
-+#include <fcntl.h>
-+#include <unistd.h>
-+
- #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 (file)
index aa45011..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-From 6189fb7936f469eab53db712f31dc8276075ff5e Mon Sep 17 00:00:00 2001
-From: Volodymyr Riazantsev <volodymyr.riazantsev@globallogic.com>
-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 <volodymyr.riazantsev@globallogic.com>
-Signed-off-by: Karthik Ramanan <a0393906@ti.com>
----
- 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 (file)
index d2af15e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-From 93ceff13467e7fb1bee38c0ab6f587f5f99cc594 Mon Sep 17 00:00:00 2001
-From: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>
-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 <NOBUHIKO_TANIBATA@xddp.denso.co.jp>
-Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
----
- 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 (file)
index 7db4934..0000000
+++ /dev/null
@@ -1,326 +0,0 @@
-From 70f5b755b00d5eab576ed897a8301367b0e367a6 Mon Sep 17 00:00:00 2001
-From: Volodymyr Riazantsev <volodymyr.riazantsev@globallogic.com>
-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 <volodymyr.riazantsev@globallogic.com>
-Signed-off-by: Karthik Ramanan <a0393906@ti.com>
----
- 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 <fcntl.h>
- #include <unistd.h>
-+#include <linux/input.h>
-+
- #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 (file)
index 35835f0..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-From 5c3c97aecadd59231e3b99a021080b019e1bbea4 Mon Sep 17 00:00:00 2001
-From: Nobuhiko Tanibata <nobuhiko_tanibata@xddp.denso.co.jp>
-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 <nobuhiko_tanibata@xddp.denso.co.jp>
-Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
----
- 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 (file)
index 2509713..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-From 679cc873528ffb3fd94306a01dcf9d6ffa8eb120 Mon Sep 17 00:00:00 2001
-From: Nobuhiko Tanibata <nobuhiko_tanibata@xddp.denso.co.jp>
-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 <nobuhiko_tanibata@xddp.denso.co.jp>
-Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
----
- 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 (file)
index ea5ef00..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-From 2a07b287851c974d684aa152486a63062aadd219 Mon Sep 17 00:00:00 2001
-From: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>
-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 <NOBUHIKO_TANIBATA@xddp.denso.co.jp>
-Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
----
- 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 (file)
index f22af13..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-From 26c4fc86516626e2e463171e4016ccd851125342 Mon Sep 17 00:00:00 2001
-From: Nobuhiko Tanibata <nobuhiko_tanibata@xddp.denso.co.jp>
-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 <nobuhiko_tanibata@xddp.denso.co.jp>
-Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
----
- 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 (file)
index e0f5de3..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-From ba9399549000bf581c5b309dd7a26ee818159d70 Mon Sep 17 00:00:00 2001
-From: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>
-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 <NOBUHIKO_TANIBATA@xddp.denso.co.jp>
-Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
----
- 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 (file)
index 1fe7cf5..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-From 9f47b84c94c71ef8bb1459c4c2b2759343432558 Mon Sep 17 00:00:00 2001
-From: Volodymyr Riazantsev <volodymyr.riazantsev@globallogic.com>
-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 <volodymyr.riazantsev@globallogic.com>
-Signed-off-by: Karthik Ramanan <a0393906@ti.com>
----
- 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 (file)
index 4e63c7a..0000000
+++ /dev/null
@@ -1,589 +0,0 @@
-From c89c2d63db3cbe83fb1ddd983e4b0ffe87fab296 Mon Sep 17 00:00:00 2001
-From: Volodymyr Riazantsev <volodymyr.riazantsev@globallogic.com>
-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 <volodymyr.riazantsev@globallogic.com>
-Signed-off-by: Karthik Ramanan <a0393906@ti.com>
----
- 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 <stdlib.h>
-+#include <string.h>
-+#include <assert.h>
-+
-+#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
-
index 7e009fc..f812b23 100644 (file)
@@ -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
index 3c35ad8..34aeca4 100644 (file)
@@ -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                   \
-      "