Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
40066175
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
40066175
编写于
5月 21, 2014
作者:
G
Gerd Hoffmann
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
vnc: add trace events for key events
Signed-off-by:
N
Gerd Hoffmann
<
kraxel@redhat.com
>
上级
cf864569
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
31 addition
and
4 deletion
+31
-4
trace-events
trace-events
+8
-0
ui/vnc.c
ui/vnc.c
+23
-4
未找到文件。
trace-events
浏览文件 @
40066175
...
...
@@ -1047,6 +1047,14 @@ gd_update(const char *tab, int x, int y, int w, int h) "tab=%s, x=%d, y=%d, w=%d
gd_key_event(const char *tab, int gdk_keycode, int qemu_keycode, const char *action) "tab=%s, translated GDK keycode %d to QEMU keycode %d (%s)"
gd_grab(const char *tab, const char *device, bool on) "tab=%s, %s %d"
# ui/vnc.c
vnc_key_guest_leds(bool caps, bool num, bool scroll) "caps %d, num %d, scroll %d"
vnc_key_map_init(const char *layout) "%s"
vnc_key_event_ext(bool down, int sym, int keycode, const char *name) "down %d, sym 0x%x, keycode 0x%x [%s]"
vnc_key_event_map(bool down, int sym, int keycode, const char *name) "down %d, sym 0x%x -> keycode 0x%x [%s]"
vnc_key_sync_numlock(bool on) "%d"
vnc_key_sync_capslock(bool on) "%d"
# ui/input.c
input_event_key_number(int conidx, int number, const char *qcode, bool down) "con %d, key number 0x%x [%s], down %d"
input_event_key_qcode(int conidx, const char *qcode, bool down) "con %d, key qcode %s, down %d"
...
...
ui/vnc.c
浏览文件 @
40066175
...
...
@@ -26,6 +26,7 @@
#include "vnc.h"
#include "vnc-jobs.h"
#include "trace.h"
#include "sysemu/sysemu.h"
#include "qemu/sockets.h"
#include "qemu/timer.h"
...
...
@@ -1597,6 +1598,10 @@ static void kbd_leds(void *opaque, int ledstate)
int
caps
,
num
,
scr
;
bool
has_changed
=
(
ledstate
!=
current_led_state
(
vs
));
trace_vnc_key_guest_leds
((
ledstate
&
QEMU_CAPS_LOCK_LED
),
(
ledstate
&
QEMU_NUM_LOCK_LED
),
(
ledstate
&
QEMU_SCROLL_LOCK_LED
));
caps
=
ledstate
&
QEMU_CAPS_LOCK_LED
?
1
:
0
;
num
=
ledstate
&
QEMU_NUM_LOCK_LED
?
1
:
0
;
scr
=
ledstate
&
QEMU_SCROLL_LOCK_LED
?
1
:
0
;
...
...
@@ -1659,11 +1664,13 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym)
*/
if
(
keysym_is_numlock
(
vs
->
vd
->
kbd_layout
,
sym
&
0xFFFF
))
{
if
(
!
vs
->
modifiers_state
[
0x45
])
{
trace_vnc_key_sync_numlock
(
true
);
vs
->
modifiers_state
[
0x45
]
=
1
;
press_key
(
vs
,
0xff7f
);
}
}
else
{
if
(
vs
->
modifiers_state
[
0x45
])
{
trace_vnc_key_sync_numlock
(
false
);
vs
->
modifiers_state
[
0x45
]
=
0
;
press_key
(
vs
,
0xff7f
);
}
...
...
@@ -1682,11 +1689,13 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym)
int
capslock
=
!!
(
vs
->
modifiers_state
[
0x3a
]);
if
(
capslock
)
{
if
(
uppercase
==
shift
)
{
trace_vnc_key_sync_capslock
(
false
);
vs
->
modifiers_state
[
0x3a
]
=
0
;
press_key
(
vs
,
0xffe5
);
}
}
else
{
if
(
uppercase
!=
shift
)
{
trace_vnc_key_sync_capslock
(
true
);
vs
->
modifiers_state
[
0x3a
]
=
1
;
press_key
(
vs
,
0xffe5
);
}
...
...
@@ -1819,6 +1828,11 @@ static void vnc_release_modifiers(VncState *vs)
}
}
static
const
char
*
code2name
(
int
keycode
)
{
return
QKeyCode_lookup
[
qemu_input_key_number_to_qcode
(
keycode
)];
}
static
void
key_event
(
VncState
*
vs
,
int
down
,
uint32_t
sym
)
{
int
keycode
;
...
...
@@ -1829,6 +1843,7 @@ static void key_event(VncState *vs, int down, uint32_t sym)
}
keycode
=
keysym2scancode
(
vs
->
vd
->
kbd_layout
,
lsym
&
0xFFFF
)
&
SCANCODE_KEYMASK
;
trace_vnc_key_event_map
(
down
,
sym
,
keycode
,
code2name
(
keycode
));
do_key_event
(
vs
,
down
,
keycode
,
sym
);
}
...
...
@@ -1836,10 +1851,12 @@ static void ext_key_event(VncState *vs, int down,
uint32_t
sym
,
uint16_t
keycode
)
{
/* if the user specifies a keyboard layout, always use it */
if
(
keyboard_layout
)
if
(
keyboard_layout
)
{
key_event
(
vs
,
down
,
sym
);
else
}
else
{
trace_vnc_key_event_ext
(
down
,
sym
,
keycode
,
code2name
(
keycode
));
do_key_event
(
vs
,
down
,
keycode
,
sym
);
}
}
static
void
framebuffer_update_request
(
VncState
*
vs
,
int
incremental
,
...
...
@@ -2929,10 +2946,12 @@ void vnc_display_init(DisplayState *ds)
QTAILQ_INIT
(
&
vs
->
clients
);
vs
->
expires
=
TIME_MAX
;
if
(
keyboard_layout
)
if
(
keyboard_layout
)
{
trace_vnc_key_map_init
(
keyboard_layout
);
vs
->
kbd_layout
=
init_keyboard_layout
(
name2keysym
,
keyboard_layout
);
else
}
else
{
vs
->
kbd_layout
=
init_keyboard_layout
(
name2keysym
,
"en-us"
);
}
if
(
!
vs
->
kbd_layout
)
exit
(
1
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录