examples: make tinyds-launch files 76/283576/1
authorSooChan Lim <sc1.lim@samsung.com>
Fri, 28 Oct 2022 23:21:05 +0000 (08:21 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 31 Oct 2022 01:15:59 +0000 (10:15 +0900)
move the implementation of ds_tizen_launch at tinyds-tdm.c to tinyds-launch file.

Change-Id: Id19d390874f725f843fbf8e4553dfd618ee1a7b1

examples/meson.build
examples/tinyds-launch.c [new file with mode: 0644]
examples/tinyds-launch.h [new file with mode: 0644]
examples/tinyds-tdm.c
examples/tinyds-tdm.h

index 23156e17965a09b386af5916688a2e9992f337a7..9b12dd8dd3840d67553a87ce898ee9c38f275deb 100644 (file)
@@ -23,6 +23,7 @@ tinyds_tdm_files = [
   'protocol-trace.c',
   'tinyds-policy.c',
   'tinyds-dpms.c',
+  'tinyds-launch.c',
 ]
 
 executable('tinyds-tdm',
diff --git a/examples/tinyds-launch.c b/examples/tinyds-launch.c
new file mode 100644 (file)
index 0000000..0e73a7c
--- /dev/null
@@ -0,0 +1,184 @@
+#include <libds-tizen/launch.h>
+
+#include "tinyds-common.h"
+#include "tinyds-launch.h"
+#include "tinyds-tdm.h"
+
+struct tinyds_launch
+{
+    launch_free_cb free_cb;
+    void *data;
+
+    struct ds_tizen_launch_effect *effect;
+    struct ds_tizen_launch_splash *splash;
+
+    struct wl_listener effect_destroy;
+    struct wl_listener effect_type_set;
+    struct wl_listener effect_type_unset;
+    struct wl_listener new_splash;
+    struct wl_listener splash_owner;
+
+    struct tinyds_server *server;
+};
+
+static void
+launch_effect_handle_destroy(struct wl_listener *listener, void *data TINYDS_UNUSED)
+{
+    struct tinyds_launch *launch =
+        wl_container_of(listener, launch, effect_destroy);
+
+    launch->free_cb(data);
+
+    wl_list_remove(&launch->effect_destroy.link);
+    wl_list_remove(&launch->effect_type_set.link);
+    wl_list_remove(&launch->effect_type_unset.link);
+    wl_list_remove(&launch->new_splash.link);
+
+    launch->effect = NULL;
+}
+
+static void
+launch_effect_handle_type_set(struct wl_listener *listener, void *data)
+{
+    struct tinyds_launch *launch;
+    struct ds_tizen_launch_effect_event_type_set *event = data;
+    struct tinyds_view *view = NULL;
+    bool existing = false;
+
+    launch = wl_container_of(listener, launch, effect_type_set);
+
+    ds_inf("Launch effect. type_set: pid(%u) type:%s", event->pid, (event->effect_type == 1) ? "depth-in" : "launch");
+
+    wl_list_for_each(view, &launch->server->views, link) {
+        if (view->pid == event->pid) {
+            view->effect_type = event->effect_type;
+            existing = true;
+            ds_inf("Launch effect. existing pid");
+        }
+    }
+    if (existing) {
+        ds_tizen_launch_effect_unset_effect_type(launch->effect, event->pid);
+    } else {
+        ds_tizen_launch_effect_set_effect_type(launch->effect, event->pid, event->effect_type);
+    }
+}
+
+static void
+launch_effect_handle_type_unset(struct wl_listener *listener, void *data)
+{
+    struct tinyds_launch *launch;
+    struct ds_tizen_launch_effect_event_type_unset *event = data;
+    struct tinyds_view *view = NULL;
+
+    launch = wl_container_of(listener, launch, effect_type_unset);
+
+    ds_inf("Launch effect. type_unset: pid(%u)", event->pid);
+
+    wl_list_for_each(view, &launch->server->views, link) {
+        if (view->pid == event->pid) {
+            view->effect_type = -1;
+            ds_inf("Launch effect. pid found");
+        }
+    }
+    ds_tizen_launch_effect_unset_effect_type(launch->effect, event->pid);
+}
+
+static void
+launch_splash_handle_owner(struct wl_listener *listener, void *data)
+{
+    struct tinyds_launch *launch;
+    struct ds_tizen_launch_splash_event_owner *event = data;
+    struct tinyds_view *view = NULL;
+
+    launch = wl_container_of(listener, launch, splash_owner);
+
+    ds_inf("Splash owner. pid(%u)", event->pid);
+
+    wl_list_for_each(view, &launch->server->views, link) {
+        if (view->pid == event->pid) {
+            if (event->pid == ds_tizen_launch_splash_get_pid(launch->splash))
+                ;//
+            else {
+                ds_tizen_launch_splash_set_pid(launch->splash, event->pid);
+            }
+        }
+    }
+}
+
+static void
+launch_effect_handle_new_splash(struct wl_listener *listener, void *data)
+{
+    struct tinyds_launch *launch;
+    struct ds_tizen_launch_splash *splash = data;
+    struct tinyds_view *view = NULL;
+
+    launch = wl_container_of(listener, launch, new_splash);
+
+    ds_inf("Launch new splash. splash(%p)", splash);
+    if (!splash) return;
+
+    launch->splash = splash;
+
+    // new view for "Launchscreen"
+    view = calloc(1, sizeof *view);
+    assert(view);
+
+    wl_list_insert(launch->server->views.prev, &view->link);
+    view->pid = ds_tizen_launch_splash_get_pid(splash);
+
+    launch->splash_owner.notify = launch_splash_handle_owner;
+    ds_tizen_launch_splash_add_owner_listener(launch->splash,
+            &launch->splash_owner);
+}
+
+struct tinyds_launch *
+tinyds_launch_init(struct wl_display *display, launch_free_cb free_cb, void *data)
+{
+    struct tinyds_launch *launch;
+
+    launch = calloc(1, sizeof *launch);
+    if (!launch)
+        return NULL;
+
+    launch->free_cb = free_cb;
+    data = data;
+
+    launch->effect = ds_tizen_launch_effect_create(display);
+    if (!launch->effect) {
+        return NULL;
+    }
+
+    launch->effect_destroy.notify = launch_effect_handle_destroy;
+    ds_tizen_launch_effect_add_destroy_listener(launch->effect,
+            &launch->effect_destroy);
+
+    launch->effect_type_set.notify = launch_effect_handle_type_set;
+    ds_tizen_launch_effect_add_type_set_listener(launch->effect,
+            &launch->effect_type_set);
+
+    launch->effect_type_unset.notify = launch_effect_handle_type_unset;
+    ds_tizen_launch_effect_add_type_unset_listener(launch->effect,
+            &launch->effect_type_unset);
+
+    launch->new_splash.notify = launch_effect_handle_new_splash;
+    ds_tizen_launch_effect_add_new_splash_listener(launch->effect,
+            &launch->new_splash);
+
+    launch->server = (struct tinyds_server *)data;
+
+    ds_inf("Launch (%p) created", launch);
+
+    return launch;
+}
+
+int
+tinyds_launch_get_effect_type(struct tinyds_launch *launch, uint32_t pid)
+{
+    return ds_tizen_launch_effect_get_effect_type(launch->effect, pid);
+}
+
+void
+tinyds_launch_unset_effect_type(struct tinyds_launch *launch, uint32_t pid)
+{
+    ds_tizen_launch_effect_unset_effect_type(launch->effect, pid);
+}
diff --git a/examples/tinyds-launch.h b/examples/tinyds-launch.h
new file mode 100644 (file)
index 0000000..bdbbb08
--- /dev/null
@@ -0,0 +1,14 @@
+#ifndef TINYDS_LAUNCH_H
+#define TINYDS_LAUNCH_H
+
+struct tinyds_launch;
+
+typedef void (*launch_free_cb)(void *data);
+
+struct tinyds_launch *tinyds_launch_init(struct wl_display *display,
+    launch_free_cb free_cb, void *data);
+
+int tinyds_launch_get_effect_type(struct tinyds_launch *launch, uint32_t pid);
+void tinyds_launch_unset_effect_type(struct tinyds_launch *launch, uint32_t pid);
+
+#endif
index cb8f2e516231ad3c8b4f84017dbb1a04a4c7d222..08084e328a6ccecfaa72e202f248990690424dcd 100644 (file)
@@ -33,28 +33,6 @@ struct tinyds_output
 #endif
 };
 
-struct tinyds_view
-{
-    struct tinyds_server *server;
-
-    struct tinyds_texture *texture;
-    struct ds_xdg_surface *xdg_surface;
-
-    struct wl_listener xdg_surface_map;
-    struct wl_listener xdg_surface_unmap;
-    struct wl_listener xdg_surface_destroy;
-    struct wl_listener surface_commit;
-    struct wl_list link; // tinyds_server::views
-
-    struct ds_tdm_output_hwc_window *hwc_window;
-
-    int x, y;
-    bool mapped;
-
-    pid_t pid;
-    int effect_type;
-};
-
 struct tinyds_pointer
 {
     struct ds_input_device *dev;
@@ -246,9 +224,9 @@ main(void)
 static void
 view_populate_pid(struct tinyds_view *view)
 {
-    pid_t pid;
-    struct wl_client *client = NULL;
     struct ds_surface *surface;
+    struct wl_client *client = NULL;
+    pid_t pid;
 
     surface = ds_xdg_surface_get_surface(view->xdg_surface);
     if (!surface)
@@ -259,12 +237,14 @@ view_populate_pid(struct tinyds_view *view)
         return;
 
     wl_client_get_credentials(client, &pid, NULL, NULL);
+    view->pid = pid;
 
     ds_inf("view pid(%u)", pid);
-    view->pid = pid;
 
-    view->effect_type = ds_tizen_launch_effect_get_effect_type(view->server->effect, pid);
-    ds_tizen_launch_effect_unset_effect_type(view->server->effect, pid);
+    view->effect_type = tinyds_launch_get_effect_type(
+            view->server->launch, pid);
+    tinyds_launch_unset_effect_type(view->server->launch, pid);
+
     ds_inf("view effect_type(%d)", view->effect_type);
 }
 
@@ -587,127 +567,29 @@ devicemgr_handle_destroy(struct wl_listener *listener, void *data TINYDS_UNUSED)
     server->devicemgr = NULL;
 }
 
-static void
-launch_effect_handle_destroy(struct wl_listener *listener, void *data TINYDS_UNUSED)
-{
-    struct tinyds_server *server =
-        wl_container_of(listener, server, effect_destroy);
-
-    wl_list_remove(&server->effect_destroy.link);
-    wl_list_remove(&server->effect_type_set.link);
-    wl_list_remove(&server->effect_type_unset.link);
-    wl_list_remove(&server->new_splash.link);
-
-    server->effect = NULL;
-}
-
-static void
-launch_effect_handle_type_set(struct wl_listener *listener, void *data)
-{
-    struct tinyds_server *server;
-    struct ds_tizen_launch_effect_event_type_set *event = data;
-    struct tinyds_view *view = NULL;
-    bool existing = false;
-
-    server = wl_container_of(listener, server, effect_type_set);
-
-    ds_inf("Launch effect. type_set: pid(%u) type:%s", event->pid, (event->effect_type == 1) ? "depth-in" : "launch");
-
-    wl_list_for_each(view, &server->views, link) {
-        if (view->pid == event->pid) {
-            view->effect_type = event->effect_type;
-            ds_inf("Launch effect. existing pid");
-            existing = true;
-        }
-    }
-    if (existing) {
-        ds_tizen_launch_effect_unset_effect_type(server->effect, event->pid);
-    } else {
-        ds_tizen_launch_effect_set_effect_type(server->effect, event->pid, event->effect_type);
-    }
-}
-
-static void
-launch_effect_handle_type_unset(struct wl_listener *listener, void *data)
-{
-    struct tinyds_server *server;
-    struct ds_tizen_launch_effect_event_type_unset *event = data;
-    struct tinyds_view *view = NULL;
-
-    server = wl_container_of(listener, server, effect_type_unset);
-
-    ds_inf("Launch effect. type_unset: pid(%u)", event->pid);
-
-    wl_list_for_each(view, &server->views, link) {
-        if (view->pid == event->pid) {
-            view->effect_type = -1;
-            ds_inf("Launch effect. pid found");
-        }
-    }
-    ds_tizen_launch_effect_unset_effect_type(server->effect, event->pid);
-}
-
-static void
-launch_splash_handle_owner(struct wl_listener *listener, void *data)
-{
-    struct tinyds_server *server;
-    struct ds_tizen_launch_splash_event_owner *event = data;
-    struct tinyds_view *view = NULL;
-
-    server = wl_container_of(listener, server, splash_owner);
-
-    ds_inf("Splash owner. pid(%u)", event->pid);
-
-    wl_list_for_each(view, &server->views, link) {
-        if (view->pid == event->pid) {
-            if (event->pid == ds_tizen_launch_splash_get_pid(server->splash))
-                ;//
-            else {
-                ds_tizen_launch_splash_set_pid(server->splash, event->pid);
-            }
-        }
-    }
-}
 
 static void
-launch_effect_handle_new_splash(struct wl_listener *listener, void *data)
+dpms_free_func(void *data)
 {
-    struct tinyds_server *server;
-    struct ds_tizen_launch_splash *splash = data;
-    struct tinyds_view *view = NULL;
-
-    server = wl_container_of(listener, server, new_splash);
-
-    ds_inf("Launch new splash. splash(%p)", splash);
-    if (!splash) return;
-
-    server->splash = splash;
-
-    // new view for "Launchscreen"
-    view = calloc(1, sizeof *view);
-    assert(view);
-    wl_list_insert(server->views.prev, &view->link);
-    view->pid = ds_tizen_launch_splash_get_pid(splash);
+    struct tinyds_server *server = (struct tinyds_server *)data;
 
-    server->splash_owner.notify = launch_splash_handle_owner;
-    ds_tizen_launch_splash_add_owner_listener(server->splash,
-            &server->splash_owner);
+    server->dpms = NULL;
 }
 
 static void
-dpms_free_func(void *data)
+policy_free_func(void *data)
 {
     struct tinyds_server *server = (struct tinyds_server *)data;
 
-    server->dpms = NULL;
+    server->policy = NULL;
 }
 
 static void
-policy_free_func(void *data)
+launch_free_func(void *data)
 {
     struct tinyds_server *server = (struct tinyds_server *)data;
 
-    server->policy = NULL;
+    server->launch = NULL;
 }
 
 static bool
@@ -763,6 +645,10 @@ init_server(struct tinyds_server *server, struct wl_display *display)
     if (!server->policy)
         goto err;
 
+    server->launch = tinyds_launch_init(server->display, launch_free_func, (void *)server);
+    if (!server->launch)
+        goto err;
+
     server->seat = ds_seat_create(display, "seat0" /* arbitrary name */);
     if (!server->seat)
         goto err;
@@ -785,27 +671,6 @@ init_server(struct tinyds_server *server, struct wl_display *display)
     ds_tizen_input_devicemgr_add_pointer_warp_listener(server->devicemgr,
             &server->pointer_warp);
 
-    server->effect = ds_tizen_launch_effect_create(display);
-    if (!server->effect) {
-        goto err;
-    }
-
-    server->effect_destroy.notify = launch_effect_handle_destroy;
-    ds_tizen_launch_effect_add_destroy_listener(server->effect,
-            &server->effect_destroy);
-
-    server->effect_type_set.notify = launch_effect_handle_type_set;
-    ds_tizen_launch_effect_add_type_set_listener(server->effect,
-            &server->effect_type_set);
-
-    server->effect_type_unset.notify = launch_effect_handle_type_unset;
-    ds_tizen_launch_effect_add_type_unset_listener(server->effect,
-            &server->effect_type_unset);
-
-    server->new_splash.notify = launch_effect_handle_new_splash;
-    ds_tizen_launch_effect_add_new_splash_listener(server->effect,
-            &server->new_splash);
-
     if (!add_new_text_input(server))
         goto err;
 
index 1bbad9e3d36d9366e6da925bda739b697af0e804..0935b9b2a5f6c85bbbc18f4318120b744b357459 100644 (file)
@@ -14,6 +14,7 @@
 #include "protocol-trace.h"
 #include "tinyds-policy.h"
 #include "tinyds-dpms.h"
+#include "tinyds-launch.h"
 
 struct tinyds_keyboard;
 struct tinyds_pointer;
@@ -32,12 +33,11 @@ struct tinyds_server
     uint32_t seat_caps;
     double output_x, output_y;
     struct ds_tizen_input_devicemgr *devicemgr;
-    struct ds_tizen_launch_effect *effect;
-    struct ds_tizen_launch_splash *splash;
 
     struct tinyds_output *output;
     struct tinyds_dpms *dpms;
     struct tinyds_policy *policy;
+    struct tinyds_launch *launch;
 
     struct wl_event_source *stdin_source;
 
@@ -48,11 +48,7 @@ struct tinyds_server
     struct wl_listener new_xdg_surface;
     struct wl_listener devicemgr_destroy;
     struct wl_listener pointer_warp;
-    struct wl_listener effect_destroy;
-    struct wl_listener effect_type_set;
-    struct wl_listener effect_type_unset;
-    struct wl_listener new_splash;
-    struct wl_listener splash_owner;
+
 
     struct wl_list keyboards;
     struct wl_list pointers;
@@ -61,5 +57,26 @@ struct tinyds_server
     struct tinyds_input_method *input_method;
 };
 
+struct tinyds_view
+{
+    struct tinyds_server *server;
+
+    struct tinyds_texture *texture;
+    struct ds_xdg_surface *xdg_surface;
+
+    struct wl_listener xdg_surface_map;
+    struct wl_listener xdg_surface_unmap;
+    struct wl_listener xdg_surface_destroy;
+    struct wl_listener surface_commit;
+    struct wl_list link; // tinyds_server::views
+
+    struct ds_tdm_output_hwc_window *hwc_window;
+
+    int x, y;
+    bool mapped;
+
+    pid_t pid;
+    int effect_type;
+};
 
 #endif