mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 09:08:48 +01:00
aux window - reduce global access to window object
This commit is contained in:
committed by
Benjamin Pasero
parent
d1986ba985
commit
f355387613
@@ -959,6 +959,7 @@ class FocusTracker extends Disposable implements IFocusTracker {
|
||||
const activeElement = (shadowRoot ? shadowRoot.activeElement : element.ownerDocument.activeElement);
|
||||
return isAncestor(activeElement, element);
|
||||
} else {
|
||||
const window = element;
|
||||
return isAncestor(window.document.activeElement, window.document);
|
||||
}
|
||||
}
|
||||
@@ -1209,7 +1210,7 @@ export function domContentLoaded(): Promise<unknown> {
|
||||
* of 1.25, the cursor will be 2.5 screen pixels wide. Depending on how the dom node aligns/"snaps"
|
||||
* with the screen pixels, it will sometimes be rendered with 2 screen pixels, and sometimes with 3 screen pixels.
|
||||
*/
|
||||
export function computeScreenAwareSize(cssPx: number): number {
|
||||
export function computeScreenAwareSize(window: Window, cssPx: number): number {
|
||||
const screenPx = window.devicePixelRatio * cssPx;
|
||||
return Math.max(1, Math.floor(screenPx)) / window.devicePixelRatio;
|
||||
}
|
||||
@@ -1633,7 +1634,11 @@ export class ModifierKeyEmitter extends event.Emitter<IModifierKeyStatus> {
|
||||
metaKey: false
|
||||
};
|
||||
|
||||
this._subscriptions.add(addDisposableListener(window, 'keydown', e => {
|
||||
this._subscriptions.add(event.Event.runAndSubscribe(onDidRegisterWindow, ({ window, disposableStore }) => this.registerListeners(window, disposableStore), { window, disposableStore: this._subscriptions }));
|
||||
}
|
||||
|
||||
private registerListeners(window: Window, disposables: DisposableStore): void {
|
||||
disposables.add(addDisposableListener(window, 'keydown', e => {
|
||||
if (e.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
@@ -1670,7 +1675,7 @@ export class ModifierKeyEmitter extends event.Emitter<IModifierKeyStatus> {
|
||||
}
|
||||
}, true));
|
||||
|
||||
this._subscriptions.add(addDisposableListener(window, 'keyup', e => {
|
||||
disposables.add(addDisposableListener(window, 'keyup', e => {
|
||||
if (e.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
@@ -1702,21 +1707,21 @@ export class ModifierKeyEmitter extends event.Emitter<IModifierKeyStatus> {
|
||||
}
|
||||
}, true));
|
||||
|
||||
this._subscriptions.add(addDisposableListener(document.body, 'mousedown', () => {
|
||||
disposables.add(addDisposableListener(window.document.body, 'mousedown', () => {
|
||||
this._keyStatus.lastKeyPressed = undefined;
|
||||
}, true));
|
||||
|
||||
this._subscriptions.add(addDisposableListener(document.body, 'mouseup', () => {
|
||||
disposables.add(addDisposableListener(window.document.body, 'mouseup', () => {
|
||||
this._keyStatus.lastKeyPressed = undefined;
|
||||
}, true));
|
||||
|
||||
this._subscriptions.add(addDisposableListener(document.body, 'mousemove', e => {
|
||||
disposables.add(addDisposableListener(window.document.body, 'mousemove', e => {
|
||||
if (e.buttons) {
|
||||
this._keyStatus.lastKeyPressed = undefined;
|
||||
}
|
||||
}, true));
|
||||
|
||||
this._subscriptions.add(addDisposableListener(window, 'blur', () => {
|
||||
disposables.add(addDisposableListener(window, 'blur', () => {
|
||||
this.resetKeyStatus();
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ export class GlobalPointerMoveMonitor implements IDisposable {
|
||||
// DOMException: Failed to execute 'setPointerCapture' on 'Element':
|
||||
// No active pointer with the given id is found.
|
||||
// In case of failure, we bind the listeners on the window
|
||||
eventSource = window;
|
||||
eventSource = dom.getWindow(initialElement);
|
||||
}
|
||||
|
||||
this._hooks.add(dom.addDisposableListener(
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { $, addDisposableListener, clearNode, EventHelper, EventType, hide, isAncestor, show } from 'vs/base/browser/dom';
|
||||
import { $, addDisposableListener, clearNode, EventHelper, EventType, getWindow, hide, isAncestor, show } from 'vs/base/browser/dom';
|
||||
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
|
||||
import { ButtonBar, ButtonWithDescription, IButtonStyles } from 'vs/base/browser/ui/button/button';
|
||||
@@ -198,7 +198,8 @@ export class Dialog extends Disposable {
|
||||
}
|
||||
|
||||
async show(): Promise<IDialogResult> {
|
||||
this.focusToReturn = document.activeElement as HTMLElement;
|
||||
const window = getWindow(this.container);
|
||||
this.focusToReturn = window.document.activeElement as HTMLElement;
|
||||
|
||||
return new Promise<IDialogResult>((resolve) => {
|
||||
clearNode(this.buttonsContainer);
|
||||
@@ -472,7 +473,7 @@ export class Dialog extends Disposable {
|
||||
this.modalElement = undefined;
|
||||
}
|
||||
|
||||
if (this.focusToReturn && isAncestor(this.focusToReturn, document.body)) {
|
||||
if (this.focusToReturn && isAncestor(this.focusToReturn, getWindow(this.container).document.body)) {
|
||||
this.focusToReturn.focus();
|
||||
this.focusToReturn = undefined;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import { isFirefox } from 'vs/base/browser/browser';
|
||||
import { EventType as TouchEventType, Gesture } from 'vs/base/browser/touch';
|
||||
import { $, addDisposableListener, append, clearNode, createStyleSheet, Dimension, EventHelper, EventLike, EventType, getActiveElement, IDomNodePagePosition, isAncestor, isInShadowDOM } from 'vs/base/browser/dom';
|
||||
import { $, addDisposableListener, append, clearNode, createStyleSheet, Dimension, EventHelper, EventLike, EventType, getActiveElement, getWindow, IDomNodePagePosition, isAncestor, isInShadowDOM } from 'vs/base/browser/dom';
|
||||
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||
import { StandardMouseEvent } from 'vs/base/browser/mouseEvent';
|
||||
import { ActionBar, ActionsOrientation, IActionViewItemProvider } from 'vs/base/browser/ui/actionbar/actionbar';
|
||||
@@ -259,6 +259,7 @@ export class Menu extends ActionBar {
|
||||
e.preventDefault();
|
||||
}));
|
||||
|
||||
const window = getWindow(container);
|
||||
menuElement.style.maxHeight = `${Math.max(10, window.innerHeight - container.getBoundingClientRect().top - 35)}px`;
|
||||
|
||||
actions = actions.filter(a => {
|
||||
@@ -899,6 +900,7 @@ class SubmenuMenuActionViewItem extends BaseMenuActionViewItem {
|
||||
|
||||
const viewBox = this.submenuContainer.getBoundingClientRect();
|
||||
|
||||
const window = getWindow(this.element);
|
||||
const { top, left } = this.calculateSubmenuMenuLayout(new Dimension(window.innerWidth, window.innerHeight), Dimension.lift(viewBox), entryBoxUpdated, this.expandDirection);
|
||||
// subtract offsets caused by transform parent
|
||||
this.submenuContainer.style.left = `${left - viewBox.left}px`;
|
||||
|
||||
@@ -145,6 +145,7 @@ export class MenuBar extends Disposable {
|
||||
}
|
||||
}));
|
||||
|
||||
const window = DOM.getWindow(this.container);
|
||||
this._register(DOM.addDisposableListener(window, DOM.EventType.MOUSE_DOWN, () => {
|
||||
// This mouse event is outside the menubar so it counts as a focus out
|
||||
if (this.isFocused) {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { $, append, createStyleSheet, EventHelper, EventLike } from 'vs/base/browser/dom';
|
||||
import { $, append, createStyleSheet, EventHelper, EventLike, getWindow } from 'vs/base/browser/dom';
|
||||
import { DomEmitter } from 'vs/base/browser/event';
|
||||
import { EventType, Gesture } from 'vs/base/browser/touch';
|
||||
import { Delayer } from 'vs/base/common/async';
|
||||
@@ -175,14 +175,16 @@ class MouseEventFactory implements IPointerEventFactory {
|
||||
|
||||
private readonly disposables = new DisposableStore();
|
||||
|
||||
constructor(private el: HTMLElement) { }
|
||||
|
||||
@memoize
|
||||
get onPointerMove(): Event<PointerEvent> {
|
||||
return this.disposables.add(new DomEmitter(window, 'mousemove')).event;
|
||||
return this.disposables.add(new DomEmitter(getWindow(this.el), 'mousemove')).event;
|
||||
}
|
||||
|
||||
@memoize
|
||||
get onPointerUp(): Event<PointerEvent> {
|
||||
return this.disposables.add(new DomEmitter(window, 'mouseup')).event;
|
||||
return this.disposables.add(new DomEmitter(getWindow(this.el), 'mouseup')).event;
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
@@ -425,7 +427,7 @@ export class Sash extends Disposable {
|
||||
}
|
||||
|
||||
const onMouseDown = this._register(new DomEmitter(this.el, 'mousedown')).event;
|
||||
this._register(onMouseDown(e => this.onPointerStart(e, new MouseEventFactory()), this));
|
||||
this._register(onMouseDown(e => this.onPointerStart(e, new MouseEventFactory(container)), this));
|
||||
const onMouseDoubleClick = this._register(new DomEmitter(this.el, 'dblclick')).event;
|
||||
this._register(onMouseDoubleClick(this.onPointerDoublePress, this));
|
||||
const onMouseEnter = this._register(new DomEmitter(this.el, 'mouseenter')).event;
|
||||
|
||||
@@ -87,7 +87,7 @@ export class MouseWheelClassifier {
|
||||
}
|
||||
|
||||
public acceptStandardWheelEvent(e: StandardWheelEvent): void {
|
||||
const osZoomFactor = window.devicePixelRatio / getZoomFactor();
|
||||
const osZoomFactor = dom.getWindow(e.browserEvent).devicePixelRatio / getZoomFactor();
|
||||
if (platform.isWindows || platform.isLinux) {
|
||||
// On Windows and Linux, the incoming delta events are multiplied with the OS zoom factor.
|
||||
// The OS zoom factor can be reverse engineered by using the device pixel ratio and the configured zoom factor into account.
|
||||
|
||||
@@ -545,6 +545,7 @@ export class SelectBoxList extends Disposable implements ISelectBoxDelegate, ILi
|
||||
// Make visible to enable measurements
|
||||
this.selectDropDownContainer.classList.add('visible');
|
||||
|
||||
const window = dom.getWindow(this.selectElement);
|
||||
const selectPosition = dom.getDomNodePagePosition(this.selectElement);
|
||||
const styles = getComputedStyle(this.selectElement);
|
||||
const verticalPadding = parseFloat(styles.getPropertyValue('--dropdown-padding-top')) + parseFloat(styles.getPropertyValue('--dropdown-padding-bottom'));
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IDragAndDropData } from 'vs/base/browser/dnd';
|
||||
import { $, append, clearNode, createStyleSheet, h, hasParentWithClass } from 'vs/base/browser/dom';
|
||||
import { $, append, clearNode, createStyleSheet, getWindow, h, hasParentWithClass } from 'vs/base/browser/dom';
|
||||
import { DomEmitter } from 'vs/base/browser/event';
|
||||
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
|
||||
@@ -861,8 +861,8 @@ class FindWidget<T, TFilterData> extends Disposable {
|
||||
|
||||
this._register(onGrabMouseDown.event(e => {
|
||||
const disposables = new DisposableStore();
|
||||
const onWindowMouseMove = disposables.add(new DomEmitter(window, 'mousemove'));
|
||||
const onWindowMouseUp = disposables.add(new DomEmitter(window, 'mouseup'));
|
||||
const onWindowMouseMove = disposables.add(new DomEmitter(getWindow(e), 'mousemove'));
|
||||
const onWindowMouseUp = disposables.add(new DomEmitter(getWindow(e), 'mouseup'));
|
||||
|
||||
const startRight = this.right;
|
||||
const startX = e.pageX;
|
||||
|
||||
@@ -615,8 +615,10 @@ export namespace Event {
|
||||
* runAndSubscribe(dataChangeEvent, () => this._updateUI());
|
||||
* ```
|
||||
*/
|
||||
export function runAndSubscribe<T>(event: Event<T>, handler: (e: T | undefined) => any): IDisposable {
|
||||
handler(undefined);
|
||||
export function runAndSubscribe<T>(event: Event<T>, handler: (e: T) => any, initial: T): IDisposable;
|
||||
export function runAndSubscribe<T>(event: Event<T>, handler: (e: T | undefined) => any): IDisposable;
|
||||
export function runAndSubscribe<T>(event: Event<T>, handler: (e: T | undefined) => any, initial?: T): IDisposable {
|
||||
handler(initial);
|
||||
return event(e => handler(e));
|
||||
}
|
||||
|
||||
|
||||
@@ -146,15 +146,16 @@ export class ViewCursor {
|
||||
return null;
|
||||
}
|
||||
|
||||
const window = dom.getWindow(this._domNode);
|
||||
let width: number;
|
||||
if (this._cursorStyle === TextEditorCursorStyle.Line) {
|
||||
width = dom.computeScreenAwareSize(this._lineCursorWidth > 0 ? this._lineCursorWidth : 2);
|
||||
width = dom.computeScreenAwareSize(window, this._lineCursorWidth > 0 ? this._lineCursorWidth : 2);
|
||||
if (width > 2) {
|
||||
textContent = nextGrapheme;
|
||||
textContentClassName = this._getTokenClassName(position);
|
||||
}
|
||||
} else {
|
||||
width = dom.computeScreenAwareSize(1);
|
||||
width = dom.computeScreenAwareSize(window, 1);
|
||||
}
|
||||
|
||||
let left = visibleRange.left;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { $, addDisposableListener, h, reset } from 'vs/base/browser/dom';
|
||||
import { $, addDisposableListener, getWindow, h, reset } from 'vs/base/browser/dom';
|
||||
import { renderIcon, renderLabelWithIcons } from 'vs/base/browser/ui/iconLabel/iconLabels';
|
||||
import { compareBy, numberComparator, reverseOrder } from 'vs/base/common/arrays';
|
||||
import { Codicon } from 'vs/base/common/codicons';
|
||||
@@ -306,6 +306,7 @@ class CollapsedCodeOverlayWidget extends ViewZoneOverlayWidget {
|
||||
const cur = this._unchangedRegion.visibleLineCountTop.get();
|
||||
this._unchangedRegion.isDragged.set(true, undefined);
|
||||
|
||||
const window = getWindow(this._nodes.top);
|
||||
|
||||
const mouseMoveListener = addDisposableListener(window, 'mousemove', e => {
|
||||
const currentTop = e.clientY;
|
||||
@@ -340,6 +341,8 @@ class CollapsedCodeOverlayWidget extends ViewZoneOverlayWidget {
|
||||
const cur = this._unchangedRegion.visibleLineCountBottom.get();
|
||||
this._unchangedRegion.isDragged.set(true, undefined);
|
||||
|
||||
const window = getWindow(this._nodes.bottom);
|
||||
|
||||
const mouseMoveListener = addDisposableListener(window, 'mousemove', e => {
|
||||
const currentTop = e.clientY;
|
||||
const delta = currentTop - startTop;
|
||||
|
||||
@@ -101,6 +101,7 @@ export class TestCodeEditor extends CodeEditorWidget implements ICodeEditor {
|
||||
class TestEditorDomElement {
|
||||
parentElement: IContextKeyServiceTarget | null = null;
|
||||
ownerDocument = document;
|
||||
document = document;
|
||||
setAttribute(attr: string, value: string): void { }
|
||||
removeAttribute(attr: string): void { }
|
||||
hasAttribute(attr: string): boolean { return false; }
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IContextMenuDelegate } from 'vs/base/browser/contextmenu';
|
||||
import { $, addDisposableListener, EventType, getActiveElement, isAncestor } from 'vs/base/browser/dom';
|
||||
import { $, addDisposableListener, EventType, getActiveElement, getWindow, isAncestor } from 'vs/base/browser/dom';
|
||||
import { StandardMouseEvent } from 'vs/base/browser/mouseEvent';
|
||||
import { Menu } from 'vs/base/browser/ui/menu/menu';
|
||||
import { ActionRunner, IRunEvent, WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from 'vs/base/common/actions';
|
||||
@@ -95,6 +95,7 @@ export class ContextMenuHandler {
|
||||
|
||||
menu.onDidCancel(() => this.contextViewService.hideContextView(true), null, menuDisposables);
|
||||
menu.onDidBlur(() => this.contextViewService.hideContextView(true), null, menuDisposables);
|
||||
const window = getWindow(container);
|
||||
menuDisposables.add(addDisposableListener(window, EventType.BLUR, () => this.contextViewService.hideContextView(true)));
|
||||
menuDisposables.add(addDisposableListener(window, EventType.MOUSE_DOWN, (e: MouseEvent) => {
|
||||
if (e.defaultPrevented) {
|
||||
|
||||
@@ -12,7 +12,7 @@ import { ProgressBar } from 'vs/base/browser/ui/progressbar/progressbar';
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { Emitter, Event } from 'vs/base/common/event';
|
||||
import { KeyCode } from 'vs/base/common/keyCodes';
|
||||
import { Disposable, dispose } from 'vs/base/common/lifecycle';
|
||||
import { Disposable, DisposableStore, dispose } from 'vs/base/common/lifecycle';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import { isString } from 'vs/base/common/types';
|
||||
import { localize } from 'vs/nls';
|
||||
@@ -58,17 +58,18 @@ export class QuickInputController extends Disposable {
|
||||
this.idPrefix = options.idPrefix;
|
||||
this.parentElement = options.container;
|
||||
this.styles = options.styles;
|
||||
this.registerKeyModsListeners();
|
||||
this._register(Event.runAndSubscribe(dom.onDidRegisterWindow, ({ window, disposableStore }) => this.registerKeyModsListeners(window, disposableStore), { window, disposableStore: this._store }));
|
||||
}
|
||||
|
||||
private registerKeyModsListeners() {
|
||||
private registerKeyModsListeners(window: Window, disposables: DisposableStore): void {
|
||||
const listener = (e: KeyboardEvent | MouseEvent) => {
|
||||
this.keyMods.ctrlCmd = e.ctrlKey || e.metaKey;
|
||||
this.keyMods.alt = e.altKey;
|
||||
};
|
||||
this._register(dom.addDisposableListener(window, dom.EventType.KEY_DOWN, listener, true));
|
||||
this._register(dom.addDisposableListener(window, dom.EventType.KEY_UP, listener, true));
|
||||
this._register(dom.addDisposableListener(window, dom.EventType.MOUSE_DOWN, listener, true));
|
||||
|
||||
for (const event of [dom.EventType.KEY_DOWN, dom.EventType.KEY_UP, dom.EventType.MOUSE_DOWN]) {
|
||||
disposables.add(dom.addDisposableListener(window, event, listener, true));
|
||||
}
|
||||
}
|
||||
|
||||
private getUI() {
|
||||
|
||||
@@ -84,7 +84,7 @@ export class WorkspacesManagementMainService extends Disposable implements IWork
|
||||
|
||||
// Resolve untitled workspaces
|
||||
try {
|
||||
const untitledWorkspacePaths = (await Promises.readdir(this.untitledWorkspacesHome.with({ scheme: Schemas.file }).fsPath)).map(folder => joinPath(this.untitledWorkspacesHome, folder, UNTITLED_WORKSPACE_NAME));//
|
||||
const untitledWorkspacePaths = (await Promises.readdir(this.untitledWorkspacesHome.with({ scheme: Schemas.file }).fsPath)).map(folder => joinPath(this.untitledWorkspacesHome, folder, UNTITLED_WORKSPACE_NAME));
|
||||
for (const untitledWorkspacePath of untitledWorkspacePaths) {
|
||||
const workspace = getWorkspaceIdentifier(untitledWorkspacePath);
|
||||
const resolvedWorkspace = await this.resolveLocalWorkspace(untitledWorkspacePath);
|
||||
|
||||
@@ -9,7 +9,7 @@ import { IContextKeyService, IContextKey, setConstant as setConstantContextKey }
|
||||
import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from 'vs/platform/contextkey/common/contextkeys';
|
||||
import { SplitEditorsVertically, InEditorZenModeContext, ActiveEditorCanRevertContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, ActiveEditorContext, EditorsVisibleContext, TextCompareEditorVisibleContext, TextCompareEditorActiveContext, ActiveEditorGroupEmptyContext, MultipleEditorGroupsContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsCenteredLayoutContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorReadonlyContext, EditorAreaVisibleContext, ActiveEditorAvailableEditorIdsContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, ActiveEditorCanToggleReadonlyContext, applyAvailableEditorIds, TitleBarVisibleContext } from 'vs/workbench/common/contextkeys';
|
||||
import { TEXT_DIFF_EDITOR_ID, EditorInputCapabilities, SIDE_BY_SIDE_EDITOR_ID, EditorResourceAccessor, SideBySideEditor } from 'vs/workbench/common/editor';
|
||||
import { trackFocus, addDisposableListener, EventType } from 'vs/base/browser/dom';
|
||||
import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow } from 'vs/base/browser/dom';
|
||||
import { preferredSideBySideGroupDirection, GroupDirection, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
||||
@@ -235,7 +235,7 @@ export class WorkbenchContextKeysHandler extends Disposable {
|
||||
|
||||
this._register(this.editorGroupService.onDidChangeEditorPartOptions(() => this.updateEditorAreaContextKeys()));
|
||||
|
||||
this._register(addDisposableListener(window, EventType.FOCUS_IN, () => this.updateInputContextKeys(), true));
|
||||
this._register(Event.runAndSubscribe(onDidRegisterWindow, ({ window, disposableStore }) => disposableStore.add(addDisposableListener(window, EventType.FOCUS_IN, () => this.updateInputContextKeys(), true)), { window, disposableStore: this._store }));
|
||||
|
||||
this._register(this.contextService.onDidChangeWorkbenchState(() => this.updateWorkbenchStateContextKey()));
|
||||
this._register(this.contextService.onDidChangeWorkspaceFolders(() => {
|
||||
|
||||
@@ -1460,8 +1460,8 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi
|
||||
}
|
||||
|
||||
resizePart(part: Parts, sizeChangeWidth: number, sizeChangeHeight: number): void {
|
||||
const sizeChangePxWidth = Math.sign(sizeChangeWidth) * computeScreenAwareSize(Math.abs(sizeChangeWidth));
|
||||
const sizeChangePxHeight = Math.sign(sizeChangeHeight) * computeScreenAwareSize(Math.abs(sizeChangeHeight));
|
||||
const sizeChangePxWidth = Math.sign(sizeChangeWidth) * computeScreenAwareSize(window, Math.abs(sizeChangeWidth));
|
||||
const sizeChangePxHeight = Math.sign(sizeChangeHeight) * computeScreenAwareSize(window, Math.abs(sizeChangeHeight));
|
||||
|
||||
let viewSize: IViewSize;
|
||||
|
||||
|
||||
@@ -442,6 +442,7 @@ export class BreadcrumbsControl {
|
||||
},
|
||||
getAnchor: () => {
|
||||
if (!pickerAnchor) {
|
||||
const window = dom.getWindow(this.domNode);
|
||||
const maxInnerWidth = window.innerWidth - 8 /*a little less the full widget*/;
|
||||
let maxHeight = Math.min(window.innerHeight * 0.7, 300);
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import 'vs/css!./media/editordroptarget';
|
||||
import { DataTransfers } from 'vs/base/browser/dnd';
|
||||
import { addDisposableListener, DragAndDropObserver, EventHelper, EventType, isAncestor } from 'vs/base/browser/dom';
|
||||
import { addDisposableListener, DragAndDropObserver, EventHelper, EventType, getWindow, isAncestor } from 'vs/base/browser/dom';
|
||||
import { renderFormattedText } from 'vs/base/browser/formattedTextRenderer';
|
||||
import { RunOnceScheduler } from 'vs/base/common/async';
|
||||
import { toDisposable } from 'vs/base/common/lifecycle';
|
||||
@@ -601,7 +601,9 @@ export class EditorDropTarget extends Themable {
|
||||
private registerListeners(): void {
|
||||
this._register(addDisposableListener(this.container, EventType.DRAG_ENTER, e => this.onDragEnter(e)));
|
||||
this._register(addDisposableListener(this.container, EventType.DRAG_LEAVE, () => this.onDragLeave()));
|
||||
[this.container, window].forEach(node => this._register(addDisposableListener(node as HTMLElement, EventType.DRAG_END, () => this.onDragEnd())));
|
||||
for (const target of [this.container, getWindow(this.container)]) {
|
||||
this._register(addDisposableListener(target, EventType.DRAG_END, () => this.onDragEnd()));
|
||||
}
|
||||
}
|
||||
|
||||
private onDragEnter(event: DragEvent): void {
|
||||
|
||||
@@ -129,6 +129,7 @@ class NativeContextMenuService extends Disposable implements IContextMenuService
|
||||
}
|
||||
|
||||
if (!isMacintosh) {
|
||||
const window = dom.getWindow(anchor);
|
||||
const availableHeightForMenu = window.screen.height - y;
|
||||
if (availableHeightForMenu < actions.length * (isWindows ? 45 : 32) /* guess of 1 menu item height */) {
|
||||
// this is a guess to detect whether the context menu would
|
||||
|
||||
@@ -238,10 +238,7 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
|
||||
this.updateKeybindingsJsonSchema();
|
||||
this._register(extensionService.onDidRegisterExtensions(() => this.updateKeybindingsJsonSchema()));
|
||||
|
||||
this._register(this._registerKeyListeners(window));
|
||||
this._register(dom.onDidRegisterWindow(({ window, disposableStore }) => {
|
||||
disposableStore.add(this._registerKeyListeners(window));
|
||||
}));
|
||||
this._register(Event.runAndSubscribe(dom.onDidRegisterWindow, ({ window, disposableStore }) => disposableStore.add(this._registerKeyListeners(window)), { window, disposableStore: this._store }));
|
||||
|
||||
this._register(browser.onDidChangeFullscreen(() => {
|
||||
const keyboard: IKeyboard | null = (<INavigatorWithKeyboard>navigator).keyboard;
|
||||
|
||||
Reference in New Issue
Block a user