Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
3cc3b147
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,发现更多精彩内容 >>
未验证
提交
3cc3b147
编写于
9月 18, 2018
作者:
B
Benjamin Pasero
提交者:
GitHub
9月 18, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
change active text editor logic to ignore blur events (#58887)
上级
b5acbdd0
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
64 addition
and
14 deletion
+64
-14
src/vs/workbench/api/electron-browser/mainThreadDocumentsAndEditors.ts
...nch/api/electron-browser/mainThreadDocumentsAndEditors.ts
+45
-13
src/vs/workbench/test/electron-browser/api/mainThreadDocumentsAndEditors.test.ts
...lectron-browser/api/mainThreadDocumentsAndEditors.test.ts
+10
-1
src/vs/workbench/test/electron-browser/api/mainThreadEditors.test.ts
...bench/test/electron-browser/api/mainThreadEditors.test.ts
+9
-0
未找到文件。
src/vs/workbench/api/electron-browser/mainThreadDocumentsAndEditors.ts
浏览文件 @
3cc3b147
...
...
@@ -14,7 +14,7 @@ import { MainThreadTextEditor } from './mainThreadEditor';
import
{
ITextFileService
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
import
{
IEditorGroupsService
}
from
'
vs/workbench/services/group/common/editorGroupsService
'
;
import
{
EditorViewColumn
,
editorGroupToViewColumn
}
from
'
vs/workbench/api/shared/editor
'
;
import
{
IEditor
}
from
'
vs/workbench/common/editor
'
;
import
{
IEditor
as
IWorkbenchEditor
}
from
'
vs/workbench/common/editor
'
;
import
{
extHostCustomer
}
from
'
vs/workbench/api/electron-browser/extHostCustomers
'
;
import
{
MainThreadDocuments
}
from
'
vs/workbench/api/electron-browser/mainThreadDocuments
'
;
import
{
MainThreadTextEditors
}
from
'
vs/workbench/api/electron-browser/mainThreadEditors
'
;
...
...
@@ -23,9 +23,12 @@ import { IFileService } from 'vs/platform/files/common/files';
import
{
ITextModelService
}
from
'
vs/editor/common/services/resolverService
'
;
import
{
IUntitledEditorService
}
from
'
vs/workbench/services/untitled/common/untitledEditorService
'
;
import
{
IEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
isDiffEditor
,
ICodeEditor
}
from
'
vs/editor/browser/editorBrowser
'
;
import
{
isDiffEditor
,
ICodeEditor
,
isCodeEditor
}
from
'
vs/editor/browser/editorBrowser
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
IBulkEditService
}
from
'
vs/editor/browser/services/bulkEditService
'
;
import
{
IPanelService
}
from
'
vs/workbench/services/panel/common/panelService
'
;
import
{
BaseTextEditor
}
from
'
vs/workbench/browser/parts/editor/textEditor
'
;
import
{
IEditor
}
from
'
vs/editor/common/editorCommon
'
;
namespace
mapset
{
...
...
@@ -151,17 +154,23 @@ class DocumentAndEditorState {
}
}
const
enum
ActiveEditorOrder
{
Editor
,
Panel
}
class
MainThreadDocumentAndEditorStateComputer
{
private
_toDispose
:
IDisposable
[]
=
[];
private
_toDisposeOnEditorRemove
=
new
Map
<
string
,
IDisposable
>
();
private
_currentState
:
DocumentAndEditorState
;
private
_activeEditorOrder
:
ActiveEditorOrder
=
ActiveEditorOrder
.
Editor
;
constructor
(
private
readonly
_onDidChangeState
:
(
delta
:
DocumentAndEditorStateDelta
)
=>
void
,
@
IModelService
private
readonly
_modelService
:
IModelService
,
@
ICodeEditorService
private
readonly
_codeEditorService
:
ICodeEditorService
,
@
IEditorService
private
readonly
_editorService
:
IEditorService
@
IEditorService
private
readonly
_editorService
:
IEditorService
,
@
IPanelService
private
readonly
_panelService
:
IPanelService
)
{
this
.
_modelService
.
onModelAdded
(
this
.
_updateStateOnModelAdd
,
this
,
this
.
_toDispose
);
this
.
_modelService
.
onModelRemoved
(
this
.
_updateState
,
this
,
this
.
_toDispose
);
...
...
@@ -170,6 +179,10 @@ class MainThreadDocumentAndEditorStateComputer {
this
.
_codeEditorService
.
onCodeEditorRemove
(
this
.
_onDidRemoveEditor
,
this
,
this
.
_toDispose
);
this
.
_codeEditorService
.
listCodeEditors
().
forEach
(
this
.
_onDidAddEditor
,
this
);
this
.
_panelService
.
onDidPanelOpen
(
_
=>
this
.
_activeEditorOrder
=
ActiveEditorOrder
.
Panel
,
undefined
,
this
.
_toDispose
);
this
.
_panelService
.
onDidPanelClose
(
_
=>
this
.
_activeEditorOrder
=
ActiveEditorOrder
.
Editor
,
undefined
,
this
.
_toDispose
);
this
.
_editorService
.
onDidVisibleEditorsChange
(
_
=>
this
.
_activeEditorOrder
=
ActiveEditorOrder
.
Editor
,
undefined
,
this
.
_toDispose
);
this
.
_updateState
();
}
...
...
@@ -180,7 +193,6 @@ class MainThreadDocumentAndEditorStateComputer {
private
_onDidAddEditor
(
e
:
ICodeEditor
):
void
{
this
.
_toDisposeOnEditorRemove
.
set
(
e
.
getId
(),
e
.
onDidChangeModel
(()
=>
this
.
_updateState
()));
this
.
_toDisposeOnEditorRemove
.
set
(
e
.
getId
(),
e
.
onDidFocusEditorText
(()
=>
this
.
_updateState
()));
this
.
_toDisposeOnEditorRemove
.
set
(
e
.
getId
(),
e
.
onDidBlurEditorText
(()
=>
this
.
_updateState
()));
this
.
_updateState
();
}
...
...
@@ -229,7 +241,6 @@ class MainThreadDocumentAndEditorStateComputer {
}
}
// editor: only take those that have a not too large model
const
editors
=
new
Map
<
string
,
TextEditorSnapshot
>
();
let
activeEditor
:
string
=
null
;
...
...
@@ -252,13 +263,16 @@ class MainThreadDocumentAndEditorStateComputer {
}
// active editor: if none of the previous editors had focus we try
// to match
the active workbench editor with one of editor we have
// just computed
// to match
output panels or the the active workbench editor with
//
one of editor we have
just computed
if
(
!
activeEditor
)
{
let
candidate
=
this
.
_editorService
.
activeTextEditorWidget
;
if
(
isDiffEditor
(
candidate
))
{
candidate
=
candidate
.
getModifiedEditor
();
let
candidate
:
IEditor
;
if
(
this
.
_activeEditorOrder
===
ActiveEditorOrder
.
Editor
)
{
candidate
=
this
.
_getActiveEditorFromEditorPart
()
||
this
.
_getActiveEditorFromPanel
();
}
else
{
candidate
=
this
.
_getActiveEditorFromPanel
()
||
this
.
_getActiveEditorFromEditorPart
();
}
if
(
candidate
)
{
editors
.
forEach
(
snapshot
=>
{
if
(
candidate
===
snapshot
.
editor
)
{
...
...
@@ -276,6 +290,23 @@ class MainThreadDocumentAndEditorStateComputer {
this
.
_onDidChangeState
(
delta
);
}
}
private
_getActiveEditorFromPanel
():
IEditor
{
let
panel
=
this
.
_panelService
.
getActivePanel
();
if
(
panel
instanceof
BaseTextEditor
&&
isCodeEditor
(
panel
.
getControl
()))
{
return
panel
.
getControl
();
}
else
{
return
undefined
;
}
}
private
_getActiveEditorFromEditorPart
():
IEditor
{
let
result
=
this
.
_editorService
.
activeTextEditorWidget
;
if
(
isDiffEditor
(
result
))
{
result
=
result
.
getModifiedEditor
();
}
return
result
;
}
}
@
extHostCustomer
...
...
@@ -307,7 +338,8 @@ export class MainThreadDocumentsAndEditors {
@
ITextModelService
textModelResolverService
:
ITextModelService
,
@
IUntitledEditorService
untitledEditorService
:
IUntitledEditorService
,
@
IEditorGroupsService
private
readonly
_editorGroupService
:
IEditorGroupsService
,
@
IBulkEditService
bulkEditService
:
IBulkEditService
@
IBulkEditService
bulkEditService
:
IBulkEditService
,
@
IPanelService
panelService
:
IPanelService
)
{
this
.
_proxy
=
extHostContext
.
getProxy
(
ExtHostContext
.
ExtHostDocumentsAndEditors
);
...
...
@@ -319,7 +351,7 @@ export class MainThreadDocumentsAndEditors {
extHostContext
.
set
(
MainContext
.
MainThreadTextEditors
,
mainThreadTextEditors
);
// It is expected that the ctor of the state computer calls our `_onDelta`.
this
.
_stateComputer
=
new
MainThreadDocumentAndEditorStateComputer
(
delta
=>
this
.
_onDelta
(
delta
),
_modelService
,
codeEditorService
,
this
.
_editorService
);
this
.
_stateComputer
=
new
MainThreadDocumentAndEditorStateComputer
(
delta
=>
this
.
_onDelta
(
delta
),
_modelService
,
codeEditorService
,
this
.
_editorService
,
panelService
);
this
.
_toDispose
=
[
mainThreadDocuments
,
...
...
@@ -430,7 +462,7 @@ export class MainThreadDocumentsAndEditors {
return
undefined
;
}
findTextEditorIdFor
(
editor
:
IEditor
):
string
{
findTextEditorIdFor
(
editor
:
I
Workbench
Editor
):
string
{
for
(
let
id
in
this
.
_textEditors
)
{
if
(
this
.
_textEditors
[
id
].
matches
(
editor
))
{
return
id
;
...
...
src/vs/workbench/test/electron-browser/api/mainThreadDocumentsAndEditors.test.ts
浏览文件 @
3cc3b147
...
...
@@ -21,6 +21,7 @@ import { ITextModel } from 'vs/editor/common/model';
import
{
ServiceCollection
}
from
'
vs/platform/instantiation/common/serviceCollection
'
;
import
{
ICodeEditorService
}
from
'
vs/editor/browser/services/codeEditorService
'
;
import
{
IFileService
}
from
'
vs/platform/files/common/files
'
;
import
{
IPanelService
}
from
'
vs/workbench/services/panel/common/panelService
'
;
suite
(
'
MainThreadDocumentsAndEditors
'
,
()
=>
{
...
...
@@ -74,7 +75,15 @@ suite('MainThreadDocumentsAndEditors', () => {
null
,
null
,
editorGroupService
,
null
null
,
new
class
extends
mock
<
IPanelService
>
()
implements
IPanelService
{
_serviceBrand
:
any
;
onDidPanelOpen
=
Event
.
None
;
onDidPanelClose
=
Event
.
None
;
getActivePanel
()
{
return
null
;
}
}
);
/* tslint:enable */
});
...
...
src/vs/workbench/test/electron-browser/api/mainThreadEditors.test.ts
浏览文件 @
3cc3b147
...
...
@@ -29,6 +29,7 @@ import { NullLogService } from 'vs/platform/log/common/log';
import
{
ITextModelService
,
ITextEditorModel
}
from
'
vs/editor/common/services/resolverService
'
;
import
{
IReference
,
ImmortalReference
}
from
'
vs/base/common/lifecycle
'
;
import
{
LabelService
}
from
'
vs/platform/label/common/label
'
;
import
{
IPanelService
}
from
'
vs/workbench/services/panel/common/panelService
'
;
suite
(
'
MainThreadEditors
'
,
()
=>
{
...
...
@@ -108,6 +109,14 @@ suite('MainThreadEditors', () => {
null
,
editorGroupService
,
bulkEditService
,
new
class
extends
mock
<
IPanelService
>
()
implements
IPanelService
{
_serviceBrand
:
any
;
onDidPanelOpen
=
Event
.
None
;
onDidPanelClose
=
Event
.
None
;
getActivePanel
()
{
return
null
;
}
}
);
editors
=
new
MainThreadTextEditors
(
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录