downstream: weston-ivi-shell: implementation to get_native handle
authorNobuhiko Tanibata <NOBUHIKO_TANIBATA@denso.co.jp>
Mon, 17 Feb 2014 05:11:00 +0000 (14:11 +0900)
committerJanos Kovacs <jankovac503@gmail.com>
Thu, 27 Nov 2014 16:03:58 +0000 (18:03 +0200)
Change-Id: I5bfac45e47c811d23e9ef7876cc55322703bf744
Signed-off-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@denso.co.jp>
weston-ivi-shell/CMakeLists.txt
weston-ivi-shell/src/ivi-controller.c

index df91cb9..cd4425a 100644 (file)
@@ -84,7 +84,7 @@ set(LIBS
 
 set(CMAKE_C_LDFLAGS "-module -avoid-version")
 
-target_link_libraries(${PROJECT_NAME} ${LIBS})
+target_link_libraries(${PROJECT_NAME} ${LIBS} ${WESTON_LIBDIR}/weston/ivi-shell.so)
 
 install (
     TARGETS             ${PROJECT_NAME}
index 196fb7b..dce4871 100755 (executable)
@@ -1594,6 +1594,47 @@ controller_surface_create(struct wl_client *client,
 }
 
 static void
+controller_get_native_handle(struct wl_client *client,
+                             struct wl_resource *resource,
+                             uint32_t id_process,
+                             const char *title)
+{
+    struct wl_array surfaces;
+    ivi_shell_get_shell_surfaces(&surfaces);
+    struct shell_surface ** surface;
+
+    wl_array_for_each(surface, &surfaces) {
+
+        uint32_t pid = shell_surface_get_process_id(*surface);
+        if (pid != id_process) {
+            continue;
+        }
+
+        if (title) {
+            char* surface_title = shell_surface_get_title(*surface);
+            if (strcmp(title, surface_title)) {
+                continue;
+            }
+        }
+
+        struct weston_surface *es = shell_surface_get_surface(*surface);
+        if (es) {
+            struct wl_resource *res = wl_resource_create(client, &wl_surface_interface, 1, 0);
+            wl_resource_set_user_data(res, es);
+
+            ivi_controller_send_native_handle(resource, res);
+        }
+    }
+
+    wl_array_release(&surfaces);
+
+    int32_t id_object = 0;
+    ivi_controller_send_error(
+        resource, id_object, IVI_CONTROLLER_OBJECT_TYPE_SURFACE,
+        IVI_CONTROLLER_ERROR_CODE_NATIVE_HANDLE_END, "");
+}
+
+static void
 controller_set_keyboard_focus(struct wl_client *client,
                               struct wl_resource *resource,
                               struct wl_array *surfaces)
@@ -1607,7 +1648,8 @@ static const struct ivi_controller_interface controller_implementation = {
     controller_commit_changes,
     controller_layer_create,
     controller_surface_create,
-    controller_set_keyboard_focus
+    controller_set_keyboard_focus,
+    controller_get_native_handle
 };
 
 static void