Bug 1957680 - Trigger a fake scrollend event in case it hasn't been triggered by the browser in the pdf viewer a=RyanVM

Differential Revision: https://phabricator.services.mozilla.com/D262320
This commit is contained in:
Calixte Denizet
2025-08-25 19:49:08 +00:00
committed by rvandermeulen@mozilla.com
parent 64d0b99892
commit 2782b9db1d
2 changed files with 40 additions and 30 deletions

View File

@@ -9990,27 +9990,32 @@ const PDFViewerApplication = {
}, {
signal
});
let scrollendTimeoutID, scrollAbortController;
const scrollend = () => {
this._isScrolling = false;
mainContainer.addEventListener("scroll", scroll, {
passive: true,
signal
});
mainContainer.removeEventListener("scrollend", scrollend);
mainContainer.removeEventListener("blur", scrollend);
clearTimeout(scrollendTimeoutID);
if (this._isScrolling) {
scrollAbortController.abort();
scrollAbortController = null;
this._isScrolling = false;
}
};
const scroll = () => {
if (this._isCtrlKeyDown) {
return;
}
mainContainer.removeEventListener("scroll", scroll);
this._isScrolling = true;
mainContainer.addEventListener("scrollend", scrollend, {
signal
});
mainContainer.addEventListener("blur", scrollend, {
signal
});
if (!this._isScrolling) {
scrollAbortController = new AbortController();
const abortSignal = AbortSignal.any([scrollAbortController.signal, signal]);
mainContainer.addEventListener("scrollend", scrollend, {
signal: abortSignal,
});
mainContainer.addEventListener("blur", scrollend, {
signal: abortSignal,
});
this._isScrolling = true;
}
clearTimeout(scrollendTimeoutID);
scrollendTimeoutID = setTimeout(scrollend, 100);
};
mainContainer.addEventListener("scroll", scroll, {
passive: true,

View File

@@ -14630,27 +14630,32 @@ const PDFViewerApplication = {
}, {
signal
});
let scrollendTimeoutID, scrollAbortController;
const scrollend = () => {
this._isScrolling = false;
mainContainer.addEventListener("scroll", scroll, {
passive: true,
signal
});
mainContainer.removeEventListener("scrollend", scrollend);
mainContainer.removeEventListener("blur", scrollend);
clearTimeout(scrollendTimeoutID);
if (this._isScrolling) {
scrollAbortController.abort();
scrollAbortController = null;
this._isScrolling = false;
}
};
const scroll = () => {
if (this._isCtrlKeyDown) {
return;
}
mainContainer.removeEventListener("scroll", scroll);
this._isScrolling = true;
mainContainer.addEventListener("scrollend", scrollend, {
signal
});
mainContainer.addEventListener("blur", scrollend, {
signal
});
if (!this._isScrolling) {
scrollAbortController = new AbortController();
const abortSignal = AbortSignal.any([scrollAbortController.signal, signal]);
mainContainer.addEventListener("scrollend", scrollend, {
signal: abortSignal,
});
mainContainer.addEventListener("blur", scrollend, {
signal: abortSignal,
});
this._isScrolling = true;
}
clearTimeout(scrollendTimeoutID);
scrollendTimeoutID = setTimeout(scrollend, 100);
};
mainContainer.addEventListener("scroll", scroll, {
passive: true,