commit ad8a8704d48e5326dcaf3e25397777b16df92467
parent 2143219d9ba2263f93a04e0311b8b4b218895321
Author: zorkow <volker.sorge@gmail.com>
Date: Mon, 31 Aug 2015 21:50:27 +0100
Fixes scroll position and involuntary mouse interaction.
Diffstat:
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/unpacked/extensions/MathMenu.js b/unpacked/extensions/MathMenu.js
@@ -341,9 +341,17 @@
}
menu.style.left = x+"px"; menu.style.top = y+"px";
-
if (document.selection && document.selection.empty) {document.selection.empty()}
+
+ // Focusing while keeping the scroll position.
+ var oldX = window.pageXOffset || document.documentElement.scrollLeft;
+ var oldY = window.pageYOffset || document.documentElement.scrollTop;
MENU.Focus(menu);
+ if (event.type === 'keydown') {
+ MENU.skipMouseoverFromKey = true;
+ setTimeout(function() {delete MENU.skipMouseoverFromKey;}, CONFIG.delay);
+ }
+ window.scrollTo(oldX, oldY);
return FALSE(event);
},
@@ -429,6 +437,10 @@
},
Event: function (event,menu,type,force) {
if (MENU.skipMouseover && type === "Mouseover" && !force) {return FALSE(event)}
+ if (MENU.skipMouseoverFromKey && type === "Mouseover") {
+ delete MENU.skipMouseoverFromKey;
+ return FALSE(event);
+ }
if (MENU.skipUp) {
if (type.match(/Mouseup|Touchend/)) {delete MENU.skipUp; return FALSE(event)}
if (type === "Touchstart" ||
@@ -797,7 +809,8 @@
},
Timer: function (event,menu) {
this.ClearTimer();
- event = {clientX: event.clientX, clientY: event.clientY}; // MSIE can't pass the event below
+ event = {type: event.type,
+ clientX: event.clientX, clientY: event.clientY}; // MSIE can't pass the event below
this.timer = setTimeout(CALLBACK(["Mouseup",this,event,menu]),CONFIG.delay);
},
ClearTimer: function() {
@@ -1115,7 +1128,6 @@
W = Math.max(100,Math.min(Math.floor(.5*screen.width),table.offsetWidth+W+25));
H = Math.max(40,Math.min(Math.floor(.5*screen.height),table.offsetHeight+H+25));
if (MENU.prototype.msieHeightBug) {H += 35}; // for title bar in XP
- console.log(W + ' ' + H);
w.resizeTo(W,H);
var X; try {X = event.screenX} catch (e) {}; // IE8 throws an error accessing screenX
if (event && X != null) {