X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=examples%2Ftinyds-tdm.c;h=9c50c8444740910eacb438641da266bd91fb24a0;hb=refs%2Fheads%2Faccepted%2Ftizen_unified_x;hp=2a54e3d11dcd4fa4f6e5596d5c9b4824c2e92799;hpb=9c400b33b913c82429e7ae1aad831642fac63f99;p=platform%2Fcore%2Fuifw%2Flibds-tizen.git diff --git a/examples/tinyds-tdm.c b/examples/tinyds-tdm.c index 2a54e3d..9c50c84 100644 --- a/examples/tinyds-tdm.c +++ b/examples/tinyds-tdm.c @@ -1,54 +1,4 @@ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define USE_TDM_BUFFER_QUEUE -#define CURSOR_W 10 -#define CURSOR_H 16 - -#ifdef USE_TDM_BUFFER_QUEUE -#include "pixman-tbm-helper.h" -#include "tinyds-tdm-renderer.h" -#else -#include -#endif - -#include "pixman-helper.h" -#include "protocol-trace.h" - -#define TINYDS_UNUSED __attribute__((unused)) -struct tinyds_keyboard; -struct tinyds_pointer; +#include "tinyds-tdm.h" struct tinyds_output { @@ -83,174 +33,6 @@ struct tinyds_output #endif }; -struct tinyds_dpms -{ - struct ds_tizen_dpms *ds_dpms; - struct tinyds_server *server; - - struct wl_listener destroy; - struct wl_listener set_dpms; - struct wl_listener get_dpms; -}; - -struct tinyds_policy -{ - struct ds_tizen_policy *policy; - - struct wl_listener destroy; - struct wl_listener new_surface; - struct wl_listener activate_below_by_univeral_id; - struct wl_listener lower_by_universal_id; - struct wl_listener set_transient_for; - struct wl_listener unset_transient_for; - struct wl_listener place_subsurface_below_parent; - struct wl_listener set_subsurface_stand_alone; - struct wl_listener set_background_state; - struct wl_listener unset_background_state; - struct wl_listener add_activate_above_by_universal_id; - struct wl_listener set_appid; - struct wl_listener set_transient_for_below; - - struct wl_list policy_surfaces; -}; - -struct tinyds_policy_surface -{ - struct ds_tizen_policy_surface *policy_surface; - - struct wl_listener destroy; - struct wl_listener new_visibility; - struct wl_listener new_position; - struct wl_listener activate; - struct wl_listener raise; - struct wl_listener lower; - struct wl_listener set_focus_skip; - struct wl_listener unset_focus_skip; - struct wl_listener set_role; - struct wl_listener set_window_type; - struct wl_listener set_conformant; - struct wl_listener unset_conformant; - struct wl_listener get_conformant; - struct wl_listener set_notification_level; - struct wl_listener set_window_screen_mode; - struct wl_listener get_subsurface; - struct wl_listener iconify; - struct wl_listener uniconify; - struct wl_listener add_aux_hint; - struct wl_listener change_aux_hint; - struct wl_listener delete_aux_hint; - struct wl_listener get_supported_aux_hints; - struct wl_listener set_floating_mode; - struct wl_listener unset_floating_mode; - struct wl_listener set_stack_mode; - struct wl_listener new_subsurface_watcher; - struct wl_listener set_parent; - struct wl_listener ack_conformant_region; - struct wl_listener set_video; - struct wl_listener show; - struct wl_listener hide; - struct wl_listener set_parent_with_below; - - struct wl_list visibilities; - struct wl_list positions; - struct wl_list subsurface_watchers; - - struct wl_list link; //tinyds_policy::policy_surfaces -}; - -struct tinyds_policy_visibility -{ - struct ds_tizen_policy_visibility *visibility; - - struct wl_listener destroy; - - struct wl_list link; //tinyds_policy::visibilities -}; - -struct tinyds_policy_position -{ - struct ds_tizen_policy_position *position; - - struct wl_listener destroy; - struct wl_listener set; - - struct wl_list link; //tinyds_policy::positions -}; - -struct tinyds_policy_subsurface_watcher -{ - struct ds_tizen_policy_subsurface_watcher *subsurface_watcher; - - struct wl_listener destroy; - - struct wl_list link; //tinyds_policy::subsurface_watchers -}; - -struct tinyds_server -{ - struct ds_tbm_server *tbm_server; - - struct wl_display *display; - - struct ds_backend *backend; - struct ds_backend *input_backend; - struct ds_compositor *compositor; - struct ds_xdg_shell *xdg_shell; - struct ds_seat *seat; - 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 wl_event_source *stdin_source; - - struct wl_list views; - - struct wl_listener new_output; - struct wl_listener new_input; - 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_text_input *text_input; - 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; -}; - struct tinyds_pointer { struct ds_input_device *dev; @@ -370,20 +152,12 @@ static void output_swapchain_init(struct tinyds_output *output, static void output_draw_with_swapchain(struct tinyds_output *output); static void draw_view(struct tinyds_view *view, pixman_image_t *dst_image); #endif -static void dpms_handle_destroy(struct wl_listener *listener, void *data); -static void dpms_handle_set_dpms(struct wl_listener *listener, void *data); -static void dpms_handle_get_dpms(struct wl_listener *listener, void *data); static void server_add_keyboard(struct tinyds_server *server, struct ds_input_device *dev); static void server_add_pointer(struct tinyds_server *server, struct ds_input_device *dev); static void server_add_touch(struct tinyds_server *server, struct ds_input_device *dev); -static bool new_policy(struct tinyds_server *server); -static struct tinyds_view * -server_view_at(struct tinyds_server *server, double lx, double ly, - double *sx, double *sy); - static bool add_new_text_input(struct tinyds_server *server); static bool add_new_input_method(struct tinyds_server *server); static bool add_new_input_method_context( @@ -446,9 +220,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) @@ -459,12 +233,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); } @@ -648,7 +424,7 @@ backend_handle_new_output(struct wl_listener *listener, void *data) output->output_frame.notify = output_handle_frame; ds_output_add_frame_listener(ds_output, &output->output_frame); - ds_tizen_input_devicemgr_set_output_width_height(server->devicemgr, (uint32_t)output->width, (uint32_t)output->height); + tinyds_input_devicemgr_set_output_size(server->input_devicemgr, (uint32_t)output->width, (uint32_t)output->height); server->output = output; server->output_x = (double)(output->width) / 2; @@ -657,38 +433,6 @@ backend_handle_new_output(struct wl_listener *listener, void *data) output_schedule_commit(output); } -static bool -add_new_dpms(struct tinyds_server *server) -{ - struct tinyds_dpms *dpms; - - dpms = calloc(1, sizeof *dpms); - if (!dpms) - return false; - - dpms->ds_dpms = ds_tizen_dpms_create(server->display); - if (!dpms->ds_dpms) { - free(dpms); - ds_err("Could not create ds_tizen_dpms"); - return false; - } - - dpms->destroy.notify = dpms_handle_destroy; - ds_tizen_dpms_add_destroy_listener(dpms->ds_dpms, &dpms->destroy); - - dpms->set_dpms.notify = dpms_handle_set_dpms; - ds_tizen_dpms_add_set_dpms_listener(dpms->ds_dpms, &dpms->set_dpms); - - dpms->get_dpms.notify = dpms_handle_get_dpms; - ds_tizen_dpms_add_get_dpms_listener(dpms->ds_dpms, &dpms->get_dpms); - - server->dpms = dpms; - - ds_inf("Dpms (%p) added", dpms); - - return true; -} - static void backend_handle_new_input(struct wl_listener *listener, void *data) { @@ -722,208 +466,35 @@ backend_handle_new_input(struct wl_listener *listener, void *data) } static void -devicemgr_add_keymap_data(struct wl_list *list, const char *name, int keycode) -{ - struct ds_tizen_input_devicemgr_keymap_data *data; - - data = calloc(1, sizeof *data); - if (!data) { - ds_err("Failed to alloc memory"); - return; - } - - data->name = strdup(name); - data->keycode = keycode; - - wl_list_insert(list, &data->link); -} - -static void -devicemgr_cleanup_keymap_list(struct wl_list *list) -{ - struct ds_tizen_input_devicemgr_keymap_data *data, *tmp; - - wl_list_for_each_safe(data, tmp, list, link) { - wl_list_remove(&data->link); - free(data->name); - free(data); - } -} - -static void -devicemgr_set_keymap(struct ds_tizen_input_devicemgr *devicemgr) -{ - struct wl_list keymap_list; - bool res; - - wl_list_init(&keymap_list); - - devicemgr_add_keymap_data(&keymap_list, "XF86VolumeRaise", 455); - devicemgr_add_keymap_data(&keymap_list, "XF86VolumeLower", 456); - devicemgr_add_keymap_data(&keymap_list, "XF86LightOn", 457); - devicemgr_add_keymap_data(&keymap_list, "XF86LightOff", 458); - - res = ds_tizen_input_devicemgr_set_keymap_list(devicemgr, &keymap_list); - if (!res) - ds_inf("Failed to set keymap"); - - devicemgr_cleanup_keymap_list(&keymap_list); -} - -static void -devicemgr_handle_pointer_warp(struct wl_listener *listener, void *data) -{ - struct tinyds_server *server; - struct tinyds_pointer *pointer; - struct ds_tizen_input_devicemgr_event_pointer_warp *event = data; - double sx = 0.f, sy = 0.f; - struct tinyds_view *view = NULL; - - server = wl_container_of(listener, server, pointer_warp); - - ds_inf("Pointer warp: surface(%p) x(%.2f) y(%.2f)", event->surface, - event->x, event->y); - - wl_list_for_each(pointer, &server->pointers, link){ - if (!pointer->focused_view) continue; - view = pointer->focused_view; - } - if (!view) return; - - if (event->surface != ds_xdg_surface_get_surface(view->xdg_surface)) { - ds_inf("Pointer is not on the requested surface"); - return; - } - - server->output_x = view->x + (event->x * server->output->width); - server->output_y = view->y + (event->y * server->output->height); - - server_view_at(server, server->output_x, server->output_y, &sx, &sy); - - ds_inf("notify motion: sx:%.2f sy:%.2f, output_x:%.1f, output_y:%.1f", - sx, sy, server->output_x, server->output_y); - - ds_seat_pointer_notify_motion(server->seat, - event->time_msec, sx, sy); -} - -static void -devicemgr_handle_destroy(struct wl_listener *listener, void *data TINYDS_UNUSED) -{ - struct tinyds_server *server = - wl_container_of(listener, server, devicemgr_destroy); - - wl_list_remove(&server->devicemgr_destroy.link); - wl_list_remove(&server->pointer_warp.link); - - 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) +dpms_free_func(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"); + struct tinyds_server *server = (struct tinyds_server *)data; - 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); - } + server->dpms = NULL; } static void -launch_effect_handle_type_unset(struct wl_listener *listener, void *data) +policy_free_func(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); + struct tinyds_server *server = (struct tinyds_server *)data; - 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); + server->policy = NULL; } static void -launch_splash_handle_owner(struct wl_listener *listener, void *data) +launch_free_func(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); + struct tinyds_server *server = (struct tinyds_server *)data; - 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); - } - } - } + server->launch = NULL; } static void -launch_effect_handle_new_splash(struct wl_listener *listener, void *data) +input_devicemgr_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; + struct tinyds_server *server = (struct tinyds_server *)data; - 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); - - server->splash_owner.notify = launch_splash_handle_owner; - ds_tizen_launch_splash_add_owner_listener(server->splash, - &server->splash_owner); + server->input_devicemgr = NULL; } static bool @@ -971,10 +542,16 @@ init_server(struct tinyds_server *server, struct wl_display *display) ds_xdg_shell_add_new_surface_listener(server->xdg_shell, &server->new_xdg_surface); - if (!add_new_dpms(server)) + server->dpms = tinyds_dpms_init(server->display, dpms_free_func, (void *)server); + if (!server->dpms) + goto err; + + server->policy = tinyds_policy_init(server->display, policy_free_func, (void *)server); + if (!server->policy) goto err; - if (!new_policy(server)) + 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 */); @@ -982,43 +559,10 @@ init_server(struct tinyds_server *server, struct wl_display *display) goto err; server->seat_caps = 0; - server->devicemgr = ds_tizen_input_devicemgr_create( - server->input_backend, server->seat); - if (!server->devicemgr) { - ds_err("Could not create ds_tizen_input_devicemgr"); - goto err; - } - - devicemgr_set_keymap(server->devicemgr); - - server->devicemgr_destroy.notify = devicemgr_handle_destroy; - ds_tizen_input_devicemgr_add_destroy_listener(server->devicemgr, - &server->devicemgr_destroy); - - server->pointer_warp.notify = devicemgr_handle_pointer_warp; - ds_tizen_input_devicemgr_add_pointer_warp_listener(server->devicemgr, - &server->pointer_warp); - - server->effect = ds_tizen_launch_effect_create(display); - if (!server->effect) { + server->input_devicemgr = tinyds_input_devicemgr_init(server->input_backend, + server->seat, input_devicemgr_free_func, (void *)server); + if (!server->input_devicemgr) 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; @@ -1079,7 +623,7 @@ output_commit(struct tinyds_output *output) struct ds_tdm_output_hwc_window **changed_hwc_windows = NULL; enum ds_tdm_output_hwc_window_composition composition; struct tinyds_view *view; - int i; + size_t i; bool need_target = false; bool fully_obscured = false; struct ds_buffer *ds_buffer; @@ -1220,7 +764,7 @@ output_commit(struct tinyds_output *output) return; } - for (i = 0; i < num_changed; i++) { + for (i = 0; i < (size_t)num_changed; i++) { composition = ds_tdm_output_hwc_window_get_composition(changed_hwc_windows[i]); if (composition == DS_TDM_OUTPUT_HWC_WINDOW_COMPOSITION_CLIENT) { need_target = true; @@ -1261,8 +805,6 @@ output_commit(struct tinyds_output *output) output->target_updated = false; wl_list_for_each(view, &output->server->views, link) { - enum ds_tdm_output_hwc_window_composition composition; - if (!view->mapped) continue; @@ -1522,53 +1064,6 @@ server_dispatch_stdin(int fd, uint32_t mask, void *data) } static void -dpms_handle_destroy(struct wl_listener *listener, void *data) -{ - struct tinyds_dpms *dpms; - - dpms = wl_container_of(listener, dpms, destroy); - - ds_inf("Dpms(%p) destroyed", dpms); - - wl_list_remove(&dpms->destroy.link); - wl_list_remove(&dpms->set_dpms.link); - wl_list_remove(&dpms->get_dpms.link); - - free(dpms); -} - -static void -dpms_handle_set_dpms(struct wl_listener *listener, void *data) -{ - struct tinyds_dpms *dpms; - struct ds_tizen_dpms_event *event = data; - - dpms = wl_container_of(listener, dpms, set_dpms); - - ds_inf("Dpms(%p) set dpms : %d", dpms, event->mode); - - //To do - //set dpms mode to output - ds_tizen_dpms_send_set_result(dpms->ds_dpms, event->mode, - DS_TIZEN_DPMS_ERROR_NONE); -} - -static void -dpms_handle_get_dpms(struct wl_listener *listener, void *data) -{ - struct tinyds_dpms *dpms; - - dpms = wl_container_of(listener, dpms, get_dpms); - - ds_inf("Dpms(%p) get dpms", dpms); - - //To do - //get dpms mode from output - ds_tizen_dpms_send_get_result(dpms->ds_dpms, DS_TIZEN_DPMS_MODE_ON, - DS_TIZEN_DPMS_ERROR_NONE); -} - -static void keyboard_handle_device_destroy(struct wl_listener *listener, void *data) { struct tinyds_keyboard *kbd; @@ -1602,7 +1097,7 @@ static void keyboard_handle_key(struct wl_listener *listener, void *data) { struct tinyds_keyboard *kbd; - struct ds_event_keyboard_key *event = data; + struct ds_keyboard_event_key *event = data; struct ds_keyboard *ds_keyboard; struct xkb_state *xkb_state; const xkb_keysym_t *syms; @@ -1682,8 +1177,8 @@ err: free(kbd); } -static struct tinyds_view * -server_view_at(struct tinyds_server *server, double lx, double ly, +struct tinyds_view * +tinyds_server_view_at(struct tinyds_server *server, double lx, double ly, double *sx, double *sy) { struct tinyds_view *view; @@ -1730,7 +1225,7 @@ touch_handle_device_destroy(struct wl_listener *listener, void *data) static void touch_handle_down(struct wl_listener *listener, void *data) { - struct ds_event_touch_down *event = data; + struct ds_touch_event_down *event = data; struct tinyds_touch *touch; struct tinyds_view *view; struct tinyds_server *server; @@ -1739,13 +1234,15 @@ touch_handle_down(struct wl_listener *listener, void *data) touch = wl_container_of(listener, touch, down); server = touch->server; - server->output_x = event->x * server->output->width; - server->output_y = event->y * server->output->height; + if (server->output) { + server->output_x = event->x * server->output->width; + server->output_y = event->y * server->output->height; + } ds_inf("Touch(%p) event down: id(%d) x %.3f y %.3f output_x %.1f output_y %.1f", touch->dev, event->id, event->x, event->y, server->output_x, server->output_y); - view = server_view_at(server, server->output_x, server->output_y, &sx, &sy); + view = tinyds_server_view_at(server, server->output_x, server->output_y, &sx, &sy); if (view) { ds_seat_touch_notify_down(touch->server->seat, ds_xdg_surface_get_surface(view->xdg_surface), @@ -1763,7 +1260,7 @@ touch_handle_down(struct wl_listener *listener, void *data) static void touch_handle_up(struct wl_listener *listener, void *data) { - struct ds_event_touch_up *event = data; + struct ds_touch_event_up *event = data; struct tinyds_touch *touch; touch = wl_container_of(listener, touch, up); @@ -1777,7 +1274,7 @@ touch_handle_up(struct wl_listener *listener, void *data) static void touch_handle_motion(struct wl_listener *listener, void *data) { - struct ds_event_touch_motion *event = data; + struct ds_touch_event_motion *event = data; struct tinyds_touch *touch; struct tinyds_view *view; struct tinyds_server *server; @@ -1786,13 +1283,15 @@ touch_handle_motion(struct wl_listener *listener, void *data) touch = wl_container_of(listener, touch, motion); server = touch->server; - server->output_x = event->x * server->output->width; - server->output_y = event->y * server->output->height; + if (server->output) { + server->output_x = event->x * server->output->width; + server->output_y = event->y * server->output->height; + } ds_inf("Touch(%p) event motion: id(%d) x %.3f y %.3f output_x %.1f output_y %.1f", touch->dev, event->id, event->x, event->y, server->output_x, server->output_y); - view = server_view_at(server, server->output_x, server->output_y, &sx, &sy); + view = tinyds_server_view_at(server, server->output_x, server->output_y, &sx, &sy); if (view) { ds_seat_touch_notify_motion(server->seat, event->time_msec, @@ -1872,7 +1371,7 @@ static void pointer_handle_motion(struct wl_listener *listener, void *data) { struct tinyds_pointer *pointer; - struct ds_event_pointer_motion *event = data; + struct ds_pointer_event_motion *event = data; struct tinyds_view *view; struct tinyds_server *server; int ow = 0, oh = 0; @@ -1902,7 +1401,7 @@ pointer_handle_motion(struct wl_listener *listener, void *data) ds_inf("Pointer(%p) motion: (delta_x %.1f delta_y %.1f) output_x %.1f output_y %.1f", pointer, event->delta_x, event->delta_y, server->output_x, server->output_y); - view = server_view_at(pointer->server, server->output_x, server->output_y, &sx, &sy); + view = tinyds_server_view_at(pointer->server, server->output_x, server->output_y, &sx, &sy); if (pointer->focused_view != view) { if (pointer->focused_view) { @@ -1936,7 +1435,7 @@ static void pointer_handle_button(struct wl_listener *listener, void *data) { struct tinyds_pointer *pointer; - struct ds_event_pointer_button *event = data; + struct ds_pointer_event_button *event = data; pointer = wl_container_of(listener, pointer, button); @@ -2674,916 +2173,25 @@ add_new_input_method_context(struct tinyds_input_method *input_method, return true; } -static void -visibility_handle_destroy(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_visibility *visibility; - - visibility = wl_container_of(listener, visibility, destroy); - - ds_inf("Policy Visibility(%p) destroy", visibility); - - wl_list_remove(&visibility->destroy.link); - wl_list_remove(&visibility->link); - free(visibility); -} - -static void -position_handle_destroy(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_position *position; - - position = wl_container_of(listener, position, destroy); - - ds_inf("Policy Position(%p) destroy", position); - - wl_list_remove(&position->destroy.link); - wl_list_remove(&position->set.link); - wl_list_remove(&position->link); - free(position); -} - -static void -position_handle_set(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_position *position; - - position = wl_container_of(listener, position, set); - - ds_inf("Policy Position(%p) set", position); - - // TODO: -} - -static void -subsurface_watcher_handle_destroy(struct wl_listener *listener, void *data) +struct tinyds_view * +tinyds_server_get_focused_view(struct tinyds_server *server) { - struct tinyds_policy_subsurface_watcher *subsurface_watcher; + struct tinyds_view *view = NULL; + struct tinyds_pointer *pointer; - subsurface_watcher = wl_container_of(listener, subsurface_watcher, destroy); + wl_list_for_each(pointer, &server->pointers, link){ + if (!pointer->focused_view) continue; - ds_inf("Policy Subsurface_Watcher(%p) destroy", subsurface_watcher); + view = pointer->focused_view; + } - wl_list_remove(&subsurface_watcher->destroy.link); - wl_list_remove(&subsurface_watcher->link); - free(subsurface_watcher); + return view; } -static void -policy_surface_handle_destroy(struct wl_listener *listener, void *data) +void +tinyds_server_get_output_size(struct tinyds_server *server, + int *output_w, int *output_h) { - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, destroy); - - ds_inf("Policy Info(%p) destroy", policy_surface); - - wl_list_remove(&policy_surface->destroy.link); - wl_list_remove(&policy_surface->new_visibility.link); - wl_list_remove(&policy_surface->new_position.link); - wl_list_remove(&policy_surface->activate.link); - wl_list_remove(&policy_surface->raise.link); - wl_list_remove(&policy_surface->lower.link); - wl_list_remove(&policy_surface->set_focus_skip.link); - wl_list_remove(&policy_surface->unset_focus_skip.link); - wl_list_remove(&policy_surface->set_role.link); - wl_list_remove(&policy_surface->set_window_type.link); - wl_list_remove(&policy_surface->set_conformant.link); - wl_list_remove(&policy_surface->unset_conformant.link); - wl_list_remove(&policy_surface->get_conformant.link); - wl_list_remove(&policy_surface->set_notification_level.link); - wl_list_remove(&policy_surface->set_window_screen_mode.link); - wl_list_remove(&policy_surface->get_subsurface.link); - wl_list_remove(&policy_surface->iconify.link); - wl_list_remove(&policy_surface->uniconify.link); - wl_list_remove(&policy_surface->add_aux_hint.link); - wl_list_remove(&policy_surface->change_aux_hint.link); - wl_list_remove(&policy_surface->delete_aux_hint.link); - wl_list_remove(&policy_surface->get_supported_aux_hints.link); - wl_list_remove(&policy_surface->set_floating_mode.link); - wl_list_remove(&policy_surface->unset_floating_mode.link); - wl_list_remove(&policy_surface->set_stack_mode.link); - wl_list_remove(&policy_surface->new_subsurface_watcher.link); - wl_list_remove(&policy_surface->set_parent.link); - wl_list_remove(&policy_surface->ack_conformant_region.link); - wl_list_remove(&policy_surface->set_video.link); - wl_list_remove(&policy_surface->show.link); - wl_list_remove(&policy_surface->hide.link); - wl_list_remove(&policy_surface->set_parent_with_below.link); - wl_list_remove(&policy_surface->link); - free(policy_surface); -} - -static void -policy_surface_handle_new_visibility(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - struct tinyds_policy_visibility *visibility; - struct ds_tizen_event_policy_surface_new_visibility *event; - - policy_surface = wl_container_of(listener, policy_surface, new_visibility); - event = (struct ds_tizen_event_policy_surface_new_visibility *)data; - - ds_inf("Policy Info(%p) new_visibility", policy_surface); - - visibility = calloc(1, sizeof *visibility); - if (!visibility) - return; - - visibility->visibility = event->visibility; - - visibility->destroy.notify = visibility_handle_destroy; - ds_tizen_policy_visibility_add_destroy_listener(visibility->visibility, - &visibility->destroy); - - wl_list_insert(&policy_surface->visibilities, &visibility->link); -} - -static void -policy_surface_handle_new_position(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - struct tinyds_policy_position *position; - struct ds_tizen_event_policy_surface_new_position *event; - - policy_surface = wl_container_of(listener, policy_surface, new_position); - event = (struct ds_tizen_event_policy_surface_new_position *)data; - - ds_inf("Policy Info(%p) new_position", policy_surface); - - position = calloc(1, sizeof *position); - if (!position) - return; - - position->position = event->position; - - position->destroy.notify = position_handle_destroy; - ds_tizen_policy_position_add_destroy_listener(position->position, - &position->destroy); - - position->set.notify = position_handle_set; - ds_tizen_policy_position_add_set_listener(position->position, - &position->set); - - wl_list_insert(&policy_surface->positions, &position->link); -} - -static void -policy_surface_handle_activate(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, activate); - - ds_inf("Policy Info(%p) activate", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_raise(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, raise); - - ds_inf("Policy Info(%p) raise", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_lower(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, raise); - - ds_inf("Policy Info(%p) lower", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_set_focus_skip(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, set_focus_skip); - - ds_inf("Policy Info(%p) set_focus_skip", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_unset_focus_skip(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, unset_focus_skip); - - ds_inf("Policy Info(%p) unset_focus_skip", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_set_role(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, set_role); - - ds_inf("Policy Info(%p) set_role", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_set_window_type(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, set_window_type); - - ds_inf("Policy Info(%p) set_window_type", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_set_conformant(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, set_conformant); - - ds_inf("Policy Info(%p) set_conformant", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_unset_conformant(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, unset_conformant); - - ds_inf("Policy Info(%p) unset_conformant", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_get_conformant(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, get_conformant); - - ds_inf("Policy Info(%p) get_conformant", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_set_notification_level(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, set_notification_level); - - ds_inf("Policy Info(%p) set_notification_level", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_set_window_screen_mode(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, set_window_screen_mode); - - ds_inf("Policy Info(%p) set_window_screen_mode", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_get_subsurface(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, get_subsurface); - - ds_inf("Policy Info(%p) get_subsurface", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_iconify(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, iconify); - - ds_inf("Policy Info(%p) iconify", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_uniconify(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, uniconify); - - ds_inf("Policy Info(%p) uniconify", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_add_aux_hint(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, add_aux_hint); - - ds_inf("Policy Info(%p) add_aux_hint", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_change_aux_hint(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, change_aux_hint); - - ds_inf("Policy Info(%p) change_aux_hint", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_delete_aux_hint(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, delete_aux_hint); - - ds_inf("Policy Info(%p) delete_aux_hint", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_get_supported_aux_hints(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, get_supported_aux_hints); - - ds_inf("Policy Info(%p) get_supported_aux_hints", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_set_floating_mode(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, set_floating_mode); - - ds_inf("Policy Info(%p) set_floating_mode", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_unset_floating_mode(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, unset_floating_mode); - - ds_inf("Policy Info(%p) unset_floating_mode", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_set_stack_mode(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, set_stack_mode); - - ds_inf("Policy Info(%p) set_stack_mode", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_new_subsurface_watcher(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - struct tinyds_policy_subsurface_watcher*subsurface_watcher; - struct ds_tizen_event_policy_surface_new_subsurface_watcher *event; - - policy_surface = wl_container_of(listener, policy_surface, new_subsurface_watcher); - event = (struct ds_tizen_event_policy_surface_new_subsurface_watcher *)data; - - ds_inf("Policy Info(%p) new_subsurface_watcher", policy_surface); - - subsurface_watcher = calloc(1, sizeof *subsurface_watcher); - if (!subsurface_watcher) - return; - - subsurface_watcher->subsurface_watcher = event->subsurface_watcher; - - subsurface_watcher->destroy.notify = subsurface_watcher_handle_destroy; - ds_tizen_policy_subsurface_watcher_add_destroy_listener(subsurface_watcher->subsurface_watcher, - &subsurface_watcher->destroy); - - wl_list_insert(&policy_surface->subsurface_watchers, &subsurface_watcher->link); -} - -static void -policy_surface_handle_set_parent(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, set_parent); - - ds_inf("Policy Info(%p) set_parent", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_ack_conformant_region(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, ack_conformant_region); - - ds_inf("Policy Info(%p) ack_conformant_region", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_set_video(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, set_video); - - ds_inf("Policy Info(%p) set_video", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_show(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, show); - - ds_inf("Policy Info(%p) show", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_hide(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, hide); - - ds_inf("Policy Info(%p) hide", policy_surface); - - // TODO: -} - -static void -policy_surface_handle_set_parent_with_below(struct wl_listener *listener, void *data) -{ - struct tinyds_policy_surface *policy_surface; - - policy_surface = wl_container_of(listener, policy_surface, set_parent_with_below); - - ds_inf("Policy Info(%p) set_parent_with_below", policy_surface); - - // TODO: -} - -static void -policy_handle_destroy(struct wl_listener *listener, void *data) -{ - struct tinyds_policy *policy; - - policy = wl_container_of(listener, policy, destroy); - - ds_inf("Policy(%p) destroy", policy); - - wl_list_remove(&policy->destroy.link); - wl_list_remove(&policy->new_surface.link); - wl_list_remove(&policy->activate_below_by_univeral_id.link); - wl_list_remove(&policy->lower_by_universal_id.link); - wl_list_remove(&policy->set_transient_for.link); - wl_list_remove(&policy->unset_transient_for.link); - wl_list_remove(&policy->place_subsurface_below_parent.link); - wl_list_remove(&policy->set_subsurface_stand_alone.link); - wl_list_remove(&policy->set_background_state.link); - wl_list_remove(&policy->unset_background_state.link); - wl_list_remove(&policy->add_activate_above_by_universal_id.link); - wl_list_remove(&policy->set_appid.link); - wl_list_remove(&policy->set_transient_for_below.link); - - free(policy); -} - -static void -policy_handle_new_surface(struct wl_listener *listener, void *data) -{ - struct tinyds_policy *policy; - struct tinyds_policy_surface *policy_surface; - struct ds_tizen_event_policy_new_surface *event; - - policy = wl_container_of(listener, policy, new_surface); - event = (struct ds_tizen_event_policy_new_surface *)data; - - ds_inf("Policy(%p) new_surface", policy); - - policy_surface = calloc(1, sizeof *policy_surface); - if (!policy_surface) - return; - - policy_surface->policy_surface = event->policy_surface; - - policy_surface->destroy.notify = policy_surface_handle_destroy; - ds_tizen_policy_surface_add_destroy_listener(policy_surface->policy_surface, - &policy_surface->destroy); - - policy_surface->new_visibility.notify = policy_surface_handle_new_visibility; - ds_tizen_policy_surface_add_new_visibility_listener(policy_surface->policy_surface, - &policy_surface->new_visibility); - - policy_surface->new_position.notify = policy_surface_handle_new_position; - ds_tizen_policy_surface_add_new_position_listener(policy_surface->policy_surface, - &policy_surface->new_position); - - policy_surface->activate.notify = policy_surface_handle_activate; - ds_tizen_policy_surface_add_activate_listener(policy_surface->policy_surface, - &policy_surface->activate); - - policy_surface->raise.notify = policy_surface_handle_raise; - ds_tizen_policy_surface_add_raise_listener(policy_surface->policy_surface, - &policy_surface->raise); - - policy_surface->lower.notify = policy_surface_handle_lower; - ds_tizen_policy_surface_add_lower_listener(policy_surface->policy_surface, - &policy_surface->lower); - - policy_surface->set_focus_skip.notify = policy_surface_handle_set_focus_skip; - ds_tizen_policy_surface_add_set_focus_skip_listener(policy_surface->policy_surface, - &policy_surface->set_focus_skip); - - policy_surface->unset_focus_skip.notify = policy_surface_handle_unset_focus_skip; - ds_tizen_policy_surface_add_unset_focus_skip_listener(policy_surface->policy_surface, - &policy_surface->unset_focus_skip); - - policy_surface->set_role.notify = policy_surface_handle_set_role; - ds_tizen_policy_surface_add_set_role_listener(policy_surface->policy_surface, - &policy_surface->set_role); - - policy_surface->set_window_type.notify = policy_surface_handle_set_window_type; - ds_tizen_policy_surface_add_set_window_type_listener(policy_surface->policy_surface, - &policy_surface->set_window_type); - - policy_surface->set_conformant.notify = policy_surface_handle_set_conformant; - ds_tizen_policy_surface_add_set_conformant_listener(policy_surface->policy_surface, - &policy_surface->set_conformant); - - policy_surface->unset_conformant.notify = policy_surface_handle_unset_conformant; - ds_tizen_policy_surface_add_unset_conformant_listener(policy_surface->policy_surface, - &policy_surface->unset_conformant); - - policy_surface->get_conformant.notify = policy_surface_handle_get_conformant; - ds_tizen_policy_surface_add_get_conformant_listener(policy_surface->policy_surface, - &policy_surface->get_conformant); - - policy_surface->set_notification_level.notify = - policy_surface_handle_set_notification_level; - ds_tizen_policy_surface_add_set_notification_level_listener( - policy_surface->policy_surface, &policy_surface->set_notification_level); - - policy_surface->set_window_screen_mode.notify = - policy_surface_handle_set_window_screen_mode; - ds_tizen_policy_surface_add_set_window_screen_mode_listener( - policy_surface->policy_surface, &policy_surface->set_window_screen_mode); - - policy_surface->get_subsurface.notify = policy_surface_handle_get_subsurface; - ds_tizen_policy_surface_add_get_subsurface_listener(policy_surface->policy_surface, - &policy_surface->get_subsurface); - - policy_surface->iconify.notify = policy_surface_handle_iconify; - ds_tizen_policy_surface_add_iconify_listener(policy_surface->policy_surface, - &policy_surface->iconify); - - policy_surface->uniconify.notify = policy_surface_handle_uniconify; - ds_tizen_policy_surface_add_uniconify_listener(policy_surface->policy_surface, - &policy_surface->uniconify); - - policy_surface->add_aux_hint.notify = policy_surface_handle_add_aux_hint; - ds_tizen_policy_surface_add_add_aux_hint_listener(policy_surface->policy_surface, - &policy_surface->add_aux_hint); - - policy_surface->change_aux_hint.notify = policy_surface_handle_change_aux_hint; - ds_tizen_policy_surface_add_change_aux_hint_listener(policy_surface->policy_surface, - &policy_surface->change_aux_hint); - - policy_surface->delete_aux_hint.notify = policy_surface_handle_delete_aux_hint; - ds_tizen_policy_surface_add_delete_aux_hint_listener(policy_surface->policy_surface, - &policy_surface->delete_aux_hint); - - policy_surface->get_supported_aux_hints.notify = - policy_surface_handle_get_supported_aux_hints; - ds_tizen_policy_surface_add_get_supported_aux_hints_listener( - policy_surface->policy_surface, &policy_surface->get_supported_aux_hints); - - policy_surface->set_floating_mode.notify = - policy_surface_handle_set_floating_mode; - ds_tizen_policy_surface_add_set_floating_mode_listener( - policy_surface->policy_surface, &policy_surface->set_floating_mode); - - policy_surface->unset_floating_mode.notify = - policy_surface_handle_unset_floating_mode; - ds_tizen_policy_surface_add_unset_floating_mode_listener( - policy_surface->policy_surface, &policy_surface->unset_floating_mode); - - policy_surface->set_stack_mode.notify = policy_surface_handle_set_stack_mode; - ds_tizen_policy_surface_add_set_stack_mode_listener(policy_surface->policy_surface, - &policy_surface->set_stack_mode); - - policy_surface->new_subsurface_watcher.notify = - policy_surface_handle_new_subsurface_watcher; - ds_tizen_policy_surface_add_new_subsurface_watcher_listener( - policy_surface->policy_surface, &policy_surface->new_subsurface_watcher); - - policy_surface->set_parent.notify = policy_surface_handle_set_parent; - ds_tizen_policy_surface_add_set_parent_listener(policy_surface->policy_surface, - &policy_surface->set_parent); - - policy_surface->ack_conformant_region.notify = - policy_surface_handle_ack_conformant_region; - ds_tizen_policy_surface_add_ack_conformant_region_listener( - policy_surface->policy_surface, &policy_surface->ack_conformant_region); - - policy_surface->set_video.notify = policy_surface_handle_set_video; - ds_tizen_policy_surface_add_set_video_listener(policy_surface->policy_surface, - &policy_surface->set_video); - - policy_surface->show.notify = policy_surface_handle_show; - ds_tizen_policy_surface_add_show_listener(policy_surface->policy_surface, - &policy_surface->show); - - policy_surface->hide.notify = policy_surface_handle_hide; - ds_tizen_policy_surface_add_hide_listener(policy_surface->policy_surface, - &policy_surface->hide); - - policy_surface->set_parent_with_below.notify = - policy_surface_handle_set_parent_with_below; - ds_tizen_policy_surface_add_set_parent_with_below_listener( - policy_surface->policy_surface, &policy_surface->set_parent_with_below); - - - wl_list_init(&policy_surface->visibilities); - wl_list_init(&policy_surface->positions); - wl_list_init(&policy_surface->subsurface_watchers); - - wl_list_insert(&policy->policy_surfaces, &policy_surface->link); -} - -static void -policy_handle_activate_below_by_univeral_id(struct wl_listener *listener, void *data) -{ - struct tinyds_policy *policy; - - policy = wl_container_of(listener, policy, activate_below_by_univeral_id); - - ds_inf("Policy(%p) activate_below_by_univeral_id", policy); - - // TODO: -} - -static void -policy_handle_lower_by_universal_id(struct wl_listener *listener, void *data) -{ - struct tinyds_policy *policy; - - policy = wl_container_of(listener, policy, lower_by_universal_id); - - ds_inf("Policy(%p) lower_by_universal_id", policy); - - // TODO: -} - -static void -policy_handle_set_transient_for(struct wl_listener *listener, void *data) -{ - struct tinyds_policy *policy; - - policy = wl_container_of(listener, policy, set_transient_for); - - ds_inf("Policy(%p) set_transient_for", policy); - - // TODO: -} - -static void -policy_handle_unset_transient_for(struct wl_listener *listener, void *data) -{ - struct tinyds_policy *policy; - - policy = wl_container_of(listener, policy, unset_transient_for); - - ds_inf("Policy(%p) unset_transient_for", policy); - - // TODO: -} - -static void -policy_handle_place_subsurface_below_parent(struct wl_listener *listener, void *data) -{ - struct tinyds_policy *policy; - - policy = wl_container_of(listener, policy, place_subsurface_below_parent); - - ds_inf("Policy(%p) place_subsurface_below_parent", policy); - - // TODO: -} - -static void -policy_handle_set_subsurface_stand_alone(struct wl_listener *listener, void *data) -{ - struct tinyds_policy *policy; - - policy = wl_container_of(listener, policy, set_subsurface_stand_alone); - - ds_inf("Policy(%p) set_subsurface_stand_alone", policy); - - // TODO: -} - -static void -policy_handle_set_background_state(struct wl_listener *listener, void *data) -{ - struct tinyds_policy *policy; - - policy = wl_container_of(listener, policy, set_background_state); - - ds_inf("Policy(%p) set_background_state", policy); - - // TODO: -} - -static void -policy_handle_unset_background_state(struct wl_listener *listener, void *data) -{ - struct tinyds_policy *policy; - - policy = wl_container_of(listener, policy, unset_background_state); - - ds_inf("Policy(%p) unset_background_state", policy); - - // TODO: -} - -static void -policy_handle_add_activate_above_by_universal_id(struct wl_listener *listener, void *data) -{ - struct tinyds_policy *policy; - - policy = wl_container_of(listener, policy, add_activate_above_by_universal_id); - - ds_inf("Policy(%p) add_activate_above_by_universal_id", policy); - - // TODO: -} - -static void -policy_handle_set_appid(struct wl_listener *listener, void *data) -{ - struct tinyds_policy *policy; - - policy = wl_container_of(listener, policy, set_appid); - - ds_inf("Policy(%p) set_appid", policy); - - // TODO: -} - -static void -policy_handle_set_transient_for_below(struct wl_listener *listener, void *data) -{ - struct tinyds_policy *policy; - - policy = wl_container_of(listener, policy, set_transient_for_below); - - ds_inf("Policy(%p) set_transient_for_below", policy); - - // TODO: -} - -static bool -new_policy(struct tinyds_server *server) -{ - struct tinyds_policy *policy; - - policy = calloc(1, sizeof *policy); - if (!policy) - return false; - - policy->policy = ds_tizen_policy_create(server->display); - if (!policy->policy) { - free(policy); - ds_err("Could not create ds_tizen_policy"); - return false; - } - - policy->destroy.notify = policy_handle_destroy; - ds_tizen_policy_add_destroy_listener(policy->policy, &policy->destroy); - - policy->new_surface.notify = policy_handle_new_surface; - ds_tizen_policy_add_new_surface_listener(policy->policy, &policy->new_surface); - - policy->activate_below_by_univeral_id.notify = - policy_handle_activate_below_by_univeral_id; - ds_tizen_policy_add_activate_below_by_univeral_id_listener(policy->policy, - &policy->activate_below_by_univeral_id); - - policy->lower_by_universal_id.notify = policy_handle_lower_by_universal_id; - ds_tizen_policy_add_lower_by_universal_id_listener(policy->policy, - &policy->lower_by_universal_id); - - policy->set_transient_for.notify = policy_handle_set_transient_for; - ds_tizen_policy_add_set_transient_for_listener(policy->policy, - &policy->set_transient_for); - - policy->unset_transient_for.notify = policy_handle_unset_transient_for; - ds_tizen_policy_add_unset_transient_for_listener(policy->policy, - &policy->unset_transient_for); - - policy->place_subsurface_below_parent.notify = - policy_handle_place_subsurface_below_parent; - ds_tizen_policy_add_place_subsurface_below_parent_listener(policy->policy, - &policy->place_subsurface_below_parent); - - policy->set_subsurface_stand_alone.notify = - policy_handle_set_subsurface_stand_alone; - ds_tizen_policy_add_set_subsurface_stand_alone_listener(policy->policy, - &policy->set_subsurface_stand_alone); - - policy->set_background_state.notify = policy_handle_set_background_state; - ds_tizen_policy_add_set_background_state_listener(policy->policy, - &policy->set_background_state); - - policy->unset_background_state.notify = policy_handle_unset_background_state; - ds_tizen_policy_add_unset_background_state_listener(policy->policy, - &policy->unset_background_state); - - policy->add_activate_above_by_universal_id.notify = - policy_handle_add_activate_above_by_universal_id; - ds_tizen_policy_add_activate_above_by_universal_id_listener(policy->policy, - &policy->add_activate_above_by_universal_id); - - policy->set_appid.notify = policy_handle_set_appid; - ds_tizen_policy_add_set_appid_listener(policy->policy, &policy->set_appid); - - policy->set_transient_for_below.notify = - policy_handle_set_transient_for_below; - ds_tizen_policy_add_set_transient_for_below_listener(policy->policy, - &policy->set_transient_for_below); - - wl_list_init(&policy->policy_surfaces); - - server->policy = policy; - - ds_inf("Policy (%p) created", policy); - - return true; + *output_w = server->output->width; + *output_h = server->output->height; }