[Editor] Disable existing highlights when drawing a new one (bug 1879035)

When the mouse was hovering an existing highlight, all the text in the page
was selected.
So when the user is selecting some text or drawing a free highlight, the mouse
is disabled for the existing editors.
This commit is contained in:
Calixte Denizet 2024-07-11 16:18:50 +02:00
parent df5bc544df
commit 4e7c30da9a
4 changed files with 172 additions and 14 deletions

View file

@ -967,6 +967,19 @@ class AnnotationEditorUIManager {
: anchorNode;
}
#getLayerForTextLayer(textLayer) {
const { currentLayer } = this;
if (currentLayer.hasTextLayer(textLayer)) {
return currentLayer;
}
for (const layer of this.#allLayers.values()) {
if (layer.hasTextLayer(textLayer)) {
return layer;
}
}
return null;
}
highlightSelection(methodOfCreation = "") {
const selection = document.getSelection();
if (!selection || selection.isCollapsed) {
@ -988,19 +1001,17 @@ class AnnotationEditorUIManager {
});
this.showAllEditors("highlight", true, /* updateButton = */ true);
}
for (const layer of this.#allLayers.values()) {
if (layer.hasTextLayer(textLayer)) {
layer.createAndAddNewEditor({ x: 0, y: 0 }, false, {
methodOfCreation,
boxes,
anchorNode,
anchorOffset,
focusNode,
focusOffset,
text,
});
break;
}
const layer = this.#getLayerForTextLayer(textLayer);
if (layer) {
layer.createAndAddNewEditor({ x: 0, y: 0 }, false, {
methodOfCreation,
boxes,
anchorNode,
anchorOffset,
focusNode,
focusOffset,
text,
});
}
}
@ -1062,6 +1073,7 @@ class AnnotationEditorUIManager {
}
return;
}
this.#highlightToolbar?.hide();
this.#selectedTextNode = anchorNode;
this.#dispatchUpdateStates({
@ -1081,12 +1093,19 @@ class AnnotationEditorUIManager {
this.#highlightWhenShiftUp = this.isShiftKeyDown;
if (!this.isShiftKeyDown) {
const activeLayer =
this.#mode === AnnotationEditorType.HIGHLIGHT
? this.#getLayerForTextLayer(textLayer)
: null;
activeLayer?.toggleDrawing();
const signal = this._signal;
const pointerup = e => {
if (e.type === "pointerup" && e.button !== 0) {
// Do nothing on right click.
return;
}
activeLayer?.toggleDrawing(true);
window.removeEventListener("pointerup", pointerup);
window.removeEventListener("blur", pointerup);
if (e.type === "pointerup") {