3535
3636#define SPLASH_SHM_NAME "retroarch-wayland-vk-splash"
3737
38- #define WINDOW_TITLE "RetroArch"
38+ #define DEFAULT_WINDOW_TITLE "RetroArch"
39+ #define MAIN_WINDOW_TAG "main window"
3940
4041#ifdef HAVE_LIBDECOR_H
4142#include <libdecor.h>
@@ -319,10 +320,10 @@ void gfx_ctx_wl_destroy_resources_common(gfx_ctx_wayland_data_t *wl)
319320 if (wl -> wl_touch )
320321 wl_touch_destroy (wl -> wl_touch );
321322
322- if (wl -> cursor .theme )
323- wl_cursor_theme_destroy (wl -> cursor .theme );
324323 if (wl -> cursor .surface )
325324 wl_surface_destroy (wl -> cursor .surface );
325+ if (wl -> cursor .theme )
326+ wl_cursor_theme_destroy (wl -> cursor .theme );
326327
327328 if (wl -> viewport )
328329 wp_viewport_destroy (wl -> viewport );
@@ -332,19 +333,21 @@ void gfx_ctx_wl_destroy_resources_common(gfx_ctx_wayland_data_t *wl)
332333 zwp_idle_inhibitor_v1_destroy (wl -> idle_inhibitor );
333334 if (wl -> deco )
334335 zxdg_toplevel_decoration_v1_destroy (wl -> deco );
335- if (wl -> xdg_toplevel )
336- xdg_toplevel_destroy (wl -> xdg_toplevel );
337- if (wl -> xdg_toplevel_icon_manager )
338- xdg_toplevel_icon_manager_v1_destroy (wl -> xdg_toplevel_icon_manager );
339336 if (wl -> xdg_toplevel_icon )
340337 xdg_toplevel_icon_v1_destroy (wl -> xdg_toplevel_icon );
338+ if (wl -> xdg_toplevel )
339+ xdg_toplevel_destroy (wl -> xdg_toplevel );
341340 if (wl -> xdg_surface )
342341 xdg_surface_destroy (wl -> xdg_surface );
343342 if (wl -> surface )
344343 wl_surface_destroy (wl -> surface );
345344
346345 if (wl -> deco_manager )
347346 zxdg_decoration_manager_v1_destroy (wl -> deco_manager );
347+ if (wl -> xdg_toplevel_icon_manager )
348+ xdg_toplevel_icon_manager_v1_destroy (wl -> xdg_toplevel_icon_manager );
349+ if (wl -> xdg_toplevel_tag_manager )
350+ xdg_toplevel_tag_manager_v1_destroy (wl -> xdg_toplevel_tag_manager );
348351 if (wl -> idle_inhibit_manager )
349352 zwp_idle_inhibit_manager_v1_destroy (wl -> idle_inhibit_manager );
350353 else
@@ -427,6 +430,7 @@ void gfx_ctx_wl_destroy_resources_common(gfx_ctx_wayland_data_t *wl)
427430 wl -> xdg_toplevel = NULL ;
428431 wl -> xdg_toplevel_icon = NULL ;
429432 wl -> xdg_toplevel_icon_manager = NULL ;
433+ wl -> xdg_toplevel_tag_manager = NULL ;
430434 wl -> deco = NULL ;
431435 wl -> idle_inhibitor = NULL ;
432436 wl -> wl_touch = NULL ;
@@ -849,6 +853,11 @@ bool gfx_ctx_wl_init_common(
849853 RARCH_LOG ("[Wayland] Compositor doesn't support the %s protocol.\n" , xdg_toplevel_icon_manager_v1_interface .name );
850854 }
851855
856+ if (!wl -> xdg_toplevel_tag_manager )
857+ {
858+ RARCH_LOG ("[Wayland] Compositor doesn't support the %s protocol.\n" , xdg_toplevel_tag_manager_v1_interface .name );
859+ }
860+
852861 wl -> surface = wl_compositor_create_surface (wl -> compositor );
853862 if (wl -> viewporter )
854863 wl -> viewport = wp_viewporter_get_viewport (wl -> viewporter , wl -> surface );
@@ -880,14 +889,23 @@ bool gfx_ctx_wl_init_common(
880889 return false;
881890 }
882891
892+ struct xdg_toplevel * xdg_toplevel = wl -> libdecor_frame_get_xdg_toplevel (wl -> libdecor_frame );
893+
883894 if (wl -> xdg_toplevel_icon_manager )
884895 {
885- struct xdg_toplevel * xdg_toplevel = wl -> libdecor_frame_get_xdg_toplevel (wl -> libdecor_frame );
886896 wl_create_toplevel_icon (wl , xdg_toplevel );
887897 }
888898
899+ if (wl -> xdg_toplevel_tag_manager )
900+ {
901+ xdg_toplevel_tag_manager_v1_set_toplevel_tag (
902+ wl -> xdg_toplevel_tag_manager , xdg_toplevel , MAIN_WINDOW_TAG );
903+ xdg_toplevel_tag_manager_v1_set_toplevel_description (
904+ wl -> xdg_toplevel_tag_manager , xdg_toplevel , DEFAULT_WINDOW_TITLE " " MAIN_WINDOW_TAG );
905+ }
906+
889907 wl -> libdecor_frame_set_app_id (wl -> libdecor_frame , WAYLAND_APP_ID );
890- wl -> libdecor_frame_set_title (wl -> libdecor_frame , WINDOW_TITLE );
908+ wl -> libdecor_frame_set_title (wl -> libdecor_frame , DEFAULT_WINDOW_TITLE );
891909 wl -> libdecor_frame_map (wl -> libdecor_frame );
892910
893911 /* Waiting for libdecor to be configured before starting to draw */
@@ -913,7 +931,7 @@ bool gfx_ctx_wl_init_common(
913931 xdg_toplevel_add_listener (wl -> xdg_toplevel , & toplevel_listener -> xdg_toplevel_listener , wl );
914932
915933 xdg_toplevel_set_app_id (wl -> xdg_toplevel , WAYLAND_APP_ID );
916- xdg_toplevel_set_title (wl -> xdg_toplevel , WINDOW_TITLE );
934+ xdg_toplevel_set_title (wl -> xdg_toplevel , DEFAULT_WINDOW_TITLE );
917935
918936 if (wl -> deco_manager )
919937 wl -> deco = zxdg_decoration_manager_v1_get_toplevel_decoration (
@@ -922,6 +940,14 @@ bool gfx_ctx_wl_init_common(
922940 if (wl -> xdg_toplevel_icon_manager )
923941 wl_create_toplevel_icon (wl , wl -> xdg_toplevel );
924942
943+ if (wl -> xdg_toplevel_tag_manager )
944+ {
945+ xdg_toplevel_tag_manager_v1_set_toplevel_tag (
946+ wl -> xdg_toplevel_tag_manager , wl -> xdg_toplevel , MAIN_WINDOW_TAG );
947+ xdg_toplevel_tag_manager_v1_set_toplevel_description (
948+ wl -> xdg_toplevel_tag_manager , wl -> xdg_toplevel , DEFAULT_WINDOW_TITLE " " MAIN_WINDOW_TAG );
949+ }
950+
925951 /* Waiting for xdg_toplevel to be configured before starting to draw */
926952 wl_surface_commit (wl -> surface );
927953 wl -> configured = true;
0 commit comments