fixes #94401
This commit is contained in:
parent
05f97f5dbf
commit
a15ef2c073
5 changed files with 16 additions and 12 deletions
|
@ -509,8 +509,10 @@ export function containsDragType(event: DragEvent, ...dragTypesToFind: string[])
|
|||
return false;
|
||||
}
|
||||
|
||||
export type Before2D = { verticallyBefore: boolean; horizontallyBefore: boolean; };
|
||||
|
||||
export interface ICompositeDragAndDrop {
|
||||
drop(data: IDragAndDropData, target: string | undefined, originalEvent: DragEvent, before?: boolean): void;
|
||||
drop(data: IDragAndDropData, target: string | undefined, originalEvent: DragEvent, before?: Before2D): void;
|
||||
onDragOver(data: IDragAndDropData, target: string | undefined, originalEvent: DragEvent): boolean;
|
||||
onDragEnter(data: IDragAndDropData, target: string | undefined, originalEvent: DragEvent): boolean;
|
||||
}
|
||||
|
|
|
@ -42,6 +42,7 @@ import { IEnvironmentService } from 'vs/platform/environment/common/environment'
|
|||
import { IStorageKeysSyncRegistryService } from 'vs/platform/userDataSync/common/storageKeys';
|
||||
import { getUserDataSyncStore } from 'vs/platform/userDataSync/common/userDataSync';
|
||||
import { IProductService } from 'vs/platform/product/common/productService';
|
||||
import { Before2D } from 'vs/workbench/browser/dnd';
|
||||
|
||||
interface IPlaceholderViewlet {
|
||||
id: string;
|
||||
|
@ -152,7 +153,7 @@ export class ActivitybarPart extends Part implements IActivityBarService {
|
|||
hidePart: () => this.layoutService.setSideBarHidden(true),
|
||||
dndHandler: new CompositeDragAndDrop(this.viewDescriptorService, ViewContainerLocation.Sidebar,
|
||||
(id: string, focus?: boolean) => this.viewletService.openViewlet(id, focus),
|
||||
(from: string, to: string, before?: boolean) => this.compositeBar.move(from, to, before)
|
||||
(from: string, to: string, before?: Before2D) => this.compositeBar.move(from, to, before?.verticallyBefore)
|
||||
),
|
||||
compositeSize: 50,
|
||||
colors: (theme: IColorTheme) => this.getActivitybarItemColors(theme),
|
||||
|
|
|
@ -23,7 +23,7 @@ import { Registry } from 'vs/platform/registry/common/platform';
|
|||
import { IViewContainersRegistry, Extensions as ViewContainerExtensions, ViewContainerLocation, IViewDescriptorService } from 'vs/workbench/common/views';
|
||||
import { IPaneComposite } from 'vs/workbench/common/panecomposite';
|
||||
import { IComposite } from 'vs/workbench/common/composite';
|
||||
import { CompositeDragAndDropData, CompositeDragAndDropObserver, IDraggedCompositeData, ICompositeDragAndDrop } from 'vs/workbench/browser/dnd';
|
||||
import { CompositeDragAndDropData, CompositeDragAndDropObserver, IDraggedCompositeData, ICompositeDragAndDrop, Before2D } from 'vs/workbench/browser/dnd';
|
||||
|
||||
export interface ICompositeBarItem {
|
||||
id: string;
|
||||
|
@ -39,9 +39,9 @@ export class CompositeDragAndDrop implements ICompositeDragAndDrop {
|
|||
private viewDescriptorService: IViewDescriptorService,
|
||||
private targetContainerLocation: ViewContainerLocation,
|
||||
private openComposite: (id: string, focus?: boolean) => Promise<IPaneComposite | undefined>,
|
||||
private moveComposite: (from: string, to: string, before?: boolean) => void,
|
||||
private moveComposite: (from: string, to: string, before?: Before2D) => void,
|
||||
) { }
|
||||
drop(data: CompositeDragAndDropData, targetCompositeId: string | undefined, originalEvent: DragEvent, before?: boolean): void {
|
||||
drop(data: CompositeDragAndDropData, targetCompositeId: string | undefined, originalEvent: DragEvent, before?: Before2D): void {
|
||||
const dragData = data.getData();
|
||||
const viewContainerRegistry = Registry.as<IViewContainersRegistry>(ViewContainerExtensions.ViewContainersRegistry);
|
||||
|
||||
|
@ -255,7 +255,7 @@ export class CompositeBar extends Widget implements ICompositeBar {
|
|||
},
|
||||
onDrop: (e: IDraggedCompositeData) => {
|
||||
const pinnedItems = this.getPinnedComposites();
|
||||
this.options.dndHandler.drop(e.dragAndDropData, pinnedItems[pinnedItems.length - 1].id, e.eventData, false);
|
||||
this.options.dndHandler.drop(e.dragAndDropData, pinnedItems[pinnedItems.length - 1].id, e.eventData, { horizontallyBefore: false, verticallyBefore: false });
|
||||
toggleClass(parent, 'dragged-over', false);
|
||||
}
|
||||
}));
|
||||
|
|
|
@ -18,7 +18,7 @@ import { DelayedDragHandler } from 'vs/base/browser/dnd';
|
|||
import { IActivity } from 'vs/workbench/common/activity';
|
||||
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
||||
import { Emitter } from 'vs/base/common/event';
|
||||
import { LocalSelectionTransfer, DraggedCompositeIdentifier, DraggedViewIdentifier, CompositeDragAndDropObserver, ICompositeDragAndDrop } from 'vs/workbench/browser/dnd';
|
||||
import { LocalSelectionTransfer, DraggedCompositeIdentifier, DraggedViewIdentifier, CompositeDragAndDropObserver, ICompositeDragAndDrop, Before2D } from 'vs/workbench/browser/dnd';
|
||||
import { Color } from 'vs/base/common/color';
|
||||
|
||||
export interface ICompositeActivity {
|
||||
|
@ -516,7 +516,7 @@ export class CompositeActionViewItem extends ActivityActionViewItem {
|
|||
this.showContextMenu(container);
|
||||
}));
|
||||
|
||||
let insertDropBefore: boolean | undefined = undefined;
|
||||
let insertDropBefore: Before2D | undefined = undefined;
|
||||
// Allow to drag
|
||||
this._register(CompositeDragAndDropObserver.INSTANCE.registerDraggable(this.container, () => { return { type: 'composite', id: this.activity.id }; }, {
|
||||
onDragOver: e => {
|
||||
|
@ -534,7 +534,7 @@ export class CompositeActionViewItem extends ActivityActionViewItem {
|
|||
|
||||
onDrop: e => {
|
||||
dom.EventHelper.stop(e.eventData, true);
|
||||
this.dndHandler.drop(e.dragAndDropData, this.activity.id, e.eventData, !!insertDropBefore);
|
||||
this.dndHandler.drop(e.dragAndDropData, this.activity.id, e.eventData, insertDropBefore);
|
||||
insertDropBefore = this.updateFromDragging(container, false, e.eventData);
|
||||
},
|
||||
onDragStart: e => {
|
||||
|
@ -563,7 +563,7 @@ export class CompositeActionViewItem extends ActivityActionViewItem {
|
|||
this.updateStyles();
|
||||
}
|
||||
|
||||
private updateFromDragging(element: HTMLElement, showFeedback: boolean, event: DragEvent): boolean | undefined {
|
||||
private updateFromDragging(element: HTMLElement, showFeedback: boolean, event: DragEvent): Before2D | undefined {
|
||||
const rect = element.getBoundingClientRect();
|
||||
const posX = event.clientX;
|
||||
const posY = event.clientY;
|
||||
|
@ -598,7 +598,7 @@ export class CompositeActionViewItem extends ActivityActionViewItem {
|
|||
return undefined;
|
||||
}
|
||||
|
||||
return top || left;
|
||||
return { verticallyBefore: top, horizontallyBefore: left };
|
||||
}
|
||||
|
||||
private showContextMenu(container: HTMLElement): void {
|
||||
|
|
|
@ -38,6 +38,7 @@ import { MenuId } from 'vs/platform/actions/common/actions';
|
|||
import { ViewMenuActions } from 'vs/workbench/browser/parts/views/viewMenuActions';
|
||||
import { IPaneComposite } from 'vs/workbench/common/panecomposite';
|
||||
import { IStorageKeysSyncRegistryService } from 'vs/platform/userDataSync/common/storageKeys';
|
||||
import { Before2D } from 'vs/workbench/browser/dnd';
|
||||
|
||||
interface ICachedPanel {
|
||||
id: string;
|
||||
|
@ -148,7 +149,7 @@ export class PanelPart extends CompositePart<Panel> implements IPanelService {
|
|||
hidePart: () => this.layoutService.setPanelHidden(true),
|
||||
dndHandler: new CompositeDragAndDrop(this.viewDescriptorService, ViewContainerLocation.Panel,
|
||||
(id: string, focus?: boolean) => this.openPanel(id, focus) as Promise<IPaneComposite | undefined>,
|
||||
(from: string, to: string, before?: boolean) => this.compositeBar.move(from, to, before)
|
||||
(from: string, to: string, before?: Before2D) => this.compositeBar.move(from, to, before?.horizontallyBefore)
|
||||
),
|
||||
compositeSize: 0,
|
||||
overflowActionSize: 44,
|
||||
|
|
Loading…
Reference in a new issue