Skip to content

Commit f6da9cc

Browse files
authored
Implement FlutterDesktopViewGetResourceId (#52)
1 parent 8bdfbfc commit f6da9cc

11 files changed

+92
-0
lines changed

flutter/shell/platform/tizen/flutter_tizen.cc

+5
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,11 @@ void* FlutterDesktopViewGetNativeHandle(FlutterDesktopViewRef view_ref) {
240240
return view->tizen_view()->GetNativeHandle();
241241
}
242242

243+
uint32_t FlutterDesktopViewGetResourceId(FlutterDesktopViewRef view_ref) {
244+
flutter::FlutterTizenView* view = ViewFromHandle(view_ref);
245+
return view->tizen_view()->GetResourceId();
246+
}
247+
243248
void FlutterDesktopViewResize(FlutterDesktopViewRef view,
244249
int32_t width,
245250
int32_t height) {

flutter/shell/platform/tizen/public/flutter_tizen.h

+4
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,10 @@ FLUTTER_EXPORT void FlutterDesktopViewDestroy(FlutterDesktopViewRef view);
204204
FLUTTER_EXPORT void* FlutterDesktopViewGetNativeHandle(
205205
FlutterDesktopViewRef view);
206206

207+
// Returns the resource id of current window.
208+
FLUTTER_EXPORT uint32_t
209+
FlutterDesktopViewGetResourceId(FlutterDesktopViewRef view);
210+
207211
// Resizes the view.
208212
// @warning This API is a work-in-progress and may change.
209213
FLUTTER_EXPORT void FlutterDesktopViewResize(FlutterDesktopViewRef view,

flutter/shell/platform/tizen/tizen_view_base.h

+2
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ class TizenViewBase {
4141
// Returns the dpi of the screen.
4242
virtual int32_t GetDpi() = 0;
4343

44+
virtual uint32_t GetResourceId() = 0;
45+
4446
virtual void UpdateFlutterCursor(const std::string& kind) = 0;
4547

4648
// Sets the delegate used to communicate state changes from render target to

flutter/shell/platform/tizen/tizen_view_elementary.cc

+4
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,10 @@ uintptr_t TizenViewElementary::GetWindowId() {
362362
ecore_evas_ecore_evas_get(evas_object_evas_get(container_)));
363363
}
364364

365+
uint32_t TizenViewElementary::GetResourceId() {
366+
return 0;
367+
}
368+
365369
void TizenViewElementary::Show() {
366370
evas_object_show(container_);
367371
evas_object_show(image_);

flutter/shell/platform/tizen/tizen_view_elementary.h

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ class TizenViewElementary : public TizenView {
3535

3636
uintptr_t GetWindowId() override;
3737

38+
uint32_t GetResourceId() override;
39+
3840
void Show() override;
3941

4042
void UpdateFlutterCursor(const std::string& kind) override;

flutter/shell/platform/tizen/tizen_view_nui.cc

+4
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ uintptr_t TizenViewNui::GetWindowId() {
6666
return default_window_id_;
6767
}
6868

69+
uint32_t TizenViewNui::GetResourceId() {
70+
return 0;
71+
}
72+
6973
void TizenViewNui::Show() {
7074
// Do nothing.
7175
}

flutter/shell/platform/tizen/tizen_view_nui.h

+2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ class TizenViewNui : public TizenView {
3838

3939
uintptr_t GetWindowId() override;
4040

41+
uint32_t GetResourceId() override;
42+
4143
void Show() override;
4244

4345
void RequestRendering();

flutter/shell/platform/tizen/tizen_window_ecore_wl2.cc

+60
Original file line numberDiff line numberDiff line change
@@ -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+
462522
void TizenWindowEcoreWl2::SetPreferredOrientations(
463523
const std::vector<int>& rotations) {
464524
ecore_wl2_window_available_rotations_set(ecore_wl2_window_, rotations.data(),

flutter/shell/platform/tizen/tizen_window_ecore_wl2.h

+3
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ class TizenWindowEcoreWl2 : public TizenWindow {
4444

4545
uintptr_t GetWindowId() override;
4646

47+
uint32_t GetResourceId() override;
48+
4749
void SetPreferredOrientations(const std::vector<int>& rotations) override;
4850

4951
void BindKeys(const std::vector<std::string>& keys) override;
@@ -77,6 +79,7 @@ class TizenWindowEcoreWl2 : public TizenWindow {
7779
std::vector<Ecore_Event_Handler*> ecore_event_handlers_;
7880

7981
tizen_policy* tizen_policy_ = nullptr;
82+
uint32_t resource_id_ = 0;
8083
};
8184

8285
} // namespace flutter

flutter/shell/platform/tizen/tizen_window_elementary.cc

+4
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,10 @@ uintptr_t TizenWindowElementary::GetWindowId() {
413413
ecore_evas_ecore_evas_get(evas_object_evas_get(elm_win_)));
414414
}
415415

416+
uint32_t TizenWindowElementary::GetResourceId() {
417+
return 0;
418+
}
419+
416420
void TizenWindowElementary::SetPreferredOrientations(
417421
const std::vector<int>& rotations) {
418422
elm_win_wm_rotation_available_rotations_set(elm_win_, rotations.data(),

flutter/shell/platform/tizen/tizen_window_elementary.h

+2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ class TizenWindowElementary : public TizenWindow {
4545

4646
uintptr_t GetWindowId() override;
4747

48+
uint32_t GetResourceId() override;
49+
4850
void SetPreferredOrientations(const std::vector<int>& rotations) override;
4951

5052
void BindKeys(const std::vector<std::string>& keys) override;

0 commit comments

Comments
 (0)