diff --git a/src/vs/workbench/browser/parts/editor/media/notabstitle.css b/src/vs/workbench/browser/parts/editor/media/notabstitle.css index 5d7c982381e53bca52c312eb7411aae759b9fcd1..3873e186d26ced9f8d2e8317655ee711ad567326 100644 --- a/src/vs/workbench/browser/parts/editor/media/notabstitle.css +++ b/src/vs/workbench/browser/parts/editor/media/notabstitle.css @@ -3,7 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - /* Title Container */ .monaco-workbench > .part.editor > .content > .one-editor-container > .title { @@ -107,35 +106,4 @@ .monaco-workbench > .part.editor > .content > .one-editor-container > .title .title-actions .action-label .label { display: none; -} - -/* Drag Cursor */ -.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container .title, -.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container .title .title-label a, -.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container .title .title-label span { - cursor: -webkit-grab; -} - -#monaco-workbench-editor-move-overlay, -.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container.dragged, -.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container.dragged .title, -.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container.dragged .title .title-label a, -.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container.dragged .title .title-label span, -.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container.dragged .monaco-editor .view-lines { - cursor: -webkit-grabbing; -} - -.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container .title, -.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container .title .title-label a, -.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container .title .title-label span { - cursor: url(data:;base64,AAACAAEAICACAAcABQAwAQAAFgAAACgAAAAgAAAAQAAAAAEAAQAAAAAAAAEAAAAAAAAAAAAAAgAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAA/AAAAfwAAAP+AAAH/gAAB/8AAA//AAAd/wAAGf+AAAH9gAADbYAAA2yAAAZsAAAGbAAAAGAAAAAAAAA//////////////////////////////////////////////////////////////////////////////////////gH///4B///8Af//+AD///AA///wAH//4AB//8AAf//AAD//5AA///gAP//4AD//8AF///AB///5A////5///8=), auto; -} - -#monaco-workbench-editor-move-overlay-custom-drag-cursor, -.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container.dragged, -.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container.dragged .title, -.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container.dragged .title .title-label a, -.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container.dragged .title .title-label span, -.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container.dragged .monaco-editor .view-lines { - cursor: url(data:;base64,AAACAAEAICACAAcABQAwAQAAFgAAACgAAAAgAAAAQAAAAAEAAQAAAAAAAAEAAAAAAAAAAAAAAgAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAA/AAAAfwAAAP+AAAH/gAAB/8AAAH/AAAB/wAAA/0AAANsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////////////////////////////////////////////////gH///4B///8Af//+AD///AA///wAH//+AB///wAf//4AH//+AD///yT/////////////////////////////8=), auto; } \ No newline at end of file diff --git a/src/vs/workbench/browser/parts/editor/media/titlecontrol.css b/src/vs/workbench/browser/parts/editor/media/titlecontrol.css new file mode 100644 index 0000000000000000000000000000000000000000..8f8dd18d20ac74d48012c2b9970fd29c7660e7d2 --- /dev/null +++ b/src/vs/workbench/browser/parts/editor/media/titlecontrol.css @@ -0,0 +1,35 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +/* Drag Cursor */ +.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container .title, +.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container .title .title-label a, +.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container .title .title-label span { + cursor: -webkit-grab; +} + +#monaco-workbench-editor-move-overlay, +.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container.dragged, +.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container.dragged .title, +.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container.dragged .title .title-label a, +.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container.dragged .title .title-label span, +.monaco-workbench > .part.editor > .content.multiple-editors .one-editor-container.dragged .monaco-editor .view-lines { + cursor: -webkit-grabbing; +} + +.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container .title, +.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container .title .title-label a, +.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container .title .title-label span { + cursor: url(data:;base64,AAACAAEAICACAAcABQAwAQAAFgAAACgAAAAgAAAAQAAAAAEAAQAAAAAAAAEAAAAAAAAAAAAAAgAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAA/AAAAfwAAAP+AAAH/gAAB/8AAA//AAAd/wAAGf+AAAH9gAADbYAAA2yAAAZsAAAGbAAAAGAAAAAAAAA//////////////////////////////////////////////////////////////////////////////////////gH///4B///8Af//+AD///AA///wAH//4AB//8AAf//AAD//5AA///gAP//4AD//8AF///AB///5A////5///8=), auto; +} + +#monaco-workbench-editor-move-overlay-custom-drag-cursor, +.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container.dragged, +.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container.dragged .title, +.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container.dragged .title .title-label a, +.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container.dragged .title .title-label span, +.monaco-workbench > .part.editor > .content.multiple-editors.custom-drag-cursor .one-editor-container.dragged .monaco-editor .view-lines { + cursor: url(data:;base64,AAACAAEAICACAAcABQAwAQAAFgAAACgAAAAgAAAAQAAAAAEAAQAAAAAAAAEAAAAAAAAAAAAAAgAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAA/AAAAfwAAAP+AAAH/gAAB/8AAAH/AAAB/wAAA/0AAANsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////////////////////////////////////////////////gH///4B///8Af//+AD///AA///wAH//+AB///wAf//4AH//+AD///yT/////////////////////////////8=), auto; +} \ No newline at end of file diff --git a/src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts b/src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts index 3197699ed5d8ca1374bcf8571978cd6b528406f9..782285231e78bfed638ea05692a6752c1a4ea825 100644 --- a/src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts +++ b/src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts @@ -27,9 +27,12 @@ import {IInstantiationService} from 'vs/platform/instantiation/common/instantiat import {IKeybindingService} from 'vs/platform/keybinding/common/keybindingService'; import {IDisposable, dispose} from 'vs/base/common/lifecycle'; import {TabsTitleControl} from 'vs/workbench/browser/parts/editor/tabsTitleControl'; +import {NoTabsTitleControl} from 'vs/workbench/browser/parts/editor/noTabsTitleControl'; import {IEditorStacksModel} from 'vs/workbench/common/editor'; import {ITitleAreaControl} from 'vs/workbench/browser/parts/editor/titleControl'; +const useTabs = true; + export enum Rochade { NONE, CENTER_TO_LEFT, @@ -699,7 +702,7 @@ export class SideBySideEditorControl implements ISideBySideEditorControl, IVerti this.titleContainer[position] = $(this.containers[position]).div({ 'class': 'title' }); this.hookTitleDragListener(position); - this.titleAreaControl[position] = this.instantiationService.createInstance(TabsTitleControl); + this.titleAreaControl[position] = useTabs ? this.instantiationService.createInstance(TabsTitleControl) : this.instantiationService.createInstance(NoTabsTitleControl); this.titleAreaControl[position].create($(this.titleContainer[position])); this.titleAreaControl[position].setContext(this.stacks.groupAt(position)); }); @@ -721,12 +724,15 @@ export class SideBySideEditorControl implements ISideBySideEditorControl, IVerti // Allow to reorder positions by dragging the title this.titleContainer[position].on(DOM.EventType.MOUSE_DOWN, (e: MouseEvent) => { + if (!this.titleAreaControl[position].allowDragging(e.target || e.srcElement)) { + return; // return early if we are not in the drag zone of the title widget + } // Reset flag wasDragged = false; // Return early if there is only one editor active or the user clicked into the toolbar - if (this.getVisibleEditorCount() <= 1 || !!DOM.findParentWithClass((e.target || e.srcElement), 'monaco-action-bar', 'one-editor-container')) { + if (this.getVisibleEditorCount() <= 1) { return; } diff --git a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts index aebd7c6bcf16c9d2279a12ac9ab6c5da3792ee15..d0057cf3d424af341596ddac57ba6beef7146ed7 100644 --- a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts +++ b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts @@ -76,6 +76,10 @@ export class TabsTitleControl extends TitleControl { }); } + public allowDragging(element: HTMLElement): boolean { + return (element.className === 'tabs-container'); + } + public refresh(): void { if (!this.context) { return; @@ -121,7 +125,7 @@ export class TabsTitleControl extends TitleControl { // Empty container first this.tabsContainer.empty(); - while(this.tabActionBars.length) { + while (this.tabActionBars.length) { this.tabActionBars.pop().dispose(); } diff --git a/src/vs/workbench/browser/parts/editor/titleControl.ts b/src/vs/workbench/browser/parts/editor/titleControl.ts index 82c9ba81b847c00041968dc0d9eaceb1b7c7dbbe..5d2ffe5d9c6dcc4b7206337f1b47ec4c1d7f2901 100644 --- a/src/vs/workbench/browser/parts/editor/titleControl.ts +++ b/src/vs/workbench/browser/parts/editor/titleControl.ts @@ -5,12 +5,14 @@ 'use strict'; +import 'vs/css!./media/titlecontrol'; import nls = require('vs/nls'); import {Registry} from 'vs/platform/platform'; import {Scope, IActionBarRegistry, Extensions} from 'vs/workbench/browser/actionBarRegistry'; import {IAction, Action} from 'vs/base/common/actions'; import errors = require('vs/base/common/errors'); import {Builder} from 'vs/base/browser/builder'; +import DOM = require('vs/base/browser/dom'); import {BaseEditor, IEditorInputActionContext} from 'vs/workbench/browser/parts/editor/baseEditor'; import {RunOnceScheduler} from 'vs/base/common/async'; import {IEditorStacksModel, IEditorGroup, EditorInput} from 'vs/workbench/common/editor'; @@ -36,6 +38,7 @@ export interface IToolbarActions { export interface ITitleAreaControl { setContext(group: IEditorGroup): void; + allowDragging(element: HTMLElement): boolean; create(parent: Builder): void; refresh(): void; dispose(): void; @@ -87,6 +90,10 @@ export abstract class TitleControl { public abstract refresh(); + public allowDragging(element: HTMLElement): boolean { + return !DOM.findParentWithClass(element, 'monaco-action-bar', 'one-editor-container'); + } + private initActions(): void { this.closeEditorAction = this.instantiationService.createInstance(CloseEditorAction, CloseEditorAction.ID, nls.localize('close', "Close")); this.showAllEditorsAction = this.instantiationService.createInstance(ShowAllEditorsAction, ShowAllEditorsAction.ID, nls.localize('showEditors', "Show Editors"));