diff --git a/gfx/common/x11_common.c b/gfx/common/x11_common.c index 196f73ae75..2ed94fc1d7 100644 --- a/gfx/common/x11_common.c +++ b/gfx/common/x11_common.c @@ -716,8 +716,14 @@ bool x11_connect(void) void x11_update_title(void *data, video_frame_info_t *video_info) { - if (video_info->monitor_fps_enable) - XStoreName(g_x11_dpy, g_x11_win, video_info->window_text); + char title[128]; + + title[0] = '\0'; + + video_driver_get_window_title(title, sizeof(title)); + + if (title[0] && video_info->monitor_fps_enable) + XStoreName(g_x11_dpy, g_x11_win, title); } bool x11_input_ctx_new(bool true_full) diff --git a/gfx/drivers/sdl2_gfx.c b/gfx/drivers/sdl2_gfx.c index 8dd22ccdcd..6cc61b0a8c 100644 --- a/gfx/drivers/sdl2_gfx.c +++ b/gfx/drivers/sdl2_gfx.c @@ -534,7 +534,16 @@ static bool sdl2_gfx_frame(void *data, const void *frame, unsigned width, SDL_RenderPresent(vid->renderer); if (video_info->monitor_fps_enable) - SDL_SetWindowTitle(vid->window, video_info->window_text); + { + char title[128]; + + title[0] = '\0'; + + video_driver_get_window_title(title, sizeof(title)); + + if (title[0]) + SDL_SetWindowTitle(vid->window, title); + } return true; } diff --git a/gfx/drivers/xvideo.c b/gfx/drivers/xvideo.c index 6ee19f84e8..463e1f28c2 100644 --- a/gfx/drivers/xvideo.c +++ b/gfx/drivers/xvideo.c @@ -539,7 +539,16 @@ static void *xv_init(const video_info_t *video, video_driver_build_info(&video_info); if (video_info.monitor_fps_enable) - XStoreName(g_x11_dpy, g_x11_win, video_info.window_text); + { + char title[128]; + + title[0] = '\0'; + + video_driver_get_window_title(title, sizeof(title)); + + if (title[0]) + XStoreName(g_x11_dpy, g_x11_win, title); + } x11_set_window_attr(g_x11_dpy, g_x11_win); diff --git a/gfx/drivers_context/cocoa_gl_ctx.m b/gfx/drivers_context/cocoa_gl_ctx.m index d2a276b74a..aa91c64738 100644 --- a/gfx/drivers_context/cocoa_gl_ctx.m +++ b/gfx/drivers_context/cocoa_gl_ctx.m @@ -425,7 +425,16 @@ static void cocoagl_gfx_ctx_update_title(void *data, video_frame_info_t *video_i view.data = (CocoaView*)nsview_get_ptr(); if (window && video_info->monitor_fps_enable) - window->set_title(&view, video_info->window_text); + { + char title[128]; + + title[0] = '\0'; + + video_driver_get_window_title(title, sizeof(title)); + + if (title[0]) + window->set_title(&view, title); + } } #endif diff --git a/gfx/drivers_context/d3d_ctx.cpp b/gfx/drivers_context/d3d_ctx.cpp index 1d2b9ae948..98f65be158 100644 --- a/gfx/drivers_context/d3d_ctx.cpp +++ b/gfx/drivers_context/d3d_ctx.cpp @@ -102,7 +102,16 @@ static void gfx_ctx_d3d_update_title(void *data, video_frame_info_t *video_info) const ui_window_t *window = ui_companion_driver_get_window_ptr(); if (window && video_info->monitor_fps_enable) - window->set_title(&main_window, video_info->window_text); + { + char title[128]; + + title[0] = '\0'; + + video_driver_get_window_title(title, sizeof(title)); + + if (title[0]) + window->set_title(&main_window, title); + } #endif } diff --git a/gfx/drivers_context/gdi_ctx.cpp b/gfx/drivers_context/gdi_ctx.cpp index 190f0532be..dea9050840 100644 --- a/gfx/drivers_context/gdi_ctx.cpp +++ b/gfx/drivers_context/gdi_ctx.cpp @@ -86,12 +86,21 @@ static bool gfx_ctx_gdi_set_resize(void *data, return false; } -static void gfx_ctx_gdi_update_title(void *data, video_frame_info_t *video_info) +static void gfx_ctx_gdi_update_window_title(void *data, video_frame_info_t *video_info) { const ui_window_t *window = ui_companion_driver_get_window_ptr(); if (window && video_info->monitor_fps_enable) - window->set_title(&main_window, video_info->window_text); + { + char title[128]; + + title[0] = '\0'; + + video_driver_get_window_title(title, sizeof(title)); + + if (title[0]) + window->set_title(&main_window, title); + } } static void gfx_ctx_gdi_get_video_size(void *data, diff --git a/gfx/drivers_context/sdl_gl_ctx.c b/gfx/drivers_context/sdl_gl_ctx.c index 3a38de6a0b..c4f6ff3e57 100644 --- a/gfx/drivers_context/sdl_gl_ctx.c +++ b/gfx/drivers_context/sdl_gl_ctx.c @@ -268,14 +268,21 @@ static void sdl_ctx_get_video_size(void *data, static void sdl_ctx_update_title(void *data, video_frame_info_t *video_info) { + char title[128]; + + title[0] = '\0'; + + video_driver_get_window_title(title, sizeof(title)); + if (video_info->monitor_fps_enable) { #ifdef HAVE_SDL2 gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)data; - if (sdl) - SDL_SetWindowTitle(sdl->g_win, video_info->window_text); + + if (sdl && title[0]) + SDL_SetWindowTitle(sdl->g_win, title); #else - SDL_WM_SetCaption(video_info->window_text, NULL); + SDL_WM_SetCaption(title, NULL); #endif } } diff --git a/gfx/drivers_context/wayland_ctx.c b/gfx/drivers_context/wayland_ctx.c index ddcbb55ce3..70100b88a3 100644 --- a/gfx/drivers_context/wayland_ctx.c +++ b/gfx/drivers_context/wayland_ctx.c @@ -719,9 +719,14 @@ static bool gfx_ctx_wl_set_resize(void *data, unsigned width, unsigned height) static void gfx_ctx_wl_update_title(void *data, video_frame_info_t *video_info) { gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data; + char title[128]; - if (wl && video_info->monitor_fps_enable) - wl_shell_surface_set_title(wl->shell_surf, video_info->window_text); + title[0] = '\0'; + + video_driver_get_window_title(title, sizeof(title)); + + if (wl && title[0] && video_info->monitor_fps_enable) + wl_shell_surface_set_title(wl->shell_surf, title); } diff --git a/gfx/drivers_context/wgl_ctx.cpp b/gfx/drivers_context/wgl_ctx.cpp index ee7e48a75b..18b83ba5c0 100644 --- a/gfx/drivers_context/wgl_ctx.cpp +++ b/gfx/drivers_context/wgl_ctx.cpp @@ -390,7 +390,16 @@ static void gfx_ctx_wgl_update_title(void *data, video_frame_info_t *video_info) const ui_window_t *window = ui_companion_driver_get_window_ptr(); if (window && video_info->monitor_fps_enable) - window->set_title(&main_window, video_info->window_text); + { + char title[128]; + + title[0] = '\0'; + + video_driver_get_window_title(title, sizeof(title)); + + if (title[0]) + window->set_title(&main_window, title); + } } static void gfx_ctx_wgl_get_video_size(void *data, diff --git a/gfx/video_driver.c b/gfx/video_driver.c index 50e6bc0126..e3928f934c 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -137,6 +137,8 @@ static unsigned video_driver_height = 0; static enum rarch_display_type video_driver_display_type = RARCH_DISPLAY_NONE; static char video_driver_title_buf[64] = {0}; +static char video_driver_window_title[128] = {0}; +static bool video_driver_window_title_update = true; static retro_time_t video_driver_frame_time_samples[MEASURE_FRAME_TIME_SAMPLES_COUNT]; static uint64_t video_driver_frame_time_count = 0; @@ -2039,34 +2041,36 @@ static bool video_monitor_get_fps(video_frame_info_t *video_info) last_fps = TIME_TO_FPS(curr_time, new_time, FPS_UPDATE_INTERVAL); curr_time = new_time; - fill_pathname_noext(video_info->window_text, + fill_pathname_noext(video_driver_window_title, video_driver_title_buf, " || ", - sizeof(video_info->window_text)); + sizeof(video_driver_window_title)); if (video_info->fps_show) { snprintf(video_info->fps_text, sizeof(video_info->fps_text), " FPS: %6.1f || ", last_fps); - strlcat(video_info->window_text, + strlcat(video_driver_window_title, video_info->fps_text, - sizeof(video_info->window_text)); + sizeof(video_driver_window_title)); } - strlcat(video_info->window_text, + strlcat(video_driver_window_title, "Frames: ", - sizeof(video_info->window_text)); + sizeof(video_driver_window_title)); snprintf(frames_text, sizeof(frames_text), STRING_REP_UINT64, (unsigned long long)video_info->frame_count); - strlcat(video_info->window_text, + strlcat(video_driver_window_title, frames_text, - sizeof(video_info->window_text)); + sizeof(video_driver_window_title)); ret = true; + + video_driver_window_title_update = true; } if (video_info->fps_show) @@ -2082,14 +2086,16 @@ static bool video_monitor_get_fps(video_frame_info_t *video_info) } curr_time = fps_time = new_time; - strlcpy(video_info->window_text, + strlcpy(video_driver_window_title, video_driver_title_buf, - sizeof(video_info->window_text)); + sizeof(video_driver_window_title)); strlcpy(video_info->fps_text, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE), sizeof(video_info->fps_text)); + video_driver_window_title_update = true; + return true; } @@ -2264,11 +2270,11 @@ void video_driver_build_info(video_frame_info_t *video_info) video_info->font_enable = settings->video.font_enable; video_info->frame_count = 0; - video_info->window_text[0] = '\0'; video_info->fps_text[0] = '\0'; video_info->width = video_driver_width; video_info->height = video_driver_height; + video_driver_threaded_unlock(); } @@ -2325,3 +2331,12 @@ bool video_driver_translate_coord_viewport( return true; } + +void video_driver_get_window_title(char *buf, unsigned len) +{ + if (buf && video_driver_window_title_update) + { + strlcpy(buf, video_driver_window_title, len); + video_driver_window_title_update = false; + } +} diff --git a/gfx/video_driver.h b/gfx/video_driver.h index 4bf0344ff8..479cb77cf7 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -102,7 +102,6 @@ typedef struct video_frame_info unsigned monitor_index; bool font_enable; bool monitor_fps_enable; - char window_text[128]; char fps_text[128]; uint64_t frame_count; @@ -531,6 +530,8 @@ void video_driver_build_info(video_frame_info_t *video_info); void video_driver_reinit(void); +void video_driver_get_window_title(char *buf, unsigned len); + extern video_driver_t video_gl; extern video_driver_t video_vulkan; extern video_driver_t video_psp1;