1 #include <libds-tizen/policy.h>
3 #include "tinyds-common.h"
4 #include "tinyds-policy.h"
8 policy_free_cb free_cb;
11 struct ds_tizen_policy *policy;
13 struct wl_listener destroy;
14 struct wl_listener new_surface;
15 struct wl_listener activate_below_by_univeral_id;
16 struct wl_listener lower_by_universal_id;
17 struct wl_listener set_transient_for;
18 struct wl_listener unset_transient_for;
19 struct wl_listener place_subsurface_below_parent;
20 struct wl_listener set_subsurface_stand_alone;
21 struct wl_listener set_background_state;
22 struct wl_listener unset_background_state;
23 struct wl_listener add_activate_above_by_universal_id;
24 struct wl_listener set_appid;
25 struct wl_listener set_transient_for_below;
27 struct wl_list policy_surfaces;
30 struct tinyds_policy_surface
32 struct ds_tizen_policy_surface *policy_surface;
34 struct wl_listener destroy;
35 struct wl_listener new_visibility;
36 struct wl_listener new_position;
37 struct wl_listener activate;
38 struct wl_listener raise;
39 struct wl_listener lower;
40 struct wl_listener set_focus_skip;
41 struct wl_listener unset_focus_skip;
42 struct wl_listener set_role;
43 struct wl_listener set_window_type;
44 struct wl_listener set_conformant;
45 struct wl_listener unset_conformant;
46 struct wl_listener get_conformant;
47 struct wl_listener set_notification_level;
48 struct wl_listener set_window_screen_mode;
49 struct wl_listener get_subsurface;
50 struct wl_listener iconify;
51 struct wl_listener uniconify;
52 struct wl_listener add_aux_hint;
53 struct wl_listener change_aux_hint;
54 struct wl_listener delete_aux_hint;
55 struct wl_listener get_supported_aux_hints;
56 struct wl_listener set_floating_mode;
57 struct wl_listener unset_floating_mode;
58 struct wl_listener set_stack_mode;
59 struct wl_listener new_subsurface_watcher;
60 struct wl_listener set_parent;
61 struct wl_listener ack_conformant_region;
62 struct wl_listener set_video;
63 struct wl_listener show;
64 struct wl_listener hide;
65 struct wl_listener set_parent_with_below;
67 struct wl_list visibilities;
68 struct wl_list positions;
69 struct wl_list subsurface_watchers;
71 struct wl_list link; //tinyds_policy::policy_surfaces
74 struct tinyds_policy_visibility
76 struct ds_tizen_policy_visibility *visibility;
78 struct wl_listener destroy;
80 struct wl_list link; //tinyds_policy::visibilities
83 struct tinyds_policy_position
85 struct ds_tizen_policy_position *position;
87 struct wl_listener destroy;
88 struct wl_listener set;
90 struct wl_list link; //tinyds_policy::positions
93 struct tinyds_policy_subsurface_watcher
95 struct ds_tizen_policy_subsurface_watcher *subsurface_watcher;
97 struct wl_listener destroy;
99 struct wl_list link; //tinyds_policy::subsurface_watchers
104 visibility_handle_destroy(struct wl_listener *listener, void *data)
106 struct tinyds_policy_visibility *visibility;
108 visibility = wl_container_of(listener, visibility, destroy);
110 ds_inf("Policy Visibility(%p) destroy", visibility);
112 wl_list_remove(&visibility->destroy.link);
113 wl_list_remove(&visibility->link);
118 position_handle_destroy(struct wl_listener *listener, void *data)
120 struct tinyds_policy_position *position;
122 position = wl_container_of(listener, position, destroy);
124 ds_inf("Policy Position(%p) destroy", position);
126 wl_list_remove(&position->destroy.link);
127 wl_list_remove(&position->set.link);
128 wl_list_remove(&position->link);
133 position_handle_set(struct wl_listener *listener, void *data)
135 struct tinyds_policy_position *position;
137 position = wl_container_of(listener, position, set);
139 ds_inf("Policy Position(%p) set", position);
145 subsurface_watcher_handle_destroy(struct wl_listener *listener, void *data)
147 struct tinyds_policy_subsurface_watcher *subsurface_watcher;
149 subsurface_watcher = wl_container_of(listener, subsurface_watcher, destroy);
151 ds_inf("Policy Subsurface_Watcher(%p) destroy", subsurface_watcher);
153 wl_list_remove(&subsurface_watcher->destroy.link);
154 wl_list_remove(&subsurface_watcher->link);
155 free(subsurface_watcher);
159 policy_surface_handle_destroy(struct wl_listener *listener, void *data)
161 struct tinyds_policy_surface *policy_surface;
163 policy_surface = wl_container_of(listener, policy_surface, destroy);
165 ds_inf("Policy Info(%p) destroy", policy_surface);
167 wl_list_remove(&policy_surface->destroy.link);
168 wl_list_remove(&policy_surface->new_visibility.link);
169 wl_list_remove(&policy_surface->new_position.link);
170 wl_list_remove(&policy_surface->activate.link);
171 wl_list_remove(&policy_surface->raise.link);
172 wl_list_remove(&policy_surface->lower.link);
173 wl_list_remove(&policy_surface->set_focus_skip.link);
174 wl_list_remove(&policy_surface->unset_focus_skip.link);
175 wl_list_remove(&policy_surface->set_role.link);
176 wl_list_remove(&policy_surface->set_window_type.link);
177 wl_list_remove(&policy_surface->set_conformant.link);
178 wl_list_remove(&policy_surface->unset_conformant.link);
179 wl_list_remove(&policy_surface->get_conformant.link);
180 wl_list_remove(&policy_surface->set_notification_level.link);
181 wl_list_remove(&policy_surface->set_window_screen_mode.link);
182 wl_list_remove(&policy_surface->get_subsurface.link);
183 wl_list_remove(&policy_surface->iconify.link);
184 wl_list_remove(&policy_surface->uniconify.link);
185 wl_list_remove(&policy_surface->add_aux_hint.link);
186 wl_list_remove(&policy_surface->change_aux_hint.link);
187 wl_list_remove(&policy_surface->delete_aux_hint.link);
188 wl_list_remove(&policy_surface->get_supported_aux_hints.link);
189 wl_list_remove(&policy_surface->set_floating_mode.link);
190 wl_list_remove(&policy_surface->unset_floating_mode.link);
191 wl_list_remove(&policy_surface->set_stack_mode.link);
192 wl_list_remove(&policy_surface->new_subsurface_watcher.link);
193 wl_list_remove(&policy_surface->set_parent.link);
194 wl_list_remove(&policy_surface->ack_conformant_region.link);
195 wl_list_remove(&policy_surface->set_video.link);
196 wl_list_remove(&policy_surface->show.link);
197 wl_list_remove(&policy_surface->hide.link);
198 wl_list_remove(&policy_surface->set_parent_with_below.link);
199 wl_list_remove(&policy_surface->link);
200 free(policy_surface);
204 policy_surface_handle_new_visibility(struct wl_listener *listener, void *data)
206 struct tinyds_policy_surface *policy_surface;
207 struct tinyds_policy_visibility *visibility;
208 struct ds_tizen_policy_surface_event_new_visibility *event;
210 policy_surface = wl_container_of(listener, policy_surface, new_visibility);
211 event = (struct ds_tizen_policy_surface_event_new_visibility *)data;
213 ds_inf("Policy Info(%p) new_visibility", policy_surface);
215 visibility = calloc(1, sizeof *visibility);
219 visibility->visibility = event->visibility;
221 visibility->destroy.notify = visibility_handle_destroy;
222 ds_tizen_policy_visibility_add_destroy_listener(visibility->visibility,
223 &visibility->destroy);
225 wl_list_insert(&policy_surface->visibilities, &visibility->link);
229 policy_surface_handle_new_position(struct wl_listener *listener, void *data)
231 struct tinyds_policy_surface *policy_surface;
232 struct tinyds_policy_position *position;
233 struct ds_tizen_policy_surface_event_new_position *event;
235 policy_surface = wl_container_of(listener, policy_surface, new_position);
236 event = (struct ds_tizen_policy_surface_event_new_position *)data;
238 ds_inf("Policy Info(%p) new_position", policy_surface);
240 position = calloc(1, sizeof *position);
244 position->position = event->position;
246 position->destroy.notify = position_handle_destroy;
247 ds_tizen_policy_position_add_destroy_listener(position->position,
250 position->set.notify = position_handle_set;
251 ds_tizen_policy_position_add_set_listener(position->position,
254 wl_list_insert(&policy_surface->positions, &position->link);
258 policy_surface_handle_activate(struct wl_listener *listener, void *data)
260 struct tinyds_policy_surface *policy_surface;
262 policy_surface = wl_container_of(listener, policy_surface, activate);
264 ds_inf("Policy Info(%p) activate", policy_surface);
270 policy_surface_handle_raise(struct wl_listener *listener, void *data)
272 struct tinyds_policy_surface *policy_surface;
274 policy_surface = wl_container_of(listener, policy_surface, raise);
276 ds_inf("Policy Info(%p) raise", policy_surface);
282 policy_surface_handle_lower(struct wl_listener *listener, void *data)
284 struct tinyds_policy_surface *policy_surface;
286 policy_surface = wl_container_of(listener, policy_surface, raise);
288 ds_inf("Policy Info(%p) lower", policy_surface);
294 policy_surface_handle_set_focus_skip(struct wl_listener *listener, void *data)
296 struct tinyds_policy_surface *policy_surface;
298 policy_surface = wl_container_of(listener, policy_surface, set_focus_skip);
300 ds_inf("Policy Info(%p) set_focus_skip", policy_surface);
306 policy_surface_handle_unset_focus_skip(struct wl_listener *listener, void *data)
308 struct tinyds_policy_surface *policy_surface;
310 policy_surface = wl_container_of(listener, policy_surface, unset_focus_skip);
312 ds_inf("Policy Info(%p) unset_focus_skip", policy_surface);
318 policy_surface_handle_set_role(struct wl_listener *listener, void *data)
320 struct tinyds_policy_surface *policy_surface;
322 policy_surface = wl_container_of(listener, policy_surface, set_role);
324 ds_inf("Policy Info(%p) set_role", policy_surface);
330 policy_surface_handle_set_window_type(struct wl_listener *listener, void *data)
332 struct tinyds_policy_surface *policy_surface;
334 policy_surface = wl_container_of(listener, policy_surface, set_window_type);
336 ds_inf("Policy Info(%p) set_window_type", policy_surface);
342 policy_surface_handle_set_conformant(struct wl_listener *listener, void *data)
344 struct tinyds_policy_surface *policy_surface;
346 policy_surface = wl_container_of(listener, policy_surface, set_conformant);
348 ds_inf("Policy Info(%p) set_conformant", policy_surface);
354 policy_surface_handle_unset_conformant(struct wl_listener *listener, void *data)
356 struct tinyds_policy_surface *policy_surface;
358 policy_surface = wl_container_of(listener, policy_surface, unset_conformant);
360 ds_inf("Policy Info(%p) unset_conformant", policy_surface);
366 policy_surface_handle_get_conformant(struct wl_listener *listener, void *data)
368 struct tinyds_policy_surface *policy_surface;
370 policy_surface = wl_container_of(listener, policy_surface, get_conformant);
372 ds_inf("Policy Info(%p) get_conformant", policy_surface);
378 policy_surface_handle_set_notification_level(struct wl_listener *listener, void *data)
380 struct tinyds_policy_surface *policy_surface;
382 policy_surface = wl_container_of(listener, policy_surface, set_notification_level);
384 ds_inf("Policy Info(%p) set_notification_level", policy_surface);
390 policy_surface_handle_set_window_screen_mode(struct wl_listener *listener, void *data)
392 struct tinyds_policy_surface *policy_surface;
394 policy_surface = wl_container_of(listener, policy_surface, set_window_screen_mode);
396 ds_inf("Policy Info(%p) set_window_screen_mode", policy_surface);
402 policy_surface_handle_get_subsurface(struct wl_listener *listener, void *data)
404 struct tinyds_policy_surface *policy_surface;
406 policy_surface = wl_container_of(listener, policy_surface, get_subsurface);
408 ds_inf("Policy Info(%p) get_subsurface", policy_surface);
414 policy_surface_handle_iconify(struct wl_listener *listener, void *data)
416 struct tinyds_policy_surface *policy_surface;
418 policy_surface = wl_container_of(listener, policy_surface, iconify);
420 ds_inf("Policy Info(%p) iconify", policy_surface);
426 policy_surface_handle_uniconify(struct wl_listener *listener, void *data)
428 struct tinyds_policy_surface *policy_surface;
430 policy_surface = wl_container_of(listener, policy_surface, uniconify);
432 ds_inf("Policy Info(%p) uniconify", policy_surface);
438 policy_surface_handle_add_aux_hint(struct wl_listener *listener, void *data)
440 struct tinyds_policy_surface *policy_surface;
442 policy_surface = wl_container_of(listener, policy_surface, add_aux_hint);
444 ds_inf("Policy Info(%p) add_aux_hint", policy_surface);
450 policy_surface_handle_change_aux_hint(struct wl_listener *listener, void *data)
452 struct tinyds_policy_surface *policy_surface;
454 policy_surface = wl_container_of(listener, policy_surface, change_aux_hint);
456 ds_inf("Policy Info(%p) change_aux_hint", policy_surface);
462 policy_surface_handle_delete_aux_hint(struct wl_listener *listener, void *data)
464 struct tinyds_policy_surface *policy_surface;
466 policy_surface = wl_container_of(listener, policy_surface, delete_aux_hint);
468 ds_inf("Policy Info(%p) delete_aux_hint", policy_surface);
474 policy_surface_handle_get_supported_aux_hints(struct wl_listener *listener, void *data)
476 struct tinyds_policy_surface *policy_surface;
478 policy_surface = wl_container_of(listener, policy_surface, get_supported_aux_hints);
480 ds_inf("Policy Info(%p) get_supported_aux_hints", policy_surface);
486 policy_surface_handle_set_floating_mode(struct wl_listener *listener, void *data)
488 struct tinyds_policy_surface *policy_surface;
490 policy_surface = wl_container_of(listener, policy_surface, set_floating_mode);
492 ds_inf("Policy Info(%p) set_floating_mode", policy_surface);
498 policy_surface_handle_unset_floating_mode(struct wl_listener *listener, void *data)
500 struct tinyds_policy_surface *policy_surface;
502 policy_surface = wl_container_of(listener, policy_surface, unset_floating_mode);
504 ds_inf("Policy Info(%p) unset_floating_mode", policy_surface);
510 policy_surface_handle_set_stack_mode(struct wl_listener *listener, void *data)
512 struct tinyds_policy_surface *policy_surface;
514 policy_surface = wl_container_of(listener, policy_surface, set_stack_mode);
516 ds_inf("Policy Info(%p) set_stack_mode", policy_surface);
522 policy_surface_handle_new_subsurface_watcher(struct wl_listener *listener, void *data)
524 struct tinyds_policy_surface *policy_surface;
525 struct tinyds_policy_subsurface_watcher*subsurface_watcher;
526 struct ds_tizen_policy_surface_event_new_subsurface_watcher *event;
528 policy_surface = wl_container_of(listener, policy_surface, new_subsurface_watcher);
529 event = (struct ds_tizen_policy_surface_event_new_subsurface_watcher *)data;
531 ds_inf("Policy Info(%p) new_subsurface_watcher", policy_surface);
533 subsurface_watcher = calloc(1, sizeof *subsurface_watcher);
534 if (!subsurface_watcher)
537 subsurface_watcher->subsurface_watcher = event->subsurface_watcher;
539 subsurface_watcher->destroy.notify = subsurface_watcher_handle_destroy;
540 ds_tizen_policy_subsurface_watcher_add_destroy_listener(subsurface_watcher->subsurface_watcher,
541 &subsurface_watcher->destroy);
543 wl_list_insert(&policy_surface->subsurface_watchers, &subsurface_watcher->link);
547 policy_surface_handle_set_parent(struct wl_listener *listener, void *data)
549 struct tinyds_policy_surface *policy_surface;
551 policy_surface = wl_container_of(listener, policy_surface, set_parent);
553 ds_inf("Policy Info(%p) set_parent", policy_surface);
559 policy_surface_handle_ack_conformant_region(struct wl_listener *listener, void *data)
561 struct tinyds_policy_surface *policy_surface;
563 policy_surface = wl_container_of(listener, policy_surface, ack_conformant_region);
565 ds_inf("Policy Info(%p) ack_conformant_region", policy_surface);
571 policy_surface_handle_set_video(struct wl_listener *listener, void *data)
573 struct tinyds_policy_surface *policy_surface;
575 policy_surface = wl_container_of(listener, policy_surface, set_video);
577 ds_inf("Policy Info(%p) set_video", policy_surface);
583 policy_surface_handle_show(struct wl_listener *listener, void *data)
585 struct tinyds_policy_surface *policy_surface;
587 policy_surface = wl_container_of(listener, policy_surface, show);
589 ds_inf("Policy Info(%p) show", policy_surface);
595 policy_surface_handle_hide(struct wl_listener *listener, void *data)
597 struct tinyds_policy_surface *policy_surface;
599 policy_surface = wl_container_of(listener, policy_surface, hide);
601 ds_inf("Policy Info(%p) hide", policy_surface);
607 policy_surface_handle_set_parent_with_below(struct wl_listener *listener, void *data)
609 struct tinyds_policy_surface *policy_surface;
611 policy_surface = wl_container_of(listener, policy_surface, set_parent_with_below);
613 ds_inf("Policy Info(%p) set_parent_with_below", policy_surface);
619 policy_handle_destroy(struct wl_listener *listener, void *data)
621 struct tinyds_policy *policy;
623 policy = wl_container_of(listener, policy, destroy);
625 ds_inf("Policy(%p) destroy", policy);
627 policy->free_cb(data);
629 wl_list_remove(&policy->destroy.link);
630 wl_list_remove(&policy->new_surface.link);
631 wl_list_remove(&policy->activate_below_by_univeral_id.link);
632 wl_list_remove(&policy->lower_by_universal_id.link);
633 wl_list_remove(&policy->set_transient_for.link);
634 wl_list_remove(&policy->unset_transient_for.link);
635 wl_list_remove(&policy->place_subsurface_below_parent.link);
636 wl_list_remove(&policy->set_subsurface_stand_alone.link);
637 wl_list_remove(&policy->set_background_state.link);
638 wl_list_remove(&policy->unset_background_state.link);
639 wl_list_remove(&policy->add_activate_above_by_universal_id.link);
640 wl_list_remove(&policy->set_appid.link);
641 wl_list_remove(&policy->set_transient_for_below.link);
647 policy_handle_new_surface(struct wl_listener *listener, void *data)
649 struct tinyds_policy *policy;
650 struct tinyds_policy_surface *policy_surface;
651 struct ds_tizen_policy_event_new_surface *event;
653 policy = wl_container_of(listener, policy, new_surface);
654 event = (struct ds_tizen_policy_event_new_surface *)data;
656 ds_inf("Policy(%p) new_surface", policy);
658 policy_surface = calloc(1, sizeof *policy_surface);
662 policy_surface->policy_surface = event->policy_surface;
664 policy_surface->destroy.notify = policy_surface_handle_destroy;
665 ds_tizen_policy_surface_add_destroy_listener(policy_surface->policy_surface,
666 &policy_surface->destroy);
668 policy_surface->new_visibility.notify = policy_surface_handle_new_visibility;
669 ds_tizen_policy_surface_add_new_visibility_listener(policy_surface->policy_surface,
670 &policy_surface->new_visibility);
672 policy_surface->new_position.notify = policy_surface_handle_new_position;
673 ds_tizen_policy_surface_add_new_position_listener(policy_surface->policy_surface,
674 &policy_surface->new_position);
676 policy_surface->activate.notify = policy_surface_handle_activate;
677 ds_tizen_policy_surface_add_activate_listener(policy_surface->policy_surface,
678 &policy_surface->activate);
680 policy_surface->raise.notify = policy_surface_handle_raise;
681 ds_tizen_policy_surface_add_raise_listener(policy_surface->policy_surface,
682 &policy_surface->raise);
684 policy_surface->lower.notify = policy_surface_handle_lower;
685 ds_tizen_policy_surface_add_lower_listener(policy_surface->policy_surface,
686 &policy_surface->lower);
688 policy_surface->set_focus_skip.notify = policy_surface_handle_set_focus_skip;
689 ds_tizen_policy_surface_add_set_focus_skip_listener(policy_surface->policy_surface,
690 &policy_surface->set_focus_skip);
692 policy_surface->unset_focus_skip.notify = policy_surface_handle_unset_focus_skip;
693 ds_tizen_policy_surface_add_unset_focus_skip_listener(policy_surface->policy_surface,
694 &policy_surface->unset_focus_skip);
696 policy_surface->set_role.notify = policy_surface_handle_set_role;
697 ds_tizen_policy_surface_add_set_role_listener(policy_surface->policy_surface,
698 &policy_surface->set_role);
700 policy_surface->set_window_type.notify = policy_surface_handle_set_window_type;
701 ds_tizen_policy_surface_add_set_window_type_listener(policy_surface->policy_surface,
702 &policy_surface->set_window_type);
704 policy_surface->set_conformant.notify = policy_surface_handle_set_conformant;
705 ds_tizen_policy_surface_add_set_conformant_listener(policy_surface->policy_surface,
706 &policy_surface->set_conformant);
708 policy_surface->unset_conformant.notify = policy_surface_handle_unset_conformant;
709 ds_tizen_policy_surface_add_unset_conformant_listener(policy_surface->policy_surface,
710 &policy_surface->unset_conformant);
712 policy_surface->get_conformant.notify = policy_surface_handle_get_conformant;
713 ds_tizen_policy_surface_add_get_conformant_listener(policy_surface->policy_surface,
714 &policy_surface->get_conformant);
716 policy_surface->set_notification_level.notify =
717 policy_surface_handle_set_notification_level;
718 ds_tizen_policy_surface_add_set_notification_level_listener(
719 policy_surface->policy_surface, &policy_surface->set_notification_level);
721 policy_surface->set_window_screen_mode.notify =
722 policy_surface_handle_set_window_screen_mode;
723 ds_tizen_policy_surface_add_set_window_screen_mode_listener(
724 policy_surface->policy_surface, &policy_surface->set_window_screen_mode);
726 policy_surface->get_subsurface.notify = policy_surface_handle_get_subsurface;
727 ds_tizen_policy_surface_add_get_subsurface_listener(policy_surface->policy_surface,
728 &policy_surface->get_subsurface);
730 policy_surface->iconify.notify = policy_surface_handle_iconify;
731 ds_tizen_policy_surface_add_iconify_listener(policy_surface->policy_surface,
732 &policy_surface->iconify);
734 policy_surface->uniconify.notify = policy_surface_handle_uniconify;
735 ds_tizen_policy_surface_add_uniconify_listener(policy_surface->policy_surface,
736 &policy_surface->uniconify);
738 policy_surface->add_aux_hint.notify = policy_surface_handle_add_aux_hint;
739 ds_tizen_policy_surface_add_add_aux_hint_listener(policy_surface->policy_surface,
740 &policy_surface->add_aux_hint);
742 policy_surface->change_aux_hint.notify = policy_surface_handle_change_aux_hint;
743 ds_tizen_policy_surface_add_change_aux_hint_listener(policy_surface->policy_surface,
744 &policy_surface->change_aux_hint);
746 policy_surface->delete_aux_hint.notify = policy_surface_handle_delete_aux_hint;
747 ds_tizen_policy_surface_add_delete_aux_hint_listener(policy_surface->policy_surface,
748 &policy_surface->delete_aux_hint);
750 policy_surface->get_supported_aux_hints.notify =
751 policy_surface_handle_get_supported_aux_hints;
752 ds_tizen_policy_surface_add_get_supported_aux_hints_listener(
753 policy_surface->policy_surface, &policy_surface->get_supported_aux_hints);
755 policy_surface->set_floating_mode.notify =
756 policy_surface_handle_set_floating_mode;
757 ds_tizen_policy_surface_add_set_floating_mode_listener(
758 policy_surface->policy_surface, &policy_surface->set_floating_mode);
760 policy_surface->unset_floating_mode.notify =
761 policy_surface_handle_unset_floating_mode;
762 ds_tizen_policy_surface_add_unset_floating_mode_listener(
763 policy_surface->policy_surface, &policy_surface->unset_floating_mode);
765 policy_surface->set_stack_mode.notify = policy_surface_handle_set_stack_mode;
766 ds_tizen_policy_surface_add_set_stack_mode_listener(policy_surface->policy_surface,
767 &policy_surface->set_stack_mode);
769 policy_surface->new_subsurface_watcher.notify =
770 policy_surface_handle_new_subsurface_watcher;
771 ds_tizen_policy_surface_add_new_subsurface_watcher_listener(
772 policy_surface->policy_surface, &policy_surface->new_subsurface_watcher);
774 policy_surface->set_parent.notify = policy_surface_handle_set_parent;
775 ds_tizen_policy_surface_add_set_parent_listener(policy_surface->policy_surface,
776 &policy_surface->set_parent);
778 policy_surface->ack_conformant_region.notify =
779 policy_surface_handle_ack_conformant_region;
780 ds_tizen_policy_surface_add_ack_conformant_region_listener(
781 policy_surface->policy_surface, &policy_surface->ack_conformant_region);
783 policy_surface->set_video.notify = policy_surface_handle_set_video;
784 ds_tizen_policy_surface_add_set_video_listener(policy_surface->policy_surface,
785 &policy_surface->set_video);
787 policy_surface->show.notify = policy_surface_handle_show;
788 ds_tizen_policy_surface_add_show_listener(policy_surface->policy_surface,
789 &policy_surface->show);
791 policy_surface->hide.notify = policy_surface_handle_hide;
792 ds_tizen_policy_surface_add_hide_listener(policy_surface->policy_surface,
793 &policy_surface->hide);
795 policy_surface->set_parent_with_below.notify =
796 policy_surface_handle_set_parent_with_below;
797 ds_tizen_policy_surface_add_set_parent_with_below_listener(
798 policy_surface->policy_surface, &policy_surface->set_parent_with_below);
801 wl_list_init(&policy_surface->visibilities);
802 wl_list_init(&policy_surface->positions);
803 wl_list_init(&policy_surface->subsurface_watchers);
805 wl_list_insert(&policy->policy_surfaces, &policy_surface->link);
809 policy_handle_activate_below_by_univeral_id(struct wl_listener *listener, void *data)
811 struct tinyds_policy *policy;
813 policy = wl_container_of(listener, policy, activate_below_by_univeral_id);
815 ds_inf("Policy(%p) activate_below_by_univeral_id", policy);
821 policy_handle_lower_by_universal_id(struct wl_listener *listener, void *data)
823 struct tinyds_policy *policy;
825 policy = wl_container_of(listener, policy, lower_by_universal_id);
827 ds_inf("Policy(%p) lower_by_universal_id", policy);
833 policy_handle_set_transient_for(struct wl_listener *listener, void *data)
835 struct tinyds_policy *policy;
837 policy = wl_container_of(listener, policy, set_transient_for);
839 ds_inf("Policy(%p) set_transient_for", policy);
845 policy_handle_unset_transient_for(struct wl_listener *listener, void *data)
847 struct tinyds_policy *policy;
849 policy = wl_container_of(listener, policy, unset_transient_for);
851 ds_inf("Policy(%p) unset_transient_for", policy);
857 policy_handle_place_subsurface_below_parent(struct wl_listener *listener, void *data)
859 struct tinyds_policy *policy;
861 policy = wl_container_of(listener, policy, place_subsurface_below_parent);
863 ds_inf("Policy(%p) place_subsurface_below_parent", policy);
869 policy_handle_set_subsurface_stand_alone(struct wl_listener *listener, void *data)
871 struct tinyds_policy *policy;
873 policy = wl_container_of(listener, policy, set_subsurface_stand_alone);
875 ds_inf("Policy(%p) set_subsurface_stand_alone", policy);
881 policy_handle_set_background_state(struct wl_listener *listener, void *data)
883 struct tinyds_policy *policy;
885 policy = wl_container_of(listener, policy, set_background_state);
887 ds_inf("Policy(%p) set_background_state", policy);
893 policy_handle_unset_background_state(struct wl_listener *listener, void *data)
895 struct tinyds_policy *policy;
897 policy = wl_container_of(listener, policy, unset_background_state);
899 ds_inf("Policy(%p) unset_background_state", policy);
905 policy_handle_add_activate_above_by_universal_id(struct wl_listener *listener, void *data)
907 struct tinyds_policy *policy;
909 policy = wl_container_of(listener, policy, add_activate_above_by_universal_id);
911 ds_inf("Policy(%p) add_activate_above_by_universal_id", policy);
917 policy_handle_set_appid(struct wl_listener *listener, void *data)
919 struct tinyds_policy *policy;
921 policy = wl_container_of(listener, policy, set_appid);
923 ds_inf("Policy(%p) set_appid", policy);
929 policy_handle_set_transient_for_below(struct wl_listener *listener, void *data)
931 struct tinyds_policy *policy;
933 policy = wl_container_of(listener, policy, set_transient_for_below);
935 ds_inf("Policy(%p) set_transient_for_below", policy);
940 struct tinyds_policy *
941 tinyds_policy_init(struct wl_display *display, policy_free_cb free_cb,
944 struct tinyds_policy *policy;
946 policy = calloc(1, sizeof *policy);
950 policy->free_cb = free_cb;
953 policy->policy = ds_tizen_policy_create(display);
954 if (!policy->policy) {
956 ds_err("Could not create ds_tizen_policy");
960 policy->destroy.notify = policy_handle_destroy;
961 ds_tizen_policy_add_destroy_listener(policy->policy, &policy->destroy);
963 policy->new_surface.notify = policy_handle_new_surface;
964 ds_tizen_policy_add_new_surface_listener(policy->policy, &policy->new_surface);
966 policy->activate_below_by_univeral_id.notify =
967 policy_handle_activate_below_by_univeral_id;
968 ds_tizen_policy_add_activate_below_by_univeral_id_listener(policy->policy,
969 &policy->activate_below_by_univeral_id);
971 policy->lower_by_universal_id.notify = policy_handle_lower_by_universal_id;
972 ds_tizen_policy_add_lower_by_universal_id_listener(policy->policy,
973 &policy->lower_by_universal_id);
975 policy->set_transient_for.notify = policy_handle_set_transient_for;
976 ds_tizen_policy_add_set_transient_for_listener(policy->policy,
977 &policy->set_transient_for);
979 policy->unset_transient_for.notify = policy_handle_unset_transient_for;
980 ds_tizen_policy_add_unset_transient_for_listener(policy->policy,
981 &policy->unset_transient_for);
983 policy->place_subsurface_below_parent.notify =
984 policy_handle_place_subsurface_below_parent;
985 ds_tizen_policy_add_place_subsurface_below_parent_listener(policy->policy,
986 &policy->place_subsurface_below_parent);
988 policy->set_subsurface_stand_alone.notify =
989 policy_handle_set_subsurface_stand_alone;
990 ds_tizen_policy_add_set_subsurface_stand_alone_listener(policy->policy,
991 &policy->set_subsurface_stand_alone);
993 policy->set_background_state.notify = policy_handle_set_background_state;
994 ds_tizen_policy_add_set_background_state_listener(policy->policy,
995 &policy->set_background_state);
997 policy->unset_background_state.notify = policy_handle_unset_background_state;
998 ds_tizen_policy_add_unset_background_state_listener(policy->policy,
999 &policy->unset_background_state);
1001 policy->add_activate_above_by_universal_id.notify =
1002 policy_handle_add_activate_above_by_universal_id;
1003 ds_tizen_policy_add_activate_above_by_universal_id_listener(policy->policy,
1004 &policy->add_activate_above_by_universal_id);
1006 policy->set_appid.notify = policy_handle_set_appid;
1007 ds_tizen_policy_add_set_appid_listener(policy->policy, &policy->set_appid);
1009 policy->set_transient_for_below.notify =
1010 policy_handle_set_transient_for_below;
1011 ds_tizen_policy_add_set_transient_for_below_listener(policy->policy,
1012 &policy->set_transient_for_below);
1014 wl_list_init(&policy->policy_surfaces);
1016 ds_inf("Policy (%p) created", policy);