Fix citation dialog being moved to the wrong location sometimes

This commit is contained in:
Adomas Venčkauskas 2023-09-21 10:26:02 +03:00
parent 98c1a6ca1b
commit f8c3a3a31e
2 changed files with 18 additions and 11 deletions

View file

@ -73,15 +73,19 @@ var Zotero_Citation_Dialog = new function () {
*/
this.load = Zotero.Promise.coroutine(function* () {
// make sure we are visible
window.setTimeout(function() {
var screenX = window.screenX;
var screenY = window.screenY;
var xRange = [window.screen.availLeft, window.screen.width-window.outerWidth];
var yRange = [window.screen.availTop, window.screen.height-window.outerHeight];
window.setTimeout(async function () {
let screenX = window.screenX, screenY = window.screenY, i = 5;
while (!screenX && i--) {
await new Promise(resolve => window.requestAnimationFrame(resolve));
screenX = window.screenX;
screenY = window.screenY;
}
var xRange = [window.screen.availLeft, window.screen.left + window.screen.width - window.outerWidth];
var yRange = [window.screen.availTop, window.screen.top + window.screen.height - window.outerHeight];
if(screenX < xRange[0] || screenX > xRange[1] || screenY < yRange[0] || screenY > yRange[1]) {
var targetX = Math.max(Math.min(screenX, xRange[1]), xRange[0]);
var targetY = Math.max(Math.min(screenY, yRange[1]), yRange[0]);
Zotero.debug("Moving window to "+targetX+", "+targetY);
Zotero.debug(`Moving window to ${targetX}, ${targetY}`);
window.moveTo(targetX, targetY);
}
}, 0);

View file

@ -157,12 +157,15 @@ var Zotero_QuickFormat = new function () {
if (event.target !== document) return;
// make sure we are visible
let resizePromise = (async function () {
await Zotero.Promise.delay();
let screenX = window.screenX, screenY = window.screenY, i = 5;
while (!screenX && i--) {
await new Promise(resolve => window.requestAnimationFrame(resolve));
screenX = window.screenX;
screenY = window.screenY;
}
window.resizeTo(window.outerWidth, qfb.clientHeight);
var screenX = window.screenX;
var screenY = window.screenY;
var xRange = [window.screen.availLeft, window.screen.width - window.outerWidth];
var yRange = [window.screen.availTop, window.screen.height - window.outerHeight];
var xRange = [window.screen.availLeft, window.screen.left + window.screen.width - window.outerWidth];
var yRange = [window.screen.availTop, window.screen.top + window.screen.height - window.outerHeight];
if (screenX < xRange[0] || screenX > xRange[1] || screenY < yRange[0] || screenY > yRange[1]) {
var targetX = Math.max(Math.min(screenX, xRange[1]), xRange[0]);
var targetY = Math.max(Math.min(screenY, yRange[1]), yRange[0]);