move the implementation of ds_tizen_launch at tinyds-tdm.c to tinyds-launch file.
Change-Id: Id19d390874f725f843fbf8e4553dfd618ee1a7b1
'protocol-trace.c',
'tinyds-policy.c',
'tinyds-dpms.c',
+ 'tinyds-launch.c',
]
executable('tinyds-tdm',
--- /dev/null
+#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);
+}
--- /dev/null
+#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
#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;
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)
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);
}
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
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;
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;
#include "protocol-trace.h"
#include "tinyds-policy.h"
#include "tinyds-dpms.h"
+#include "tinyds-launch.h"
struct tinyds_keyboard;
struct tinyds_pointer;
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;
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;
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