diff options
-rw-r--r-- | recipes-graphics/wayland/wayland-ivi-extension/0001-wayland-ivi-extension-patch-for-wl-shell-emulator.patch | 576 | ||||
-rw-r--r-- | recipes-graphics/wayland/wayland-ivi-extension_1.9.1.bbappend | 1 |
2 files changed, 0 insertions, 577 deletions
diff --git a/recipes-graphics/wayland/wayland-ivi-extension/0001-wayland-ivi-extension-patch-for-wl-shell-emulator.patch b/recipes-graphics/wayland/wayland-ivi-extension/0001-wayland-ivi-extension-patch-for-wl-shell-emulator.patch deleted file mode 100644 index cfcd1e49c..000000000 --- a/recipes-graphics/wayland/wayland-ivi-extension/0001-wayland-ivi-extension-patch-for-wl-shell-emulator.patch +++ /dev/null @@ -1,576 +0,0 @@ ---- - CMakeLists.txt | 1 + - .../EGLWLMockNavigation/src/OpenGLES2App.cpp | 7 +- - weston-ivi-shell/src/ivi-controller-interface.h | 19 + - wl-shell-emulator/CMakeLists.txt | 69 ++++ - wl-shell-emulator/README | 21 ++ - wl-shell-emulator/src/wl-shell-emulator.c | 394 +++++++++++++++++++++ - 6 files changed, 509 insertions(+), 2 deletions(-) - create mode 100644 wl-shell-emulator/CMakeLists.txt - create mode 100644 wl-shell-emulator/README - create mode 100644 wl-shell-emulator/src/wl-shell-emulator.c - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index a75390f..3610fa9 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -42,6 +42,7 @@ if(WITH_ILM_INPUT) - add_subdirectory(ivi-input-controller) - endif() - -+add_subdirectory(wl-shell-emulator) - - #============================================================================================= - # generate all documents -diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/src/OpenGLES2App.cpp b/ivi-layermanagement-examples/EGLWLMockNavigation/src/OpenGLES2App.cpp -index 2e65864..8b7e0d1 100644 ---- a/ivi-layermanagement-examples/EGLWLMockNavigation/src/OpenGLES2App.cpp -+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/src/OpenGLES2App.cpp -@@ -126,8 +126,11 @@ OpenGLES2App::OpenGLES2App(float fps, float animationSpeed, SurfaceConfiguration - createWLContext(config); - createEGLContext(); - -- ilmClient_init((t_ilm_nativedisplay)m_wlContextStruct.wlDisplay); -- setupLayerMangement(config); -+ if (m_wlContextStruct.wlShell == NULL) -+ { -+ ilmClient_init((t_ilm_nativedisplay)m_wlContextStruct.wlDisplay); -+ setupLayerMangement(config); -+ } - - if (config->nosky) - { -diff --git a/weston-ivi-shell/src/ivi-controller-interface.h b/weston-ivi-shell/src/ivi-controller-interface.h -index cdafcc9..fd18009 100644 ---- a/weston-ivi-shell/src/ivi-controller-interface.h -+++ b/weston-ivi-shell/src/ivi-controller-interface.h -@@ -66,6 +66,25 @@ struct ivi_controller_interface { - int32_t (*commit_changes)(void); - - /** -+ * \brief Creates an ivi_layout_surface. -+ * -+ * \return IVI_SUCCEEDED if the method call was successful -+ * \return IVI_FAILED if the method call was failed -+ */ -+ struct ivi_layout_surface* (*surface_create)( -+ struct weston_surface *wl_surface, -+ uint32_t id_surface); -+ -+ /** -+ * \brief Configure an ivi_layout_surface -+ * -+ * \return IVI_SUCCEEDED if the method call was successful -+ * \return IVI_FAILED if the method call was failed -+ */ -+ void (*surface_configure)(struct ivi_layout_surface *ivisurf, -+ int32_t width, int32_t height); -+ -+ /** - * surface controller interface - */ - -diff --git a/wl-shell-emulator/CMakeLists.txt b/wl-shell-emulator/CMakeLists.txt -new file mode 100644 -index 0000000..2678098 ---- /dev/null -+++ b/wl-shell-emulator/CMakeLists.txt -@@ -0,0 +1,69 @@ -+############################################################################ -+# -+# Copyright (C) 2015 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(wl-shell-emulator) -+ -+find_package(PkgConfig REQUIRED) -+pkg_check_modules(WAYLAND_SERVER wayland-server REQUIRED) -+pkg_check_modules(WESTON weston REQUIRED) -+ -+GET_TARGET_PROPERTY(IVI_EXTENSION_INCLUDE_DIRS ivi-extension-protocol INCLUDE_DIRECTORIES) -+GET_TARGET_PROPERTY(IVI_CONTROLLER_INCLUDE_DIRS ivi-controller INCLUDE_DIRECTORIES) -+ -+include_directories( -+ include -+ ${IVI_EXTENSION_INCLUDE_DIRS} -+ ${IVI_CONTROLLER_INCLUDE_DIRS} -+ ${WAYLAND_SERVER_INCLUDE_DIRS} -+ ${WESTON_INCLUDE_DIRS} -+ ${WESTON_INCLUDE_DIRS}/weston -+) -+ -+link_directories( -+ ${WAYLAND_SERVER_LIBRARY_DIRS} -+) -+ -+ -+add_library(${PROJECT_NAME} MODULE -+ src/wl-shell-emulator.c -+) -+ -+set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") -+ -+add_dependencies(${PROJECT_NAME} -+ ivi-extension-protocol -+ ${WAYLAND_SERVER_LIBRARIES} -+) -+ -+set(LIBS -+ ${LIBS} -+ ivi-extension-protocol -+ ${WAYLAND_SERVER_LIBRARIES} -+) -+ -+set(CMAKE_C_LDFLAGS "-module -avoid-version") -+ -+target_link_libraries(${PROJECT_NAME} ${LIBS}) -+ -+install ( -+ TARGETS ${PROJECT_NAME} -+ LIBRARY DESTINATION lib/weston -+) -diff --git a/wl-shell-emulator/README b/wl-shell-emulator/README -new file mode 100644 -index 0000000..6eebc04 ---- /dev/null -+++ b/wl-shell-emulator/README -@@ -0,0 +1,21 @@ -+This directory contains the wl-shell-emulator module. -+To use this, add it to the "ivi-module" entry in your weston.ini. -+Multiple modules may be specified in the same entry by separating -+the modules with commas. -+Additionally, the basement of surface-id is indentified by weston.ini -+at "surface-id-for-wl-shell" entry. wl-shell-emulator will increment -+surface-id per wl-shell-surface creation. -+ -+- Sample of weston.ini -+[core] -+shell=ivi-shell.so -+ -+[ivi-shell] -+ivi-module=ivi-controller.so,wl-shell-emulator.so -+surface-id-for-wl-shell-app=0x30000000 -+ -+- How to -+ivi-layermanagement-examples/layer-add-surfaces is easy -+for you to try wl-shell-emulator. When you invoke wl_shell -+application. layer-add-surfaces can add the ivi-surface to a layer -+and set visibility for it. -diff --git a/wl-shell-emulator/src/wl-shell-emulator.c b/wl-shell-emulator/src/wl-shell-emulator.c -new file mode 100644 -index 0000000..274b192 ---- /dev/null -+++ b/wl-shell-emulator/src/wl-shell-emulator.c -@@ -0,0 +1,394 @@ -+ /* -+ * Copyright (C) 2015 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 <string.h> -+#include <assert.h> -+ -+#include <weston/compositor.h> -+ -+#include "ivi-layout-export.h" -+#include "ivi-controller-interface.h" -+ -+#ifndef container_of -+#define container_of(ptr, type, member) ({ \ -+ const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \ -+ (type *)( (char *)__mptr - offsetof(type,member) );}) -+#endif -+ -+#define DEFAULT_SURFACE_ID_FOR_WL_SHELL_APP 0x80000000 -+ -+struct emulator_surface { -+ struct wl_resource* resource; -+ struct emulator_context *context; -+ struct ivi_layout_surface *layout_surface; -+ -+ struct weston_surface *surface; -+ struct wl_listener surface_destroy_listener; -+ -+ uint32_t id_surface; -+ int32_t last_width; -+ int32_t last_height; -+ -+ struct wl_list link; -+}; -+ -+struct emulator_controller { -+ struct wl_list link; -+ struct wl_resource *resource; -+ struct wl_client *client; -+ uint32_t id; -+ struct emulator_context *emulator_context; -+}; -+ -+struct emulator_context { -+ struct wl_list controller_list; -+ struct wl_list surface_list; -+ struct weston_compositor *compositor; -+ const struct ivi_controller_interface *ivi_controller_interface; -+ -+ uint32_t id_surface_base; -+}; -+ -+static void -+emulator_surface_pong(struct wl_client *client, -+ struct wl_resource *resource, uint32_t serial) -+{ -+ -+} -+ -+static void -+emulator_surface_move(struct wl_client *client, struct wl_resource *resource, -+ struct wl_resource *seat_resource, uint32_t serial) -+{ -+/*Use ivi_controller_interface to implement*/ -+} -+ -+static void -+emulator_surface_resize(struct wl_client *client, struct wl_resource *resource, -+ struct wl_resource *seat_resource, uint32_t serial, -+ uint32_t edges) -+{ -+/*Use ivi_controller_interface to implement*/ -+} -+ -+static void -+emulator_surface_set_toplevel(struct wl_client *client, -+ struct wl_resource *resource) -+{ -+/*Use ivi_controller_interface to implement*/ -+} -+ -+static void -+emulator_surface_set_transient(struct wl_client *client, -+ struct wl_resource *resource, -+ struct wl_resource *parent_resource, -+ int x, int y, uint32_t flags) -+{ -+/*Use ivi_controller_interface to implement*/ -+} -+ -+static void -+emulator_surface_set_fullscreen(struct wl_client *client, -+ struct wl_resource *resource, -+ uint32_t method, -+ uint32_t framerate, -+ struct wl_resource *output_resource) -+{ -+/*Use ivi_controller_interface to implement*/ -+} -+ -+static void -+emulator_surface_set_popup(struct wl_client *client, -+ struct wl_resource *resource, -+ struct wl_resource *seat_resource, -+ uint32_t serial, -+ struct wl_resource *parent_resource, -+ int32_t x, int32_t y, uint32_t flags) -+{ -+ -+} -+ -+static void -+emulator_surface_set_maximized(struct wl_client *client, -+ struct wl_resource *resource, -+ struct wl_resource *output_resource) -+{ -+ -+} -+ -+static void -+emulator_surface_set_title(struct wl_client *client, -+ struct wl_resource *resource, const char *title) -+{ -+ -+} -+ -+static void -+emulator_surface_set_class(struct wl_client *client, -+ struct wl_resource *resource, const char *class) -+{ -+ -+} -+ -+static const struct wl_shell_surface_interface shell_surface_implementation = { -+ emulator_surface_pong, -+ emulator_surface_move, -+ emulator_surface_resize, -+ emulator_surface_set_toplevel, -+ emulator_surface_set_transient, -+ emulator_surface_set_fullscreen, -+ emulator_surface_set_popup, -+ emulator_surface_set_maximized, -+ emulator_surface_set_title, -+ emulator_surface_set_class -+}; -+ -+/* Gets called through the weston_surface destroy signal. */ -+static void -+emulator_handle_surface_destroy(struct wl_listener *listener, void *data) -+{ -+ struct emulator_surface *emulator_surface = -+ container_of(listener, struct emulator_surface, -+ surface_destroy_listener); -+ -+ assert(emulator_surface != NULL); -+ -+ if (emulator_surface->surface!=NULL) { -+ emulator_surface->surface->configure = NULL; -+ emulator_surface->surface->configure_private = NULL; -+ emulator_surface->surface = NULL; -+ } -+ -+ wl_list_remove(&emulator_surface->surface_destroy_listener.link); -+ wl_list_remove(&emulator_surface->link); -+ -+ if (emulator_surface->resource != NULL) { -+ wl_resource_set_user_data(emulator_surface->resource, NULL); -+ emulator_surface->resource = NULL; -+ } -+ free(emulator_surface); -+} -+ -+static void -+emulator_surface_configure(struct weston_surface *surface, -+ int32_t sx, int32_t sy) -+{ -+ struct emulator_surface *surf = surface->configure_private; -+ struct emulator_context *ctx; -+ -+ if ((surf == NULL) || -+ (surf->layout_surface == NULL)) { -+ return; -+ } -+ -+ if ((surf->last_width != surface->width) || -+ (surf->last_height != surface->height)) { -+ -+ surf->last_width = surface->width; -+ surf->last_height = surface->height; -+ -+ ctx = surf->context; -+ ctx->ivi_controller_interface->surface_configure(surf->layout_surface, -+ surface->width, -+ surface->height); -+ } -+} -+ -+/* -+ * The ivi_surface wl_resource destructor. -+ * -+ * Gets called via ivi_surface.destroy request or automatic wl_client clean-up. -+ */ -+static void -+shell_destroy_shell_surface(struct wl_resource *resource) -+{ -+ struct emulator_surface *surf = wl_resource_get_user_data(resource); -+ if (surf != NULL) { -+ surf->resource = NULL; -+ } -+} -+ -+static void -+emulator_get_shell_surface(struct wl_client *client, struct wl_resource *resource, -+ uint32_t id, struct wl_resource *surface_resource) -+{ -+ struct emulator_controller *controller = wl_resource_get_user_data(resource); -+ struct emulator_context * context = controller->emulator_context; -+ struct emulator_surface *emulator_surface; -+ struct weston_surface *surface; -+ struct ivi_layout_surface *layout_surface; -+ struct wl_resource *res; -+ const struct ivi_controller_interface *interface = -+ context->ivi_controller_interface; -+ -+ surface = wl_resource_get_user_data(surface_resource); -+ -+ layout_surface = interface->surface_create(surface, context->id_surface_base); -+ -+ if (!layout_surface) { -+ wl_resource_post_no_memory(surface_resource); -+ return; -+ } -+ -+ emulator_surface = zalloc(sizeof *emulator_surface); -+ if (emulator_surface == NULL) { -+ wl_resource_post_no_memory(resource); -+ return; -+ } -+ -+ emulator_surface->layout_surface = layout_surface; -+ emulator_surface->id_surface = context->id_surface_base; -+ emulator_surface->last_width = 0; -+ emulator_surface->last_height = 0; -+ -+ wl_list_init(&emulator_surface->link); -+ wl_list_insert(&context->surface_list, &emulator_surface->link); -+ -+ emulator_surface->context = context; -+ ++(context->id_surface_base); -+ -+ /** The following code relies on wl_surface destruction triggering -+ * immediateweston_surface destruction -+ */ -+ emulator_surface->surface_destroy_listener.notify = emulator_handle_surface_destroy; -+ wl_signal_add(&surface->destroy_signal, -+ &emulator_surface->surface_destroy_listener); -+ -+ emulator_surface->surface = surface; -+ surface->configure = emulator_surface_configure; -+ surface->configure_private = emulator_surface; -+ -+ res = wl_resource_create(client, &wl_shell_surface_interface, 1, id); -+ if (res == NULL) { -+ wl_client_post_no_memory(client); -+ return; -+ } -+ -+ emulator_surface->resource = res; -+ -+ wl_resource_set_implementation(res, &shell_surface_implementation, -+ emulator_surface, shell_destroy_shell_surface); -+} -+static const struct wl_shell_interface shell_implementation = { -+ emulator_get_shell_surface -+}; -+ -+static void -+unbind_resource_controller(struct wl_resource *resource) -+{ -+ struct emulator_controller *controller = wl_resource_get_user_data(resource); -+ -+ wl_list_remove(&controller->link); -+ -+ free(controller); -+} -+ -+static void -+bind_shell_implementation(struct wl_client *client, void *data, -+ uint32_t version, uint32_t id) -+{ -+ struct emulator_context *ctx = data; -+ struct emulator_controller *controller; -+ controller = calloc(1, sizeof *controller); -+ if (controller == NULL) { -+ weston_log("%s: Failed to allocate memory for controller\n", -+ __FUNCTION__); -+ return; -+ } -+ -+ controller->emulator_context = ctx; -+ controller->resource = -+ wl_resource_create(client, &wl_shell_interface, 1, id); -+ wl_resource_set_implementation(controller->resource, &shell_implementation, -+ controller, unbind_resource_controller); -+ -+ controller->client = client; -+ controller->id = id; -+ -+ wl_list_insert(&ctx->controller_list, &controller->link); -+} -+ -+static struct emulator_context * -+create_emulator_context(struct weston_compositor *ec, -+ const struct ivi_controller_interface *interface) -+{ -+ struct emulator_context *ctx = NULL; -+ ctx = calloc(1, sizeof *ctx); -+ if (ctx == NULL) { -+ weston_log("%s: Failed to allocate memory for input context\n", -+ __FUNCTION__); -+ return NULL; -+ } -+ -+ memset(ctx, 0, sizeof *ctx); -+ -+ ctx->compositor = ec; -+ ctx->ivi_controller_interface = interface; -+ wl_list_init(&ctx->controller_list); -+ wl_list_init(&ctx->surface_list); -+ -+ return ctx; -+} -+ -+static int -+setup_emulator_config(struct emulator_context *ctx, int *argc, char *argv[]) -+{ -+ struct weston_config_section *section; -+ -+ section = weston_config_get_section(ctx->compositor->config, "ivi-shell", -+ NULL, NULL); -+ -+ if (section) { -+ weston_config_section_get_uint(section, "surface-id-for-wl-shell-app", -+ &ctx->id_surface_base, -+ DEFAULT_SURFACE_ID_FOR_WL_SHELL_APP); -+ -+ weston_log("Based surface ID for wl_shell application: %u (0x%x)\n", -+ ctx->id_surface_base, ctx->id_surface_base); -+ } -+ -+ return 0; -+} -+ -+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 emulator_context *ctx = create_emulator_context(ec, interface); -+ if (ctx == NULL) { -+ weston_log("%s: Failed to create input context\n", __FUNCTION__); -+ return -1; -+ } -+ -+ if (setup_emulator_config(ctx, argc, argv)) { -+ return -1; -+ } -+ -+ if (wl_global_create(ec->wl_display, &wl_shell_interface, 1, -+ ctx, bind_shell_implementation) == NULL) { -+ return -1; -+ } -+ weston_log("wl-shell-emulator module loaded successfully!\n"); -+ return 0; -+} --- -1.8.3.1 diff --git a/recipes-graphics/wayland/wayland-ivi-extension_1.9.1.bbappend b/recipes-graphics/wayland/wayland-ivi-extension_1.9.1.bbappend index 56574eb18..a7d34e80d 100644 --- a/recipes-graphics/wayland/wayland-ivi-extension_1.9.1.bbappend +++ b/recipes-graphics/wayland/wayland-ivi-extension_1.9.1.bbappend @@ -12,7 +12,6 @@ PACKAGECONFIG ??= "ilm_input test" PACKAGECONFIG[test] = "${ENABLE_TEST},${DISABLE_TEST},gtest" SRC_URI_append = "\ - file://0001-wayland-ivi-extension-patch-for-wl-shell-emulator.patch \ file://cmake-find-gtest.patch \ file://test-path.patch \ " |