Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/editor/browser/editor.ts
4777 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { addDisposableListener, EventHelper, EventType, getWindow } from '../../../base/browser/dom.js';
7
import { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js';
8
import { StandardMouseEvent } from '../../../base/browser/mouseEvent.js';
9
import { KeyCode, KeyMod } from '../../../base/common/keyCodes.js';
10
import { DisposableStore, IDisposable } from '../../../base/common/lifecycle.js';
11
import { isMacintosh } from '../../../base/common/platform.js';
12
import { IEditorOptions } from '../common/editor.js';
13
14
//#region Editor Open Event Listeners
15
16
export interface IOpenEditorOptions {
17
readonly editorOptions: IEditorOptions;
18
readonly openToSide: boolean;
19
}
20
21
export function registerOpenEditorListeners(element: HTMLElement, onOpenEditor: (options: IOpenEditorOptions) => void): IDisposable {
22
const disposables = new DisposableStore();
23
24
disposables.add(addDisposableListener(element, EventType.CLICK, e => {
25
if (e.detail === 2) {
26
return; // ignore double click as it is handled below
27
}
28
29
EventHelper.stop(e, true);
30
onOpenEditor(toOpenEditorOptions(new StandardMouseEvent(getWindow(element), e)));
31
}));
32
33
disposables.add(addDisposableListener(element, EventType.DBLCLICK, e => {
34
EventHelper.stop(e, true);
35
36
onOpenEditor(toOpenEditorOptions(new StandardMouseEvent(getWindow(element), e), true));
37
}));
38
39
disposables.add(addDisposableListener(element, EventType.KEY_DOWN, e => {
40
const options = toOpenEditorOptions(new StandardKeyboardEvent(e));
41
if (!options) {
42
return;
43
}
44
45
EventHelper.stop(e, true);
46
onOpenEditor(options);
47
}));
48
49
return disposables;
50
}
51
52
export function toOpenEditorOptions(event: StandardMouseEvent, isDoubleClick?: boolean): IOpenEditorOptions;
53
export function toOpenEditorOptions(event: StandardKeyboardEvent): IOpenEditorOptions | undefined;
54
export function toOpenEditorOptions(event: StandardMouseEvent | StandardKeyboardEvent): IOpenEditorOptions | undefined;
55
export function toOpenEditorOptions(event: StandardMouseEvent | StandardKeyboardEvent, isDoubleClick?: boolean): IOpenEditorOptions | undefined {
56
if (event instanceof StandardKeyboardEvent) {
57
let preserveFocus: boolean | undefined = undefined;
58
if (event.equals(KeyCode.Enter) || (isMacintosh && event.equals(KeyMod.CtrlCmd | KeyCode.DownArrow))) {
59
preserveFocus = false;
60
} else if (event.equals(KeyCode.Space)) {
61
preserveFocus = true;
62
}
63
64
if (typeof preserveFocus === 'undefined') {
65
return;
66
}
67
68
return { editorOptions: { preserveFocus, pinned: !preserveFocus }, openToSide: false };
69
} else {
70
return { editorOptions: { preserveFocus: !isDoubleClick, pinned: isDoubleClick || event.middleButton }, openToSide: event.ctrlKey || event.metaKey || event.altKey };
71
}
72
}
73
74
//#endregion
75
76