@@ -459,6 +459,66 @@ uintptr_t TizenWindowEcoreWl2::GetWindowId() {
459459 return ecore_wl2_window_id_get (ecore_wl2_window_);
460460}
461461
462+ void HandleResourceId (void * data, tizen_resource* tizen_resource, uint32_t id) {
463+ if (data) {
464+ *reinterpret_cast <uint32_t *>(data) = id;
465+ }
466+ }
467+
468+ uint32_t TizenWindowEcoreWl2::GetResourceId () {
469+ if (resource_id_ > 0 ) {
470+ return resource_id_;
471+ }
472+ struct wl_registry * registry =
473+ ecore_wl2_display_registry_get (ecore_wl2_display_);
474+ if (!registry) {
475+ FT_LOG (Error) << " Could not retreive wl_registry from the display." ;
476+ return 0 ;
477+ }
478+
479+ static const struct tizen_resource_listener tz_resource_listener = {
480+ HandleResourceId};
481+ Eina_Iterator* iter = ecore_wl2_display_globals_get (ecore_wl2_display_);
482+ Ecore_Wl2_Global* global = nullptr ;
483+ struct tizen_surface * surface = nullptr ;
484+ EINA_ITERATOR_FOREACH (iter, global) {
485+ if (strcmp (global->interface , " tizen_surface" ) == 0 ) {
486+ surface = static_cast <tizen_surface*>(wl_registry_bind (
487+ registry, global->id , &tizen_surface_interface, global->version ));
488+ break ;
489+ }
490+ }
491+ eina_iterator_free (iter);
492+ if (!surface) {
493+ FT_LOG (Error) << " Failed to initialize the tizen surface." ;
494+ return 0 ;
495+ }
496+
497+ struct tizen_resource * resource = tizen_surface_get_tizen_resource (
498+ surface, ecore_wl2_window_surface_get (ecore_wl2_window_));
499+
500+ if (!resource) {
501+ FT_LOG (Error) << " Failed to get tizen resource." ;
502+ tizen_surface_destroy (surface);
503+ return 0 ;
504+ }
505+
506+ struct wl_event_queue * event_queue = wl_display_create_queue (wl2_display_);
507+ if (!event_queue) {
508+ FT_LOG (Error) << " Failed to create wl_event_queue." ;
509+ tizen_resource_destroy (resource);
510+ tizen_surface_destroy (surface);
511+ return 0 ;
512+ }
513+ wl_proxy_set_queue (reinterpret_cast <struct wl_proxy *>(resource), event_queue);
514+ tizen_resource_add_listener (resource, &tz_resource_listener, &resource_id_);
515+ wl_display_roundtrip_queue (wl2_display_, event_queue);
516+ tizen_resource_destroy (resource);
517+ tizen_surface_destroy (surface);
518+ wl_event_queue_destroy (event_queue);
519+ return resource_id_;
520+ }
521+
462522void TizenWindowEcoreWl2::SetPreferredOrientations (
463523 const std::vector<int >& rotations) {
464524 ecore_wl2_window_available_rotations_set (ecore_wl2_window_, rotations.data (),
0 commit comments