diff options
author | dec05eba <dec05eba@protonmail.com> | 2025-05-02 12:32:08 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2025-05-02 12:32:08 +0200 |
commit | 180a3b73dbab2f586c53f9e5f044ab88aca95014 (patch) | |
tree | 48e5b5e70f0ef1ea97894270b3f084d7ea0acd8d /src/Overlay.cpp | |
parent | ac1d57e8ba5059608b32ceeed8d91cf509a26d86 (diff) |
Fix ui being on wrong monitor/focused monitor capture incorrect on kde plasma wayland when vrr is enabled (fallback to window creation & window position trick)HEADmaster
Diffstat (limited to 'src/Overlay.cpp')
-rw-r--r-- | src/Overlay.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/Overlay.cpp b/src/Overlay.cpp index 91f20db..487b6bc 100644 --- a/src/Overlay.cpp +++ b/src/Overlay.cpp @@ -2137,8 +2137,25 @@ namespace gsr { cursor_info = cursor_tracker->get_latest_cursor_info(); } - if(cursor_info) - return cursor_info->monitor_name; + std::string focused_monitor_name; + if(cursor_info) { + focused_monitor_name = std::move(cursor_info->monitor_name); + } else { + mgl_context *context = mgl_get_context(); + Display *display = (Display*)context->connection; + + Window x11_cursor_window = None; + mgl::vec2i cursor_position = get_cursor_position(display, &x11_cursor_window); + + const mgl::vec2i monitor_position_query_value = (x11_cursor_window || gsr_info.system_info.display_server != DisplayServer::WAYLAND) ? cursor_position : create_window_get_center_position(display); + auto monitors = get_monitors(display); + const Monitor *focused_monitor = find_monitor_at_position(monitors, monitor_position_query_value); + if(focused_monitor) + focused_monitor_name = focused_monitor->name; + } + + if(!focused_monitor_name.empty()) + return focused_monitor_name; else if(!capture_options.monitors.empty()) return capture_options.monitors.front().name; else |