-
Notifications
You must be signed in to change notification settings - Fork 28.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fixes #182449 : Pressing Shift re-enables webview during Drag and Drop Events #209211
Changes from all commits
380d97d
be66f6f
f196319
42b7633
fe8151d
98e3a68
e76c059
c6361ee
97b4988
8af6d82
53ad1f1
8b967f9
c8afa84
ff222e5
306e5be
889f3c5
7b89902
f123cd2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,6 +17,10 @@ type KeyEvent = { | |
repeat: boolean; | ||
} | ||
|
||
type WebViewDragEvent = { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I tried to type this |
||
shiftKey: boolean; | ||
} | ||
|
||
export type FromWebviewMessage = { | ||
'onmessage': { message: any; transfer?: ArrayBuffer[] }; | ||
'did-click-link': { uri: string }; | ||
|
@@ -36,6 +40,7 @@ export type FromWebviewMessage = { | |
'did-keyup': KeyEvent; | ||
'did-context-menu': { clientX: number; clientY: number; context: { [key: string]: unknown } }; | ||
'drag-start': void; | ||
'drag': WebViewDragEvent | ||
}; | ||
|
||
interface UpdateContentEvent { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -18,19 +18,41 @@ export class WebviewWindowDragMonitor extends Disposable { | |
constructor(targetWindow: CodeWindow, getWebview: () => IWebview | undefined) { | ||
super(); | ||
|
||
this._register(DOM.addDisposableListener(targetWindow, DOM.EventType.DRAG_START, () => { | ||
const > () => { | ||
getWebview()?.windowDidDragStart(); | ||
})); | ||
}; | ||
|
||
const => { | ||
getWebview()?.windowDidDragEnd(); | ||
}; | ||
|
||
this._register(DOM.addDisposableListener(targetWindow, DOM.EventType.DRAG_START, () => { | ||
onDragStart(); | ||
})); | ||
|
||
this._register(DOM.addDisposableListener(targetWindow, DOM.EventType.DRAG_END, onDragEnd)); | ||
|
||
this._register(DOM.addDisposableListener(targetWindow, DOM.EventType.MOUSE_MOVE, currentEvent => { | ||
if (currentEvent.buttons === 0) { | ||
onDragEnd(); | ||
} | ||
})); | ||
|
||
this._register(DOM.addDisposableListener(targetWindow, DOM.EventType.DRAG, (event) => { | ||
if (event.shiftKey) { | ||
onDragEnd(); | ||
} else { | ||
onDragStart(); | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we could change this to re-disable the webview when the user releases shift.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes I think that makes sense. Otherwise you have to restart dragging if you want to open the dragged resource in an editor instead of dropping it into the webview There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @mjbvz I've made some updates to address the feature that was requested. I noticed you tagged this with the April 2024 milestone and I would love to address any change requests/concerns prior to that deadline. And thank you for your hard work! |
||
})); | ||
|
||
this._register(DOM.addDisposableListener(targetWindow, DOM.EventType.DRAG_OVER, (event) => { | ||
if (event.shiftKey) { | ||
onDragEnd(); | ||
} else { | ||
onDragStart(); | ||
} | ||
})); | ||
|
||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we likely need to prevent default after we pass this to our custom drag event listener