magnifier: Include SSD when calculating screen coordinates for events

When calculating the on screen coordinates of events from the window
relative coordinates, using the frame rect will include the decorations
added by the WM for SSD windows. This was causing the calculated
coordinates to be slightly off. Fix this by using the client rect for
SSD windows.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2319>
This commit is contained in:
Sebastian Keller 2022-05-31 18:18:45 +02:00 committed by Marge Bot
parent 4592337ce5
commit 1952549788

View File

@ -845,14 +845,18 @@ var ZoomRegion = class ZoomRegion {
throw new Error(`Failed to validate parent window: ${e}`); throw new Error(`Failed to validate parent window: ${e}`);
} }
const focusWindowRect = global.display.focus_window?.get_frame_rect(); const { focusWindow } = global.display;
if (!focusWindowRect) if (!focusWindow)
return null; return null;
let windowRect = focusWindow.get_frame_rect();
if (!focusWindow.is_client_decorated())
windowRect = focusWindow.frame_rect_to_client_rect(windowRect);
const scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; const scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
const screenSpaceExtents = new Atspi.Rect({ const screenSpaceExtents = new Atspi.Rect({
x: focusWindowRect.x + (scaleFactor * extents.x), x: windowRect.x + (scaleFactor * extents.x),
y: focusWindowRect.y + (scaleFactor * extents.y), y: windowRect.y + (scaleFactor * extents.y),
width: scaleFactor * extents.width, width: scaleFactor * extents.width,
height: scaleFactor * extents.height, height: scaleFactor * extents.height,
}); });