Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
f100db38
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f100db38
编写于
12月 04, 2013
作者:
G
Gerd Hoffmann
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
input: mouse: switch spice ui to new core
Signed-off-by:
N
Gerd Hoffmann
<
kraxel@redhat.com
>
上级
14768eba
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
38 addition
and
24 deletion
+38
-24
ui/spice-input.c
ui/spice-input.c
+38
-24
未找到文件。
ui/spice-input.c
浏览文件 @
f100db38
...
@@ -98,41 +98,52 @@ static void kbd_leds(void *opaque, int ledstate)
...
@@ -98,41 +98,52 @@ static void kbd_leds(void *opaque, int ledstate)
typedef
struct
QemuSpicePointer
{
typedef
struct
QemuSpicePointer
{
SpiceMouseInstance
mouse
;
SpiceMouseInstance
mouse
;
SpiceTabletInstance
tablet
;
SpiceTabletInstance
tablet
;
int
width
,
height
,
x
,
y
;
int
width
,
height
;
uint32_t
last_bmask
;
Notifier
mouse_mode
;
Notifier
mouse_mode
;
bool
absolute
;
bool
absolute
;
}
QemuSpicePointer
;
}
QemuSpicePointer
;
static
int
map_buttons
(
int
spice_buttons
)
static
void
spice_update_buttons
(
QemuSpicePointer
*
pointer
,
int
wheel
,
uint32_t
button_mask
)
{
{
int
qemu_buttons
=
0
;
static
uint32_t
bmap
[
INPUT_BUTTON_MAX
]
=
{
[
INPUT_BUTTON_LEFT
]
=
0x01
,
/*
[
INPUT_BUTTON_MIDDLE
]
=
0x04
,
* Note: SPICE_MOUSE_BUTTON_* specifies the wire protocol but this
[
INPUT_BUTTON_RIGHT
]
=
0x02
,
* isn't what we get passed in via interface callbacks for the
[
INPUT_BUTTON_WHEEL_UP
]
=
0x10
,
* middle and right button ...
[
INPUT_BUTTON_WHEEL_DOWN
]
=
0x20
,
*/
};
if
(
spice_buttons
&
SPICE_MOUSE_BUTTON_MASK_LEFT
)
{
qemu_buttons
|=
MOUSE_EVENT_LBUTTON
;
if
(
wheel
<
0
)
{
button_mask
|=
0x10
;
}
}
if
(
spice_buttons
&
0x04
/* SPICE_MOUSE_BUTTON_MASK_MIDDLE */
)
{
if
(
wheel
>
0
)
{
qemu_buttons
|=
MOUSE_EVENT_MBUTTON
;
button_mask
|=
0x20
;
}
}
if
(
spice_buttons
&
0x02
/* SPICE_MOUSE_BUTTON_MASK_RIGHT */
)
{
qemu_buttons
|=
MOUSE_EVENT_RBUTTON
;
if
(
pointer
->
last_bmask
==
button_mask
)
{
return
;
}
}
return
qemu_buttons
;
qemu_input_update_buttons
(
NULL
,
bmap
,
pointer
->
last_bmask
,
button_mask
);
pointer
->
last_bmask
=
button_mask
;
}
}
static
void
mouse_motion
(
SpiceMouseInstance
*
sin
,
int
dx
,
int
dy
,
int
dz
,
static
void
mouse_motion
(
SpiceMouseInstance
*
sin
,
int
dx
,
int
dy
,
int
dz
,
uint32_t
buttons_state
)
uint32_t
buttons_state
)
{
{
kbd_mouse_event
(
dx
,
dy
,
dz
,
map_buttons
(
buttons_state
));
QemuSpicePointer
*
pointer
=
container_of
(
sin
,
QemuSpicePointer
,
mouse
);
spice_update_buttons
(
pointer
,
dz
,
buttons_state
);
qemu_input_queue_rel
(
NULL
,
INPUT_AXIS_X
,
dx
);
qemu_input_queue_rel
(
NULL
,
INPUT_AXIS_Y
,
dy
);
qemu_input_event_sync
();
}
}
static
void
mouse_buttons
(
SpiceMouseInstance
*
sin
,
uint32_t
buttons_state
)
static
void
mouse_buttons
(
SpiceMouseInstance
*
sin
,
uint32_t
buttons_state
)
{
{
kbd_mouse_event
(
0
,
0
,
0
,
map_buttons
(
buttons_state
));
QemuSpicePointer
*
pointer
=
container_of
(
sin
,
QemuSpicePointer
,
mouse
);
spice_update_buttons
(
pointer
,
0
,
buttons_state
);
qemu_input_event_sync
();
}
}
static
const
SpiceMouseInterface
mouse_interface
=
{
static
const
SpiceMouseInterface
mouse_interface
=
{
...
@@ -163,9 +174,10 @@ static void tablet_position(SpiceTabletInstance* sin, int x, int y,
...
@@ -163,9 +174,10 @@ static void tablet_position(SpiceTabletInstance* sin, int x, int y,
{
{
QemuSpicePointer
*
pointer
=
container_of
(
sin
,
QemuSpicePointer
,
tablet
);
QemuSpicePointer
*
pointer
=
container_of
(
sin
,
QemuSpicePointer
,
tablet
);
pointer
->
x
=
x
*
0x7FFF
/
(
pointer
->
width
-
1
);
spice_update_buttons
(
pointer
,
0
,
buttons_state
);
pointer
->
y
=
y
*
0x7FFF
/
(
pointer
->
height
-
1
);
qemu_input_queue_abs
(
NULL
,
INPUT_AXIS_X
,
x
,
pointer
->
width
);
kbd_mouse_event
(
pointer
->
x
,
pointer
->
y
,
0
,
map_buttons
(
buttons_state
));
qemu_input_queue_abs
(
NULL
,
INPUT_AXIS_Y
,
y
,
pointer
->
width
);
qemu_input_event_sync
();
}
}
...
@@ -174,7 +186,8 @@ static void tablet_wheel(SpiceTabletInstance* sin, int wheel,
...
@@ -174,7 +186,8 @@ static void tablet_wheel(SpiceTabletInstance* sin, int wheel,
{
{
QemuSpicePointer
*
pointer
=
container_of
(
sin
,
QemuSpicePointer
,
tablet
);
QemuSpicePointer
*
pointer
=
container_of
(
sin
,
QemuSpicePointer
,
tablet
);
kbd_mouse_event
(
pointer
->
x
,
pointer
->
y
,
wheel
,
map_buttons
(
buttons_state
));
spice_update_buttons
(
pointer
,
wheel
,
buttons_state
);
qemu_input_event_sync
();
}
}
static
void
tablet_buttons
(
SpiceTabletInstance
*
sin
,
static
void
tablet_buttons
(
SpiceTabletInstance
*
sin
,
...
@@ -182,7 +195,8 @@ static void tablet_buttons(SpiceTabletInstance *sin,
...
@@ -182,7 +195,8 @@ static void tablet_buttons(SpiceTabletInstance *sin,
{
{
QemuSpicePointer
*
pointer
=
container_of
(
sin
,
QemuSpicePointer
,
tablet
);
QemuSpicePointer
*
pointer
=
container_of
(
sin
,
QemuSpicePointer
,
tablet
);
kbd_mouse_event
(
pointer
->
x
,
pointer
->
y
,
0
,
map_buttons
(
buttons_state
));
spice_update_buttons
(
pointer
,
0
,
buttons_state
);
qemu_input_event_sync
();
}
}
static
const
SpiceTabletInterface
tablet_interface
=
{
static
const
SpiceTabletInterface
tablet_interface
=
{
...
@@ -199,7 +213,7 @@ static const SpiceTabletInterface tablet_interface = {
...
@@ -199,7 +213,7 @@ static const SpiceTabletInterface tablet_interface = {
static
void
mouse_mode_notifier
(
Notifier
*
notifier
,
void
*
data
)
static
void
mouse_mode_notifier
(
Notifier
*
notifier
,
void
*
data
)
{
{
QemuSpicePointer
*
pointer
=
container_of
(
notifier
,
QemuSpicePointer
,
mouse_mode
);
QemuSpicePointer
*
pointer
=
container_of
(
notifier
,
QemuSpicePointer
,
mouse_mode
);
bool
is_absolute
=
kbd_mouse
_is_absolute
();
bool
is_absolute
=
qemu_input
_is_absolute
();
if
(
pointer
->
absolute
==
is_absolute
)
{
if
(
pointer
->
absolute
==
is_absolute
)
{
return
;
return
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录