Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
201a9c8e
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,发现更多精彩内容 >>
提交
201a9c8e
编写于
10月 16, 2019
作者:
M
Matt Bierner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make sure iframe based webview also re-broadcast keyboard events
For #82592
上级
42d9a26e
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
33 addition
and
30 deletion
+33
-30
src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts
...s/workbench/contrib/webview/browser/baseWebviewElement.ts
+29
-0
src/vs/workbench/contrib/webview/browser/webviewEditor.ts
src/vs/workbench/contrib/webview/browser/webviewEditor.ts
+2
-1
src/vs/workbench/contrib/webview/browser/webviewElement.ts
src/vs/workbench/contrib/webview/browser/webviewElement.ts
+2
-1
src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts
...kbench/contrib/webview/electron-browser/webviewElement.ts
+0
-28
未找到文件。
src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts
浏览文件 @
201a9c8e
...
...
@@ -28,6 +28,17 @@ export const enum WebviewMessageChannels {
webviewReady
=
'
webview-ready
'
,
}
interface
IKeydownEvent
{
key
:
string
;
keyCode
:
number
;
code
:
string
;
shiftKey
:
boolean
;
altKey
:
boolean
;
ctrlKey
:
boolean
;
metaKey
:
boolean
;
repeat
:
boolean
;
}
interface
WebviewContent
{
readonly
html
:
string
;
readonly
options
:
WebviewContentOptions
;
...
...
@@ -111,6 +122,13 @@ export abstract class BaseWebview<T extends HTMLElement> extends Disposable {
this
.
handleFocusChange
(
false
);
}));
this
.
_register
(
this
.
on
(
'
did-keydown
'
,
(
data
:
KeyboardEvent
)
=>
{
// Electron: workaround for https://github.com/electron/electron/issues/14258
// We have to detect keyboard events in the <webview> and dispatch them to our
// keybinding service because these events do not bubble to the parent window anymore.
this
.
handleKeyDown
(
data
);
}));
this
.
style
();
this
.
_register
(
webviewThemeDataProvider
.
onThemeDataChanged
(
this
.
style
,
this
));
}
...
...
@@ -243,4 +261,15 @@ export abstract class BaseWebview<T extends HTMLElement> extends Disposable {
this
.
_onDidFocus
.
fire
();
}
}
private
handleKeyDown
(
event
:
IKeydownEvent
)
{
// Create a fake KeyboardEvent from the data provided
const
emulatedKeyboardEvent
=
new
KeyboardEvent
(
'
keydown
'
,
event
);
// Force override the target
Object
.
defineProperty
(
emulatedKeyboardEvent
,
'
target
'
,
{
get
:
()
=>
this
.
element
,
});
// And re-dispatch
window
.
dispatchEvent
(
emulatedKeyboardEvent
);
}
}
src/vs/workbench/contrib/webview/browser/webviewEditor.ts
浏览文件 @
201a9c8e
...
...
@@ -18,6 +18,7 @@ import { WebviewInput } from 'vs/workbench/contrib/webview/browser/webviewEditor
import
{
KEYBINDING_CONTEXT_WEBVIEW_FIND_WIDGET_VISIBLE
,
Webview
,
WebviewEditorOverlay
}
from
'
vs/workbench/contrib/webview/browser/webview
'
;
import
{
IEditorGroup
}
from
'
vs/workbench/services/editor/common/editorGroupsService
'
;
import
{
IEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
isWeb
}
from
'
vs/base/common/platform
'
;
export
class
WebviewEditor
extends
BaseEditor
{
...
...
@@ -98,7 +99,7 @@ export class WebviewEditor extends BaseEditor {
public
focus
():
void
{
super
.
focus
();
if
(
!
this
.
_onFocusWindowHandler
.
value
)
{
if
(
!
this
.
_onFocusWindowHandler
.
value
&&
!
isWeb
)
{
// Make sure we restore focus when switching back to a VS Code window
this
.
_onFocusWindowHandler
.
value
=
this
.
_hostService
.
onDidChangeFocus
(
focused
=>
{
if
(
focused
&&
this
.
_editorService
.
activeControl
===
this
)
{
...
...
src/vs/workbench/contrib/webview/browser/webviewElement.ts
浏览文件 @
201a9c8e
...
...
@@ -104,8 +104,9 @@ export class IFrameWebview extends BaseWebview<HTMLIFrameElement> implements Web
}
focus
():
void
{
console
.
log
(
'
focus
'
);
if
(
this
.
element
)
{
this
.
element
.
focus
(
);
this
.
_send
(
'
focus
'
);
}
}
...
...
src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts
浏览文件 @
201a9c8e
...
...
@@ -25,16 +25,6 @@ import { WebviewFindDelegate, WebviewFindWidget } from '../browser/webviewFindWi
import
{
BaseWebview
,
WebviewMessageChannels
}
from
'
vs/workbench/contrib/webview/browser/baseWebviewElement
'
;
import
{
IWorkbenchEnvironmentService
}
from
'
vs/workbench/services/environment/common/environmentService
'
;
interface
IKeydownEvent
{
key
:
string
;
keyCode
:
number
;
code
:
string
;
shiftKey
:
boolean
;
altKey
:
boolean
;
ctrlKey
:
boolean
;
metaKey
:
boolean
;
repeat
:
boolean
;
}
class
WebviewTagHandle
extends
Disposable
{
...
...
@@ -183,13 +173,6 @@ class WebviewKeyboardHandler extends Disposable {
this
.
_register
(
addDisposableListener
(
this
.
_webviewHandle
.
webview
,
'
ipc-message
'
,
(
event
)
=>
{
switch
(
event
.
channel
)
{
case
'
did-keydown
'
:
// Electron: workaround for https://github.com/electron/electron/issues/14258
// We have to detect keyboard events in the <webview> and dispatch them to our
// keybinding service because these events do not bubble to the parent window anymore.
this
.
handleKeydown
(
event
.
args
[
0
]);
return
;
case
'
did-focus
'
:
this
.
setIgnoreMenuShortcuts
(
this
.
_ignoreMenuShortcut
);
break
;
...
...
@@ -214,17 +197,6 @@ class WebviewKeyboardHandler extends Disposable {
contents
.
setIgnoreMenuShortcuts
(
value
);
}
}
private
handleKeydown
(
event
:
IKeydownEvent
):
void
{
// Create a fake KeyboardEvent from the data provided
const
emulatedKeyboardEvent
=
new
KeyboardEvent
(
'
keydown
'
,
event
);
// Force override the target
Object
.
defineProperty
(
emulatedKeyboardEvent
,
'
target
'
,
{
get
:
()
=>
this
.
_webviewHandle
.
webview
});
// And re-dispatch
window
.
dispatchEvent
(
emulatedKeyboardEvent
);
}
}
export
class
ElectronWebviewBasedWebview
extends
BaseWebview
<
WebviewTag
>
implements
Webview
,
WebviewFindDelegate
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录