diff options
Diffstat (limited to 'meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension')
7 files changed, 704 insertions, 0 deletions
diff --git a/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0001-Added-ivi-id-agent-to-CMake.patch b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0001-Added-ivi-id-agent-to-CMake.patch new file mode 100644 index 00000000..7ea0b6e9 --- /dev/null +++ b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0001-Added-ivi-id-agent-to-CMake.patch @@ -0,0 +1,22 @@ +From 48977cb77410247df547063d9d7bcd381fb13cde Mon Sep 17 00:00:00 2001 +From: Michael Teyfel <mteyfel@de.adit-jv.com> +Date: Fri, 12 Oct 2018 17:12:24 +0200 +Subject: [PATCH 1/3] Added ivi-id-agent to CMake + +Reworked for wayland-ivi-extension 2.2.0 by Scott Murray. + +Signed-off-by: Michael Teyfel <mteyfel@de.adit-jv.com> +Signed-off-by: Scott Murray <scott.murray@konsulko.com> + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 7d0044a..988fc89 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -40,6 +40,7 @@ add_subdirectory(ivi-layermanagement-api/test) + add_subdirectory(ivi-layermanagement-examples) + add_subdirectory(ivi-layermanagement-api/ilmInput) + add_subdirectory(ivi-input-modules/ivi-input-controller) ++add_subdirectory(ivi-id-agent-modules/ivi-id-agent) + + + #============================================================================================= diff --git a/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-add-LayerManagerControl-error-status.patch b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-add-LayerManagerControl-error-status.patch new file mode 100644 index 00000000..9f1ab47b --- /dev/null +++ b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-add-LayerManagerControl-error-status.patch @@ -0,0 +1,21 @@ +LayerManagerControl: add error exit status + +Tweak to add a non-zero exit status on errors. This is useful for +scripting, and allows writing a simple loop to detect Weston readiness. + +Upstream-Status: Pending + +Signed-off-by: Scott Murray <scott.murray@konsulko.com> + +diff --git a/ivi-layermanagement-examples/LayerManagerControl/src/main.cpp b/ivi-layermanagement-examples/LayerManagerControl/src/main.cpp +index 8ee0546..210e21e 100644 +--- a/ivi-layermanagement-examples/LayerManagerControl/src/main.cpp ++++ b/ivi-layermanagement-examples/LayerManagerControl/src/main.cpp +@@ -45,6 +45,7 @@ int main(int argc, char* argv[]) + if (CommandSuccess != interpreter.interpretCommand(userCommand)) + { + cerr << "Interpreter error: " << interpreter.getLastError() << endl; ++ return 1; + } + + return 0; diff --git a/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-ivi-id-agent-added-ivi-id-agent.patch b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-ivi-id-agent-added-ivi-id-agent.patch new file mode 100644 index 00000000..7deb01e9 --- /dev/null +++ b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-ivi-id-agent-added-ivi-id-agent.patch @@ -0,0 +1,530 @@ +From 42fc715a430068cdb4484e2cb119418da8ac4e6f Mon Sep 17 00:00:00 2001 +From: Michael Teyfel <mteyfel@de.adit-jv.com> +Date: Fri, 12 Oct 2018 16:46:57 +0200 +Subject: [PATCH 2/3] ivi-id-agent: added ivi-id-agent + +This is a reference implementation of an ivi-id-agent plugin. It +creates surface-ids for desktop-surfaces depending on the configuration +provided in "weston.ini". For more please refer to the reference +implementation in this commit. + +The only public interface available is the "id_agent_module_init" +function. It is responsible for initialization of structs and reading +the configuration. + +In the reference "weston.ini" two types of configurations can be found: + +[desktop-app] is used to configure a particular application. Therefore +the desired surface-id must be provided. Moreover "app-title" is the +title that is provided by the desktop application (xdg-protocol). +"app-id" behaves accordingly. Although both parameters can be set, it +is not mandatory. Finally at least one has to be set. + +[desktop-app-default] enables the id-agent to generate generic +surface-ids for unconfigured applications, e.g. for development. This +tag is optional. To generate the id an interval starting from +"default-surface-id" to "default-surface-id-max" is used. The id is +incremented until the interval is exceeded. + +In the function "get_id" a surface-id is assigned by means of the +configuration. It can be adjusted, if another behavior is desired. +In this plugin the parameters, that are described above, are evaluated. + +To use these patches please also apply the dedicated patches for +weston: https://github.com/mtey/weston/tree/xdg_support_ivi_id_agent +Since libweston-desktop is used to introduce desktop-surface support, +xdg-protocol is supported. + +Reworked for wayland-ivi-extension 2.2.0 by Scott Murray. + +Signed-off-by: Michael Teyfel <mteyfel@de.adit-jv.com> +Signed-off-by: Scott Murray <scott.murray@konsulko.com> + +diff --git a/ivi-id-agent-modules/ivi-id-agent/CMakeLists.txt b/ivi-id-agent-modules/ivi-id-agent/CMakeLists.txt +new file mode 100644 +index 0000000..7354a7e +--- /dev/null ++++ b/ivi-id-agent-modules/ivi-id-agent/CMakeLists.txt +@@ -0,0 +1,69 @@ ++############################################################################### ++# ++# Copyright (C) 2017 Advanced Driver Information Technology Joint Venture GmbH ++# ++# ++# Licensed under the Apache License, Version 2.0 (the "License"); ++# you may not use this file except in compliance with the License. ++# You may obtain a copy of the License at ++# ++# http://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, ++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++# See the License for the specific language governing permissions and ++# limitations under the License. ++# ++############################################################################### ++ ++cmake_minimum_required (VERSION 2.6) ++ ++project(ivi-id-agent) ++ ++find_package(PkgConfig REQUIRED) ++pkg_check_modules(WAYLAND_SERVER wayland-server REQUIRED) ++pkg_check_modules(WESTON weston>=5.0.0 REQUIRED) ++pkg_check_modules(PIXMAN pixman-1 REQUIRED) ++pkg_check_modules(LIBWESTON_DESKTOP libweston-desktop-6 REQUIRED) ++ ++find_package(Threads REQUIRED) ++ ++include_directories( ++ src ++ ${WAYLAND_SERVER_INCLUDE_DIRS} ++ ${WESTON_INCLUDE_DIRS} ++ ${PIXMAN_INCLUDE_DIRS} ++) ++ ++link_directories( ++ ${WAYLAND_SERVER_LIBRARY_DIRS} ++ ${PIXMAN_LIBRARY_DIRS} ++) ++ ++ ++add_library(${PROJECT_NAME} MODULE ++ src/ivi-id-agent.c ++) ++ ++set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") ++ ++add_dependencies(${PROJECT_NAME} ++ ${WAYLAND_SERVER_LIBRARIES} ++ ${PIXMAN_LIBRARIES} ++) ++ ++set(LIBS ++ ${LIBS} ++ ${WAYLAND_SERVER_LIBRARIES} ++ ${LIBWESTON_DESKTOP_LIBRARIES} ++) ++ ++set(CMAKE_C_LDFLAGS "-module -avoid-version") ++ ++target_link_libraries(${PROJECT_NAME} ${LIBS}) ++ ++install ( ++ TARGETS ${PROJECT_NAME} ++ LIBRARY DESTINATION lib${LIB_SUFFIX}/weston ++) +diff --git a/ivi-id-agent-modules/ivi-id-agent/src/ivi-id-agent.c b/ivi-id-agent-modules/ivi-id-agent/src/ivi-id-agent.c +new file mode 100644 +index 0000000..9bc115d +--- /dev/null ++++ b/ivi-id-agent-modules/ivi-id-agent/src/ivi-id-agent.c +@@ -0,0 +1,381 @@ ++/* ++ * Copyright (C) 2017 Advanced Driver Information Technology Joint Venture GmbH ++ * ++ * Permission to use, copy, modify, distribute, and sell this software and ++ * its documentation for any purpose is hereby granted without fee, provided ++ * that the above copyright notice appear in all copies and that both that ++ * copyright notice and this permission notice appear in supporting ++ * documentation, and that the name of the copyright holders not be used in ++ * advertising or publicity pertaining to distribution of the software ++ * without specific, written prior permission. The copyright holders make ++ * no representations about the suitability of this software for any ++ * purpose. It is provided "as is" without express or implied warranty. ++ * ++ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS ++ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND ++ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY ++ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ++ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF ++ * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN ++ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++#include <stdlib.h> ++#include <stdio.h> ++#include <string.h> ++#include <limits.h> ++ ++#include <weston.h> ++#include <libweston-desktop.h> ++#include "config-parser.h" ++#include <weston/ivi-layout-export.h> ++ ++#ifndef INVALID_ID ++#define INVALID_ID 0xFFFFFFFF ++#endif ++ ++struct db_elem ++{ ++ struct wl_list link; ++ uint32_t surface_id; ++ char *cfg_app_id; ++ char *cfg_title; ++ struct ivi_layout_surface *layout_surface; ++}; ++ ++struct ivi_id_agent ++{ ++ uint32_t default_behavior_set; ++ uint32_t default_surface_id; ++ uint32_t default_surface_id_max; ++ struct wl_list app_list; ++ struct weston_compositor *compositor; ++ const struct ivi_layout_interface *interface; ++ ++ struct wl_listener desktop_surface_configured; ++ struct wl_listener destroy_listener; ++ struct wl_listener surface_removed; ++}; ++ ++static int32_t ++check_config_parameter(char *cfg_val, char *val) ++{ ++ if (cfg_val == NULL) ++ return IVI_SUCCEEDED; ++ else if (val == NULL || strcmp(cfg_val, val) != 0) ++ return IVI_FAILED; ++ ++ return IVI_SUCCEEDED; ++} ++ ++static int32_t ++get_id_from_config(struct ivi_id_agent *ida, struct ivi_layout_surface ++ *layout_surface) { ++ struct db_elem *db_elem; ++ char *temp_app_id = NULL; ++ char *temp_title = NULL; ++ int ret = IVI_FAILED; ++ ++ struct weston_surface *weston_surface = ++ ida->interface->surface_get_weston_surface(layout_surface); ++ ++ /* Get app id and title */ ++ struct weston_desktop_surface *wds = weston_surface_get_desktop_surface( ++ weston_surface); ++ ++ if (weston_desktop_surface_get_app_id(wds) != NULL) ++ temp_app_id = strdup(weston_desktop_surface_get_app_id(wds)); ++ ++ if (weston_desktop_surface_get_title(wds) != NULL) ++ temp_title = strdup(weston_desktop_surface_get_title(wds)); ++ ++ /* ++ * Check for every config parameter to be fulfilled. This part must be ++ * extended, if additional attributes are desired to be checked. ++ */ ++ wl_list_for_each(db_elem, &ida->app_list, link) ++ { ++ if (check_config_parameter(db_elem->cfg_app_id, temp_app_id) == 0) { ++ if (check_config_parameter(db_elem->cfg_title, temp_title) == 0) { ++ /* Found configuration for application. */ ++ int res = ida->interface->surface_set_id(layout_surface, ++ db_elem->surface_id); ++ if (res) ++ continue; ++ ++ db_elem->layout_surface = layout_surface; ++ ret = IVI_SUCCEEDED; ++ ++ break; ++ } ++ } ++ } ++ ++ free(temp_app_id); ++ free(temp_title); ++ ++ return ret; ++} ++ ++/* ++ * This function generates the id of a surface in regard to the desired ++ * parameters. For implementation of different behavior in id generation please ++ * adjust this function. ++ * In this implementation the app_id and/or title of the application is used for ++ * identification. It is also possible to use the pid, uid or gid for example. ++ */ ++static int32_t ++get_id(struct ivi_id_agent *ida, struct ivi_layout_surface *layout_surface) ++{ ++ if (get_id_from_config(ida, layout_surface) == IVI_SUCCEEDED) ++ return IVI_SUCCEEDED; ++ ++ /* No default layer available */ ++ if (ida->default_behavior_set == 0) { ++ weston_log("ivi-id-agent: Could not find configuration for application\n"); ++ goto ivi_failed; ++ ++ /* Default behavior for unknown applications */ ++ } else if (ida->default_surface_id < ida->default_surface_id_max) { ++ weston_log("ivi-id-agent: No configuration for application adding to " ++ "default layer\n"); ++ ++ /* ++ * Check if ivi-shell application already created an application with ++ * desired surface_id ++ */ ++ struct ivi_layout_surface *temp_layout_surf = ++ ida->interface->get_surface_from_id( ++ ida->default_surface_id); ++ if ((temp_layout_surf != NULL) && (temp_layout_surf != layout_surface)) { ++ weston_log("ivi-id-agent: surface_id already used by an ivi-shell " ++ "application\n"); ++ goto ivi_failed; ++ } ++ ++ ida->interface->surface_set_id(layout_surface, ++ ida->default_surface_id); ++ ida->default_surface_id++; ++ ++ } else { ++ weston_log("ivi-id-agent: Interval for default surface_id generation " ++ "exceeded\n"); ++ goto ivi_failed; ++ } ++ ++ return IVI_SUCCEEDED; ++ ++ivi_failed: ++ return IVI_FAILED; ++} ++ ++static void ++desktop_surface_event_configure(struct wl_listener *listener, ++ void *data) ++{ ++ struct ivi_id_agent *ida = wl_container_of(listener, ida, ++ desktop_surface_configured); ++ ++ struct ivi_layout_surface *layout_surface = ++ (struct ivi_layout_surface *) data; ++ ++ if (get_id(ida, layout_surface) == IVI_FAILED) ++ weston_log("ivi-id-agent: Could not create surface_id for application\n"); ++} ++ ++static void ++surface_event_remove(struct wl_listener *listener, void *data) { ++ struct ivi_id_agent *ida = wl_container_of(listener, ida, ++ surface_removed); ++ struct ivi_layout_surface *layout_surface = ++ (struct ivi_layout_surface *) data; ++ struct db_elem *db_elem = NULL; ++ ++ wl_list_for_each(db_elem, &ida->app_list, link) ++ { ++ if(db_elem->layout_surface == layout_surface) { ++ db_elem->layout_surface = NULL; ++ break; ++ } ++ } ++} ++ ++static int32_t deinit(struct ivi_id_agent *ida); ++ ++static void ++id_agent_module_deinit(struct wl_listener *listener, void *data) { ++ (void)data; ++ struct ivi_id_agent *ida = wl_container_of(listener, ida, destroy_listener); ++ ++ deinit(ida); ++} ++ ++static int32_t ++check_config(struct db_elem *curr_db_elem, struct ivi_id_agent *ida) ++{ ++ struct db_elem *db_elem; ++ ++ if (ida->default_surface_id <= curr_db_elem->surface_id ++ && curr_db_elem->surface_id <= ida->default_surface_id_max) { ++ weston_log("ivi-id-agent: surface_id: %d in default id interval " ++ "[%d, %d] (CONFIG ERROR)\n", curr_db_elem->surface_id, ++ ida->default_surface_id, ida->default_surface_id_max); ++ goto ivi_failed; ++ } ++ ++ wl_list_for_each(db_elem, &ida->app_list, link) ++ { ++ if(curr_db_elem == db_elem) ++ continue; ++ ++ if (db_elem->surface_id == curr_db_elem->surface_id) { ++ weston_log("ivi-id-agent: Duplicate surface_id: %d (CONFIG ERROR)\n", ++ curr_db_elem->surface_id); ++ goto ivi_failed; ++ } ++ } ++ ++ return IVI_SUCCEEDED; ++ ++ivi_failed: ++ return IVI_FAILED; ++} ++ ++static int32_t ++read_config(struct ivi_id_agent *ida) ++{ ++ struct weston_config *config = NULL; ++ struct weston_config_section *section = NULL; ++ const char *name = NULL; ++ ++ config = wet_get_config(ida->compositor); ++ if (!config) ++ goto ivi_failed; ++ ++ section = weston_config_get_section(config, "desktop-app-default", NULL, ++ NULL); ++ ++ if (section) { ++ weston_log("ivi-id-agent: Default behavior for unknown applications is " ++ "set\n"); ++ ida->default_behavior_set = 1; ++ ++ weston_config_section_get_uint(section, "default-surface-id", ++ &ida->default_surface_id, INVALID_ID); ++ weston_config_section_get_uint(section, "default-surface-id-max", ++ &ida->default_surface_id_max, INVALID_ID); ++ ++ if (ida->default_surface_id == INVALID_ID || ++ ida->default_surface_id_max == INVALID_ID) { ++ weston_log("ivi-id-agent: Missing configuration for default " ++ "behavior\n"); ++ ida->default_behavior_set = 0; ++ } ++ } else { ++ ida->default_behavior_set = 0; ++ } ++ ++ section = NULL; ++ while (weston_config_next_section(config, §ion, &name)) { ++ struct db_elem *db_elem = NULL; ++ ++ if (strcmp(name, "desktop-app") != 0) ++ continue; ++ ++ db_elem = calloc(1, sizeof *db_elem); ++ if (db_elem == NULL) { ++ weston_log("ivi-id-agent: No memory to allocate\n"); ++ goto ivi_failed; ++ } ++ ++ wl_list_insert(&ida->app_list, &db_elem->link); ++ ++ weston_config_section_get_uint(section, "surface-id", ++ &db_elem->surface_id, INVALID_ID); ++ ++ if (db_elem->surface_id == INVALID_ID) { ++ weston_log("ivi-id-agent: surface-id is not set in configuration\n"); ++ goto ivi_failed; ++ } ++ ++ weston_config_section_get_string(section, "app-id", ++ &db_elem->cfg_app_id, NULL); ++ weston_config_section_get_string(section, "app-title", ++ &db_elem->cfg_title, NULL); ++ ++ if (db_elem->cfg_app_id == NULL && db_elem->cfg_title == NULL) { ++ weston_log("ivi-id-agent: Every parameter is NULL in app " ++ "configuration\n"); ++ goto ivi_failed; ++ } ++ ++ if (check_config(db_elem, ida) == IVI_FAILED) { ++ weston_log("ivi-id-agent: No valid config found, deinit...\n"); ++ goto ivi_failed; ++ } ++ } ++ ++ if(ida->default_behavior_set == 0 && wl_list_empty(&ida->app_list)) { ++ weston_log("ivi-id-agent: No valid config found, deinit...\n"); ++ goto ivi_failed; ++ } ++ ++ return IVI_SUCCEEDED; ++ ++ivi_failed: ++ return IVI_FAILED; ++} ++ ++WL_EXPORT int32_t ++id_agent_module_init(struct weston_compositor *compositor, ++ const struct ivi_layout_interface *interface) ++{ ++ struct ivi_id_agent *ida = NULL; ++ ++ ida = calloc(1, sizeof *ida); ++ if (ida == NULL) { ++ weston_log("failed to allocate ivi_id_agent\n"); ++ goto ivi_failed; ++ } ++ ++ ida->compositor = compositor; ++ ida->interface = interface; ++ ida->desktop_surface_configured.notify = desktop_surface_event_configure; ++ ida->destroy_listener.notify = id_agent_module_deinit; ++ ida->surface_removed.notify = surface_event_remove; ++ ++ wl_signal_add(&compositor->destroy_signal, &ida->destroy_listener); ++ ida->interface->add_listener_configure_desktop_surface( ++ &ida->desktop_surface_configured); ++ interface->add_listener_remove_surface(&ida->surface_removed); ++ ++ wl_list_init(&ida->app_list); ++ if(read_config(ida) != 0) { ++ weston_log("ivi-id-agent: Read config failed\n"); ++ deinit(ida); ++ goto ivi_failed; ++ } ++ ++ return IVI_SUCCEEDED; ++ ++ivi_failed: ++ return IVI_FAILED; ++} ++ ++static int32_t ++deinit(struct ivi_id_agent *ida) ++{ ++ struct db_elem *db_elem; ++ wl_list_for_each(db_elem, &ida->app_list, link) { ++ free(db_elem->cfg_app_id); ++ free(db_elem->cfg_title); ++ free(db_elem); ++ } ++ ++ wl_list_remove(&ida->desktop_surface_configured.link); ++ wl_list_remove(&ida->destroy_listener.link); ++ wl_list_remove(&ida->surface_removed.link); ++ free(ida); ++ ++ return IVI_SUCCEEDED; ++} +diff --git a/ivi-id-agent-modules/ivi-id-agent/weston.ini.in b/ivi-id-agent-modules/ivi-id-agent/weston.ini.in +new file mode 100644 +index 0000000..48a196c +--- /dev/null ++++ b/ivi-id-agent-modules/ivi-id-agent/weston.ini.in +@@ -0,0 +1,20 @@ ++[core] ++shell=ivi-shell.so ++require-input=false ++ ++[ivi-shell] ++ivi-module=ivi-controller.so ++ivi-input-module=ivi-input-controller.so ++ivi-id-agent-module=ivi-id-agent.so ++ ++[desktop-app] ++surface-id=111 ++app-title=Flower ++ ++[desktop-app] ++surface-id=251 ++app-title=Flower ++ ++[desktop-app-default] ++default-surface-id=2000000 ++default-surface-id-max=2001000 diff --git a/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0003-ivi-controller-load-id-agent-module.patch b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0003-ivi-controller-load-id-agent-module.patch new file mode 100644 index 00000000..8985879b --- /dev/null +++ b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0003-ivi-controller-load-id-agent-module.patch @@ -0,0 +1,67 @@ +From 5fed5c51ca8c1574804362bfdea4930c16457d34 Mon Sep 17 00:00:00 2001 +From: Michael Teyfel <mteyfel@de.adit-jv.com> +Date: Fri, 12 Oct 2018 16:57:24 +0200 +Subject: [PATCH 3/3] ivi-controller: load id-agent module + +Reworked for wayland-ivi-extension 2.2.0 by Scott Murray. + +Signed-off-by: Michael Teyfel <mteyfel@de.adit-jv.com> +Signed-off-by: Scott Murray <scott.murray@konsulko.com> + +diff --git a/weston-ivi-shell/src/ivi-controller.c b/weston-ivi-shell/src/ivi-controller.c +index 8faec2a..8fa51f4 100644 +--- a/weston-ivi-shell/src/ivi-controller.c ++++ b/weston-ivi-shell/src/ivi-controller.c +@@ -2154,6 +2154,41 @@ load_input_module(struct ivishell *shell) + return 0; + } + ++static int load_id_agent_module(struct ivishell *shell) ++{ ++ struct weston_config *config = wet_get_config(shell->compositor); ++ struct weston_config_section *section; ++ char *id_agent_module = NULL; ++ ++ int (*id_agent_module_init)(struct weston_compositor *compositor, ++ const struct ivi_layout_interface *interface); ++ ++ section = weston_config_get_section(config, "ivi-shell", NULL, NULL); ++ ++ if (weston_config_section_get_string(section, "ivi-id-agent-module", ++ &id_agent_module, NULL) < 0) { ++ /* input events are handled by weston's default grabs */ ++ weston_log("ivi-controller: No ivi-id-agent-module set\n"); ++ return 0; ++ } ++ ++ id_agent_module_init = wet_load_module_entrypoint(id_agent_module, "id_agent_module_init"); ++ if (!id_agent_module_init) { ++ free(id_agent_module); ++ return -1; ++ } ++ ++ if (id_agent_module_init(shell->compositor, shell->interface) != 0) { ++ weston_log("ivi-controller: Initialization of id-agent module failed\n"); ++ free(id_agent_module); ++ return -1; ++ } ++ ++ free(id_agent_module); ++ ++ return 0; ++} ++ + static void + launch_client_process(void *data) + { +@@ -2221,6 +2256,10 @@ wet_module_init(struct weston_compositor *compositor, + shell->destroy_listener.notify = ivi_shell_destroy; + wl_signal_add(&compositor->destroy_signal, &shell->destroy_listener); + ++ if (load_id_agent_module(shell) < 0) { ++ weston_log("ivi-controller: id-agent module not loaded\n"); ++ } ++ + if (shell->bkgnd_surface_id && shell->ivi_client_name) { + loop = wl_display_get_event_loop(compositor->wl_display); + wl_event_loop_add_idle(loop, launch_client_process, shell); diff --git a/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0004-ivi-ilmcontrol-added-focus-notification.patch b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0004-ivi-ilmcontrol-added-focus-notification.patch new file mode 100644 index 00000000..05d1cc23 --- /dev/null +++ b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0004-ivi-ilmcontrol-added-focus-notification.patch @@ -0,0 +1,29 @@ +diff --git a/ivi-layermanagement-api/ilmCommon/include/ilm_types.h b/ivi-layermanagement-api/ilmCommon/include/ilm_types.h +index a88f2b0..12a2017 100644 +--- a/ivi-layermanagement-api/ilmCommon/include/ilm_types.h ++++ b/ivi-layermanagement-api/ilmCommon/include/ilm_types.h +@@ -245,6 +245,7 @@ typedef enum + ILM_NOTIFICATION_CONTENT_AVAILABLE = ILM_BIT(6), + ILM_NOTIFICATION_CONTENT_REMOVED = ILM_BIT(7), + ILM_NOTIFICATION_CONFIGURED = ILM_BIT(8), ++ ILM_NOTIFICATION_FOCUS = ILM_BIT(9), + ILM_NOTIFICATION_ALL = 0xffff + } t_ilm_notification_mask; + +diff --git a/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c b/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c +index a912e50..5166839 100644 +--- a/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c ++++ b/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c +@@ -819,6 +819,12 @@ input_listener_input_focus(void *data, + surf_ctx->prop.focus |= device; + else + surf_ctx->prop.focus &= ~device; ++ ++ if (surf_ctx->notification != NULL) { ++ surf_ctx->notification(surf_ctx->id_surface, ++ &surf_ctx->prop, ++ ILM_NOTIFICATION_FOCUS); ++ } + } + } + diff --git a/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0005-disable-EGLWLMockNavigation-example-build.patch b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0005-disable-EGLWLMockNavigation-example-build.patch new file mode 100644 index 00000000..21028d58 --- /dev/null +++ b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0005-disable-EGLWLMockNavigation-example-build.patch @@ -0,0 +1,22 @@ +Disable EGLWLMockNavigation example build + +The EGLWLMockNavigation example code has build issues on TI platforms. +To avoid needing to patch it just for those platforms, just disable +building it since there are no known users inside AGL. + +Upstream-Status: Inappropriate [disable feature] + +Signed-off-by: Scott Murray <scott.murray@konsulko.com> + +diff --git a/ivi-layermanagement-examples/CMakeLists.txt b/ivi-layermanagement-examples/CMakeLists.txt +index 1eab8e9..48bdffd 100644 +--- a/ivi-layermanagement-examples/CMakeLists.txt ++++ b/ivi-layermanagement-examples/CMakeLists.txt +@@ -24,7 +24,6 @@ project (ivi-layermanagement-examples) + # cmake configuration + #=========================================================================================================== + add_subdirectory(LayerManagerControl) +-add_subdirectory(EGLWLMockNavigation) + add_subdirectory(EGLWLInputEventExample) + add_subdirectory(layer-add-surfaces) + add_subdirectory(multi-touch-viewer) diff --git a/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/wandboard_fix_build.patch b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/wandboard_fix_build.patch new file mode 100644 index 00000000..86b448be --- /dev/null +++ b/meta-agl/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/wandboard_fix_build.patch @@ -0,0 +1,13 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 3610fa9..8b4614d 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -34,7 +34,7 @@ add_subdirectory(ivi-layermanagement-api/ilmCommon) + add_subdirectory(ivi-layermanagement-api/ilmClient) + add_subdirectory(ivi-layermanagement-api/ilmControl) + add_subdirectory(ivi-layermanagement-api/test) +-add_subdirectory(ivi-layermanagement-examples) ++#add_subdirectory(ivi-layermanagement-examples) + + if(WITH_ILM_INPUT) + add_subdirectory(ivi-input-api/ilmInput) |