@@ -41,7 +41,7 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
4141import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey' ;
4242import { IContextViewService , IContextMenuService } from 'vs/platform/contextview/browser/contextView' ;
4343import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation' ;
44- import { IMessageService , IConfirmation , Severity } from 'vs/platform/message/common/message' ;
44+ import { IMessageService , IConfirmation , Severity , IConfirmationResult } from 'vs/platform/message/common/message' ;
4545import { IProgressService } from 'vs/platform/progress/common/progress' ;
4646import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry' ;
4747import { KeyCode } from 'vs/base/common/keyCodes' ;
@@ -57,6 +57,7 @@ import { distinct } from 'vs/base/common/arrays';
5757import { IEnvironmentService } from 'vs/platform/environment/common/environment' ;
5858import { getPathLabel } from 'vs/base/common/labels' ;
5959import { extractResources } from 'vs/base/browser/dnd' ;
60+ import { IConfigurationEditingService , ConfigurationTarget } from 'vs/workbench/services/configuration/common/configurationEditing' ;
6061
6162export class FileDataSource implements IDataSource {
6263 constructor (
@@ -728,6 +729,9 @@ export class FileFilter implements IFilter {
728729
729730// Explorer Drag And Drop Controller
730731export class FileDragAndDrop extends SimpleFileResourceDragAndDrop {
732+
733+ private static CONFIRM_DND_SETTING_KEY = 'explorer.confirmDragAndDrop' ;
734+
731735 private toDispose : IDisposable [ ] ;
732736 private dropEnabled : boolean ;
733737
@@ -742,7 +746,8 @@ export class FileDragAndDrop extends SimpleFileResourceDragAndDrop {
742746 @IBackupFileService private backupFileService : IBackupFileService ,
743747 @IWindowService private windowService : IWindowService ,
744748 @IWorkspaceEditingService private workspaceEditingService : IWorkspaceEditingService ,
745- @IEnvironmentService private environmentService : IEnvironmentService
749+ @IEnvironmentService private environmentService : IEnvironmentService ,
750+ @IConfigurationEditingService private configurationEditingService : IConfigurationEditingService
746751 ) {
747752 super ( stat => this . statToResource ( stat ) ) ;
748753
@@ -947,6 +952,41 @@ export class FileDragAndDrop extends SimpleFileResourceDragAndDrop {
947952 const source : FileStat = data . getData ( ) [ 0 ] ;
948953 const isCopy = ( originalEvent . ctrlKey && ! isMacintosh ) || ( originalEvent . altKey && isMacintosh ) ;
949954
955+ let confirmPromise : TPromise < IConfirmationResult > ;
956+
957+ // Handle confirm setting
958+ const confirmDragAndDrop = ! isCopy && this . configurationService . lookup < boolean > ( FileDragAndDrop . CONFIRM_DND_SETTING_KEY ) . value ;
959+ if ( confirmDragAndDrop ) {
960+ confirmPromise = this . messageService . confirm ( {
961+ message : nls . localize ( 'confirmMove' , "Are you sure you want to move '{0}'?" , source . name ) ,
962+ checkbox : {
963+ label : nls . localize ( 'doNotAskAgain' , "Do not ask me again" )
964+ } ,
965+ type : 'question'
966+ } ) ;
967+ } else {
968+ confirmPromise = TPromise . as ( { confirmed : true } as IConfirmationResult ) ;
969+ }
970+
971+ return confirmPromise . then ( confirmation => {
972+
973+ // Check for confirmation checkbox
974+ let updateConfirmSettingsPromise : TPromise < void > = TPromise . as ( void 0 ) ;
975+ if ( confirmation . checkboxChecked === true ) {
976+ updateConfirmSettingsPromise = this . configurationEditingService . writeConfiguration ( ConfigurationTarget . USER , { key : FileDragAndDrop . CONFIRM_DND_SETTING_KEY , value : false } ) ;
977+ }
978+
979+ return updateConfirmSettingsPromise . then ( ( ) => {
980+ if ( confirmation . confirmed ) {
981+ return this . doHandleExplorerDrop ( tree , data , source , target , isCopy ) ;
982+ }
983+
984+ return TPromise . as ( void 0 ) ;
985+ } ) ;
986+ } ) ;
987+ }
988+
989+ private doHandleExplorerDrop ( tree : ITree , data : IDragAndDropData , source : FileStat , target : FileStat , isCopy : boolean ) : TPromise < void > {
950990 return tree . expand ( target ) . then ( ( ) => {
951991
952992 // Reuse duplicate action if user copies
0 commit comments