Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
c8bf3ba2
Commit
c8bf3ba2
authored
Jan 28, 2024
by
Rémi Bernon
Committed by
Alexandre Julliard
Feb 08, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
server: Stop using hardware_msg_data in rawinput_message.
parent
f86cca38
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
40 additions
and
45 deletions
+40
-45
server_protocol.h
include/wine/server_protocol.h
+2
-2
protocol.def
server/protocol.def
+1
-1
queue.c
server/queue.c
+37
-42
No files found.
include/wine/server_protocol.h
View file @
c8bf3ba2
...
...
@@ -284,7 +284,7 @@ union rawinput
{
int
type
;
unsigned
int
device
;
unsigned
int
param
;
unsigned
int
w
param
;
unsigned
int
usage
;
unsigned
int
count
;
unsigned
int
length
;
...
...
@@ -6512,7 +6512,7 @@ union generic_reply
/* ### protocol_version begin ### */
#define SERVER_PROTOCOL_VERSION 79
0
#define SERVER_PROTOCOL_VERSION 79
1
/* ### protocol_version end ### */
...
...
server/protocol.def
View file @
c8bf3ba2
...
...
@@ -300,7 +300,7 @@ union rawinput
{
int type; /* RIM_TYPEHID */
unsigned int device; /* rawinput device index */
unsigned int
param; /* rawinput message
param */
unsigned int
wparam; /* rawinput message w
param */
unsigned int usage; /* HID device usage */
unsigned int count; /* HID report count */
unsigned int length; /* HID report length */
...
...
server/queue.c
View file @
c8bf3ba2
...
...
@@ -1789,7 +1789,9 @@ struct rawinput_message
struct
hw_msg_source
source
;
unsigned
int
time
;
unsigned
int
message
;
struct
hardware_msg_data
data
;
lparam_t
info
;
unsigned
int
flags
;
union
rawinput
rawinput
;
const
void
*
hid_report
;
};
...
...
@@ -1800,16 +1802,17 @@ static int queue_rawinput_message( struct process* process, void *arg )
const
struct
rawinput_device
*
device
=
NULL
;
struct
desktop
*
target_desktop
=
NULL
,
*
desktop
=
NULL
;
struct
thread
*
target_thread
=
NULL
,
*
foreground
=
NULL
;
struct
hardware_msg_data
*
msg_data
;
struct
message
*
msg
;
data_size_t
report_size
;
int
wparam
=
RIM_INPUT
;
if
(
raw_msg
->
data
.
rawinput
.
type
==
RIM_TYPEMOUSE
)
if
(
raw_msg
->
rawinput
.
type
==
RIM_TYPEMOUSE
)
device
=
process
->
rawinput_mouse
;
else
if
(
raw_msg
->
data
.
rawinput
.
type
==
RIM_TYPEKEYBOARD
)
else
if
(
raw_msg
->
rawinput
.
type
==
RIM_TYPEKEYBOARD
)
device
=
process
->
rawinput_kbd
;
else
device
=
find_rawinput_device
(
process
,
raw_msg
->
data
.
rawinput
.
hid
.
usage
);
device
=
find_rawinput_device
(
process
,
raw_msg
->
rawinput
.
hid
.
usage
);
if
(
!
device
)
return
0
;
if
(
raw_msg
->
message
==
WM_INPUT_DEVICE_CHANGE
&&
!
(
device
->
flags
&
RIDEV_DEVNOTIFY
))
return
0
;
...
...
@@ -1829,23 +1832,24 @@ static int queue_rawinput_message( struct process* process, void *arg )
wparam
=
RIM_INPUTSINK
;
}
if
(
raw_msg
->
data
.
rawinput
.
type
!=
RIM_TYPEHID
||
!
raw_msg
->
hid_report
)
report_size
=
0
;
else
report_size
=
raw_msg
->
data
.
size
-
sizeof
(
raw_msg
->
data
);
if
(
!
(
msg
=
alloc_hardware_message
(
raw_msg
->
data
.
info
,
raw_msg
->
source
,
raw_msg
->
time
,
report_size
)))
goto
done
;
if
(
raw_msg
->
rawinput
.
type
!=
RIM_TYPEHID
||
!
raw_msg
->
hid_report
)
report_size
=
0
;
else
report_size
=
raw_msg
->
rawinput
.
hid
.
count
*
raw_msg
->
rawinput
.
hid
.
length
;
if
(
!
(
msg
=
alloc_hardware_message
(
raw_msg
->
info
,
raw_msg
->
source
,
raw_msg
->
time
,
report_size
)))
goto
done
;
msg
->
win
=
device
->
target
;
msg
->
msg
=
raw_msg
->
message
;
msg
->
wparam
=
wparam
;
msg
->
lparam
=
0
;
memcpy
(
msg
->
data
,
&
raw_msg
->
data
,
sizeof
(
raw_msg
->
data
)
);
if
(
report_size
)
memcpy
(
(
struct
hardware_msg_data
*
)
msg
->
data
+
1
,
raw_msg
->
hid_report
,
report_size
);
if
(
raw_msg
->
message
==
WM_INPUT_DEVICE_CHANGE
&&
raw_msg
->
data
.
rawinput
.
type
==
RIM_TYPEHID
)
msg_data
=
msg
->
data
;
msg_data
->
flags
=
raw_msg
->
flags
;
msg_data
->
rawinput
=
raw_msg
->
rawinput
;
if
(
report_size
)
memcpy
(
msg_data
+
1
,
raw_msg
->
hid_report
,
report_size
);
if
(
raw_msg
->
message
==
WM_INPUT_DEVICE_CHANGE
&&
raw_msg
->
rawinput
.
type
==
RIM_TYPEHID
)
{
msg
->
wparam
=
raw_msg
->
data
.
rawinput
.
hid
.
param
;
msg
->
lparam
=
raw_msg
->
data
.
rawinput
.
hid
.
device
;
msg
->
wparam
=
raw_msg
->
rawinput
.
hid
.
w
param
;
msg
->
lparam
=
raw_msg
->
rawinput
.
hid
.
device
;
}
queue_hardware_message
(
desktop
,
msg
,
1
);
...
...
@@ -1924,14 +1928,12 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
raw_msg
.
time
=
time
;
raw_msg
.
message
=
WM_INPUT
;
msg_data
=
&
raw_msg
.
data
;
msg_data
->
info
=
input
->
mouse
.
info
;
msg_data
->
size
=
sizeof
(
*
msg_data
);
msg_data
->
flags
=
flags
;
msg_data
->
rawinput
.
type
=
RIM_TYPEMOUSE
;
msg_data
->
rawinput
.
mouse
.
x
=
x
-
desktop
->
cursor
.
x
;
msg_data
->
rawinput
.
mouse
.
y
=
y
-
desktop
->
cursor
.
y
;
msg_data
->
rawinput
.
mouse
.
data
=
input
->
mouse
.
data
;
raw_msg
.
info
=
input
->
mouse
.
info
;
raw_msg
.
flags
=
flags
;
raw_msg
.
rawinput
.
type
=
RIM_TYPEMOUSE
;
raw_msg
.
rawinput
.
mouse
.
x
=
x
-
desktop
->
cursor
.
x
;
raw_msg
.
rawinput
.
mouse
.
y
=
y
-
desktop
->
cursor
.
y
;
raw_msg
.
rawinput
.
mouse
.
data
=
input
->
mouse
.
data
;
enum_processes
(
queue_rawinput_message
,
&
raw_msg
);
release_object
(
foreground
);
...
...
@@ -2062,14 +2064,12 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
raw_msg
.
time
=
time
;
raw_msg
.
message
=
WM_INPUT
;
msg_data
=
&
raw_msg
.
data
;
msg_data
->
info
=
input
->
kbd
.
info
;
msg_data
->
size
=
sizeof
(
*
msg_data
);
msg_data
->
flags
=
input
->
kbd
.
flags
;
msg_data
->
rawinput
.
type
=
RIM_TYPEKEYBOARD
;
msg_data
->
rawinput
.
kbd
.
message
=
message_code
;
msg_data
->
rawinput
.
kbd
.
vkey
=
vkey
;
msg_data
->
rawinput
.
kbd
.
scan
=
input
->
kbd
.
scan
;
raw_msg
.
info
=
input
->
kbd
.
info
;
raw_msg
.
flags
=
input
->
kbd
.
flags
;
raw_msg
.
rawinput
.
type
=
RIM_TYPEKEYBOARD
;
raw_msg
.
rawinput
.
kbd
.
message
=
message_code
;
raw_msg
.
rawinput
.
kbd
.
vkey
=
vkey
;
raw_msg
.
rawinput
.
kbd
.
scan
=
input
->
kbd
.
scan
;
enum_processes
(
queue_rawinput_message
,
&
raw_msg
);
release_object
(
foreground
);
...
...
@@ -2117,10 +2117,8 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_
unsigned
int
origin
,
const
hw_input_t
*
input
)
{
struct
hw_msg_source
source
=
{
IMDT_UNAVAILABLE
,
origin
};
struct
hardware_msg_data
*
msg_data
;
struct
rawinput_message
raw_msg
;
struct
message
*
msg
;
data_size_t
report_size
=
0
;
switch
(
input
->
hw
.
msg
)
{
...
...
@@ -2131,21 +2129,18 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_
raw_msg
.
time
=
get_tick_count
();
raw_msg
.
message
=
input
->
hw
.
msg
;
raw_msg
.
hid_report
=
get_req_data
();
report_size
=
input
->
hw
.
hid
.
length
*
input
->
hw
.
hid
.
count
;
if
(
report_size
!=
get_req_data_size
())
if
(
input
->
hw
.
hid
.
length
*
input
->
hw
.
hid
.
count
!=
get_req_data_size
())
{
set_error
(
STATUS_INVALID_PARAMETER
);
return
;
}
msg_data
=
&
raw_msg
.
data
;
msg_data
->
size
=
sizeof
(
*
msg_data
)
+
report_size
;
msg_data
->
rawinput
.
hid
.
type
=
RIM_TYPEHID
;
msg_data
->
rawinput
.
hid
.
device
=
input
->
hw
.
hid
.
device
;
msg_data
->
rawinput
.
hid
.
param
=
input
->
hw
.
wparam
;
msg_data
->
rawinput
.
hid
.
usage
=
input
->
hw
.
hid
.
usage
;
msg_data
->
rawinput
.
hid
.
count
=
input
->
hw
.
hid
.
count
;
msg_data
->
rawinput
.
hid
.
length
=
input
->
hw
.
hid
.
length
;
raw_msg
.
rawinput
.
hid
.
type
=
RIM_TYPEHID
;
raw_msg
.
rawinput
.
hid
.
device
=
input
->
hw
.
hid
.
device
;
raw_msg
.
rawinput
.
hid
.
wparam
=
input
->
hw
.
wparam
;
raw_msg
.
rawinput
.
hid
.
usage
=
input
->
hw
.
hid
.
usage
;
raw_msg
.
rawinput
.
hid
.
count
=
input
->
hw
.
hid
.
count
;
raw_msg
.
rawinput
.
hid
.
length
=
input
->
hw
.
hid
.
length
;
enum_processes
(
queue_rawinput_message
,
&
raw_msg
);
return
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment