@codingame/monaco-vscode-views-service-override 1.82.6 → 1.83.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/index-no-csp.html +2 -1
- package/assets/index.html +3 -2
- package/package.json +4 -4
- package/views.js +1 -1
- package/vscode/src/vs/base/browser/ui/grid/gridview.js +31 -12
- package/vscode/src/vs/base/common/codicons.d.ts +1 -1
- package/vscode/src/vs/platform/actions/browser/toolbar.d.ts +7 -2
- package/vscode/src/vs/workbench/api/browser/viewsExtensionPoint.js +2 -1
- package/vscode/src/vs/workbench/browser/parts/activitybar/activitybarActions.js +26 -28
- package/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.d.ts +4 -2
- package/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.js +19 -8
- package/vscode/src/vs/workbench/browser/parts/activitybar/media/activityaction.css.js +1 -1
- package/vscode/src/vs/workbench/browser/parts/editor/breadcrumbsControl.js +44 -1
- package/vscode/src/vs/workbench/browser/parts/editor/editorDropTarget.js +18 -18
- package/vscode/src/vs/workbench/browser/parts/editor/editorGroupView.js +82 -91
- package/vscode/src/vs/workbench/browser/parts/editor/editorPart.js +15 -13
- package/vscode/src/vs/workbench/browser/parts/editor/{titleControl.js → editorTabsControl.js} +69 -87
- package/vscode/src/vs/workbench/browser/parts/editor/editorTitleControl.js +152 -0
- package/vscode/src/vs/workbench/browser/parts/editor/media/{titlecontrol.css.js → editortabscontrol.css.js} +1 -1
- package/vscode/src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css.js +6 -0
- package/vscode/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css.js +6 -0
- package/vscode/src/vs/workbench/browser/parts/editor/media/singleeditortabscontrol.css.js +6 -0
- package/vscode/src/vs/workbench/browser/parts/editor/{tabsTitleControl.js → multiEditorTabsControl.js} +265 -252
- package/vscode/src/vs/workbench/browser/parts/editor/multiRowEditorTabsControl.js +152 -0
- package/vscode/src/vs/workbench/browser/parts/editor/{noTabsTitleControl.js → singleEditorTabsControl.js} +39 -31
- package/vscode/src/vs/workbench/browser/parts/views/checkbox.js +1 -0
- package/vscode/src/vs/workbench/browser/parts/views/treeView.js +10 -13
- package/vscode/src/vs/workbench/common/editor/filteredEditorGroupModel.js +109 -0
- package/vscode/src/vs/workbench/contrib/customEditor/common/customEditorModelManager.js +2 -2
- package/vscode/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.js +1 -1
- package/vscode/src/vs/workbench/contrib/remote/browser/tunnelView.js +3 -3
- package/vscode/src/vs/workbench/contrib/webview/browser/themeing.js +2 -2
- package/vscode/src/vs/workbench/contrib/webview/browser/webviewElement.js +1 -1
- package/vscode/src/vs/workbench/services/history/browser/historyService.js +11 -0
- package/vscode/src/vs/workbench/services/userDataProfile/common/userDataProfileIcons.js +7 -0
- package/vscode/src/vs/workbench/services/views/browser/viewDescriptorService.js +15 -8
- package/vscode/src/vs/workbench/services/views/common/viewContainerModel.js +9 -14
- package/vscode/src/vs/workbench/browser/parts/editor/media/notabstitlecontrol.css.js +0 -6
- package/vscode/src/vs/workbench/browser/parts/editor/media/tabstitlecontrol.css.js +0 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
|
|
2
|
-
import './media/
|
|
2
|
+
import './media/multieditortabscontrol.css.js';
|
|
3
3
|
import { isWindows, isMacintosh } from 'monaco-editor/esm/vs/base/common/platform.js';
|
|
4
4
|
import { shorten } from 'monaco-editor/esm/vs/base/common/labels.js';
|
|
5
5
|
import { DEFAULT_EDITOR_ASSOCIATION, preventEditorClose, EditorCloseMethod, EditorResourceAccessor, SideBySideEditor } from 'vscode/vscode/vs/workbench/common/editor';
|
|
@@ -13,7 +13,7 @@ import { IInstantiationService } from 'monaco-editor/esm/vs/platform/instantiati
|
|
|
13
13
|
import { IKeybindingService } from 'monaco-editor/esm/vs/platform/keybinding/common/keybinding.js';
|
|
14
14
|
import { IContextKeyService } from 'monaco-editor/esm/vs/platform/contextkey/common/contextkey.js';
|
|
15
15
|
import { MenuId, IMenuService } from 'monaco-editor/esm/vs/platform/actions/common/actions.js';
|
|
16
|
-
import {
|
|
16
|
+
import { EditorTabsControl, EditorCommandsContextActionRunner } from './editorTabsControl.js';
|
|
17
17
|
import { IQuickInputService } from 'monaco-editor/esm/vs/platform/quickinput/common/quickInput.js';
|
|
18
18
|
import { MutableDisposable, DisposableStore, dispose, combinedDisposable, toDisposable } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
|
|
19
19
|
import { ScrollableElement } from 'monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollableElement.js';
|
|
@@ -27,9 +27,6 @@ import { IEditorGroupsService } from 'vscode/vscode/vs/workbench/services/editor
|
|
|
27
27
|
import { Dimension, addDisposableListener, EventType, EventHelper, DragAndDropObserver, clearNode, scheduleAtNextAnimationFrame, findParentWithClass } from 'monaco-editor/esm/vs/base/browser/dom.js';
|
|
28
28
|
import { localize } from 'monaco-editor/esm/vs/nls.js';
|
|
29
29
|
import { CloseOneEditorAction, UnpinEditorAction } from 'vscode/vscode/vs/workbench/browser/parts/editor/editorActions';
|
|
30
|
-
import { IConfigurationService } from 'monaco-editor/esm/vs/platform/configuration/common/configuration.js';
|
|
31
|
-
import { BreadcrumbsControl } from './breadcrumbsControl.js';
|
|
32
|
-
import { IFileService } from 'monaco-editor/esm/vs/platform/files/common/files.js';
|
|
33
30
|
import { assertAllDefined, assertIsDefined } from 'monaco-editor/esm/vs/base/common/types.js';
|
|
34
31
|
import { IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService';
|
|
35
32
|
import { basenameOrAuthority } from 'monaco-editor/esm/vs/base/common/resources.js';
|
|
@@ -46,10 +43,11 @@ import { StandardMouseEvent } from 'monaco-editor/esm/vs/base/browser/mouseEvent
|
|
|
46
43
|
import { ITreeViewsDnDService } from 'monaco-editor/esm/vs/editor/common/services/treeViewsDndService.js';
|
|
47
44
|
import { DraggedTreeItemsIdentifier } from 'monaco-editor/esm/vs/editor/common/services/treeViewsDnd.js';
|
|
48
45
|
import { IEditorResolverService } from 'vscode/vscode/vs/workbench/services/editor/common/editorResolverService';
|
|
46
|
+
import { UnstickyEditorGroupModel, StickyEditorGroupModel } from '../../../common/editor/filteredEditorGroupModel.js';
|
|
49
47
|
|
|
50
|
-
var
|
|
51
|
-
let
|
|
52
|
-
static {
|
|
48
|
+
var MultiEditorTabsControl_1;
|
|
49
|
+
let MultiEditorTabsControl = class MultiEditorTabsControl extends EditorTabsControl {
|
|
50
|
+
static { MultiEditorTabsControl_1 = this; }
|
|
53
51
|
static { this.SCROLLBAR_SIZES = {
|
|
54
52
|
default: 3,
|
|
55
53
|
large: 10
|
|
@@ -59,12 +57,11 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
59
57
|
shrink: 80,
|
|
60
58
|
fit: 120
|
|
61
59
|
}; }
|
|
62
|
-
static { this.TAB_HEIGHT = 35; }
|
|
63
60
|
static { this.DRAG_OVER_OPEN_TAB_THRESHOLD = 1500; }
|
|
64
61
|
static { this.MOUSE_WHEEL_EVENT_THRESHOLD = 150; }
|
|
65
62
|
static { this.MOUSE_WHEEL_DISTANCE_THRESHOLD = 1.5; }
|
|
66
|
-
constructor(parent,
|
|
67
|
-
super(parent,
|
|
63
|
+
constructor(parent, groupsView, groupView, tabsModel, contextMenuService, instantiationService, contextKeyService, keybindingService, notificationService, menuService, quickInputService, themeService, editorService, pathService, editorGroupService, treeViewsDragAndDropService, editorResolverService) {
|
|
64
|
+
super(parent, groupsView, groupView, tabsModel, contextMenuService, instantiationService, contextKeyService, keybindingService, notificationService, menuService, quickInputService, themeService, editorResolverService);
|
|
68
65
|
this.editorService = editorService;
|
|
69
66
|
this.pathService = pathService;
|
|
70
67
|
this.editorGroupService = editorGroupService;
|
|
@@ -88,6 +85,7 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
88
85
|
this._register(this.tabResourceLabels.onDidChangeDecorations(() => this.doHandleDecorationsChange()));
|
|
89
86
|
}
|
|
90
87
|
create(parent) {
|
|
88
|
+
super.create(parent);
|
|
91
89
|
this.titleContainer = parent;
|
|
92
90
|
this.tabsAndActionsContainer = document.createElement('div');
|
|
93
91
|
this.tabsAndActionsContainer.classList.add('tabs-and-actions-container');
|
|
@@ -106,10 +104,7 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
106
104
|
this.editorToolbarContainer.classList.add('editor-actions');
|
|
107
105
|
this.tabsAndActionsContainer.appendChild(this.editorToolbarContainer);
|
|
108
106
|
this.createEditorActionsToolBar(this.editorToolbarContainer);
|
|
109
|
-
|
|
110
|
-
breadcrumbsContainer.classList.add('tabs-breadcrumbs');
|
|
111
|
-
this.titleContainer.appendChild(breadcrumbsContainer);
|
|
112
|
-
this.createBreadcrumbsControl(breadcrumbsContainer, { showFileIcons: true, showSymbolIcons: true, showDecorationColors: false, showPlaceholder: true });
|
|
107
|
+
this.updateTabsControlVisibility();
|
|
113
108
|
}
|
|
114
109
|
createTabsScrollbar(scrollable) {
|
|
115
110
|
const tabsScrollbar = this._register(( new ScrollableElement(scrollable, {
|
|
@@ -134,7 +129,7 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
134
129
|
updateTabSizing(fromEvent) {
|
|
135
130
|
const [tabsContainer, tabSizingFixedDisposables] = assertAllDefined(this.tabsContainer, this.tabSizingFixedDisposables);
|
|
136
131
|
tabSizingFixedDisposables.clear();
|
|
137
|
-
const options = this.
|
|
132
|
+
const options = this.groupsView.partOptions;
|
|
138
133
|
if (options.tabSizing === 'fixed') {
|
|
139
134
|
tabsContainer.style.setProperty('--tab-sizing-fixed-min-width', `${options.tabSizingFixedMinWidth}px`);
|
|
140
135
|
tabsContainer.style.setProperty('--tab-sizing-fixed-max-width', `${options.tabSizingFixedMaxWidth}px`);
|
|
@@ -153,7 +148,7 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
153
148
|
}
|
|
154
149
|
}
|
|
155
150
|
updateTabsFixedWidth(fixed) {
|
|
156
|
-
this.forEachTab((editor,
|
|
151
|
+
this.forEachTab((editor, tabIndex, tabContainer) => {
|
|
157
152
|
if (fixed) {
|
|
158
153
|
const { width } = tabContainer.getBoundingClientRect();
|
|
159
154
|
tabContainer.style.setProperty('--tab-sizing-current-width', `${width}px`);
|
|
@@ -164,10 +159,10 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
164
159
|
});
|
|
165
160
|
}
|
|
166
161
|
getTabsScrollbarSizing() {
|
|
167
|
-
if (this.
|
|
168
|
-
return
|
|
162
|
+
if (this.groupsView.partOptions.titleScrollbarSizing !== 'large') {
|
|
163
|
+
return MultiEditorTabsControl_1.SCROLLBAR_SIZES.default;
|
|
169
164
|
}
|
|
170
|
-
return
|
|
165
|
+
return MultiEditorTabsControl_1.SCROLLBAR_SIZES.large;
|
|
171
166
|
}
|
|
172
167
|
registerTabsContainerListeners(tabsContainer, tabsScrollbar) {
|
|
173
168
|
this.enableGroupDragging(tabsContainer);
|
|
@@ -198,10 +193,10 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
198
193
|
resource: undefined,
|
|
199
194
|
options: {
|
|
200
195
|
pinned: true,
|
|
201
|
-
index: this.
|
|
196
|
+
index: this.groupView.count,
|
|
202
197
|
override: DEFAULT_EDITOR_ASSOCIATION.id
|
|
203
198
|
}
|
|
204
|
-
}, this.
|
|
199
|
+
}, this.groupView.id);
|
|
205
200
|
}));
|
|
206
201
|
}
|
|
207
202
|
this._register(addDisposableListener(tabsContainer, EventType.MOUSE_DOWN, e => {
|
|
@@ -228,7 +223,7 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
228
223
|
const data = this.editorTransfer.getData(DraggedEditorIdentifier.prototype);
|
|
229
224
|
if (Array.isArray(data)) {
|
|
230
225
|
const localDraggedEditor = data[0].identifier;
|
|
231
|
-
if (this.
|
|
226
|
+
if (this.groupView.id === localDraggedEditor.groupId && this.tabsModel.isLast(localDraggedEditor.editor)) {
|
|
232
227
|
if (e.dataTransfer) {
|
|
233
228
|
e.dataTransfer.dropEffect = 'none';
|
|
234
229
|
}
|
|
@@ -255,16 +250,17 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
255
250
|
this.updateDropFeedback(tabsContainer, false);
|
|
256
251
|
tabsContainer.classList.remove('scroll');
|
|
257
252
|
if (e.target === tabsContainer) {
|
|
258
|
-
this.
|
|
253
|
+
const isGroupTransfer = this.groupTransfer.hasData(DraggedEditorGroupIdentifier.prototype);
|
|
254
|
+
this.onDrop(e, isGroupTransfer ? this.groupView.count : this.tabsModel.count, tabsContainer);
|
|
259
255
|
}
|
|
260
256
|
}
|
|
261
257
|
})));
|
|
262
258
|
this._register(addDisposableListener(tabsContainer, EventType.MOUSE_WHEEL, (e) => {
|
|
263
|
-
const activeEditor = this.
|
|
264
|
-
if (!activeEditor || this.
|
|
259
|
+
const activeEditor = this.groupView.activeEditor;
|
|
260
|
+
if (!activeEditor || this.groupView.count < 2) {
|
|
265
261
|
return;
|
|
266
262
|
}
|
|
267
|
-
if (this.
|
|
263
|
+
if (this.groupsView.partOptions.scrollToSwitchTabs === true) {
|
|
268
264
|
if (e.shiftKey) {
|
|
269
265
|
return;
|
|
270
266
|
}
|
|
@@ -275,25 +271,25 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
275
271
|
}
|
|
276
272
|
}
|
|
277
273
|
const now = Date.now();
|
|
278
|
-
if (now - this.lastMouseWheelEventTime <
|
|
274
|
+
if (now - this.lastMouseWheelEventTime < MultiEditorTabsControl_1.MOUSE_WHEEL_EVENT_THRESHOLD - 2 * (Math.abs(e.deltaX) + Math.abs(e.deltaY))) {
|
|
279
275
|
return;
|
|
280
276
|
}
|
|
281
277
|
this.lastMouseWheelEventTime = now;
|
|
282
278
|
let tabSwitchDirection;
|
|
283
|
-
if (e.deltaX + e.deltaY < -
|
|
279
|
+
if (e.deltaX + e.deltaY < -MultiEditorTabsControl_1.MOUSE_WHEEL_DISTANCE_THRESHOLD) {
|
|
284
280
|
tabSwitchDirection = -1;
|
|
285
281
|
}
|
|
286
|
-
else if (e.deltaX + e.deltaY >
|
|
282
|
+
else if (e.deltaX + e.deltaY > MultiEditorTabsControl_1.MOUSE_WHEEL_DISTANCE_THRESHOLD) {
|
|
287
283
|
tabSwitchDirection = 1;
|
|
288
284
|
}
|
|
289
285
|
else {
|
|
290
286
|
return;
|
|
291
287
|
}
|
|
292
|
-
const nextEditor = this.
|
|
288
|
+
const nextEditor = this.groupView.getEditorByIndex(this.groupView.getIndexOfEditor(activeEditor) + tabSwitchDirection);
|
|
293
289
|
if (!nextEditor) {
|
|
294
290
|
return;
|
|
295
291
|
}
|
|
296
|
-
this.
|
|
292
|
+
this.groupView.openEditor(nextEditor);
|
|
297
293
|
EventHelper.stop(e, true);
|
|
298
294
|
}));
|
|
299
295
|
const showContextMenu = (e) => {
|
|
@@ -307,9 +303,9 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
307
303
|
menuId: MenuId.EditorTabsBarContext,
|
|
308
304
|
contextKeyService: this.contextKeyService,
|
|
309
305
|
menuActionOptions: { shouldForwardArgs: true },
|
|
310
|
-
getActionsContext: () => ({ groupId: this.
|
|
306
|
+
getActionsContext: () => ({ groupId: this.groupView.id }),
|
|
311
307
|
getKeyBinding: action => this.getKeybinding(action),
|
|
312
|
-
onHide: () => this.
|
|
308
|
+
onHide: () => this.groupView.focus()
|
|
313
309
|
});
|
|
314
310
|
};
|
|
315
311
|
this._register(addDisposableListener(tabsContainer, EventType$1.Contextmenu, e => showContextMenu(e)));
|
|
@@ -322,37 +318,43 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
322
318
|
super.updateEditorActionsToolbar();
|
|
323
319
|
this.layout(this.dimensions);
|
|
324
320
|
}
|
|
325
|
-
openEditor(editor) {
|
|
326
|
-
this.handleOpenedEditors();
|
|
321
|
+
openEditor(editor, options) {
|
|
322
|
+
const changed = this.handleOpenedEditors();
|
|
323
|
+
if (options?.focusTabControl) {
|
|
324
|
+
this.withTab(editor, (editor, tabIndex, tabContainer) => tabContainer.focus());
|
|
325
|
+
}
|
|
326
|
+
return changed;
|
|
327
327
|
}
|
|
328
328
|
openEditors(editors) {
|
|
329
|
-
this.handleOpenedEditors();
|
|
329
|
+
return this.handleOpenedEditors();
|
|
330
330
|
}
|
|
331
331
|
handleOpenedEditors() {
|
|
332
|
+
this.updateTabsControlVisibility();
|
|
332
333
|
const [tabsContainer, tabsScrollbar] = assertAllDefined(this.tabsContainer, this.tabsScrollbar);
|
|
333
|
-
for (let i = tabsContainer.children.length; i < this.
|
|
334
|
+
for (let i = tabsContainer.children.length; i < this.tabsModel.count; i++) {
|
|
334
335
|
tabsContainer.appendChild(this.createTab(i, tabsContainer, tabsScrollbar));
|
|
335
336
|
}
|
|
336
337
|
const activeEditorChanged = this.didActiveEditorChange();
|
|
337
338
|
const oldActiveTabLabel = this.activeTabLabel;
|
|
338
339
|
const oldTabLabelsLength = this.tabLabels.length;
|
|
339
340
|
this.computeTabLabels();
|
|
341
|
+
let didChange = false;
|
|
340
342
|
if (activeEditorChanged ||
|
|
341
343
|
oldTabLabelsLength !== this.tabLabels.length ||
|
|
342
344
|
!this.equalsEditorInputLabel(oldActiveTabLabel, this.activeTabLabel)
|
|
343
345
|
) {
|
|
344
346
|
this.redraw({ forceRevealActiveTab: true });
|
|
345
|
-
|
|
347
|
+
didChange = true;
|
|
346
348
|
}
|
|
347
349
|
else {
|
|
348
350
|
this.layout(this.dimensions, { forceRevealActiveTab: true });
|
|
349
|
-
this.breadcrumbsControl?.revealLast();
|
|
350
351
|
}
|
|
352
|
+
return didChange;
|
|
351
353
|
}
|
|
352
354
|
didActiveEditorChange() {
|
|
353
|
-
if (!this.activeTabLabel?.editor && this.
|
|
354
|
-
this.activeTabLabel?.editor && !this.
|
|
355
|
-
(!this.activeTabLabel?.editor || !this.
|
|
355
|
+
if (!this.activeTabLabel?.editor && this.tabsModel.activeEditor ||
|
|
356
|
+
this.activeTabLabel?.editor && !this.tabsModel.activeEditor ||
|
|
357
|
+
(!this.activeTabLabel?.editor || !this.tabsModel.isActive(this.activeTabLabel.editor))
|
|
356
358
|
) {
|
|
357
359
|
return true;
|
|
358
360
|
}
|
|
@@ -372,8 +374,8 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
372
374
|
labelA.ariaLabel === labelB.ariaLabel;
|
|
373
375
|
}
|
|
374
376
|
beforeCloseEditor(editor) {
|
|
375
|
-
if (this.isMouseOverTabs && this.
|
|
376
|
-
const closingLastTab = this.
|
|
377
|
+
if (this.isMouseOverTabs && this.groupsView.partOptions.tabSizing === 'fixed') {
|
|
378
|
+
const closingLastTab = this.tabsModel.isLast(editor);
|
|
377
379
|
this.updateTabsFixedWidth(!closingLastTab);
|
|
378
380
|
}
|
|
379
381
|
}
|
|
@@ -384,9 +386,9 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
384
386
|
this.handleClosedEditors();
|
|
385
387
|
}
|
|
386
388
|
handleClosedEditors() {
|
|
387
|
-
if (this.
|
|
389
|
+
if (this.tabsModel.count) {
|
|
388
390
|
const tabsContainer = assertIsDefined(this.tabsContainer);
|
|
389
|
-
while (tabsContainer.children.length > this.
|
|
391
|
+
while (tabsContainer.children.length > this.tabsModel.count) {
|
|
390
392
|
tabsContainer.lastChild?.remove();
|
|
391
393
|
dispose(this.tabDisposables.pop());
|
|
392
394
|
}
|
|
@@ -403,22 +405,22 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
403
405
|
this.activeTabLabel = undefined;
|
|
404
406
|
this.tabActionBars = [];
|
|
405
407
|
this.clearEditorActionsToolbar();
|
|
406
|
-
this.
|
|
408
|
+
this.updateTabsControlVisibility();
|
|
407
409
|
}
|
|
408
410
|
}
|
|
409
|
-
moveEditor(editor,
|
|
410
|
-
const editorLabel = this.tabLabels[
|
|
411
|
-
this.tabLabels.splice(
|
|
412
|
-
this.tabLabels.splice(
|
|
413
|
-
this.forEachTab((editor,
|
|
414
|
-
this.redrawTab(editor,
|
|
415
|
-
}, Math.min(
|
|
416
|
-
Math.max(
|
|
411
|
+
moveEditor(editor, fromTabIndex, targeTabIndex) {
|
|
412
|
+
const editorLabel = this.tabLabels[fromTabIndex];
|
|
413
|
+
this.tabLabels.splice(fromTabIndex, 1);
|
|
414
|
+
this.tabLabels.splice(targeTabIndex, 0, editorLabel);
|
|
415
|
+
this.forEachTab((editor, tabIndex, tabContainer, tabLabelWidget, tabLabel, tabActionBar) => {
|
|
416
|
+
this.redrawTab(editor, tabIndex, tabContainer, tabLabelWidget, tabLabel, tabActionBar);
|
|
417
|
+
}, Math.min(fromTabIndex, targeTabIndex),
|
|
418
|
+
Math.max(fromTabIndex, targeTabIndex)
|
|
417
419
|
);
|
|
418
420
|
this.layout(this.dimensions, { forceRevealActiveTab: true });
|
|
419
421
|
}
|
|
420
422
|
pinEditor(editor) {
|
|
421
|
-
this.withTab(editor, (editor,
|
|
423
|
+
this.withTab(editor, (editor, tabIndex, tabContainer, tabLabelWidget, tabLabel) => this.redrawTabLabel(editor, tabIndex, tabContainer, tabLabelWidget, tabLabel));
|
|
422
424
|
}
|
|
423
425
|
stickEditor(editor) {
|
|
424
426
|
this.doHandleStickyEditorChange(editor);
|
|
@@ -427,14 +429,14 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
427
429
|
this.doHandleStickyEditorChange(editor);
|
|
428
430
|
}
|
|
429
431
|
doHandleStickyEditorChange(editor) {
|
|
430
|
-
this.withTab(editor, (editor,
|
|
431
|
-
this.forEachTab((editor,
|
|
432
|
-
this.redrawTabBorders(
|
|
432
|
+
this.withTab(editor, (editor, tabIndex, tabContainer, tabLabelWidget, tabLabel, tabActionBar) => this.redrawTab(editor, tabIndex, tabContainer, tabLabelWidget, tabLabel, tabActionBar));
|
|
433
|
+
this.forEachTab((editor, tabIndex, tabContainer, tabLabelWidget, tabLabel) => {
|
|
434
|
+
this.redrawTabBorders(tabIndex, tabContainer);
|
|
433
435
|
});
|
|
434
436
|
this.layout(this.dimensions, { forceRevealActiveTab: true });
|
|
435
437
|
}
|
|
436
438
|
setActive(isGroupActive) {
|
|
437
|
-
this.forEachTab((editor,
|
|
439
|
+
this.forEachTab((editor, tabIndex, tabContainer, tabLabelWidget, tabLabel, tabActionBar) => {
|
|
438
440
|
this.redrawTabActiveAndDirty(isGroupActive, editor, tabContainer, tabActionBar);
|
|
439
441
|
});
|
|
440
442
|
this.updateEditorActionsToolbar();
|
|
@@ -445,15 +447,16 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
445
447
|
}
|
|
446
448
|
doUpdateEditorLabels() {
|
|
447
449
|
this.computeTabLabels();
|
|
448
|
-
this.forEachTab((editor,
|
|
449
|
-
this.redrawTabLabel(editor,
|
|
450
|
+
this.forEachTab((editor, tabIndex, tabContainer, tabLabelWidget, tabLabel) => {
|
|
451
|
+
this.redrawTabLabel(editor, tabIndex, tabContainer, tabLabelWidget, tabLabel);
|
|
450
452
|
});
|
|
451
453
|
this.layout(this.dimensions);
|
|
452
454
|
}
|
|
453
455
|
updateEditorDirty(editor) {
|
|
454
|
-
this.withTab(editor, (editor,
|
|
456
|
+
this.withTab(editor, (editor, tabIndex, tabContainer, tabLabelWidget, tabLabel, tabActionBar) => this.redrawTabActiveAndDirty(this.groupsView.activeGroup === this.groupView, editor, tabContainer, tabActionBar));
|
|
455
457
|
}
|
|
456
458
|
updateOptions(oldOptions, newOptions) {
|
|
459
|
+
super.updateOptions(oldOptions, newOptions);
|
|
457
460
|
if (oldOptions.labelFormat !== newOptions.labelFormat) {
|
|
458
461
|
this.computeTabLabels();
|
|
459
462
|
}
|
|
@@ -480,31 +483,31 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
480
483
|
updateStyles() {
|
|
481
484
|
this.redraw();
|
|
482
485
|
}
|
|
483
|
-
forEachTab(fn,
|
|
484
|
-
this.
|
|
485
|
-
if (typeof
|
|
486
|
+
forEachTab(fn, fromTabIndex, toTabIndex) {
|
|
487
|
+
this.tabsModel.getEditors(1 ).forEach((editor, tabIndex) => {
|
|
488
|
+
if (typeof fromTabIndex === 'number' && fromTabIndex > tabIndex) {
|
|
486
489
|
return;
|
|
487
490
|
}
|
|
488
|
-
if (typeof
|
|
491
|
+
if (typeof toTabIndex === 'number' && toTabIndex < tabIndex) {
|
|
489
492
|
return;
|
|
490
493
|
}
|
|
491
|
-
this.doWithTab(
|
|
494
|
+
this.doWithTab(tabIndex, editor, fn);
|
|
492
495
|
});
|
|
493
496
|
}
|
|
494
497
|
withTab(editor, fn) {
|
|
495
|
-
this.doWithTab(this.
|
|
498
|
+
this.doWithTab(this.tabsModel.indexOf(editor), editor, fn);
|
|
496
499
|
}
|
|
497
|
-
doWithTab(
|
|
500
|
+
doWithTab(tabIndex, editor, fn) {
|
|
498
501
|
const tabsContainer = assertIsDefined(this.tabsContainer);
|
|
499
|
-
const tabContainer = tabsContainer.children[
|
|
500
|
-
const tabResourceLabel = this.tabResourceLabels.get(
|
|
501
|
-
const tabLabel = this.tabLabels[
|
|
502
|
-
const tabActionBar = this.tabActionBars[
|
|
502
|
+
const tabContainer = tabsContainer.children[tabIndex];
|
|
503
|
+
const tabResourceLabel = this.tabResourceLabels.get(tabIndex);
|
|
504
|
+
const tabLabel = this.tabLabels[tabIndex];
|
|
505
|
+
const tabActionBar = this.tabActionBars[tabIndex];
|
|
503
506
|
if (tabContainer && tabResourceLabel && tabLabel) {
|
|
504
|
-
fn(editor,
|
|
507
|
+
fn(editor, tabIndex, tabContainer, tabResourceLabel, tabLabel, tabActionBar);
|
|
505
508
|
}
|
|
506
509
|
}
|
|
507
|
-
createTab(
|
|
510
|
+
createTab(tabIndex, tabsContainer, tabsScrollbar) {
|
|
508
511
|
const tabContainer = document.createElement('div');
|
|
509
512
|
tabContainer.draggable = true;
|
|
510
513
|
tabContainer.setAttribute('role', 'tab');
|
|
@@ -517,22 +520,30 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
517
520
|
const tabActionsContainer = document.createElement('div');
|
|
518
521
|
tabActionsContainer.classList.add('tab-actions');
|
|
519
522
|
tabContainer.appendChild(tabActionsContainer);
|
|
520
|
-
const
|
|
523
|
+
const that = this;
|
|
524
|
+
const tabActionRunner = ( new EditorCommandsContextActionRunner({
|
|
525
|
+
groupId: this.groupView.id,
|
|
526
|
+
get editorIndex() { return that.toEditorIndex(tabIndex); }
|
|
527
|
+
}));
|
|
521
528
|
const tabActionBar = ( new ActionBar(tabActionsContainer, { ariaLabel: ( localize('ariaLabelTabActions', "Tab actions")), actionRunner: tabActionRunner }));
|
|
522
|
-
tabActionBar.onWillRun(e => {
|
|
529
|
+
const tabActionListener = tabActionBar.onWillRun(e => {
|
|
523
530
|
if (e.action.id === this.closeEditorAction.id) {
|
|
524
531
|
this.blockRevealActiveTabOnce();
|
|
525
532
|
}
|
|
526
533
|
});
|
|
527
|
-
const tabActionBarDisposable = combinedDisposable(tabActionBar, toDisposable(insert(this.tabActionBars, tabActionBar)));
|
|
534
|
+
const tabActionBarDisposable = combinedDisposable(tabActionBar, tabActionListener, toDisposable(insert(this.tabActionBars, tabActionBar)));
|
|
528
535
|
const tabBorderBottomContainer = document.createElement('div');
|
|
529
536
|
tabBorderBottomContainer.classList.add('tab-border-bottom-container');
|
|
530
537
|
tabContainer.appendChild(tabBorderBottomContainer);
|
|
531
|
-
const eventsDisposable = this.registerTabListeners(tabContainer,
|
|
538
|
+
const eventsDisposable = this.registerTabListeners(tabContainer, tabIndex, tabsContainer, tabsScrollbar);
|
|
532
539
|
this.tabDisposables.push(combinedDisposable(eventsDisposable, tabActionBarDisposable, tabActionRunner, editorLabel));
|
|
533
540
|
return tabContainer;
|
|
534
541
|
}
|
|
535
|
-
|
|
542
|
+
toEditorIndex(tabIndex) {
|
|
543
|
+
const editor = assertIsDefined(this.tabsModel.getEditorByIndex(tabIndex));
|
|
544
|
+
return this.groupView.getIndexOfEditor(editor);
|
|
545
|
+
}
|
|
546
|
+
registerTabListeners(tab, tabIndex, tabsContainer, tabsScrollbar) {
|
|
536
547
|
const disposables = ( new DisposableStore());
|
|
537
548
|
const handleClickOrTouch = (e, preserveFocus) => {
|
|
538
549
|
tab.blur();
|
|
@@ -545,17 +556,17 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
545
556
|
if (this.originatesFromTabActionBar(e)) {
|
|
546
557
|
return;
|
|
547
558
|
}
|
|
548
|
-
const editor = this.
|
|
559
|
+
const editor = this.tabsModel.getEditorByIndex(tabIndex);
|
|
549
560
|
if (editor) {
|
|
550
|
-
this.
|
|
561
|
+
this.groupView.openEditor(editor, { preserveFocus, activation: EditorActivation.ACTIVATE });
|
|
551
562
|
}
|
|
552
563
|
return undefined;
|
|
553
564
|
};
|
|
554
565
|
const showContextMenu = (e) => {
|
|
555
566
|
EventHelper.stop(e);
|
|
556
|
-
const editor = this.
|
|
567
|
+
const editor = this.tabsModel.getEditorByIndex(tabIndex);
|
|
557
568
|
if (editor) {
|
|
558
|
-
this.
|
|
569
|
+
this.onTabContextMenu(editor, e, tab);
|
|
559
570
|
}
|
|
560
571
|
};
|
|
561
572
|
disposables.add(addDisposableListener(tab, EventType.MOUSE_DOWN, e => handleClickOrTouch(e, false)));
|
|
@@ -570,12 +581,14 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
570
581
|
disposables.add(addDisposableListener(tab, EventType.AUXCLICK, e => {
|
|
571
582
|
if (e.button === 1 ) {
|
|
572
583
|
EventHelper.stop(e, true );
|
|
573
|
-
const editor = this.
|
|
574
|
-
if (editor
|
|
575
|
-
|
|
584
|
+
const editor = this.tabsModel.getEditorByIndex(tabIndex);
|
|
585
|
+
if (editor) {
|
|
586
|
+
if (preventEditorClose(this.tabsModel, editor, EditorCloseMethod.MOUSE, this.groupsView.partOptions)) {
|
|
587
|
+
return;
|
|
588
|
+
}
|
|
589
|
+
this.blockRevealActiveTabOnce();
|
|
590
|
+
this.closeEditorAction.run({ groupId: this.groupView.id, editorIndex: this.groupView.getIndexOfEditor(editor) });
|
|
576
591
|
}
|
|
577
|
-
this.blockRevealActiveTabOnce();
|
|
578
|
-
this.closeEditorAction.run({ groupId: this.group.id, editorIndex: index });
|
|
579
592
|
}
|
|
580
593
|
}));
|
|
581
594
|
disposables.add(addDisposableListener(tab, EventType.KEY_DOWN, e => {
|
|
@@ -592,30 +605,29 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
592
605
|
let handled = false;
|
|
593
606
|
if (event.equals(3 ) || event.equals(10 )) {
|
|
594
607
|
handled = true;
|
|
595
|
-
const editor = this.
|
|
608
|
+
const editor = this.tabsModel.getEditorByIndex(tabIndex);
|
|
596
609
|
if (editor) {
|
|
597
|
-
this.
|
|
610
|
+
this.groupView.openEditor(editor);
|
|
598
611
|
}
|
|
599
612
|
}
|
|
600
613
|
else if (( [15 , 17 , 16 , 18 , 14 , 13 ].some(kb => event.equals(kb)))) {
|
|
601
|
-
let
|
|
614
|
+
let editorIndex = this.toEditorIndex(tabIndex);
|
|
602
615
|
if (event.equals(15 ) || event.equals(16 )) {
|
|
603
|
-
|
|
616
|
+
editorIndex = editorIndex - 1;
|
|
604
617
|
}
|
|
605
618
|
else if (event.equals(17 ) || event.equals(18 )) {
|
|
606
|
-
|
|
619
|
+
editorIndex = editorIndex + 1;
|
|
607
620
|
}
|
|
608
621
|
else if (event.equals(14 )) {
|
|
609
|
-
|
|
622
|
+
editorIndex = 0;
|
|
610
623
|
}
|
|
611
624
|
else {
|
|
612
|
-
|
|
625
|
+
editorIndex = this.groupView.count - 1;
|
|
613
626
|
}
|
|
614
|
-
const target = this.
|
|
627
|
+
const target = this.groupView.getEditorByIndex(editorIndex);
|
|
615
628
|
if (target) {
|
|
616
629
|
handled = true;
|
|
617
|
-
this.
|
|
618
|
-
tabsContainer.childNodes[targetIndex].focus();
|
|
630
|
+
this.groupView.openEditor(target, { preserveFocus: true }, { focusTabControl: true });
|
|
619
631
|
}
|
|
620
632
|
}
|
|
621
633
|
if (handled) {
|
|
@@ -633,30 +645,30 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
633
645
|
else if (e.tapCount !== 2) {
|
|
634
646
|
return;
|
|
635
647
|
}
|
|
636
|
-
const editor = this.
|
|
637
|
-
if (editor && this.
|
|
638
|
-
if (this.
|
|
639
|
-
this.
|
|
648
|
+
const editor = this.tabsModel.getEditorByIndex(tabIndex);
|
|
649
|
+
if (editor && this.tabsModel.isPinned(editor)) {
|
|
650
|
+
if (this.groupsView.partOptions.doubleClickTabToToggleEditorGroupSizes) {
|
|
651
|
+
this.groupsView.arrangeGroups(2 , this.groupView);
|
|
640
652
|
}
|
|
641
653
|
}
|
|
642
654
|
else {
|
|
643
|
-
this.
|
|
655
|
+
this.groupView.pinEditor(editor);
|
|
644
656
|
}
|
|
645
657
|
}));
|
|
646
658
|
}
|
|
647
659
|
disposables.add(addDisposableListener(tab, EventType.CONTEXT_MENU, e => {
|
|
648
660
|
EventHelper.stop(e, true);
|
|
649
|
-
const editor = this.
|
|
661
|
+
const editor = this.tabsModel.getEditorByIndex(tabIndex);
|
|
650
662
|
if (editor) {
|
|
651
|
-
this.
|
|
663
|
+
this.onTabContextMenu(editor, e, tab);
|
|
652
664
|
}
|
|
653
665
|
}, true ));
|
|
654
666
|
disposables.add(addDisposableListener(tab, EventType.DRAG_START, e => {
|
|
655
|
-
const editor = this.
|
|
667
|
+
const editor = this.tabsModel.getEditorByIndex(tabIndex);
|
|
656
668
|
if (!editor) {
|
|
657
669
|
return;
|
|
658
670
|
}
|
|
659
|
-
this.editorTransfer.setData([( new DraggedEditorIdentifier({ editor, groupId: this.
|
|
671
|
+
this.editorTransfer.setData([( new DraggedEditorIdentifier({ editor, groupId: this.groupView.id }))], DraggedEditorIdentifier.prototype);
|
|
660
672
|
if (e.dataTransfer) {
|
|
661
673
|
e.dataTransfer.effectAllowed = 'copyMove';
|
|
662
674
|
}
|
|
@@ -679,7 +691,7 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
679
691
|
const data = this.editorTransfer.getData(DraggedEditorIdentifier.prototype);
|
|
680
692
|
if (Array.isArray(data)) {
|
|
681
693
|
const localDraggedEditor = data[0].identifier;
|
|
682
|
-
if (localDraggedEditor.editor === this.
|
|
694
|
+
if (localDraggedEditor.editor === this.tabsModel.getEditorByIndex(tabIndex) && localDraggedEditor.groupId === this.groupView.id) {
|
|
683
695
|
if (e.dataTransfer) {
|
|
684
696
|
e.dataTransfer.dropEffect = 'none';
|
|
685
697
|
}
|
|
@@ -692,29 +704,29 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
692
704
|
e.dataTransfer.dropEffect = 'copy';
|
|
693
705
|
}
|
|
694
706
|
}
|
|
695
|
-
this.updateDropFeedback(tab, true,
|
|
707
|
+
this.updateDropFeedback(tab, true, tabIndex);
|
|
696
708
|
},
|
|
697
709
|
onDragOver: (_, dragDuration) => {
|
|
698
|
-
if (dragDuration >=
|
|
699
|
-
const draggedOverTab = this.
|
|
700
|
-
if (draggedOverTab && this.
|
|
701
|
-
this.
|
|
710
|
+
if (dragDuration >= MultiEditorTabsControl_1.DRAG_OVER_OPEN_TAB_THRESHOLD) {
|
|
711
|
+
const draggedOverTab = this.tabsModel.getEditorByIndex(tabIndex);
|
|
712
|
+
if (draggedOverTab && this.tabsModel.activeEditor !== draggedOverTab) {
|
|
713
|
+
this.groupView.openEditor(draggedOverTab, { preserveFocus: true });
|
|
702
714
|
}
|
|
703
715
|
}
|
|
704
716
|
},
|
|
705
717
|
onDragLeave: () => {
|
|
706
718
|
tab.classList.remove('dragged-over');
|
|
707
|
-
this.updateDropFeedback(tab, false,
|
|
719
|
+
this.updateDropFeedback(tab, false, tabIndex);
|
|
708
720
|
},
|
|
709
721
|
onDragEnd: () => {
|
|
710
722
|
tab.classList.remove('dragged-over');
|
|
711
|
-
this.updateDropFeedback(tab, false,
|
|
723
|
+
this.updateDropFeedback(tab, false, tabIndex);
|
|
712
724
|
this.editorTransfer.clearData(DraggedEditorIdentifier.prototype);
|
|
713
725
|
},
|
|
714
726
|
onDrop: e => {
|
|
715
727
|
tab.classList.remove('dragged-over');
|
|
716
|
-
this.updateDropFeedback(tab, false,
|
|
717
|
-
this.onDrop(e,
|
|
728
|
+
this.updateDropFeedback(tab, false, tabIndex);
|
|
729
|
+
this.onDrop(e, tabIndex, tabsContainer);
|
|
718
730
|
}
|
|
719
731
|
})));
|
|
720
732
|
return disposables;
|
|
@@ -724,7 +736,7 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
724
736
|
const data = this.groupTransfer.getData(DraggedEditorGroupIdentifier.prototype);
|
|
725
737
|
if (Array.isArray(data)) {
|
|
726
738
|
const group = data[0];
|
|
727
|
-
if (group.identifier === this.
|
|
739
|
+
if (group.identifier === this.groupView.id) {
|
|
728
740
|
return false;
|
|
729
741
|
}
|
|
730
742
|
}
|
|
@@ -738,10 +750,10 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
738
750
|
}
|
|
739
751
|
return false;
|
|
740
752
|
}
|
|
741
|
-
updateDropFeedback(element, isDND,
|
|
742
|
-
const isTab = (typeof
|
|
743
|
-
const editor = typeof
|
|
744
|
-
const isActiveTab = isTab && !!editor && this.
|
|
753
|
+
updateDropFeedback(element, isDND, tabIndex) {
|
|
754
|
+
const isTab = (typeof tabIndex === 'number');
|
|
755
|
+
const editor = typeof tabIndex === 'number' ? this.tabsModel.getEditorByIndex(tabIndex) : undefined;
|
|
756
|
+
const isActiveTab = isTab && !!editor && this.tabsModel.isActive(editor);
|
|
745
757
|
const noDNDBackgroundColor = isTab ? this.getColor(isActiveTab ? TAB_ACTIVE_BACKGROUND : TAB_INACTIVE_BACKGROUND) : '';
|
|
746
758
|
element.style.backgroundColor = (isDND ? this.getColor(EDITOR_DRAG_AND_DROP_BACKGROUND) : noDNDBackgroundColor) || '';
|
|
747
759
|
const activeContrastBorderColor = this.getColor(activeContrastBorder);
|
|
@@ -759,29 +771,28 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
759
771
|
}
|
|
760
772
|
}
|
|
761
773
|
computeTabLabels() {
|
|
762
|
-
const { labelFormat } = this.
|
|
774
|
+
const { labelFormat } = this.groupsView.partOptions;
|
|
763
775
|
const { verbosity, shortenDuplicates } = this.getLabelConfigFlags(labelFormat);
|
|
764
776
|
const labels = [];
|
|
765
|
-
let
|
|
766
|
-
|
|
767
|
-
const editor = this.group.editors[i];
|
|
777
|
+
let activeEditorTabIndex = -1;
|
|
778
|
+
this.tabsModel.getEditors(1 ).forEach((editor, tabIndex) => {
|
|
768
779
|
labels.push({
|
|
769
780
|
editor,
|
|
770
781
|
name: editor.getName(),
|
|
771
782
|
description: editor.getDescription(verbosity),
|
|
772
783
|
forceDescription: editor.hasCapability(64 ),
|
|
773
784
|
title: editor.getTitle(2 ),
|
|
774
|
-
ariaLabel: computeEditorAriaLabel(editor,
|
|
785
|
+
ariaLabel: computeEditorAriaLabel(editor, tabIndex, this.groupView, this.editorGroupService.count)
|
|
775
786
|
});
|
|
776
|
-
if (editor === this.
|
|
777
|
-
|
|
787
|
+
if (editor === this.tabsModel.activeEditor) {
|
|
788
|
+
activeEditorTabIndex = tabIndex;
|
|
778
789
|
}
|
|
779
|
-
}
|
|
790
|
+
});
|
|
780
791
|
if (shortenDuplicates) {
|
|
781
792
|
this.shortenTabLabels(labels);
|
|
782
793
|
}
|
|
783
794
|
this.tabLabels = labels;
|
|
784
|
-
this.activeTabLabel = labels[
|
|
795
|
+
this.activeTabLabel = labels[activeEditorTabIndex];
|
|
785
796
|
}
|
|
786
797
|
shortenTabLabels(labels) {
|
|
787
798
|
const mapNameToDuplicates = ( new Map());
|
|
@@ -829,9 +840,9 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
829
840
|
continue;
|
|
830
841
|
}
|
|
831
842
|
const shortenedDescriptions = shorten(descriptions, this.path.sep);
|
|
832
|
-
descriptions.forEach((description,
|
|
843
|
+
descriptions.forEach((description, tabIndex) => {
|
|
833
844
|
for (const label of mapDescriptionToDuplicates.get(description) || []) {
|
|
834
|
-
label.description = shortenedDescriptions[
|
|
845
|
+
label.description = shortenedDescriptions[tabIndex];
|
|
835
846
|
}
|
|
836
847
|
});
|
|
837
848
|
}
|
|
@@ -863,16 +874,16 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
863
874
|
this.tabsAndActionsContainer.style.removeProperty('--tabs-border-bottom-color');
|
|
864
875
|
}
|
|
865
876
|
}
|
|
866
|
-
this.forEachTab((editor,
|
|
867
|
-
this.redrawTab(editor,
|
|
877
|
+
this.forEachTab((editor, tabIndex, tabContainer, tabLabelWidget, tabLabel, tabActionBar) => {
|
|
878
|
+
this.redrawTab(editor, tabIndex, tabContainer, tabLabelWidget, tabLabel, tabActionBar);
|
|
868
879
|
});
|
|
869
880
|
this.updateEditorActionsToolbar();
|
|
870
881
|
this.layout(this.dimensions, options);
|
|
871
882
|
}
|
|
872
|
-
redrawTab(editor,
|
|
873
|
-
const isTabSticky = this.
|
|
874
|
-
const options = this.
|
|
875
|
-
this.redrawTabLabel(editor,
|
|
883
|
+
redrawTab(editor, tabIndex, tabContainer, tabLabelWidget, tabLabel, tabActionBar) {
|
|
884
|
+
const isTabSticky = this.tabsModel.isSticky(tabIndex);
|
|
885
|
+
const options = this.groupsView.partOptions;
|
|
886
|
+
this.redrawTabLabel(editor, tabIndex, tabContainer, tabLabelWidget, tabLabel);
|
|
876
887
|
const tabAction = isTabSticky ? this.unpinEditorAction : this.closeEditorAction;
|
|
877
888
|
if (!tabActionBar.hasAction(tabAction)) {
|
|
878
889
|
if (!tabActionBar.isEmpty()) {
|
|
@@ -897,27 +908,27 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
897
908
|
let stickyTabWidth = 0;
|
|
898
909
|
switch (options.pinnedTabSizing) {
|
|
899
910
|
case 'compact':
|
|
900
|
-
stickyTabWidth =
|
|
911
|
+
stickyTabWidth = MultiEditorTabsControl_1.TAB_WIDTH.compact;
|
|
901
912
|
break;
|
|
902
913
|
case 'shrink':
|
|
903
|
-
stickyTabWidth =
|
|
914
|
+
stickyTabWidth = MultiEditorTabsControl_1.TAB_WIDTH.shrink;
|
|
904
915
|
break;
|
|
905
916
|
}
|
|
906
|
-
tabContainer.style.left = `${
|
|
917
|
+
tabContainer.style.left = `${tabIndex * stickyTabWidth}px`;
|
|
907
918
|
}
|
|
908
919
|
else {
|
|
909
920
|
tabContainer.style.left = 'auto';
|
|
910
921
|
}
|
|
911
|
-
this.redrawTabBorders(
|
|
912
|
-
this.redrawTabActiveAndDirty(this.
|
|
922
|
+
this.redrawTabBorders(tabIndex, tabContainer);
|
|
923
|
+
this.redrawTabActiveAndDirty(this.groupsView.activeGroup === this.groupView, editor, tabContainer, tabActionBar);
|
|
913
924
|
}
|
|
914
|
-
redrawTabLabel(editor,
|
|
915
|
-
const options = this.
|
|
925
|
+
redrawTabLabel(editor, tabIndex, tabContainer, tabLabelWidget, tabLabel) {
|
|
926
|
+
const options = this.groupsView.partOptions;
|
|
916
927
|
let name;
|
|
917
928
|
let forceLabel = false;
|
|
918
929
|
let fileDecorationBadges = Boolean(options.decorations?.badges);
|
|
919
930
|
let description;
|
|
920
|
-
if (options.pinnedTabSizing === 'compact' && this.
|
|
931
|
+
if (options.pinnedTabSizing === 'compact' && this.tabsModel.isSticky(tabIndex)) {
|
|
921
932
|
const isShowingIcons = options.showIcons && options.hasIcons;
|
|
922
933
|
name = isShowingIcons ? '' : tabLabel.name?.charAt(0).toUpperCase();
|
|
923
934
|
description = '';
|
|
@@ -937,7 +948,7 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
937
948
|
tabLabelWidget.setResource({ name, description, resource: EditorResourceAccessor.getOriginalUri(editor, { supportSideBySide: SideBySideEditor.BOTH }) }, {
|
|
938
949
|
title,
|
|
939
950
|
extraClasses: coalesce(['tab-label', fileDecorationBadges ? 'tab-label-has-badge' : undefined].concat(editor.getLabelExtraClasses())),
|
|
940
|
-
italic: !this.
|
|
951
|
+
italic: !this.tabsModel.isPinned(editor),
|
|
941
952
|
forceLabel,
|
|
942
953
|
fileDecorations: {
|
|
943
954
|
colors: Boolean(options.decorations?.colors),
|
|
@@ -953,12 +964,12 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
953
964
|
}
|
|
954
965
|
}
|
|
955
966
|
redrawTabActiveAndDirty(isGroupActive, editor, tabContainer, tabActionBar) {
|
|
956
|
-
const isTabActive = this.
|
|
967
|
+
const isTabActive = this.tabsModel.isActive(editor);
|
|
957
968
|
const hasModifiedBorderTop = this.doRedrawTabDirty(isGroupActive, isTabActive, editor, tabContainer);
|
|
958
969
|
this.doRedrawTabActive(isGroupActive, !hasModifiedBorderTop, editor, tabContainer, tabActionBar);
|
|
959
970
|
}
|
|
960
971
|
doRedrawTabActive(isGroupActive, allowBorderTop, editor, tabContainer, tabActionBar) {
|
|
961
|
-
if (this.
|
|
972
|
+
if (this.tabsModel.isActive(editor)) {
|
|
962
973
|
tabContainer.classList.add('active');
|
|
963
974
|
tabContainer.setAttribute('aria-selected', 'true');
|
|
964
975
|
tabContainer.tabIndex = 0;
|
|
@@ -998,7 +1009,7 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
998
1009
|
let hasModifiedBorderColor = false;
|
|
999
1010
|
if (editor.isDirty() && !editor.isSaving()) {
|
|
1000
1011
|
tabContainer.classList.add('dirty');
|
|
1001
|
-
if (this.
|
|
1012
|
+
if (this.groupsView.partOptions.highlightModifiedTabs) {
|
|
1002
1013
|
let modifiedBorderColor;
|
|
1003
1014
|
if (isGroupActive && isTabActive) {
|
|
1004
1015
|
modifiedBorderColor = this.getColor(TAB_ACTIVE_MODIFIED_BORDER);
|
|
@@ -1029,15 +1040,16 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
1029
1040
|
}
|
|
1030
1041
|
return hasModifiedBorderColor;
|
|
1031
1042
|
}
|
|
1032
|
-
redrawTabBorders(
|
|
1033
|
-
const isTabSticky = this.
|
|
1034
|
-
const isTabLastSticky = isTabSticky && this.
|
|
1035
|
-
const
|
|
1043
|
+
redrawTabBorders(tabIndex, tabContainer) {
|
|
1044
|
+
const isTabSticky = this.tabsModel.isSticky(tabIndex);
|
|
1045
|
+
const isTabLastSticky = isTabSticky && this.tabsModel.stickyCount === tabIndex + 1;
|
|
1046
|
+
const showLastStickyTabBorderColor = this.tabsModel.stickyCount !== this.tabsModel.count;
|
|
1047
|
+
const borderRightColor = ((isTabLastSticky && showLastStickyTabBorderColor ? this.getColor(TAB_LAST_PINNED_BORDER) : undefined) || this.getColor(TAB_BORDER) || this.getColor(contrastBorder));
|
|
1036
1048
|
tabContainer.style.borderRight = borderRightColor ? `1px solid ${borderRightColor}` : '';
|
|
1037
1049
|
tabContainer.style.outlineColor = this.getColor(activeContrastBorder) || '';
|
|
1038
1050
|
}
|
|
1039
1051
|
prepareEditorActions(editorActions) {
|
|
1040
|
-
const isGroupActive = this.
|
|
1052
|
+
const isGroupActive = this.groupsView.activeGroup === this.groupView;
|
|
1041
1053
|
if (isGroupActive) {
|
|
1042
1054
|
return editorActions;
|
|
1043
1055
|
}
|
|
@@ -1049,76 +1061,62 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
1049
1061
|
}
|
|
1050
1062
|
}
|
|
1051
1063
|
getHeight() {
|
|
1052
|
-
const showsBreadcrumbs = this.breadcrumbsControl && !this.breadcrumbsControl.isHidden();
|
|
1053
1064
|
if (this.dimensions.used) {
|
|
1054
|
-
return
|
|
1055
|
-
total: this.dimensions.used.height,
|
|
1056
|
-
offset: showsBreadcrumbs ? this.dimensions.used.height - BreadcrumbsControl.HEIGHT : this.dimensions.used.height
|
|
1057
|
-
};
|
|
1065
|
+
return this.dimensions.used.height;
|
|
1058
1066
|
}
|
|
1059
1067
|
else {
|
|
1060
1068
|
return this.computeHeight();
|
|
1061
1069
|
}
|
|
1062
1070
|
}
|
|
1063
1071
|
computeHeight() {
|
|
1064
|
-
let
|
|
1065
|
-
if (this.
|
|
1066
|
-
|
|
1072
|
+
let height;
|
|
1073
|
+
if (!this.visible) {
|
|
1074
|
+
height = 0;
|
|
1067
1075
|
}
|
|
1068
|
-
else {
|
|
1069
|
-
|
|
1076
|
+
else if (this.groupsView.partOptions.wrapTabs && this.tabsAndActionsContainer?.classList.contains('wrapping')) {
|
|
1077
|
+
height = this.tabsAndActionsContainer.offsetHeight;
|
|
1070
1078
|
}
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
total += BreadcrumbsControl.HEIGHT;
|
|
1079
|
+
else {
|
|
1080
|
+
height = this.tabHeight;
|
|
1074
1081
|
}
|
|
1075
|
-
return
|
|
1082
|
+
return height;
|
|
1076
1083
|
}
|
|
1077
1084
|
layout(dimensions, options) {
|
|
1078
1085
|
Object.assign(this.dimensions, dimensions);
|
|
1079
|
-
if (
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1086
|
+
if (this.visible) {
|
|
1087
|
+
if (!this.layoutScheduler.value) {
|
|
1088
|
+
const scheduledLayout = scheduleAtNextAnimationFrame(() => {
|
|
1089
|
+
this.doLayout(this.dimensions, this.layoutScheduler.value?.options );
|
|
1090
|
+
this.layoutScheduler.clear();
|
|
1091
|
+
});
|
|
1092
|
+
this.layoutScheduler.value = { options, dispose: () => scheduledLayout.dispose() };
|
|
1093
|
+
}
|
|
1094
|
+
if (options?.forceRevealActiveTab) {
|
|
1095
|
+
this.layoutScheduler.value.options = {
|
|
1096
|
+
...this.layoutScheduler.value.options,
|
|
1097
|
+
forceRevealActiveTab: true
|
|
1098
|
+
};
|
|
1099
|
+
}
|
|
1091
1100
|
}
|
|
1092
1101
|
if (!this.dimensions.used) {
|
|
1093
|
-
this.dimensions.used = ( new Dimension(dimensions.container.width, this.computeHeight()
|
|
1102
|
+
this.dimensions.used = ( new Dimension(dimensions.container.width, this.computeHeight()));
|
|
1094
1103
|
}
|
|
1095
1104
|
return this.dimensions.used;
|
|
1096
1105
|
}
|
|
1097
1106
|
doLayout(dimensions, options) {
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
this.doLayoutBreadcrumbs(dimensions);
|
|
1101
|
-
const [activeTab, activeIndex] = activeTabAndIndex;
|
|
1102
|
-
this.doLayoutTabs(activeTab, activeIndex, dimensions, options);
|
|
1107
|
+
if (dimensions.container !== Dimension.None && dimensions.available !== Dimension.None) {
|
|
1108
|
+
this.doLayoutTabs(dimensions, options);
|
|
1103
1109
|
}
|
|
1104
1110
|
const oldDimension = this.dimensions.used;
|
|
1105
|
-
const newDimension = this.dimensions.used = ( new Dimension(dimensions.container.width, this.computeHeight()
|
|
1111
|
+
const newDimension = this.dimensions.used = ( new Dimension(dimensions.container.width, this.computeHeight()));
|
|
1106
1112
|
if (oldDimension && oldDimension.height !== newDimension.height) {
|
|
1107
|
-
this.
|
|
1113
|
+
this.groupView.relayout();
|
|
1108
1114
|
}
|
|
1109
1115
|
}
|
|
1110
|
-
|
|
1111
|
-
this.group.relayout();
|
|
1112
|
-
}
|
|
1113
|
-
doLayoutBreadcrumbs(dimensions) {
|
|
1114
|
-
if (this.breadcrumbsControl && !this.breadcrumbsControl.isHidden()) {
|
|
1115
|
-
this.breadcrumbsControl.layout(( new Dimension(dimensions.container.width, BreadcrumbsControl.HEIGHT)));
|
|
1116
|
-
}
|
|
1117
|
-
}
|
|
1118
|
-
doLayoutTabs(activeTab, activeIndex, dimensions, options) {
|
|
1116
|
+
doLayoutTabs(dimensions, options) {
|
|
1119
1117
|
const tabsWrapMultiLine = this.doLayoutTabsWrapping(dimensions);
|
|
1120
1118
|
if (!tabsWrapMultiLine) {
|
|
1121
|
-
this.doLayoutTabsNonWrapping(
|
|
1119
|
+
this.doLayoutTabsNonWrapping(options);
|
|
1122
1120
|
}
|
|
1123
1121
|
}
|
|
1124
1122
|
doLayoutTabsWrapping(dimensions) {
|
|
@@ -1130,7 +1128,7 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
1130
1128
|
tabsAndActionsContainer.classList.toggle('wrapping', tabsWrapMultiLine);
|
|
1131
1129
|
tabsContainer.style.setProperty('--last-tab-margin-right', tabsWrapMultiLine ? `${editorToolbarContainer.offsetWidth}px` : '0');
|
|
1132
1130
|
}
|
|
1133
|
-
if (this.
|
|
1131
|
+
if (this.groupsView.partOptions.wrapTabs) {
|
|
1134
1132
|
const visibleTabsWidth = tabsContainer.offsetWidth;
|
|
1135
1133
|
const allTabsWidth = tabsContainer.scrollWidth;
|
|
1136
1134
|
const lastTabFitsWrapped = () => {
|
|
@@ -1149,7 +1147,7 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
1149
1147
|
}
|
|
1150
1148
|
if (tabsWrapMultiLine) {
|
|
1151
1149
|
if ((tabsContainer.offsetHeight > dimensions.available.height) ||
|
|
1152
|
-
(allTabsWidth === visibleTabsWidth && tabsContainer.offsetHeight ===
|
|
1150
|
+
(allTabsWidth === visibleTabsWidth && tabsContainer.offsetHeight === this.tabHeight) ||
|
|
1153
1151
|
(!lastTabFitsWrapped())
|
|
1154
1152
|
) {
|
|
1155
1153
|
updateTabsWrapping(false);
|
|
@@ -1191,26 +1189,28 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
1191
1189
|
}
|
|
1192
1190
|
return tabsWrapMultiLine;
|
|
1193
1191
|
}
|
|
1194
|
-
doLayoutTabsNonWrapping(
|
|
1192
|
+
doLayoutTabsNonWrapping(options) {
|
|
1195
1193
|
const [tabsContainer, tabsScrollbar] = assertAllDefined(this.tabsContainer, this.tabsScrollbar);
|
|
1196
1194
|
const visibleTabsWidth = tabsContainer.offsetWidth;
|
|
1197
1195
|
const allTabsWidth = tabsContainer.scrollWidth;
|
|
1198
1196
|
let stickyTabsWidth = 0;
|
|
1199
|
-
if (this.
|
|
1197
|
+
if (this.tabsModel.stickyCount > 0) {
|
|
1200
1198
|
let stickyTabWidth = 0;
|
|
1201
|
-
switch (this.
|
|
1199
|
+
switch (this.groupsView.partOptions.pinnedTabSizing) {
|
|
1202
1200
|
case 'compact':
|
|
1203
|
-
stickyTabWidth =
|
|
1201
|
+
stickyTabWidth = MultiEditorTabsControl_1.TAB_WIDTH.compact;
|
|
1204
1202
|
break;
|
|
1205
1203
|
case 'shrink':
|
|
1206
|
-
stickyTabWidth =
|
|
1204
|
+
stickyTabWidth = MultiEditorTabsControl_1.TAB_WIDTH.shrink;
|
|
1207
1205
|
break;
|
|
1208
1206
|
}
|
|
1209
|
-
stickyTabsWidth = this.
|
|
1207
|
+
stickyTabsWidth = this.tabsModel.stickyCount * stickyTabWidth;
|
|
1210
1208
|
}
|
|
1211
|
-
|
|
1209
|
+
const activeTabAndIndex = this.tabsModel.activeEditor ? this.getTabAndIndex(this.tabsModel.activeEditor) : undefined;
|
|
1210
|
+
const [activeTab, activeTabIndex] = activeTabAndIndex ?? [undefined, undefined];
|
|
1211
|
+
let activeTabPositionStatic = this.groupsView.partOptions.pinnedTabSizing !== 'normal' && typeof activeTabIndex === 'number' && this.tabsModel.isSticky(activeTabIndex);
|
|
1212
1212
|
let availableTabsContainerWidth = visibleTabsWidth - stickyTabsWidth;
|
|
1213
|
-
if (this.
|
|
1213
|
+
if (this.tabsModel.stickyCount > 0 && availableTabsContainerWidth < MultiEditorTabsControl_1.TAB_WIDTH.fit) {
|
|
1214
1214
|
tabsContainer.classList.add('disable-sticky-tabs');
|
|
1215
1215
|
availableTabsContainerWidth = visibleTabsWidth;
|
|
1216
1216
|
stickyTabsWidth = 0;
|
|
@@ -1221,7 +1221,7 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
1221
1221
|
}
|
|
1222
1222
|
let activeTabPosX;
|
|
1223
1223
|
let activeTabWidth;
|
|
1224
|
-
if (!this.blockRevealActiveTab) {
|
|
1224
|
+
if (!this.blockRevealActiveTab && activeTab) {
|
|
1225
1225
|
activeTabPosX = activeTab.offsetLeft;
|
|
1226
1226
|
activeTabWidth = activeTab.offsetWidth;
|
|
1227
1227
|
}
|
|
@@ -1254,23 +1254,33 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
1254
1254
|
});
|
|
1255
1255
|
}
|
|
1256
1256
|
}
|
|
1257
|
+
updateTabsControlVisibility() {
|
|
1258
|
+
const tabsAndActionsContainer = assertIsDefined(this.tabsAndActionsContainer);
|
|
1259
|
+
tabsAndActionsContainer.classList.toggle('empty', !this.visible);
|
|
1260
|
+
if (!this.visible && this.dimensions) {
|
|
1261
|
+
this.dimensions.used = undefined;
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
get visible() {
|
|
1265
|
+
return this.tabsModel.count > 0;
|
|
1266
|
+
}
|
|
1257
1267
|
getTabAndIndex(editor) {
|
|
1258
|
-
const
|
|
1259
|
-
const tab = this.getTabAtIndex(
|
|
1268
|
+
const tabIndex = this.tabsModel.indexOf(editor);
|
|
1269
|
+
const tab = this.getTabAtIndex(tabIndex);
|
|
1260
1270
|
if (tab) {
|
|
1261
|
-
return [tab,
|
|
1271
|
+
return [tab, tabIndex];
|
|
1262
1272
|
}
|
|
1263
1273
|
return undefined;
|
|
1264
1274
|
}
|
|
1265
|
-
getTabAtIndex(
|
|
1266
|
-
if (
|
|
1275
|
+
getTabAtIndex(tabIndex) {
|
|
1276
|
+
if (tabIndex >= 0) {
|
|
1267
1277
|
const tabsContainer = assertIsDefined(this.tabsContainer);
|
|
1268
|
-
return tabsContainer.children[
|
|
1278
|
+
return tabsContainer.children[tabIndex];
|
|
1269
1279
|
}
|
|
1270
1280
|
return undefined;
|
|
1271
1281
|
}
|
|
1272
1282
|
getLastTab() {
|
|
1273
|
-
return this.getTabAtIndex(this.
|
|
1283
|
+
return this.getTabAtIndex(this.tabsModel.count - 1);
|
|
1274
1284
|
}
|
|
1275
1285
|
blockRevealActiveTabOnce() {
|
|
1276
1286
|
this.blockRevealActiveTab = true;
|
|
@@ -1285,22 +1295,27 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
1285
1295
|
}
|
|
1286
1296
|
return !!findParentWithClass(element, 'action-item', 'tab');
|
|
1287
1297
|
}
|
|
1288
|
-
async onDrop(e,
|
|
1298
|
+
async onDrop(e, targetTabIndex, tabsContainer) {
|
|
1289
1299
|
EventHelper.stop(e, true);
|
|
1290
1300
|
this.updateDropFeedback(tabsContainer, false);
|
|
1291
1301
|
tabsContainer.classList.remove('scroll');
|
|
1302
|
+
const targetEditorIndex = this.tabsModel instanceof UnstickyEditorGroupModel ? targetTabIndex + this.groupView.stickyCount : targetTabIndex;
|
|
1303
|
+
const options = {
|
|
1304
|
+
sticky: this.tabsModel instanceof StickyEditorGroupModel && this.tabsModel.stickyCount === targetEditorIndex,
|
|
1305
|
+
index: targetEditorIndex
|
|
1306
|
+
};
|
|
1292
1307
|
if (this.groupTransfer.hasData(DraggedEditorGroupIdentifier.prototype)) {
|
|
1293
1308
|
const data = this.groupTransfer.getData(DraggedEditorGroupIdentifier.prototype);
|
|
1294
1309
|
if (Array.isArray(data)) {
|
|
1295
|
-
const sourceGroup = this.
|
|
1310
|
+
const sourceGroup = this.groupsView.getGroup(data[0].identifier);
|
|
1296
1311
|
if (sourceGroup) {
|
|
1297
|
-
const mergeGroupOptions = { index:
|
|
1312
|
+
const mergeGroupOptions = { index: targetEditorIndex };
|
|
1298
1313
|
if (!this.isMoveOperation(e, sourceGroup.id)) {
|
|
1299
1314
|
mergeGroupOptions.mode = 0 ;
|
|
1300
1315
|
}
|
|
1301
|
-
this.
|
|
1316
|
+
this.groupsView.mergeGroup(sourceGroup, this.groupView, mergeGroupOptions);
|
|
1302
1317
|
}
|
|
1303
|
-
this.
|
|
1318
|
+
this.groupView.focus();
|
|
1304
1319
|
this.groupTransfer.clearData(DraggedEditorGroupIdentifier.prototype);
|
|
1305
1320
|
}
|
|
1306
1321
|
}
|
|
@@ -1308,16 +1323,16 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
1308
1323
|
const data = this.editorTransfer.getData(DraggedEditorIdentifier.prototype);
|
|
1309
1324
|
if (Array.isArray(data)) {
|
|
1310
1325
|
const draggedEditor = data[0].identifier;
|
|
1311
|
-
const sourceGroup = this.
|
|
1326
|
+
const sourceGroup = this.groupsView.getGroup(draggedEditor.groupId);
|
|
1312
1327
|
if (sourceGroup) {
|
|
1313
1328
|
if (this.isMoveOperation(e, draggedEditor.groupId, draggedEditor.editor)) {
|
|
1314
|
-
sourceGroup.moveEditor(draggedEditor.editor, this.
|
|
1329
|
+
sourceGroup.moveEditor(draggedEditor.editor, this.groupView, options);
|
|
1315
1330
|
}
|
|
1316
1331
|
else {
|
|
1317
|
-
sourceGroup.copyEditor(draggedEditor.editor, this.
|
|
1332
|
+
sourceGroup.copyEditor(draggedEditor.editor, this.groupView, options);
|
|
1318
1333
|
}
|
|
1319
1334
|
}
|
|
1320
|
-
this.
|
|
1335
|
+
this.groupView.focus();
|
|
1321
1336
|
this.editorTransfer.clearData(DraggedEditorIdentifier.prototype);
|
|
1322
1337
|
}
|
|
1323
1338
|
}
|
|
@@ -1330,17 +1345,17 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
1330
1345
|
if (dataTransferItem) {
|
|
1331
1346
|
const treeDropData = await extractTreeDropData(dataTransferItem);
|
|
1332
1347
|
editors.push(...( treeDropData.map(
|
|
1333
|
-
editor => ({ ...editor, options: { ...editor.options, pinned: true, index:
|
|
1348
|
+
editor => ({ ...editor, options: { ...editor.options, pinned: true, index: targetEditorIndex } })
|
|
1334
1349
|
)));
|
|
1335
1350
|
}
|
|
1336
1351
|
}
|
|
1337
|
-
this.editorService.openEditors(editors, this.
|
|
1352
|
+
this.editorService.openEditors(editors, this.groupView, { validateTrust: true });
|
|
1338
1353
|
}
|
|
1339
1354
|
this.treeItemsTransfer.clearData(DraggedTreeItemsIdentifier.prototype);
|
|
1340
1355
|
}
|
|
1341
1356
|
else {
|
|
1342
1357
|
const dropHandler = this.instantiationService.createInstance(ResourcesDropHandler, { allowWorkspaceOpen: false });
|
|
1343
|
-
dropHandler.handleDrop(e, () => this.
|
|
1358
|
+
dropHandler.handleDrop(e, () => this.groupView, () => this.groupView.focus(), options);
|
|
1344
1359
|
}
|
|
1345
1360
|
}
|
|
1346
1361
|
isMoveOperation(e, sourceGroup, sourceEditor) {
|
|
@@ -1348,30 +1363,28 @@ let TabsTitleControl = class TabsTitleControl extends TitleControl {
|
|
|
1348
1363
|
return true;
|
|
1349
1364
|
}
|
|
1350
1365
|
const isCopy = (e.ctrlKey && !isMacintosh) || (e.altKey && isMacintosh);
|
|
1351
|
-
return !isCopy || sourceGroup === this.
|
|
1366
|
+
return (!isCopy || sourceGroup === this.groupView.id);
|
|
1352
1367
|
}
|
|
1353
1368
|
dispose() {
|
|
1354
1369
|
super.dispose();
|
|
1355
1370
|
this.tabDisposables = dispose(this.tabDisposables);
|
|
1356
1371
|
}
|
|
1357
1372
|
};
|
|
1358
|
-
|
|
1359
|
-
( __param(
|
|
1360
|
-
( __param(
|
|
1361
|
-
( __param(
|
|
1362
|
-
( __param(
|
|
1363
|
-
( __param(
|
|
1364
|
-
( __param(
|
|
1365
|
-
( __param(
|
|
1366
|
-
( __param(
|
|
1367
|
-
( __param(
|
|
1368
|
-
( __param(
|
|
1369
|
-
( __param(
|
|
1370
|
-
( __param(
|
|
1371
|
-
( __param(
|
|
1372
|
-
|
|
1373
|
-
( __param(17, IEditorResolverService))
|
|
1374
|
-
], TabsTitleControl));
|
|
1373
|
+
MultiEditorTabsControl = MultiEditorTabsControl_1 = ( __decorate([
|
|
1374
|
+
( __param(4, IContextMenuService)),
|
|
1375
|
+
( __param(5, IInstantiationService)),
|
|
1376
|
+
( __param(6, IContextKeyService)),
|
|
1377
|
+
( __param(7, IKeybindingService)),
|
|
1378
|
+
( __param(8, INotificationService)),
|
|
1379
|
+
( __param(9, IMenuService)),
|
|
1380
|
+
( __param(10, IQuickInputService)),
|
|
1381
|
+
( __param(11, IThemeService)),
|
|
1382
|
+
( __param(12, IEditorService)),
|
|
1383
|
+
( __param(13, IPathService)),
|
|
1384
|
+
( __param(14, IEditorGroupsService)),
|
|
1385
|
+
( __param(15, ITreeViewsDnDService)),
|
|
1386
|
+
( __param(16, IEditorResolverService))
|
|
1387
|
+
], MultiEditorTabsControl));
|
|
1375
1388
|
registerThemingParticipant((theme, collector) => {
|
|
1376
1389
|
const borderColor = theme.getColor(TAB_BORDER);
|
|
1377
1390
|
if (borderColor) {
|
|
@@ -1568,4 +1581,4 @@ registerThemingParticipant((theme, collector) => {
|
|
|
1568
1581
|
}
|
|
1569
1582
|
});
|
|
1570
1583
|
|
|
1571
|
-
export {
|
|
1584
|
+
export { MultiEditorTabsControl };
|