Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
0b65d038
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0b65d038
编写于
7月 03, 2020
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
dnd - support dirty editor drop that is empty
上级
f3d45264
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
23 addition
and
28 deletion
+23
-28
src/vs/workbench/browser/dnd.ts
src/vs/workbench/browser/dnd.ts
+23
-28
未找到文件。
src/vs/workbench/browser/dnd.ts
浏览文件 @
0b65d038
...
...
@@ -36,13 +36,13 @@ export interface IDraggedResource {
isExternal
:
boolean
;
}
export
class
DraggedEditorIdentifier
{
interface
ISerializedDraggedResource
{
resource
:
string
;
}
constructor
(
private
_identifier
:
IEditorIdentifier
)
{
}
export
class
DraggedEditorIdentifier
{
get
identifier
():
IEditorIdentifier
{
return
this
.
_identifier
;
}
constructor
(
public
readonly
identifier
:
IEditorIdentifier
)
{
}
}
export
class
DraggedEditorGroupIdentifier
{
...
...
@@ -50,20 +50,16 @@ export class DraggedEditorGroupIdentifier {
constructor
(
public
readonly
identifier
:
GroupIdentifier
)
{
}
}
export
interface
IDraggedEditor
extends
IDraggedResource
{
c
ontent
?:
string
;
interface
IDraggedEditorProps
{
dirtyC
ontent
?:
string
;
encoding
?:
string
;
mode
?:
string
;
options
?:
ITextEditorOptions
;
}
export
interface
ISerializedDraggedEditor
{
resource
:
string
;
content
?:
string
;
encoding
?:
string
;
mode
?:
string
;
options
?:
ITextEditorOptions
;
}
export
interface
IDraggedEditor
extends
IDraggedResource
,
IDraggedEditorProps
{
}
export
interface
ISerializedDraggedEditor
extends
ISerializedDraggedResource
,
IDraggedEditorProps
{
}
export
const
CodeDataTransfers
=
{
EDITORS
:
'
CodeEditors
'
,
...
...
@@ -85,7 +81,7 @@ export function extractResources(e: DragEvent, externalOnly?: boolean): Array<ID
draggedEditors
.
forEach
(
draggedEditor
=>
{
resources
.
push
({
resource
:
URI
.
parse
(
draggedEditor
.
resource
),
content
:
draggedEditor
.
c
ontent
,
dirtyContent
:
draggedEditor
.
dirtyC
ontent
,
options
:
draggedEditor
.
options
,
encoding
:
draggedEditor
.
encoding
,
mode
:
draggedEditor
.
mode
,
...
...
@@ -182,13 +178,12 @@ export class ResourcesDropHandler {
// Check for special things being dropped
const
isWorkspaceOpening
=
await
this
.
doHandleDrop
(
untitledOrFileResources
);
if
(
isWorkspaceOpening
)
{
return
;
// return early if the drop operation resulted in this window changing to a workspace
}
// Add external ones to recently open list unless dropped resource is a workspace
const
recentFiles
:
IRecentFile
[]
=
untitledOrFileResources
.
filter
(
d
=>
d
.
isExternal
&&
d
.
resource
.
scheme
===
Schemas
.
file
).
map
(
d
=>
({
fileUri
:
d
.
resource
}));
const
recentFiles
:
IRecentFile
[]
=
untitledOrFileResources
.
filter
(
untitledOrFileResource
=>
untitledOrFileResource
.
isExternal
&&
untitledOrFileResource
.
resource
.
scheme
===
Schemas
.
file
).
map
(
d
=>
({
fileUri
:
d
.
resource
}));
if
(
recentFiles
.
length
)
{
this
.
workspacesService
.
addRecentlyOpened
(
recentFiles
);
}
...
...
@@ -215,15 +210,15 @@ export class ResourcesDropHandler {
private
async
doHandleDrop
(
untitledOrFileResources
:
Array
<
IDraggedResource
|
IDraggedEditor
>
):
Promise
<
boolean
>
{
// Check for dirty editors being dropped
const
resourcesWithContent
:
IDraggedEditor
[]
=
untitledOrFileResources
.
filter
(
resource
=>
!
resource
.
isExternal
&&
!!
(
resource
as
IDraggedEditor
).
content
);
if
(
resourcesWithContent
.
length
>
0
)
{
await
Promise
.
all
(
resourcesWithContent
.
map
(
resourceWithContent
=>
this
.
handleDirtyEditorDrop
(
resourceWithContent
)));
const
dirtyEditors
:
IDraggedEditor
[]
=
untitledOrFileResources
.
filter
(
untitledOrFileResource
=>
!
untitledOrFileResource
.
isExternal
&&
typeof
(
untitledOrFileResource
as
IDraggedEditor
).
dirtyContent
===
'
string
'
);
if
(
dirtyEditors
.
length
>
0
)
{
await
Promise
.
all
(
dirtyEditors
.
map
(
dirtyEditor
=>
this
.
handleDirtyEditorDrop
(
dirtyEditor
)));
return
false
;
}
// Check for workspace file being dropped if we are allowed to do so
if
(
this
.
options
.
allowWorkspaceOpen
)
{
const
externalFileOnDiskResources
=
untitledOrFileResources
.
filter
(
d
=>
d
.
isExternal
&&
d
.
resource
.
scheme
===
Schemas
.
file
).
map
(
d
=>
d
.
resource
);
const
externalFileOnDiskResources
=
untitledOrFileResources
.
filter
(
untitledOrFileResource
=>
untitledOrFileResource
.
isExternal
&&
untitledOrFileResource
.
resource
.
scheme
===
Schemas
.
file
).
map
(
d
=>
d
.
resource
);
if
(
externalFileOnDiskResources
.
length
>
0
)
{
return
this
.
handleWorkspaceFileDrop
(
externalFileOnDiskResources
);
}
...
...
@@ -249,9 +244,9 @@ export class ResourcesDropHandler {
// If the dropped editor is dirty with content we simply take that
// content and turn it into a backup so that it loads the contents
if
(
droppedDirtyEditor
.
content
)
{
if
(
typeof
droppedDirtyEditor
.
dirtyContent
===
'
string
'
)
{
try
{
await
this
.
backupFileService
.
backup
(
droppedDirtyEditor
.
resource
,
stringToSnapshot
(
droppedDirtyEditor
.
c
ontent
));
await
this
.
backupFileService
.
backup
(
droppedDirtyEditor
.
resource
,
stringToSnapshot
(
droppedDirtyEditor
.
dirtyC
ontent
));
}
catch
(
e
)
{
// Ignore error
}
...
...
@@ -331,9 +326,9 @@ export function fillResourceDataTransfers(accessor: ServicesAccessor, resources:
}
// Resource URLs: allows to drop multiple resources to a target in VS Code (not directories)
const
files
=
sources
.
filter
(
s
=>
!
s
.
isDirectory
);
const
files
=
sources
.
filter
(
s
ource
=>
!
source
.
isDirectory
);
if
(
files
.
length
)
{
event
.
dataTransfer
.
setData
(
DataTransfers
.
RESOURCES
,
JSON
.
stringify
(
files
.
map
(
f
=>
f
.
resource
.
toString
())));
event
.
dataTransfer
.
setData
(
DataTransfers
.
RESOURCES
,
JSON
.
stringify
(
files
.
map
(
f
ile
=>
file
.
resource
.
toString
())));
}
// Editors: enables cross window DND of tabs into the editor area
...
...
@@ -380,13 +375,13 @@ export function fillResourceDataTransfers(accessor: ServicesAccessor, resources:
// If the resource is dirty or untitled, send over its content
// to restore dirty state. Get that from the text model directly
let
c
ontent
:
string
|
undefined
=
undefined
;
let
dirtyC
ontent
:
string
|
undefined
=
undefined
;
if
(
model
?.
isDirty
())
{
c
ontent
=
model
.
textEditorModel
.
getValue
();
dirtyC
ontent
=
model
.
textEditorModel
.
getValue
();
}
// Add as dragged editor
draggedEditors
.
push
({
resource
:
file
.
resource
.
toString
(),
c
ontent
,
options
,
encoding
,
mode
});
draggedEditors
.
push
({
resource
:
file
.
resource
.
toString
(),
dirtyC
ontent
,
options
,
encoding
,
mode
});
});
if
(
draggedEditors
.
length
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录