Remove weston-ivi-extension
[AGL/meta-agl-demo.git] / recipes-graphics / wayland / wayland-ivi-extension / 0002-ivi-id-agent-added-ivi-id-agent.patch
diff --git a/recipes-graphics/wayland/wayland-ivi-extension/0002-ivi-id-agent-added-ivi-id-agent.patch b/recipes-graphics/wayland/wayland-ivi-extension/0002-ivi-id-agent-added-ivi-id-agent.patch
deleted file mode 100644 (file)
index 2b78357..0000000
+++ /dev/null
@@ -1,538 +0,0 @@
-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.
-
-Signed-off-by: Michael Teyfel <mteyfel@de.adit-jv.com>
----
- ivi-id-agent-modules/ivi-id-agent/CMakeLists.txt   |  69 ++++
- .../ivi-id-agent/src/ivi-id-agent.c                | 381 +++++++++++++++++++++
- ivi-id-agent-modules/ivi-id-agent/weston.ini.in    |  20 ++
- 3 files changed, 470 insertions(+)
- create mode 100644 ivi-id-agent-modules/ivi-id-agent/CMakeLists.txt
- create mode 100644 ivi-id-agent-modules/ivi-id-agent/src/ivi-id-agent.c
- create mode 100644 ivi-id-agent-modules/ivi-id-agent/weston.ini.in
-
-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..2def105
---- /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>=2.0.0 REQUIRED)
-+pkg_check_modules(PIXMAN pixman-1 REQUIRED)
-+pkg_check_modules(LIBWESTON_DESKTOP libweston-desktop-2 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, &section, &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
--- 
-2.7.4
-