mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-27 20:13:32 +01:00
Sash double clicks (#4702)
* Support double click on sashes We had to implement a slight change in the sash drag "hack", by removing the full cover transparent overlay (that was preventing clicks events from being fired) and replacing it by a CSS `cursor` rule on the document.body. The ideal solution for a clean dragging events implementation would be to use the `Element.setCapture` API that is unfortunately not available in Chrome. * Center the split editor frontier by double-clicking on it * Reset the bottom panel size by double-clicking on it * Implement sash reset on diff editors * Fix a bug with DOM measurement The calculus was plain wrong as showed in https://github.com/winjs/winjs/issues/1621 This was probably unotified since this utility function wasn't used in the code base. * Implement sidebar sash optimal resizing Fixes #4660 * Abstract `getLargestChildWidth` into a DOM method This commit also moves the `getOptimalWidth` method from the `Composite` to the `Viewlet` component. This partially addresses https://github.com/Microsoft/vscode/pull/4702#issuecomment-207813241 * Calculate the sidebar optimal width correctly in case no folder is open
This commit is contained in:
committed by
Benjamin Pasero
parent
b83330695a
commit
65bdaf3aec
@@ -12,6 +12,7 @@ import {Sash, ISashEvent, IVerticalSashLayoutProvider, IHorizontalSashLayoutProv
|
||||
import {IWorkbenchEditorService} from 'vs/workbench/services/editor/common/editorService';
|
||||
import {IPartService, Position} from 'vs/workbench/services/part/common/partService';
|
||||
import {IWorkspaceContextService} from 'vs/workbench/services/workspace/common/contextService';
|
||||
import {IViewletService} from 'vs/workbench/services/viewlet/common/viewletService';
|
||||
import {IStorageService, StorageScope} from 'vs/platform/storage/common/storage';
|
||||
import {IContextViewService} from 'vs/platform/contextview/browser/contextView';
|
||||
import {IEventService} from 'vs/platform/event/common/event';
|
||||
@@ -94,6 +95,7 @@ export class WorkbenchLayout implements IVerticalSashLayoutProvider, IHorizontal
|
||||
@IWorkbenchEditorService private editorService: IWorkbenchEditorService,
|
||||
@IWorkspaceContextService private contextService: IWorkspaceContextService,
|
||||
@IPartService private partService: IPartService,
|
||||
@IViewletService private viewletService: IViewletService,
|
||||
@IThemeService themeService: IThemeService
|
||||
) {
|
||||
this.parent = parent;
|
||||
@@ -190,7 +192,7 @@ export class WorkbenchLayout implements IVerticalSashLayoutProvider, IHorizontal
|
||||
let dragCompensation = DEFAULT_MIN_PANEL_PART_HEIGHT - HIDE_PANEL_HEIGHT_THRESHOLD;
|
||||
this.partService.setPanelHidden(true);
|
||||
startY = Math.min(this.sidebarHeight - this.computedStyles.statusbar.height, e.currentY + dragCompensation);
|
||||
this.panelHeight = this.startPanelHeight; // when restoring panel, restore to the panel width we started from
|
||||
this.panelHeight = this.startPanelHeight; // when restoring panel, restore to the panel height we started from
|
||||
}
|
||||
|
||||
// Otherwise size the panel accordingly
|
||||
@@ -217,9 +219,26 @@ export class WorkbenchLayout implements IVerticalSashLayoutProvider, IHorizontal
|
||||
this.sashX.addListener('end', () => {
|
||||
this.storageService.store(WorkbenchLayout.sashXWidthSettingsKey, this.sidebarWidth, StorageScope.GLOBAL);
|
||||
});
|
||||
|
||||
this.sashY.addListener('end', () => {
|
||||
this.storageService.store(WorkbenchLayout.sashYHeightSettingsKey, this.panelHeight, StorageScope.GLOBAL);
|
||||
});
|
||||
|
||||
this.sashY.addListener('reset', () => {
|
||||
this.panelHeight = DEFAULT_MIN_PANEL_PART_HEIGHT;
|
||||
this.storageService.store(WorkbenchLayout.sashYHeightSettingsKey, this.panelHeight, StorageScope.GLOBAL);
|
||||
this.partService.setPanelHidden(false);
|
||||
this.layout();
|
||||
});
|
||||
|
||||
this.sashX.addListener('reset', () => {
|
||||
let activeViewlet = this.viewletService.getActiveViewlet();
|
||||
let optimalWidth = activeViewlet && activeViewlet.getOptimalWidth();
|
||||
this.sidebarWidth = Math.max(DEFAULT_MIN_PART_WIDTH, optimalWidth || 0);
|
||||
this.storageService.store(WorkbenchLayout.sashXWidthSettingsKey, this.sidebarWidth, StorageScope.GLOBAL);
|
||||
this.partService.setSideBarHidden(false);
|
||||
this.layout();
|
||||
});
|
||||
}
|
||||
|
||||
private onEditorInputChanging(e: EditorEvent): void {
|
||||
|
||||
Reference in New Issue
Block a user