mirror of
https://repo.dec05eba.com/gpu-screen-recorder-ui
synced 2026-05-07 15:19:56 +09:00
Make saving recordings based on game name work on wayland when the game is running inside gamescope
This commit is contained in:
@@ -2086,13 +2086,32 @@ namespace gsr {
|
|||||||
return ClipboardFile::FileType::PNG;
|
return ClipboardFile::FileType::PNG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns an empty string on failure
|
||||||
|
static std::string gamescope_get_game_name() {
|
||||||
|
std::string focused_window_name;
|
||||||
|
Display *gamescope_dpy = XOpenDisplay(":2"); // This is assuming gamescope is :2, which may not always be true
|
||||||
|
if(!gamescope_dpy)
|
||||||
|
return focused_window_name;
|
||||||
|
|
||||||
|
if(get_window_manager_name(gamescope_dpy) == "steamcompmgr")
|
||||||
|
focused_window_name = get_focused_window_name(gamescope_dpy, WindowCaptureType::FOCUSED, false);
|
||||||
|
|
||||||
|
XCloseDisplay(gamescope_dpy);
|
||||||
|
return focused_window_name;
|
||||||
|
}
|
||||||
|
|
||||||
void Overlay::save_video_in_current_game_directory(std::string &video_filepath, NotificationType notification_type) {
|
void Overlay::save_video_in_current_game_directory(std::string &video_filepath, NotificationType notification_type) {
|
||||||
mgl_context *context = mgl_get_context();
|
mgl_context *context = mgl_get_context();
|
||||||
Display *display = (Display*)context->connection;
|
Display *display = (Display*)context->connection;
|
||||||
const std::string video_filename = filepath_get_filename(video_filepath.c_str());
|
const std::string video_filename = filepath_get_filename(video_filepath.c_str());
|
||||||
|
|
||||||
const Window gsr_ui_window = window ? (Window)window->get_system_handle() : None;
|
const Window gsr_ui_window = window ? (Window)window->get_system_handle() : None;
|
||||||
std::string focused_window_name = get_window_name_at_cursor_position(display, gsr_ui_window);
|
// Checking for gamescope window name is not needed on x11 because on x11 gamescope uses the host x11 so applications
|
||||||
|
// running inside gamescope appears in the hosts x11 server
|
||||||
|
std::string focused_window_name = gsr_info.system_info.display_server != DisplayServer::X11 ? gamescope_get_game_name() : "";
|
||||||
|
|
||||||
|
if(focused_window_name.empty())
|
||||||
|
focused_window_name = get_window_name_at_cursor_position(display, gsr_ui_window);
|
||||||
|
|
||||||
if(focused_window_name.empty())
|
if(focused_window_name.empty())
|
||||||
focused_window_name = get_focused_window_name(display, WindowCaptureType::FOCUSED, false);
|
focused_window_name = get_focused_window_name(display, WindowCaptureType::FOCUSED, false);
|
||||||
|
|||||||
Reference in New Issue
Block a user