From: SooChan Lim Date: Fri, 28 Oct 2022 23:21:05 +0000 (+0900) Subject: examples: make tinyds-launch files X-Git-Tag: accepted/tizen/unified/20230106.165108~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=05dc6f4a75835c893f05535c327cc25849b5ed7f;p=platform%2Fcore%2Fuifw%2Flibds-tizen.git examples: make tinyds-launch files move the implementation of ds_tizen_launch at tinyds-tdm.c to tinyds-launch file. Change-Id: Id19d390874f725f843fbf8e4553dfd618ee1a7b1 --- diff --git a/examples/meson.build b/examples/meson.build index 23156e1..9b12dd8 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -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 index 0000000..0e73a7c --- /dev/null +++ b/examples/tinyds-launch.c @@ -0,0 +1,184 @@ +#include + +#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 index 0000000..bdbbb08 --- /dev/null +++ b/examples/tinyds-launch.h @@ -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 diff --git a/examples/tinyds-tdm.c b/examples/tinyds-tdm.c index cb8f2e5..08084e3 100644 --- a/examples/tinyds-tdm.c +++ b/examples/tinyds-tdm.c @@ -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; diff --git a/examples/tinyds-tdm.h b/examples/tinyds-tdm.h index 1bbad9e..0935b9b 100644 --- a/examples/tinyds-tdm.h +++ b/examples/tinyds-tdm.h @@ -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