Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
4967ca45
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4967ca45
编写于
11月 28, 2018
作者:
J
Joao Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
list: emit mouse events on root
fixes #63598
上级
24036d74
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
67 addition
and
30 deletion
+67
-30
src/vs/base/browser/ui/list/list.ts
src/vs/base/browser/ui/list/list.ts
+4
-4
src/vs/base/browser/ui/list/listPaging.ts
src/vs/base/browser/ui/list/listPaging.ts
+1
-1
src/vs/base/browser/ui/list/listView.ts
src/vs/base/browser/ui/list/listView.ts
+17
-17
src/vs/base/browser/ui/list/listWidget.ts
src/vs/base/browser/ui/list/listWidget.ts
+9
-2
src/vs/base/browser/ui/selectBox/selectBoxCustom.ts
src/vs/base/browser/ui/selectBox/selectBoxCustom.ts
+2
-2
src/vs/base/browser/ui/tree/dataTree.ts
src/vs/base/browser/ui/tree/dataTree.ts
+6
-3
src/vs/workbench/browser/parts/notifications/notificationsList.ts
...orkbench/browser/parts/notifications/notificationsList.ts
+4
-0
src/vs/workbench/parts/debug/browser/breakpointsView.ts
src/vs/workbench/parts/debug/browser/breakpointsView.ts
+4
-0
src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.ts
...ts/extensions/electron-browser/runtimeExtensionsEditor.ts
+4
-0
src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts
...nch/parts/files/electron-browser/views/openEditorsView.ts
+4
-0
src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts
.../workbench/parts/preferences/browser/keybindingsEditor.ts
+4
-0
src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts
src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts
+8
-1
未找到文件。
src/vs/base/browser/ui/list/list.ts
浏览文件 @
4967ca45
...
...
@@ -28,24 +28,24 @@ export interface IListEvent<T> {
export
interface
IListMouseEvent
<
T
>
{
browserEvent
:
MouseEvent
;
element
:
T
|
undefined
;
index
:
number
;
index
:
number
|
undefined
;
}
export
interface
IListTouchEvent
<
T
>
{
browserEvent
:
TouchEvent
;
element
:
T
|
undefined
;
index
:
number
;
index
:
number
|
undefined
;
}
export
interface
IListGestureEvent
<
T
>
{
browserEvent
:
GestureEvent
;
element
:
T
|
undefined
;
index
:
number
;
index
:
number
|
undefined
;
}
export
interface
IListContextMenuEvent
<
T
>
{
browserEvent
:
UIEvent
;
element
:
T
|
undefined
;
index
:
number
;
index
:
number
|
undefined
;
anchor
:
HTMLElement
|
{
x
:
number
;
y
:
number
;
}
|
undefined
;
}
src/vs/base/browser/ui/list/listPaging.ts
浏览文件 @
4967ca45
...
...
@@ -134,7 +134,7 @@ export class PagedList<T> implements IDisposable {
}
get
onContextMenu
():
Event
<
IListContextMenuEvent
<
T
>>
{
return
mapEvent
(
this
.
list
.
onContextMenu
,
({
element
,
index
,
anchor
,
browserEvent
})
=>
(
{
element
:
this
.
_model
.
get
(
element
!
),
index
,
anchor
,
browserEvent
}));
return
mapEvent
(
this
.
list
.
onContextMenu
,
({
element
,
index
,
anchor
,
browserEvent
})
=>
(
typeof
element
===
'
undefined
'
?
{
element
,
index
,
anchor
,
browserEvent
}
:
{
element
:
this
.
_model
.
get
(
element
),
index
,
anchor
,
browserEvent
}));
}
get
model
():
IPagedModel
<
T
>
{
...
...
src/vs/base/browser/ui/list/listView.ts
浏览文件 @
4967ca45
...
...
@@ -392,35 +392,35 @@ export class ListView<T> implements ISpliceable<T>, IDisposable {
// Events
@
memoize
get
onMouseClick
():
Event
<
IListMouseEvent
<
T
>>
{
return
filterEvent
(
mapEvent
(
domEvent
(
this
.
domNode
,
'
click
'
),
e
=>
this
.
toMouseEvent
(
e
)),
e
=>
e
.
index
>=
0
);
}
@
memoize
get
onMouseDblClick
():
Event
<
IListMouseEvent
<
T
>>
{
return
filterEvent
(
mapEvent
(
domEvent
(
this
.
domNode
,
'
dblclick
'
),
e
=>
this
.
toMouseEvent
(
e
)),
e
=>
e
.
index
>=
0
);
}
@
memoize
get
onMouseMiddleClick
():
Event
<
IListMouseEvent
<
T
>>
{
return
filterEvent
(
mapEvent
(
domEvent
(
this
.
domNode
,
'
auxclick
'
),
e
=>
this
.
toMouseEvent
(
e
as
MouseEvent
)),
e
=>
e
.
index
>=
0
&&
e
.
browserEvent
.
button
===
1
);
}
@
memoize
get
onMouseUp
():
Event
<
IListMouseEvent
<
T
>>
{
return
filterEvent
(
mapEvent
(
domEvent
(
this
.
domNode
,
'
mouseup
'
),
e
=>
this
.
toMouseEvent
(
e
)),
e
=>
e
.
index
>=
0
);
}
@
memoize
get
onMouseDown
():
Event
<
IListMouseEvent
<
T
>>
{
return
filterEvent
(
mapEvent
(
domEvent
(
this
.
domNode
,
'
mousedown
'
),
e
=>
this
.
toMouseEvent
(
e
)),
e
=>
e
.
index
>=
0
);
}
@
memoize
get
onMouseOver
():
Event
<
IListMouseEvent
<
T
>>
{
return
filterEvent
(
mapEvent
(
domEvent
(
this
.
domNode
,
'
mouseover
'
),
e
=>
this
.
toMouseEvent
(
e
)),
e
=>
e
.
index
>=
0
);
}
@
memoize
get
onMouseMove
():
Event
<
IListMouseEvent
<
T
>>
{
return
filterEvent
(
mapEvent
(
domEvent
(
this
.
domNode
,
'
mousemove
'
),
e
=>
this
.
toMouseEvent
(
e
)),
e
=>
e
.
index
>=
0
);
}
@
memoize
get
onMouseOut
():
Event
<
IListMouseEvent
<
T
>>
{
return
filterEvent
(
mapEvent
(
domEvent
(
this
.
domNode
,
'
mouseout
'
),
e
=>
this
.
toMouseEvent
(
e
)),
e
=>
e
.
index
>=
0
);
}
@
memoize
get
onContextMenu
():
Event
<
IListMouseEvent
<
T
>>
{
return
filterEvent
(
mapEvent
(
domEvent
(
this
.
domNode
,
'
contextmenu
'
),
e
=>
this
.
toMouseEvent
(
e
)),
e
=>
e
.
index
>=
0
);
}
@
memoize
get
onTouchStart
():
Event
<
IListTouchEvent
<
T
>>
{
return
filterEvent
(
mapEvent
(
domEvent
(
this
.
domNode
,
'
touchstart
'
),
e
=>
this
.
toTouchEvent
(
e
)),
e
=>
e
.
index
>=
0
);
}
@
memoize
get
onTap
():
Event
<
IListGestureEvent
<
T
>>
{
return
filterEvent
(
mapEvent
(
domEvent
(
this
.
rowsContainer
,
TouchEventType
.
Tap
),
e
=>
this
.
toGestureEvent
(
e
)),
e
=>
e
.
index
>=
0
);
}
@
memoize
get
onMouseClick
():
Event
<
IListMouseEvent
<
T
>>
{
return
mapEvent
(
domEvent
(
this
.
domNode
,
'
click
'
),
e
=>
this
.
toMouseEvent
(
e
)
);
}
@
memoize
get
onMouseDblClick
():
Event
<
IListMouseEvent
<
T
>>
{
return
mapEvent
(
domEvent
(
this
.
domNode
,
'
dblclick
'
),
e
=>
this
.
toMouseEvent
(
e
)
);
}
@
memoize
get
onMouseMiddleClick
():
Event
<
IListMouseEvent
<
T
>>
{
return
filterEvent
(
mapEvent
(
domEvent
(
this
.
domNode
,
'
auxclick
'
),
e
=>
this
.
toMouseEvent
(
e
as
MouseEvent
)),
e
=>
e
.
browserEvent
.
button
===
1
);
}
@
memoize
get
onMouseUp
():
Event
<
IListMouseEvent
<
T
>>
{
return
mapEvent
(
domEvent
(
this
.
domNode
,
'
mouseup
'
),
e
=>
this
.
toMouseEvent
(
e
)
);
}
@
memoize
get
onMouseDown
():
Event
<
IListMouseEvent
<
T
>>
{
return
mapEvent
(
domEvent
(
this
.
domNode
,
'
mousedown
'
),
e
=>
this
.
toMouseEvent
(
e
)
);
}
@
memoize
get
onMouseOver
():
Event
<
IListMouseEvent
<
T
>>
{
return
mapEvent
(
domEvent
(
this
.
domNode
,
'
mouseover
'
),
e
=>
this
.
toMouseEvent
(
e
)
);
}
@
memoize
get
onMouseMove
():
Event
<
IListMouseEvent
<
T
>>
{
return
mapEvent
(
domEvent
(
this
.
domNode
,
'
mousemove
'
),
e
=>
this
.
toMouseEvent
(
e
)
);
}
@
memoize
get
onMouseOut
():
Event
<
IListMouseEvent
<
T
>>
{
return
mapEvent
(
domEvent
(
this
.
domNode
,
'
mouseout
'
),
e
=>
this
.
toMouseEvent
(
e
)
);
}
@
memoize
get
onContextMenu
():
Event
<
IListMouseEvent
<
T
>>
{
return
mapEvent
(
domEvent
(
this
.
domNode
,
'
contextmenu
'
),
e
=>
this
.
toMouseEvent
(
e
)
);
}
@
memoize
get
onTouchStart
():
Event
<
IListTouchEvent
<
T
>>
{
return
mapEvent
(
domEvent
(
this
.
domNode
,
'
touchstart
'
),
e
=>
this
.
toTouchEvent
(
e
)
);
}
@
memoize
get
onTap
():
Event
<
IListGestureEvent
<
T
>>
{
return
mapEvent
(
domEvent
(
this
.
rowsContainer
,
TouchEventType
.
Tap
),
e
=>
this
.
toGestureEvent
(
e
)
);
}
private
toMouseEvent
(
browserEvent
:
MouseEvent
):
IListMouseEvent
<
T
>
{
const
index
=
this
.
getItemIndexFromEventTarget
(
browserEvent
.
target
||
null
);
const
item
=
index
<
0
?
undefined
:
this
.
items
[
index
];
const
item
=
typeof
index
===
'
undefined
'
?
undefined
:
this
.
items
[
index
];
const
element
=
item
&&
item
.
element
;
return
{
browserEvent
,
index
,
element
};
}
private
toTouchEvent
(
browserEvent
:
TouchEvent
):
IListTouchEvent
<
T
>
{
const
index
=
this
.
getItemIndexFromEventTarget
(
browserEvent
.
target
||
null
);
const
item
=
index
<
0
?
undefined
:
this
.
items
[
index
];
const
item
=
typeof
index
===
'
undefined
'
?
undefined
:
this
.
items
[
index
];
const
element
=
item
&&
item
.
element
;
return
{
browserEvent
,
index
,
element
};
}
private
toGestureEvent
(
browserEvent
:
GestureEvent
):
IListGestureEvent
<
T
>
{
const
index
=
this
.
getItemIndexFromEventTarget
(
browserEvent
.
initialTarget
||
null
);
const
item
=
index
<
0
?
undefined
:
this
.
items
[
index
];
const
item
=
typeof
index
===
'
undefined
'
?
undefined
:
this
.
items
[
index
];
const
element
=
item
&&
item
.
element
;
return
{
browserEvent
,
index
,
element
};
}
...
...
@@ -433,7 +433,7 @@ export class ListView<T> implements ISpliceable<T>, IDisposable {
this
.
rerender
(
e
.
scrollTop
,
e
.
height
);
}
}
catch
(
err
)
{
console
.
log
(
'
Got bad scroll event:
'
,
e
);
console
.
error
(
'
Got bad scroll event:
'
,
e
);
throw
err
;
}
}
...
...
@@ -499,7 +499,7 @@ export class ListView<T> implements ISpliceable<T>, IDisposable {
// Util
private
getItemIndexFromEventTarget
(
target
:
EventTarget
|
null
):
number
{
private
getItemIndexFromEventTarget
(
target
:
EventTarget
|
null
):
number
|
undefined
{
let
element
:
HTMLElement
|
null
=
target
as
(
HTMLElement
|
null
);
while
(
element
instanceof
HTMLElement
&&
element
!==
this
.
rowsContainer
)
{
...
...
@@ -516,7 +516,7 @@ export class ListView<T> implements ISpliceable<T>, IDisposable {
element
=
element
.
parentElement
;
}
return
-
1
;
return
undefined
;
}
private
getRenderRange
(
renderTop
:
number
,
renderHeight
:
number
):
IRange
{
...
...
src/vs/base/browser/ui/list/listWidget.ts
浏览文件 @
4967ca45
...
...
@@ -508,11 +508,18 @@ class MouseController<T> implements IDisposable {
const
selection
=
this
.
list
.
getSelection
();
reference
=
reference
===
undefined
?
selection
[
0
]
:
reference
;
const
focus
=
e
.
index
;
if
(
typeof
focus
===
'
undefined
'
)
{
this
.
list
.
setFocus
([],
e
.
browserEvent
);
this
.
list
.
setSelection
([],
e
.
browserEvent
);
return
;
}
if
(
this
.
multipleSelectionSupport
&&
this
.
isSelectionRangeChangeEvent
(
e
))
{
return
this
.
changeSelection
(
e
,
reference
);
}
const
focus
=
e
.
index
;
if
(
selection
.
every
(
s
=>
s
!==
focus
))
{
this
.
list
.
setFocus
([
focus
],
e
.
browserEvent
);
}
...
...
@@ -556,7 +563,7 @@ class MouseController<T> implements IDisposable {
}
private
changeSelection
(
e
:
IListMouseEvent
<
T
>
|
IListTouchEvent
<
T
>
,
reference
:
number
|
undefined
):
void
{
const
focus
=
e
.
index
;
const
focus
=
e
.
index
!
;
if
(
this
.
isSelectionRangeChangeEvent
(
e
)
&&
reference
!==
undefined
)
{
const
min
=
Math
.
min
(
reference
,
focus
);
...
...
src/vs/base/browser/ui/selectBox/selectBoxCustom.ts
浏览文件 @
4967ca45
...
...
@@ -780,8 +780,8 @@ export class SelectBoxList implements ISelectBoxDelegate, IListVirtualDelegate<I
.
on
(
e
=>
this
.
onMouseUp
(
e
),
this
,
this
.
toDispose
);
this
.
toDispose
.
push
(
this
.
selectList
.
onDidBlur
(
e
=>
this
.
onListBlur
()),
this
.
selectList
.
onMouseOver
(
e
=>
this
.
selectList
.
setFocus
([
e
.
index
])),
this
.
selectList
.
onDidBlur
(
_
=>
this
.
onListBlur
()),
this
.
selectList
.
onMouseOver
(
e
=>
t
ypeof
e
.
index
!==
'
undefined
'
&&
t
his
.
selectList
.
setFocus
([
e
.
index
])),
this
.
selectList
.
onFocusChange
(
e
=>
this
.
onListFocus
(
e
))
);
...
...
src/vs/base/browser/ui/tree/dataTree.ts
浏览文件 @
4967ca45
...
...
@@ -289,15 +289,18 @@ export class DataTree<T extends NonNullable<any>, TFilterData = void> implements
// Tree navigation
getParentElement
(
element
:
T
):
T
|
null
{
return
this
.
tree
.
getParentElement
(
this
.
getNode
(
element
)).
element
;
const
node
=
this
.
tree
.
getParentElement
(
this
.
getNode
(
element
));
return
node
&&
node
.
element
;
}
getFirstElementChild
(
element
:
T
|
null
=
null
):
T
|
null
{
return
this
.
tree
.
getFirstElementChild
(
this
.
getNode
(
element
)).
element
;
const
node
=
this
.
tree
.
getFirstElementChild
(
this
.
getNode
(
element
));
return
node
&&
node
.
element
;
}
getLastElementAncestor
(
element
:
T
|
null
=
null
):
T
|
null
{
return
this
.
tree
.
getLastElementAncestor
(
this
.
getNode
(
element
)).
element
;
const
node
=
this
.
tree
.
getLastElementAncestor
(
this
.
getNode
(
element
));
return
node
&&
node
.
element
;
}
// Implementation
...
...
src/vs/workbench/browser/parts/notifications/notificationsList.ts
浏览文件 @
4967ca45
...
...
@@ -84,6 +84,10 @@ export class NotificationsList extends Themable {
// Context menu to copy message
const
copyAction
=
this
.
_register
(
this
.
instantiationService
.
createInstance
(
CopyNotificationMessageAction
,
CopyNotificationMessageAction
.
ID
,
CopyNotificationMessageAction
.
LABEL
));
this
.
_register
((
this
.
list
.
onContextMenu
(
e
=>
{
if
(
!
e
.
element
)
{
return
;
}
this
.
contextMenuService
.
showContextMenu
({
getAnchor
:
()
=>
e
.
anchor
,
getActions
:
()
=>
[
copyAction
],
...
...
src/vs/workbench/parts/debug/browser/breakpointsView.ts
浏览文件 @
4967ca45
...
...
@@ -134,6 +134,10 @@ export class BreakpointsView extends ViewletPanel {
}
private
onListContextMenu
(
e
:
IListContextMenuEvent
<
IEnablement
>
):
void
{
if
(
!
e
.
element
)
{
return
;
}
const
actions
:
IAction
[]
=
[];
const
element
=
e
.
element
;
...
...
src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.ts
浏览文件 @
4967ca45
...
...
@@ -410,6 +410,10 @@ export class RuntimeExtensionsEditor extends BaseEditor {
this
.
_list
.
splice
(
0
,
this
.
_list
.
length
,
this
.
_elements
);
this
.
_list
.
onContextMenu
((
e
)
=>
{
if
(
!
e
.
element
)
{
return
;
}
const
actions
:
IAction
[]
=
[];
actions
.
push
(
new
ReportExtensionIssueAction
(
e
.
element
));
...
...
src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts
浏览文件 @
4967ca45
...
...
@@ -385,6 +385,10 @@ export class OpenEditorsView extends ViewletPanel {
}
private
onListContextMenu
(
e
:
IListContextMenuEvent
<
OpenEditor
|
IEditorGroup
>
):
void
{
if
(
!
e
.
element
)
{
return
;
}
const
element
=
e
.
element
;
this
.
contextMenuService
.
showContextMenu
({
getAnchor
:
()
=>
e
.
anchor
,
...
...
src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts
浏览文件 @
4967ca45
...
...
@@ -552,6 +552,10 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
}
private
onContextMenu
(
e
:
IListContextMenuEvent
<
IListEntry
>
):
void
{
if
(
!
e
.
element
)
{
return
;
}
if
(
e
.
element
.
templateId
===
KEYBINDING_ENTRY_TEMPLATE_ID
)
{
this
.
selectEntry
(
<
IKeybindingItemEntry
>
e
.
element
);
this
.
contextMenuService
.
showContextMenu
({
...
...
src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts
浏览文件 @
4967ca45
...
...
@@ -316,8 +316,11 @@ class MainPanel extends ViewletPanel {
}
private
onListContextMenu
(
e
:
IListContextMenuEvent
<
ISCMRepository
>
):
void
{
const
repository
=
e
.
element
;
if
(
!
e
.
element
)
{
return
;
}
const
repository
=
e
.
element
;
const
contextKeyService
=
this
.
contextKeyService
.
createScoped
();
const
scmProviderKey
=
contextKeyService
.
createKey
<
string
|
undefined
>
(
'
scmProvider
'
,
void
0
);
scmProviderKey
.
set
(
repository
.
provider
.
contextValue
);
...
...
@@ -986,6 +989,10 @@ export class RepositoryPanel extends ViewletPanel {
}
private
onListContextMenu
(
e
:
IListContextMenuEvent
<
ISCMResourceGroup
|
ISCMResource
>
):
void
{
if
(
!
e
.
element
)
{
return
;
}
const
element
=
e
.
element
;
let
actions
:
IAction
[];
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录