Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
29475925
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,发现更多精彩内容 >>
提交
29475925
编写于
6月 05, 2019
作者:
M
Matt Bierner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Extend disposable
上级
d34324f8
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
33 addition
and
37 deletion
+33
-37
src/vs/base/browser/ui/selectBox/selectBoxCustom.ts
src/vs/base/browser/ui/selectBox/selectBoxCustom.ts
+24
-26
src/vs/base/browser/ui/selectBox/selectBoxNative.ts
src/vs/base/browser/ui/selectBox/selectBoxNative.ts
+1
-2
src/vs/base/node/config.ts
src/vs/base/node/config.ts
+8
-9
未找到文件。
src/vs/base/browser/ui/selectBox/selectBoxCustom.ts
浏览文件 @
29475925
...
...
@@ -5,7 +5,7 @@
import
'
vs/css!./selectBoxCustom
'
;
import
{
IDisposable
,
dispose
}
from
'
vs/base/common/lifecycle
'
;
import
{
IDisposable
,
dispose
,
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
Event
,
Emitter
}
from
'
vs/base/common/event
'
;
import
{
KeyCode
,
KeyCodeUtils
}
from
'
vs/base/common/keyCodes
'
;
import
{
StandardKeyboardEvent
}
from
'
vs/base/browser/keyboardEvent
'
;
...
...
@@ -80,7 +80,7 @@ class SelectListRenderer implements IListRenderer<ISelectOptionItem, ISelectList
}
}
export
class
SelectBoxList
implements
ISelectBoxDelegate
,
IListVirtualDelegate
<
ISelectOptionItem
>
{
export
class
SelectBoxList
extends
Disposable
implements
ISelectBoxDelegate
,
IListVirtualDelegate
<
ISelectOptionItem
>
{
private
static
readonly
DEFAULT_DROPDOWN_MINIMUM_BOTTOM_MARGIN
=
32
;
private
static
readonly
DEFAULT_DROPDOWN_MINIMUM_TOP_MARGIN
=
2
;
...
...
@@ -92,7 +92,6 @@ export class SelectBoxList implements ISelectBoxDelegate, IListVirtualDelegate<I
private
options
:
ISelectOptionItem
[];
private
selected
:
number
;
private
readonly
_onDidSelect
:
Emitter
<
ISelectData
>
;
private
toDispose
:
IDisposable
[];
private
styles
:
ISelectBoxStyles
;
private
listRenderer
:
SelectListRenderer
;
private
contextViewProvider
:
IContextViewProvider
;
...
...
@@ -111,7 +110,7 @@ export class SelectBoxList implements ISelectBoxDelegate, IListVirtualDelegate<I
constructor
(
options
:
ISelectOptionItem
[],
selected
:
number
,
contextViewProvider
:
IContextViewProvider
,
styles
:
ISelectBoxStyles
,
selectBoxOptions
?:
ISelectBoxOptions
)
{
this
.
toDispose
=
[]
;
super
()
;
this
.
_isVisible
=
false
;
this
.
selectBoxOptions
=
selectBoxOptions
||
Object
.
create
(
null
);
...
...
@@ -131,7 +130,7 @@ export class SelectBoxList implements ISelectBoxDelegate, IListVirtualDelegate<I
}
this
.
_onDidSelect
=
new
Emitter
<
ISelectData
>
();
this
.
toDispose
.
push
(
this
.
_onDidSelect
);
this
.
_register
(
this
.
_onDidSelect
);
this
.
styles
=
styles
;
...
...
@@ -185,7 +184,7 @@ export class SelectBoxList implements ISelectBoxDelegate, IListVirtualDelegate<I
// Parent native select keyboard listeners
this
.
toDispose
.
push
(
dom
.
addStandardDisposableListener
(
this
.
selectElement
,
'
change
'
,
(
e
)
=>
{
this
.
_register
(
dom
.
addStandardDisposableListener
(
this
.
selectElement
,
'
change
'
,
(
e
)
=>
{
this
.
selected
=
e
.
target
.
selectedIndex
;
this
.
_onDidSelect
.
fire
({
index
:
e
.
target
.
selectedIndex
,
...
...
@@ -199,7 +198,7 @@ export class SelectBoxList implements ISelectBoxDelegate, IListVirtualDelegate<I
// Have to implement both keyboard and mouse controllers to handle disabled options
// Intercept mouse events to override normal select actions on parents
this
.
toDispose
.
push
(
dom
.
addDisposableListener
(
this
.
selectElement
,
dom
.
EventType
.
CLICK
,
(
e
)
=>
{
this
.
_register
(
dom
.
addDisposableListener
(
this
.
selectElement
,
dom
.
EventType
.
CLICK
,
(
e
)
=>
{
dom
.
EventHelper
.
stop
(
e
);
if
(
this
.
_isVisible
)
{
...
...
@@ -209,13 +208,13 @@ export class SelectBoxList implements ISelectBoxDelegate, IListVirtualDelegate<I
}
}));
this
.
toDispose
.
push
(
dom
.
addDisposableListener
(
this
.
selectElement
,
dom
.
EventType
.
MOUSE_DOWN
,
(
e
)
=>
{
this
.
_register
(
dom
.
addDisposableListener
(
this
.
selectElement
,
dom
.
EventType
.
MOUSE_DOWN
,
(
e
)
=>
{
dom
.
EventHelper
.
stop
(
e
);
}));
// Intercept keyboard handling
this
.
toDispose
.
push
(
dom
.
addDisposableListener
(
this
.
selectElement
,
dom
.
EventType
.
KEY_DOWN
,
(
e
:
KeyboardEvent
)
=>
{
this
.
_register
(
dom
.
addDisposableListener
(
this
.
selectElement
,
dom
.
EventType
.
KEY_DOWN
,
(
e
:
KeyboardEvent
)
=>
{
const
event
=
new
StandardKeyboardEvent
(
e
);
let
showDropDown
=
false
;
...
...
@@ -735,27 +734,26 @@ export class SelectBoxList implements ISelectBoxDelegate, IListVirtualDelegate<I
.
filter
(()
=>
this
.
selectList
.
length
>
0
)
.
map
(
e
=>
new
StandardKeyboardEvent
(
e
));
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
Enter
).
on
(
e
=>
this
.
onEnter
(
e
),
this
,
this
.
toDispose
);
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
Escape
).
on
(
e
=>
this
.
onEscape
(
e
),
this
,
this
.
toDispose
);
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
UpArrow
).
on
(
this
.
onUpArrow
,
this
,
this
.
toDispose
);
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
DownArrow
).
on
(
this
.
onDownArrow
,
this
,
this
.
toDispose
);
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
PageDown
).
on
(
this
.
onPageDown
,
this
,
this
.
toDispose
);
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
PageUp
).
on
(
this
.
onPageUp
,
this
,
this
.
toDispose
);
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
Home
).
on
(
this
.
onHome
,
this
,
this
.
toDispose
);
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
End
).
on
(
this
.
onEnd
,
this
,
this
.
toDispose
);
onSelectDropDownKeyDown
.
filter
(
e
=>
(
e
.
keyCode
>=
KeyCode
.
KEY_0
&&
e
.
keyCode
<=
KeyCode
.
KEY_Z
)
||
(
e
.
keyCode
>=
KeyCode
.
US_SEMICOLON
&&
e
.
keyCode
<=
KeyCode
.
NUMPAD_DIVIDE
)).
on
(
this
.
onCharacter
,
this
,
this
.
toDispose
);
this
.
_register
(
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
Enter
).
on
(
e
=>
this
.
onEnter
(
e
),
this
)
);
this
.
_register
(
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
Escape
).
on
(
e
=>
this
.
onEscape
(
e
),
this
)
);
this
.
_register
(
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
UpArrow
).
on
(
this
.
onUpArrow
,
this
)
);
this
.
_register
(
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
DownArrow
).
on
(
this
.
onDownArrow
,
this
)
);
this
.
_register
(
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
PageDown
).
on
(
this
.
onPageDown
,
this
)
);
this
.
_register
(
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
PageUp
).
on
(
this
.
onPageUp
,
this
)
);
this
.
_register
(
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
Home
).
on
(
this
.
onHome
,
this
)
);
this
.
_register
(
onSelectDropDownKeyDown
.
filter
(
e
=>
e
.
keyCode
===
KeyCode
.
End
).
on
(
this
.
onEnd
,
this
)
);
this
.
_register
(
onSelectDropDownKeyDown
.
filter
(
e
=>
(
e
.
keyCode
>=
KeyCode
.
KEY_0
&&
e
.
keyCode
<=
KeyCode
.
KEY_Z
)
||
(
e
.
keyCode
>=
KeyCode
.
US_SEMICOLON
&&
e
.
keyCode
<=
KeyCode
.
NUMPAD_DIVIDE
)).
on
(
this
.
onCharacter
,
this
)
);
// SetUp list mouse controller - control navigation, disabled items, focus
Event
.
chain
(
domEvent
(
this
.
selectList
.
getHTMLElement
(),
'
mouseup
'
))
this
.
_register
(
Event
.
chain
(
domEvent
(
this
.
selectList
.
getHTMLElement
(),
'
mouseup
'
))
.
filter
(()
=>
this
.
selectList
.
length
>
0
)
.
on
(
e
=>
this
.
onMouseUp
(
e
),
this
,
this
.
toDispose
);
.
on
(
e
=>
this
.
onMouseUp
(
e
),
this
)
);
this
.
toDispose
.
push
(
this
.
selectList
.
onDidBlur
(
_
=>
this
.
onListBlur
()),
this
.
selectList
.
onMouseOver
(
e
=>
typeof
e
.
index
!==
'
undefined
'
&&
this
.
selectList
.
setFocus
([
e
.
index
])),
this
.
selectList
.
onFocusChange
(
e
=>
this
.
onListFocus
(
e
))
);
this
.
_register
(
this
.
selectList
.
onDidBlur
(
_
=>
this
.
onListBlur
()));
this
.
_register
(
this
.
selectList
.
onMouseOver
(
e
=>
typeof
e
.
index
!==
'
undefined
'
&&
this
.
selectList
.
setFocus
([
e
.
index
])));
this
.
_register
(
this
.
selectList
.
onFocusChange
(
e
=>
this
.
onListFocus
(
e
)));
this
.
selectList
.
getHTMLElement
().
setAttribute
(
'
aria-label
'
,
this
.
selectBoxOptions
.
ariaLabel
||
''
);
this
.
selectList
.
getHTMLElement
().
setAttribute
(
'
aria-expanded
'
,
'
true
'
);
...
...
@@ -1034,6 +1032,6 @@ export class SelectBoxList implements ISelectBoxDelegate, IListVirtualDelegate<I
public
dispose
():
void
{
this
.
hideSelectDropDown
(
false
);
this
.
toDispose
=
dispose
(
this
.
toDispose
);
super
.
dispose
(
);
}
}
src/vs/base/browser/ui/selectBox/selectBoxNative.ts
浏览文件 @
29475925
...
...
@@ -34,8 +34,7 @@ export class SelectBoxNative extends Disposable implements ISelectBoxDelegate {
this
.
selectElement
.
setAttribute
(
'
aria-label
'
,
this
.
selectBoxOptions
.
ariaLabel
);
}
this
.
_onDidSelect
=
new
Emitter
<
ISelectData
>
();
this
.
_register
(
this
.
_onDidSelect
);
this
.
_onDidSelect
=
this
.
_register
(
new
Emitter
<
ISelectData
>
());
this
.
styles
=
styles
;
...
...
src/vs/base/node/config.ts
浏览文件 @
29475925
...
...
@@ -6,7 +6,7 @@
import
*
as
fs
from
'
fs
'
;
import
{
dirname
}
from
'
vs/base/common/path
'
;
import
*
as
objects
from
'
vs/base/common/objects
'
;
import
{
IDisposable
,
DisposableStor
e
}
from
'
vs/base/common/lifecycle
'
;
import
{
Disposabl
e
}
from
'
vs/base/common/lifecycle
'
;
import
{
Event
,
Emitter
}
from
'
vs/base/common/event
'
;
import
*
as
json
from
'
vs/base/common/json
'
;
import
{
statLink
}
from
'
vs/base/node/pfs
'
;
...
...
@@ -41,18 +41,17 @@ export interface IConfigOptions<T> {
* - delayed processing of changes to accomodate for lots of changes
* - configurable defaults
*/
export
class
ConfigWatcher
<
T
>
implements
IConfigWatcher
<
T
>
,
IDisposable
{
export
class
ConfigWatcher
<
T
>
extends
Disposable
implements
IConfigWatcher
<
T
>
{
private
cache
:
T
;
private
parseErrors
:
json
.
ParseError
[];
private
disposed
:
boolean
;
private
loaded
:
boolean
;
private
timeoutHandle
:
NodeJS
.
Timer
|
null
;
private
readonly
disposables
=
new
DisposableStore
();
private
readonly
_onDidUpdateConfiguration
:
Emitter
<
IConfigurationChangeEvent
<
T
>>
;
constructor
(
private
_path
:
string
,
private
options
:
IConfigOptions
<
T
>
=
{
defaultConfig
:
Object
.
create
(
null
),
onError
:
error
=>
console
.
error
(
error
)
})
{
this
.
_onDidUpdateConfiguration
=
new
Emitter
<
IConfigurationChangeEvent
<
T
>>
();
this
.
disposables
.
add
(
this
.
_onDidUpdateConfiguration
);
super
();
this
.
_onDidUpdateConfiguration
=
this
.
_register
(
new
Emitter
<
IConfigurationChangeEvent
<
T
>>
()
);
this
.
registerWatcher
();
this
.
initAsync
();
...
...
@@ -123,7 +122,7 @@ export class ConfigWatcher<T> implements IConfigWatcher<T>, IDisposable {
this
.
watch
(
parentFolder
,
true
);
// Check if the path is a symlink and watch its target if so
this
.
handleSymbolicLink
().
then
(
undefined
,
error
=>
{
/* ignore error */
});
this
.
handleSymbolicLink
().
then
(
undefined
,
()
=>
{
/* ignore error */
});
}
private
async
handleSymbolicLink
():
Promise
<
void
>
{
...
...
@@ -141,9 +140,9 @@ export class ConfigWatcher<T> implements IConfigWatcher<T>, IDisposable {
}
if
(
isFolder
)
{
this
.
disposables
.
add
(
watchFolder
(
path
,
(
type
,
path
)
=>
path
===
this
.
_path
?
this
.
onConfigFileChange
()
:
undefined
,
error
=>
this
.
options
.
onError
(
error
)));
this
.
_register
(
watchFolder
(
path
,
(
type
,
path
)
=>
path
===
this
.
_path
?
this
.
onConfigFileChange
()
:
undefined
,
error
=>
this
.
options
.
onError
(
error
)));
}
else
{
this
.
disposables
.
add
(
watchFile
(
path
,
(
type
,
path
)
=>
this
.
onConfigFileChange
(),
error
=>
this
.
options
.
onError
(
error
)));
this
.
_register
(
watchFile
(
path
,
(
)
=>
this
.
onConfigFileChange
(),
error
=>
this
.
options
.
onError
(
error
)));
}
}
...
...
@@ -185,6 +184,6 @@ export class ConfigWatcher<T> implements IConfigWatcher<T>, IDisposable {
dispose
():
void
{
this
.
disposed
=
true
;
this
.
disposables
.
dispose
();
super
.
dispose
();
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录