From a90a5cba08fdf6c0ceb95101c275108a152a3aed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 12 Jun 2024 07:35:37 +0200 Subject: Merging upstream version 127.0. Signed-off-by: Daniel Baumann --- browser/actors/ScreenshotsComponentChild.sys.mjs | 53 +++++++++++++++--------- 1 file changed, 33 insertions(+), 20 deletions(-) (limited to 'browser/actors/ScreenshotsComponentChild.sys.mjs') diff --git a/browser/actors/ScreenshotsComponentChild.sys.mjs b/browser/actors/ScreenshotsComponentChild.sys.mjs index 06d7204803..b578dfe7fa 100644 --- a/browser/actors/ScreenshotsComponentChild.sys.mjs +++ b/browser/actors/ScreenshotsComponentChild.sys.mjs @@ -48,6 +48,11 @@ export class ScreenshotsComponentChild extends JSWindowActorChild { return this.removeEventListeners(); case "Screenshots:AddEventListeners": return this.addEventListeners(); + case "Screenshots:MoveFocusToContent": + return this.focusOverlay(); + case "Screenshots:ClearFocus": + Services.focus.clearFocus(this.contentWindow); + return null; } return null; } @@ -64,6 +69,7 @@ export class ScreenshotsComponentChild extends JSWindowActorChild { case "pointerup": case "keyup": case "keydown": + case "selectionchange": if (!this.overlay?.initialized) { return; } @@ -98,8 +104,8 @@ export class ScreenshotsComponentChild extends JSWindowActorChild { this.requestDownloadScreenshot(event.detail.region); break; case "Screenshots:OverlaySelection": { - let { hasSelection } = event.detail; - this.sendOverlaySelection({ hasSelection }); + let { hasSelection, overlayState } = event.detail; + this.sendOverlaySelection({ hasSelection, overlayState }); break; } case "Screenshots:RecordEvent": { @@ -108,10 +114,13 @@ export class ScreenshotsComponentChild extends JSWindowActorChild { break; } case "Screenshots:ShowPanel": - this.showPanel(); + this.sendAsyncMessage("Screenshots:ShowPanel"); break; case "Screenshots:HidePanel": - this.hidePanel(); + this.sendAsyncMessage("Screenshots:HidePanel"); + break; + case "Screenshots:FocusPanel": + this.sendAsyncMessage("Screenshots:MoveFocusToParent", event.detail); break; } } @@ -150,14 +159,6 @@ export class ScreenshotsComponentChild extends JSWindowActorChild { this.endScreenshotsOverlay({ doNotResetMethods: true }); } - showPanel() { - this.sendAsyncMessage("Screenshots:ShowPanel"); - } - - hidePanel() { - this.sendAsyncMessage("Screenshots:HidePanel"); - } - getDocumentTitle() { return this.document.title; } @@ -172,6 +173,11 @@ export class ScreenshotsComponentChild extends JSWindowActorChild { return methodsUsed; } + focusOverlay() { + this.contentWindow.focus(); + this.#overlay.focus(); + } + /** * Resolves when the document is ready to have an overlay injected into it. * @@ -220,6 +226,7 @@ export class ScreenshotsComponentChild extends JSWindowActorChild { for (let event of ScreenshotsComponentChild.OVERLAY_EVENTS) { chromeEventHandler.addEventListener(event, this, true); } + this.document.addEventListener("selectionchange", this); } /** @@ -257,6 +264,7 @@ export class ScreenshotsComponentChild extends JSWindowActorChild { for (let event of ScreenshotsComponentChild.OVERLAY_EVENTS) { chromeEventHandler.removeEventListener(event, this, true); } + this.document.removeEventListener("selectionchange", this); } /** @@ -308,8 +316,8 @@ export class ScreenshotsComponentChild extends JSWindowActorChild { let rect = { left: scrollMinX, top: scrollMinY, - right: scrollWidth, - bottom: scrollHeight, + right: scrollMinX + scrollWidth, + bottom: scrollMinY + scrollHeight, width: scrollWidth, height: scrollHeight, devicePixelRatio, @@ -341,13 +349,18 @@ export class ScreenshotsComponentChild extends JSWindowActorChild { * The height of the content window. */ getVisibleBounds() { - let { scrollX, scrollY, clientWidth, clientHeight, devicePixelRatio } = - this.#overlay.windowDimensions.dimensions; + let { + pageScrollX, + pageScrollY, + clientWidth, + clientHeight, + devicePixelRatio, + } = this.#overlay.windowDimensions.dimensions; let rect = { - left: scrollX, - top: scrollY, - right: scrollX + clientWidth, - bottom: scrollY + clientHeight, + left: pageScrollX, + top: pageScrollY, + right: pageScrollX + clientWidth, + bottom: pageScrollY + clientHeight, width: clientWidth, height: clientHeight, devicePixelRatio, -- cgit v1.2.3