1 /* Protocol XML file : wayland-extension/tizen-policy-ext.xml */
3 #include "dswayland-server-tizen-policy-ext.h"
6 #define DS_UNLIKELY(X) X
9 #define DS_UNUSED(X) (void)X
12 #define DS_ASSERT(COND) assert(COND)
15 #define DS_ASSERT_X(COND, ERR_TAG, ERR_MSG, X...) \
19 fprintf(stderr, "%s :: "#ERR_MSG, ERR_TAG, ##X);\
25 #define WRN(X...) fprintf(stderr,##X)
28 namespace DSWaylandServer {
29 tizen_policy_ext::tizen_policy_ext(struct ::wl_client *client, uint32_t id, int version)
34 , m_displayDestroyedListener()
36 init(client, id, version);
39 tizen_policy_ext::tizen_policy_ext(struct ::wl_display *display, int version)
44 , m_displayDestroyedListener()
46 init(display, version);
49 tizen_policy_ext::tizen_policy_ext(struct ::wl_resource *resource)
54 , m_displayDestroyedListener()
59 tizen_policy_ext::tizen_policy_ext()
64 , m_displayDestroyedListener()
68 tizen_policy_ext::~tizen_policy_ext()
70 std::multimap<struct ::wl_client*, tizen_policy_ext::Resource*>::iterator it;
71 for (it = m_resource_map.begin() ; it != m_resource_map.end() ; it++) {
72 tizen_policy_ext::Resource *resource = (*it).second;
73 wl_resource_set_implementation(resource->handle, NULL, NULL, NULL);
77 wl_global_destroy(m_global);
78 wl_list_remove(&m_displayDestroyedListener.link);
82 void tizen_policy_ext::init(struct ::wl_client *client, uint32_t id, int version)
84 m_resource = bind(client, id, version);
87 void tizen_policy_ext::init(struct ::wl_resource *resource)
89 m_resource = bind(resource);
92 tizen_policy_ext::Resource *tizen_policy_ext::add(struct ::wl_client *client, int version)
94 Resource *resource = bind(client, 0, version);
95 m_resource_map.insert(std::pair<struct ::wl_client*, Resource*>(client, resource));
99 tizen_policy_ext::Resource *tizen_policy_ext::add(struct ::wl_client *client, uint32_t id, int version)
101 Resource *resource = bind(client, id, version);
102 m_resource_map.insert(std::pair<struct ::wl_client*, Resource*>(client, resource));
106 void tizen_policy_ext::init(struct ::wl_display *display, int version)
108 m_global = wl_global_create(display, &::tizen_policy_ext_interface, version, this, bind_func);
109 m_globalVersion = version;
110 m_displayDestroyedListener.notify = tizen_policy_ext::display_destroy_func;
111 m_displayDestroyedListener.parent = this;
112 wl_display_add_destroy_listener(display, &m_displayDestroyedListener);
115 const struct wl_interface *tizen_policy_ext::interface()
117 return &::tizen_policy_ext_interface;
120 tizen_policy_ext::Resource *tizen_policy_ext::tizen_policy_ext_allocate()
125 void tizen_policy_ext::tizen_policy_ext_bind_resource(Resource *)
129 void tizen_policy_ext::tizen_policy_ext_destroy_resource(Resource *)
133 void tizen_policy_ext::bind_func(struct ::wl_client *client, void *data, uint32_t version, uint32_t id)
135 tizen_policy_ext *that = static_cast<tizen_policy_ext *>(data);
136 that->add(client, id, std::min(that->m_globalVersion, version));
139 void tizen_policy_ext::display_destroy_func(struct ::wl_listener *listener, void *data)
142 tizen_policy_ext *that = static_cast<tizen_policy_ext::DisplayDestroyedListener *>(listener)->parent;
143 that->m_global = NULL;
146 void tizen_policy_ext::destroy_func(struct ::wl_resource *client_resource)
148 Resource *resource = Resource::fromResource(client_resource);
150 tizen_policy_ext *that = resource->tizen_policy_ext_object;
151 that->m_resource_map.erase(resource->client());
152 that->tizen_policy_ext_destroy_resource(resource);
156 tizen_policy_ext::Resource *tizen_policy_ext::bind(struct ::wl_client *client, uint32_t id, int version)
158 DS_ASSERT_X(!wl_client_get_object(client, id), "DSWaylandObject bind", "binding to object %u more than once", id);
159 struct ::wl_resource *handle = wl_resource_create(client, &::tizen_policy_ext_interface, version, id);
163 tizen_policy_ext::Resource *tizen_policy_ext::bind(struct ::wl_resource *handle)
165 Resource *resource = tizen_policy_ext_allocate();
166 resource->tizen_policy_ext_object = this;
168 wl_resource_set_implementation(handle, &m_tizen_policy_ext_interface, resource, destroy_func);
169 resource->handle = handle;
170 tizen_policy_ext_bind_resource(resource);
173 tizen_policy_ext::Resource *tizen_policy_ext::Resource::fromResource(struct ::wl_resource *resource)
175 if (DS_UNLIKELY(!resource))
177 if (wl_resource_instance_of(resource, &::tizen_policy_ext_interface, &m_tizen_policy_ext_interface))
178 return static_cast<Resource *>(wl_resource_get_user_data(resource));
182 const struct ::tizen_policy_ext_interface tizen_policy_ext::m_tizen_policy_ext_interface = {
183 tizen_policy_ext::handle_get_rotation,
184 tizen_policy_ext::handle_get_active_angle
187 void tizen_policy_ext::tizen_policy_ext_get_rotation(Resource *, uint32_t, struct ::wl_resource *)
191 void tizen_policy_ext::tizen_policy_ext_get_active_angle(Resource *, struct ::wl_resource *)
196 void tizen_policy_ext::handle_get_rotation(
198 struct wl_resource *resource,
200 struct ::wl_resource *surface)
203 Resource *r = Resource::fromResource(resource);
204 static_cast<tizen_policy_ext *>(r->tizen_policy_ext_object)->tizen_policy_ext_get_rotation(
210 void tizen_policy_ext::handle_get_active_angle(
212 struct wl_resource *resource,
213 struct ::wl_resource *surface)
216 Resource *r = Resource::fromResource(resource);
217 static_cast<tizen_policy_ext *>(r->tizen_policy_ext_object)->tizen_policy_ext_get_active_angle(
222 void tizen_policy_ext::send_active_angle(uint32_t angle)
224 DS_ASSERT_X(m_resource, "tizen_policy_ext::active_angle", "Uninitialised resource");
225 if (DS_UNLIKELY(!m_resource)) {
226 WRN("could not call tizen_policy_ext::active_angle as it's not initialised");
234 void tizen_policy_ext::send_active_angle(struct ::wl_resource *resource, uint32_t angle)
236 tizen_policy_ext_send_active_angle(
242 tizen_rotation::tizen_rotation(struct ::wl_client *client, uint32_t id, int version)
247 , m_displayDestroyedListener()
249 init(client, id, version);
252 tizen_rotation::tizen_rotation(struct ::wl_display *display, int version)
257 , m_displayDestroyedListener()
259 init(display, version);
262 tizen_rotation::tizen_rotation(struct ::wl_resource *resource)
267 , m_displayDestroyedListener()
272 tizen_rotation::tizen_rotation()
277 , m_displayDestroyedListener()
281 tizen_rotation::~tizen_rotation()
283 std::multimap<struct ::wl_client*, tizen_rotation::Resource*>::iterator it;
284 for (it = m_resource_map.begin() ; it != m_resource_map.end() ; it++) {
285 tizen_rotation::Resource *resource = (*it).second;
286 wl_resource_set_implementation(resource->handle, NULL, NULL, NULL);
290 wl_global_destroy(m_global);
291 wl_list_remove(&m_displayDestroyedListener.link);
295 void tizen_rotation::init(struct ::wl_client *client, uint32_t id, int version)
297 m_resource = bind(client, id, version);
300 void tizen_rotation::init(struct ::wl_resource *resource)
302 m_resource = bind(resource);
305 tizen_rotation::Resource *tizen_rotation::add(struct ::wl_client *client, int version)
307 Resource *resource = bind(client, 0, version);
308 m_resource_map.insert(std::pair<struct ::wl_client*, Resource*>(client, resource));
312 tizen_rotation::Resource *tizen_rotation::add(struct ::wl_client *client, uint32_t id, int version)
314 Resource *resource = bind(client, id, version);
315 m_resource_map.insert(std::pair<struct ::wl_client*, Resource*>(client, resource));
319 void tizen_rotation::init(struct ::wl_display *display, int version)
321 m_global = wl_global_create(display, &::tizen_rotation_interface, version, this, bind_func);
322 m_globalVersion = version;
323 m_displayDestroyedListener.notify = tizen_rotation::display_destroy_func;
324 m_displayDestroyedListener.parent = this;
325 wl_display_add_destroy_listener(display, &m_displayDestroyedListener);
328 const struct wl_interface *tizen_rotation::interface()
330 return &::tizen_rotation_interface;
333 tizen_rotation::Resource *tizen_rotation::tizen_rotation_allocate()
338 void tizen_rotation::tizen_rotation_bind_resource(Resource *)
342 void tizen_rotation::tizen_rotation_destroy_resource(Resource *)
346 void tizen_rotation::bind_func(struct ::wl_client *client, void *data, uint32_t version, uint32_t id)
348 tizen_rotation *that = static_cast<tizen_rotation *>(data);
349 that->add(client, id, std::min(that->m_globalVersion, version));
352 void tizen_rotation::display_destroy_func(struct ::wl_listener *listener, void *data)
355 tizen_rotation *that = static_cast<tizen_rotation::DisplayDestroyedListener *>(listener)->parent;
356 that->m_global = NULL;
359 void tizen_rotation::destroy_func(struct ::wl_resource *client_resource)
361 Resource *resource = Resource::fromResource(client_resource);
363 tizen_rotation *that = resource->tizen_rotation_object;
364 that->m_resource_map.erase(resource->client());
365 that->tizen_rotation_destroy_resource(resource);
369 tizen_rotation::Resource *tizen_rotation::bind(struct ::wl_client *client, uint32_t id, int version)
371 DS_ASSERT_X(!wl_client_get_object(client, id), "DSWaylandObject bind", "binding to object %u more than once", id);
372 struct ::wl_resource *handle = wl_resource_create(client, &::tizen_rotation_interface, version, id);
376 tizen_rotation::Resource *tizen_rotation::bind(struct ::wl_resource *handle)
378 Resource *resource = tizen_rotation_allocate();
379 resource->tizen_rotation_object = this;
381 wl_resource_set_implementation(handle, &m_tizen_rotation_interface, resource, destroy_func);
382 resource->handle = handle;
383 tizen_rotation_bind_resource(resource);
386 tizen_rotation::Resource *tizen_rotation::Resource::fromResource(struct ::wl_resource *resource)
388 if (DS_UNLIKELY(!resource))
390 if (wl_resource_instance_of(resource, &::tizen_rotation_interface, &m_tizen_rotation_interface))
391 return static_cast<Resource *>(wl_resource_get_user_data(resource));
395 const struct ::tizen_rotation_interface tizen_rotation::m_tizen_rotation_interface = {
396 tizen_rotation::handle_destroy,
397 tizen_rotation::handle_set_available_angles,
398 tizen_rotation::handle_set_preferred_angle,
399 tizen_rotation::handle_ack_angle_change,
400 tizen_rotation::handle_set_geometry_hint
403 void tizen_rotation::tizen_rotation_destroy(Resource *)
407 void tizen_rotation::tizen_rotation_set_available_angles(Resource *, uint32_t )
411 void tizen_rotation::tizen_rotation_set_preferred_angle(Resource *, uint32_t )
415 void tizen_rotation::tizen_rotation_ack_angle_change(Resource *, uint32_t )
419 void tizen_rotation::tizen_rotation_set_geometry_hint(Resource *, uint32_t , uint32_t , uint32_t , uint32_t , uint32_t )
424 void tizen_rotation::handle_destroy(
426 struct wl_resource *resource)
429 Resource *r = Resource::fromResource(resource);
430 static_cast<tizen_rotation *>(r->tizen_rotation_object)->tizen_rotation_destroy(
434 void tizen_rotation::handle_set_available_angles(
436 struct wl_resource *resource,
440 Resource *r = Resource::fromResource(resource);
441 static_cast<tizen_rotation *>(r->tizen_rotation_object)->tizen_rotation_set_available_angles(
446 void tizen_rotation::handle_set_preferred_angle(
448 struct wl_resource *resource,
452 Resource *r = Resource::fromResource(resource);
453 static_cast<tizen_rotation *>(r->tizen_rotation_object)->tizen_rotation_set_preferred_angle(
458 void tizen_rotation::handle_ack_angle_change(
460 struct wl_resource *resource,
464 Resource *r = Resource::fromResource(resource);
465 static_cast<tizen_rotation *>(r->tizen_rotation_object)->tizen_rotation_ack_angle_change(
470 void tizen_rotation::handle_set_geometry_hint(
472 struct wl_resource *resource,
480 Resource *r = Resource::fromResource(resource);
481 static_cast<tizen_rotation *>(r->tizen_rotation_object)->tizen_rotation_set_geometry_hint(
490 void tizen_rotation::send_available_angles_done(uint32_t angles)
492 DS_ASSERT_X(m_resource, "tizen_rotation::available_angles_done", "Uninitialised resource");
493 if (DS_UNLIKELY(!m_resource)) {
494 WRN("could not call tizen_rotation::available_angles_done as it's not initialised");
497 send_available_angles_done(
502 void tizen_rotation::send_available_angles_done(struct ::wl_resource *resource, uint32_t angles)
504 tizen_rotation_send_available_angles_done(
510 void tizen_rotation::send_preferred_angle_done(uint32_t angle)
512 DS_ASSERT_X(m_resource, "tizen_rotation::preferred_angle_done", "Uninitialised resource");
513 if (DS_UNLIKELY(!m_resource)) {
514 WRN("could not call tizen_rotation::preferred_angle_done as it's not initialised");
517 send_preferred_angle_done(
522 void tizen_rotation::send_preferred_angle_done(struct ::wl_resource *resource, uint32_t angle)
524 tizen_rotation_send_preferred_angle_done(
530 void tizen_rotation::send_angle_change(uint32_t angle, uint32_t serial)
532 DS_ASSERT_X(m_resource, "tizen_rotation::angle_change", "Uninitialised resource");
533 if (DS_UNLIKELY(!m_resource)) {
534 WRN("could not call tizen_rotation::angle_change as it's not initialised");
543 void tizen_rotation::send_angle_change(struct ::wl_resource *resource, uint32_t angle, uint32_t serial)
545 tizen_rotation_send_angle_change(
552 void tizen_rotation::send_angle_change_with_resize(uint32_t angle, uint32_t serial, uint32_t width, uint32_t height)
554 DS_ASSERT_X(m_resource, "tizen_rotation::angle_change_with_resize", "Uninitialised resource");
555 if (DS_UNLIKELY(!m_resource)) {
556 WRN("could not call tizen_rotation::angle_change_with_resize as it's not initialised");
559 send_angle_change_with_resize(
567 void tizen_rotation::send_angle_change_with_resize(struct ::wl_resource *resource, uint32_t angle, uint32_t serial, uint32_t width, uint32_t height)
569 tizen_rotation_send_angle_change_with_resize(