1 #include <libds-tizen/launch.h>
3 #include "tinyds-common.h"
4 #include "tinyds-launch.h"
5 #include "tinyds-tdm.h"
9 launch_free_cb free_cb;
12 struct ds_tizen_launch_effect *effect;
13 struct ds_tizen_launch_splash *splash;
15 struct wl_listener effect_destroy;
16 struct wl_listener effect_type_set;
17 struct wl_listener effect_type_unset;
18 struct wl_listener new_splash;
19 struct wl_listener splash_owner;
21 struct tinyds_server *server;
25 launch_effect_handle_destroy(struct wl_listener *listener, void *data TINYDS_UNUSED)
27 struct tinyds_launch *launch =
28 wl_container_of(listener, launch, effect_destroy);
30 launch->free_cb(data);
32 wl_list_remove(&launch->effect_destroy.link);
33 wl_list_remove(&launch->effect_type_set.link);
34 wl_list_remove(&launch->effect_type_unset.link);
35 wl_list_remove(&launch->new_splash.link);
37 launch->effect = NULL;
41 launch_effect_handle_type_set(struct wl_listener *listener, void *data)
43 struct tinyds_launch *launch;
44 struct ds_tizen_launch_effect_event_type_set *event = data;
45 struct tinyds_view *view = NULL;
46 bool existing = false;
48 launch = wl_container_of(listener, launch, effect_type_set);
50 ds_inf("Launch effect. type_set: pid(%u) type:%s", event->pid, (event->effect_type == 1) ? "depth-in" : "launch");
52 wl_list_for_each(view, &launch->server->views, link) {
53 if ((uint32_t)view->pid == event->pid) {
54 view->effect_type = event->effect_type;
56 ds_inf("Launch effect. existing pid");
60 ds_tizen_launch_effect_unset_effect_type(launch->effect, event->pid);
62 ds_tizen_launch_effect_set_effect_type(launch->effect, event->pid, event->effect_type);
67 launch_effect_handle_type_unset(struct wl_listener *listener, void *data)
69 struct tinyds_launch *launch;
70 struct ds_tizen_launch_effect_event_type_unset *event = data;
71 struct tinyds_view *view = NULL;
73 launch = wl_container_of(listener, launch, effect_type_unset);
75 ds_inf("Launch effect. type_unset: pid(%u)", event->pid);
77 wl_list_for_each(view, &launch->server->views, link) {
78 if ((uint32_t)view->pid == event->pid) {
79 view->effect_type = -1;
80 ds_inf("Launch effect. pid found");
83 ds_tizen_launch_effect_unset_effect_type(launch->effect, event->pid);
87 launch_splash_handle_owner(struct wl_listener *listener, void *data)
89 struct tinyds_launch *launch;
90 struct ds_tizen_launch_splash_event_owner *event = data;
91 struct tinyds_view *view = NULL;
93 launch = wl_container_of(listener, launch, splash_owner);
95 ds_inf("Splash owner. pid(%u)", event->pid);
97 wl_list_for_each(view, &launch->server->views, link) {
98 if ((uint32_t)view->pid == event->pid) {
99 if (event->pid == ds_tizen_launch_splash_get_pid(launch->splash))
102 ds_tizen_launch_splash_set_pid(launch->splash, event->pid);
109 launch_effect_handle_new_splash(struct wl_listener *listener, void *data)
111 struct tinyds_launch *launch;
112 struct ds_tizen_launch_splash *splash = data;
113 struct tinyds_view *view = NULL;
115 launch = wl_container_of(listener, launch, new_splash);
117 ds_inf("Launch new splash. splash(%p)", splash);
120 launch->splash = splash;
122 // new view for "Launchscreen"
123 view = calloc(1, sizeof *view);
126 wl_list_insert(launch->server->views.prev, &view->link);
127 view->pid = ds_tizen_launch_splash_get_pid(splash);
129 launch->splash_owner.notify = launch_splash_handle_owner;
130 ds_tizen_launch_splash_add_owner_listener(launch->splash,
131 &launch->splash_owner);
134 struct tinyds_launch *
135 tinyds_launch_init(struct wl_display *display, launch_free_cb free_cb, void *data)
137 struct tinyds_launch *launch;
139 launch = calloc(1, sizeof *launch);
143 launch->free_cb = free_cb;
146 launch->effect = ds_tizen_launch_effect_create(display);
147 if (!launch->effect) {
152 launch->effect_destroy.notify = launch_effect_handle_destroy;
153 ds_tizen_launch_effect_add_destroy_listener(launch->effect,
154 &launch->effect_destroy);
156 launch->effect_type_set.notify = launch_effect_handle_type_set;
157 ds_tizen_launch_effect_add_type_set_listener(launch->effect,
158 &launch->effect_type_set);
160 launch->effect_type_unset.notify = launch_effect_handle_type_unset;
161 ds_tizen_launch_effect_add_type_unset_listener(launch->effect,
162 &launch->effect_type_unset);
164 launch->new_splash.notify = launch_effect_handle_new_splash;
165 ds_tizen_launch_effect_add_new_splash_listener(launch->effect,
166 &launch->new_splash);
168 launch->server = (struct tinyds_server *)data;
170 ds_inf("Launch (%p) created", launch);
176 tinyds_launch_get_effect_type(struct tinyds_launch *launch, uint32_t pid)
178 return ds_tizen_launch_effect_get_effect_type(launch->effect, pid);
182 tinyds_launch_unset_effect_type(struct tinyds_launch *launch, uint32_t pid)
184 ds_tizen_launch_effect_unset_effect_type(launch->effect, pid);