@@ -377,9 +377,16 @@ void WaylandThread::_wl_registry_on_global(void *data, struct wl_registry *wl_re
377377 return ;
378378 }
379379
380+ // NOTE: Deprecated.
380381 if (strcmp (interface, zxdg_exporter_v1_interface.name ) == 0 ) {
381- registry->xdg_exporter = (struct zxdg_exporter_v1 *)wl_registry_bind (wl_registry, name, &zxdg_exporter_v1_interface, 1 );
382- registry->xdg_exporter_name = name;
382+ registry->xdg_exporter_v1 = (struct zxdg_exporter_v1 *)wl_registry_bind (wl_registry, name, &zxdg_exporter_v1_interface, 1 );
383+ registry->xdg_exporter_v1_name = name;
384+ return ;
385+ }
386+
387+ if (strcmp (interface, zxdg_exporter_v2_interface.name ) == 0 ) {
388+ registry->xdg_exporter_v2 = (struct zxdg_exporter_v2 *)wl_registry_bind (wl_registry, name, &zxdg_exporter_v2_interface, 1 );
389+ registry->xdg_exporter_v2_name = name;
383390 return ;
384391 }
385392
@@ -599,13 +606,25 @@ void WaylandThread::_wl_registry_on_global_remove(void *data, struct wl_registry
599606 return ;
600607 }
601608
602- if (name == registry->xdg_exporter_name ) {
603- if (registry->xdg_exporter ) {
604- zxdg_exporter_v1_destroy (registry->xdg_exporter );
605- registry->xdg_exporter = nullptr ;
609+ // NOTE: Deprecated.
610+ if (name == registry->xdg_exporter_v1_name ) {
611+ if (registry->xdg_exporter_v1 ) {
612+ zxdg_exporter_v1_destroy (registry->xdg_exporter_v1 );
613+ registry->xdg_exporter_v1 = nullptr ;
614+ }
615+
616+ registry->xdg_exporter_v1_name = 0 ;
617+
618+ return ;
619+ }
620+
621+ if (name == registry->xdg_exporter_v2_name ) {
622+ if (registry->xdg_exporter_v2 ) {
623+ zxdg_exporter_v2_destroy (registry->xdg_exporter_v2 );
624+ registry->xdg_exporter_v2 = nullptr ;
606625 }
607626
608- registry->xdg_exporter_name = 0 ;
627+ registry->xdg_exporter_v2_name = 0 ;
609628
610629 return ;
611630 }
@@ -1186,7 +1205,15 @@ void WaylandThread::_xdg_toplevel_on_wm_capabilities(void *data, struct xdg_topl
11861205 }
11871206}
11881207
1189- void WaylandThread::_xdg_exported_on_exported (void *data, zxdg_exported_v1 *exported, const char *handle) {
1208+ // NOTE: Deprecated.
1209+ void WaylandThread::_xdg_exported_v1_on_handle (void *data, zxdg_exported_v1 *exported, const char *handle) {
1210+ WindowState *ws = (WindowState *)data;
1211+ ERR_FAIL_NULL (ws);
1212+
1213+ ws->exported_handle = vformat (" wayland:%s" , String::utf8 (handle));
1214+ }
1215+
1216+ void WaylandThread::_xdg_exported_v2_on_handle (void *data, zxdg_exported_v2 *exported, const char *handle) {
11901217 WindowState *ws = (WindowState *)data;
11911218 ERR_FAIL_NULL (ws);
11921219
@@ -3284,9 +3311,12 @@ void WaylandThread::window_create(DisplayServer::WindowID p_window_id, int p_wid
32843311 ws.frame_callback = wl_surface_frame (ws.wl_surface );
32853312 wl_callback_add_listener (ws.frame_callback , &frame_wl_callback_listener, &ws);
32863313
3287- if (registry.xdg_exporter ) {
3288- ws.xdg_exported = zxdg_exporter_v1_export (registry.xdg_exporter , ws.wl_surface );
3289- zxdg_exported_v1_add_listener (ws.xdg_exported , &xdg_exported_listener, &ws);
3314+ if (registry.xdg_exporter_v2 ) {
3315+ ws.xdg_exported_v2 = zxdg_exporter_v2_export_toplevel (registry.xdg_exporter_v2 , ws.wl_surface );
3316+ zxdg_exported_v2_add_listener (ws.xdg_exported_v2 , &xdg_exported_v2_listener, &ws);
3317+ } else if (registry.xdg_exporter_v1 ) {
3318+ ws.xdg_exported_v1 = zxdg_exporter_v1_export (registry.xdg_exporter_v1 , ws.wl_surface );
3319+ zxdg_exported_v1_add_listener (ws.xdg_exported_v1 , &xdg_exported_v1_listener, &ws);
32903320 }
32913321
32923322 wl_surface_commit (ws.wl_surface );
@@ -4410,10 +4440,14 @@ void WaylandThread::destroy() {
44104440 xdg_wm_base_destroy (registry.xdg_wm_base );
44114441 }
44124442
4413- if (registry.xdg_exporter ) {
4414- zxdg_exporter_v1_destroy (registry.xdg_exporter );
4443+ // NOTE: Deprecated.
4444+ if (registry.xdg_exporter_v1 ) {
4445+ zxdg_exporter_v1_destroy (registry.xdg_exporter_v1 );
44154446 }
44164447
4448+ if (registry.xdg_exporter_v2 ) {
4449+ zxdg_exporter_v2_destroy (registry.xdg_exporter_v2 );
4450+ }
44174451 if (registry.wl_shm ) {
44184452 wl_shm_destroy (registry.wl_shm );
44194453 }
0 commit comments