diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp index 4b0985b..f262e1e 100644 --- a/src/steamcompmgr.cpp +++ b/src/steamcompmgr.cpp @@ -349,7 +349,7 @@ retry: listCommitsDone.push_back( commitID ); } - static Display *threadDPY = XOpenDisplay ( wlserver_get_nested_display() ); + static Display *threadDPY = XOpenDisplay ( wlserver_get_nested_display_name() ); XSendEvent( threadDPY, ourWindow, True, SubstructureRedirectMask, &nudgeEvent ); XFlush( threadDPY ); @@ -2758,7 +2758,7 @@ steamcompmgr_main (int argc, char **argv) alwaysComposite = True; } - dpy = XOpenDisplay ( wlserver_get_nested_display() ); + dpy = XOpenDisplay ( wlserver_get_nested_display_name() ); if (!dpy) { fprintf (stderr, "Can't open display\n"); @@ -2906,7 +2906,7 @@ steamcompmgr_main (int argc, char **argv) if ( readyPipeFD != -1 ) { - dprintf( readyPipeFD, "%s\n", wlserver_get_nested_display() ); + dprintf( readyPipeFD, "%s %s\n", wlserver_get_nested_display_name(), wlserver_get_wl_display_name() ); close( readyPipeFD ); readyPipeFD = -1; } diff --git a/src/vblankmanager.cpp b/src/vblankmanager.cpp index 632fcc8..bdc7f19 100644 --- a/src/vblankmanager.cpp +++ b/src/vblankmanager.cpp @@ -67,7 +67,7 @@ void vblankThreadRun( void ) void vblank_init( void ) { - g_nestedDpy = XOpenDisplay( wlserver_get_nested_display() ); + g_nestedDpy = XOpenDisplay( wlserver_get_nested_display_name() ); assert( g_nestedDpy != nullptr ); g_lastVblank = get_time_in_nanos(); diff --git a/src/wlserver.cpp b/src/wlserver.cpp index ad66360..c473a31 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp @@ -563,15 +563,14 @@ int wlserver_init(int argc, char **argv, bool bIsNested) { }; wlserver.wlr.xwayland_server = wlr_xwayland_server_create(wlserver.wl_display, &xwayland_options); wl_signal_add(&wlserver.wlr.xwayland_server->events.ready, &xwayland_ready_listener); - - char wayland_display_name[32]; + int result = -1; int display_slot = 0; while ( result != 0 && display_slot < 128 ) { - sprintf( wayland_display_name, "gamescope-%d", display_slot ); - result = wl_display_add_socket( wlserver.wl_display, wayland_display_name ); + sprintf( wlserver.wl_display_name, "gamescope-%d", display_slot ); + result = wl_display_add_socket( wlserver.wl_display, wlserver.wl_display_name ); display_slot++; } @@ -585,9 +584,9 @@ int wlserver_init(int argc, char **argv, bool bIsNested) { wlserver.wlr.seat = wlr_seat_create(wlserver.wl_display, "seat0"); wlr_seat_set_capabilities( wlserver.wlr.seat, WL_SEAT_CAPABILITY_POINTER | WL_SEAT_CAPABILITY_KEYBOARD | WL_SEAT_CAPABILITY_TOUCH ); - wlr_log(WLR_INFO, "Running compositor on wayland display '%s'", wayland_display_name); + wlr_log(WLR_INFO, "Running compositor on wayland display '%s'", wlserver.wl_display_name); - setenv("GAMESCOPE_WAYLAND_DISPLAY", wayland_display_name, 1); + setenv("GAMESCOPE_WAYLAND_DISPLAY", wlserver.wl_display_name, 1); if (!wlr_backend_start( wlserver.wlr.multi_backend )) { @@ -727,11 +726,16 @@ void wlserver_send_frame_done( struct wlr_surface *surf, const struct timespec * wlr_surface_send_frame_done( surf, when ); } -const char *wlserver_get_nested_display( void ) +const char *wlserver_get_nested_display_name( void ) { return wlserver.wlr.xwayland_server->display_name; } +const char *wlserver_get_wl_display_name( void ) +{ + return wlserver.wl_display_name; +} + static void handle_surface_destroy( struct wl_listener *l, void *data ) { struct wlserver_surface *surf = wl_container_of( l, surf, destroy ); diff --git a/src/wlserver.hpp b/src/wlserver.hpp index c055d86..bbcae82 100644 --- a/src/wlserver.hpp +++ b/src/wlserver.hpp @@ -12,6 +12,7 @@ struct wlserver_t { struct wl_display *wl_display; struct wl_event_loop *wl_event_loop; int wl_event_loop_fd; + char wl_display_name[32]; struct { struct wlr_backend *multi_backend; @@ -84,7 +85,8 @@ void wlserver_mousewheel( int x, int y, uint32_t time ); void wlserver_send_frame_done( struct wlr_surface *surf, const struct timespec *when ); -const char *wlserver_get_nested_display( void ); +const char *wlserver_get_nested_display_name( void ); +const char *wlserver_get_wl_display_name( void ); struct wlserver_surface {