Revert "Merge from vscode 81d7885dc2e9dc617e1522697a2966bc4025a45d (#5949)" (#5983)

This reverts commit d15a3fcc98.
This commit is contained in:
Karl Burtram
2019-06-11 12:35:58 -07:00
committed by GitHub
parent 95a50b7892
commit 5a7562a37b
926 changed files with 11394 additions and 19540 deletions

View File

@@ -6,7 +6,7 @@
import * as dom from 'vs/base/browser/dom';
import { IframeUtils } from 'vs/base/browser/iframe';
import { StandardMouseEvent } from 'vs/base/browser/mouseEvent';
import { IDisposable, DisposableStore } from 'vs/base/common/lifecycle';
import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle';
export interface IStandardMouseMoveEventData {
leftButton: boolean;
@@ -36,16 +36,24 @@ export function standardMouseMoveMerger(lastEvent: IStandardMouseMoveEventData,
};
}
export class GlobalMouseMoveMonitor<R> implements IDisposable {
export class GlobalMouseMoveMonitor<R> extends Disposable {
private readonly hooks = new DisposableStore();
private mouseMoveEventMerger: IEventMerger<R> | null = null;
private mouseMoveCallback: IMouseMoveCallback<R> | null = null;
private onStopCallback: IOnStopCallback | null = null;
private hooks: IDisposable[];
private mouseMoveEventMerger: IEventMerger<R> | null;
private mouseMoveCallback: IMouseMoveCallback<R> | null;
private onStopCallback: IOnStopCallback | null;
constructor() {
super();
this.hooks = [];
this.mouseMoveEventMerger = null;
this.mouseMoveCallback = null;
this.onStopCallback = null;
}
public dispose(): void {
this.stopMonitoring(false);
this.hooks.dispose();
super.dispose();
}
public stopMonitoring(invokeStopCallback: boolean): void {
@@ -55,10 +63,10 @@ export class GlobalMouseMoveMonitor<R> implements IDisposable {
}
// Unhook
this.hooks.clear();
this.hooks = dispose(this.hooks);
this.mouseMoveEventMerger = null;
this.mouseMoveCallback = null;
const onStopCallback = this.onStopCallback;
let onStopCallback = this.onStopCallback;
this.onStopCallback = null;
if (invokeStopCallback && onStopCallback) {
@@ -66,8 +74,8 @@ export class GlobalMouseMoveMonitor<R> implements IDisposable {
}
}
public isMonitoring(): boolean {
return !!this.mouseMoveEventMerger;
public isMonitoring() {
return this.hooks.length > 0;
}
public startMonitoring(
@@ -85,32 +93,32 @@ export class GlobalMouseMoveMonitor<R> implements IDisposable {
let windowChain = IframeUtils.getSameOriginWindowChain();
for (const element of windowChain) {
this.hooks.add(dom.addDisposableThrottledListener(element.window.document, 'mousemove',
this.hooks.push(dom.addDisposableThrottledListener(element.window.document, 'mousemove',
(data: R) => this.mouseMoveCallback!(data),
(lastEvent: R, currentEvent) => this.mouseMoveEventMerger!(lastEvent, currentEvent as MouseEvent)
));
this.hooks.add(dom.addDisposableListener(element.window.document, 'mouseup', (e: MouseEvent) => this.stopMonitoring(true)));
this.hooks.push(dom.addDisposableListener(element.window.document, 'mouseup', (e: MouseEvent) => this.stopMonitoring(true)));
}
if (IframeUtils.hasDifferentOriginAncestor()) {
let lastSameOriginAncestor = windowChain[windowChain.length - 1];
// We might miss a mouse up if it happens outside the iframe
// This one is for Chrome
this.hooks.add(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseout', (browserEvent: MouseEvent) => {
this.hooks.push(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseout', (browserEvent: MouseEvent) => {
let e = new StandardMouseEvent(browserEvent);
if (e.target.tagName.toLowerCase() === 'html') {
this.stopMonitoring(true);
}
}));
// This one is for FF
this.hooks.add(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseover', (browserEvent: MouseEvent) => {
this.hooks.push(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseover', (browserEvent: MouseEvent) => {
let e = new StandardMouseEvent(browserEvent);
if (e.target.tagName.toLowerCase() === 'html') {
this.stopMonitoring(true);
}
}));
// This one is for IE
this.hooks.add(dom.addDisposableListener(lastSameOriginAncestor.window.document.body, 'mouseleave', (browserEvent: MouseEvent) => {
this.hooks.push(dom.addDisposableListener(lastSameOriginAncestor.window.document.body, 'mouseleave', (browserEvent: MouseEvent) => {
this.stopMonitoring(true);
}));
}