@@ -34,7 +34,7 @@ import { loadLocalResource, WebviewResourceResponse } from 'vs/workbench/contrib
34
34
import { WebviewThemeDataProvider } from 'vs/workbench/contrib/webview/browser/themeing' ;
35
35
import { areWebviewContentOptionsEqual , IWebview , WebviewContentOptions , WebviewExtensionDescription , WebviewInitInfo , WebviewMessageReceivedEvent , WebviewOptions } from 'vs/workbench/contrib/webview/browser/webview' ;
36
36
import { WebviewFindDelegate , WebviewFindWidget } from 'vs/workbench/contrib/webview/browser/webviewFindWidget' ;
37
- import { FromWebviewMessage , KeyEvent , ToWebviewMessage } from 'vs/workbench/contrib/webview/browser/webviewMessages' ;
37
+ import { DragEvent , FromWebviewMessage , KeyEvent , ToWebviewMessage } from 'vs/workbench/contrib/webview/browser/webviewMessages' ;
38
38
import { decodeAuthority , webviewGenericCspSource , webviewRootResourceAuthority } from 'vs/workbench/contrib/webview/common/webview' ;
39
39
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService' ;
40
40
import { CodeWindow } from 'vs/base/browser/window' ;
@@ -310,6 +310,10 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD
310
310
this . _startBlockingIframeDragEvents ( ) ;
311
311
} ) ) ;
312
312
313
+ this . _register ( this . on ( 'drag' , ( event ) => {
314
+ this . handleDragEvent ( 'drag' , event ) ;
315
+ } ) ) ;
316
+
313
317
if ( initInfo . options . enableFindWidget ) {
314
318
this . _webviewFindWidget = this . _register ( instantiationService . createInstance ( WebviewFindWidget , this ) ) ;
315
319
}
@@ -697,6 +701,17 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD
697
701
this . window ?. dispatchEvent ( emulatedKeyboardEvent ) ;
698
702
}
699
703
704
+ private handleDragEvent ( type : 'drag' , event : DragEvent ) {
705
+ // Create a fake KeyboardEvent from the data provided
706
+ const emulatedDragEvent = new DragEvent ( type , event ) ;
707
+ // Force override the target
708
+ Object . defineProperty ( emulatedDragEvent , 'target' , {
709
+ get : ( ) => this . element ,
710
+ } ) ;
711
+ // And re-dispatch
712
+ this . window ?. dispatchEvent ( emulatedDragEvent ) ;
713
+ }
714
+
700
715
windowDidDragStart ( ) : void {
701
716
// Webview break drag and dropping around the main window (no events are generated when you are over them)
702
717
// Work around this by disabling pointer events during the drag.
0 commit comments