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
3ad97982
Commit
3ad97982
authored
Oct 04, 2006
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
server: Pass the data for message callbacks as vararg from the client side.
parent
29a3ce9f
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
32 additions
and
53 deletions
+32
-53
message.c
dlls/user/message.c
+10
-7
server_protocol.h
include/wine/server_protocol.h
+2
-4
protocol.def
server/protocol.def
+1
-3
queue.c
server/queue.c
+18
-36
trace.c
server/trace.c
+1
-3
No files found.
dlls/user/message.c
View file @
3ad97982
...
...
@@ -2169,6 +2169,7 @@ static void wait_message_reply( UINT flags )
static
BOOL
put_message_in_queue
(
const
struct
send_message_info
*
info
,
size_t
*
reply_size
)
{
struct
packed_message
data
;
message_data_t
msg_data
;
unsigned
int
res
;
int
i
,
timeout
=
0
;
...
...
@@ -2191,6 +2192,15 @@ static BOOL put_message_in_queue( const struct send_message_info *info, size_t *
return
FALSE
;
}
}
else
if
(
info
->
type
==
MSG_CALLBACK
)
{
msg_data
.
callback
.
callback
=
info
->
callback
;
msg_data
.
callback
.
data
=
info
->
data
;
msg_data
.
callback
.
result
=
0
;
data
.
data
[
0
]
=
&
msg_data
;
data
.
size
[
0
]
=
sizeof
(
msg_data
.
callback
);
data
.
count
=
1
;
}
else
if
(
info
->
type
==
MSG_POSTED
&&
info
->
msg
>=
WM_DDE_FIRST
&&
info
->
msg
<=
WM_DDE_LAST
)
{
return
post_dde_message
(
&
data
,
info
);
...
...
@@ -2207,12 +2217,6 @@ static BOOL put_message_in_queue( const struct send_message_info *info, size_t *
req
->
lparam
=
info
->
lparam
;
req
->
timeout
=
timeout
;
if
(
info
->
type
==
MSG_CALLBACK
)
{
req
->
callback
=
info
->
callback
;
req
->
info
=
info
->
data
;
}
if
(
info
->
flags
&
SMTO_ABORTIFHUNG
)
req
->
flags
|=
SEND_MSG_ABORT_IF_HUNG
;
for
(
i
=
0
;
i
<
data
.
count
;
i
++
)
wine_server_add_data
(
req
,
data
.
data
[
i
],
data
.
size
[
i
]
);
if
((
res
=
wine_server_call
(
req
)))
...
...
@@ -2569,7 +2573,6 @@ BOOL WINAPI SendMessageCallbackW( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
call_sendmsg_callback
(
callback
,
hwnd
,
msg
,
data
,
result
);
return
TRUE
;
}
FIXME
(
"callback will not be called
\n
"
);
return
send_inter_thread_message
(
&
info
,
&
result
);
}
...
...
include/wine/server_protocol.h
View file @
3ad97982
...
...
@@ -2224,10 +2224,8 @@ struct send_message_request
unsigned
int
msg
;
unsigned
long
wparam
;
unsigned
long
lparam
;
unsigned
long
info
;
int
timeout
;
void
*
callback
;
/* VARARG(data,bytes); */
/* VARARG(data,message_data); */
};
struct
send_message_reply
{
...
...
@@ -4428,6 +4426,6 @@ union generic_reply
struct
query_symlink_reply
query_symlink_reply
;
};
#define SERVER_PROTOCOL_VERSION 2
49
#define SERVER_PROTOCOL_VERSION 2
50
#endif
/* __WINE_WINE_SERVER_PROTOCOL_H */
server/protocol.def
View file @
3ad97982
...
...
@@ -1596,10 +1596,8 @@ enum char_info_mode
unsigned int msg; /* message code */
unsigned long wparam; /* parameters */
unsigned long lparam; /* parameters */
unsigned long info; /* extra info */
int timeout; /* timeout for reply */
void* callback; /* callback address */
VARARG(data,bytes); /* message data for sent messages */
VARARG(data,message_data); /* message data for sent messages */
@END
@REQ(post_quit_message)
...
...
server/queue.c
View file @
3ad97982
...
...
@@ -180,6 +180,7 @@ static const struct object_ops thread_input_ops =
static
struct
thread_input
*
foreground_input
;
static
unsigned
int
last_input_time
;
static
void
free_message
(
struct
message
*
msg
);
/* set the caret window in a given thread input */
static
void
set_caret_window
(
struct
thread_input
*
input
,
user_handle_t
win
)
...
...
@@ -404,11 +405,7 @@ static void free_result( struct message_result *result )
{
if
(
result
->
timeout
)
remove_timeout_user
(
result
->
timeout
);
if
(
result
->
data
)
free
(
result
->
data
);
if
(
result
->
callback_msg
)
{
free
(
result
->
callback_msg
->
data
);
free
(
result
->
callback_msg
);
}
if
(
result
->
callback_msg
)
free_message
(
result
->
callback_msg
);
free
(
result
);
}
...
...
@@ -522,8 +519,7 @@ static void result_timeout( void *private )
/* allocate and fill a message result structure */
static
struct
message_result
*
alloc_message_result
(
struct
msg_queue
*
send_queue
,
struct
msg_queue
*
recv_queue
,
struct
message
*
msg
,
int
timeout
,
void
*
callback
,
unsigned
long
callback_data
)
struct
message
*
msg
,
int
timeout
)
{
struct
message_result
*
result
=
mem_alloc
(
sizeof
(
*
result
)
);
if
(
result
)
...
...
@@ -538,7 +534,6 @@ static struct message_result *alloc_message_result( struct msg_queue *send_queue
if
(
msg
->
type
==
MSG_CALLBACK
)
{
struct
callback_msg_data
*
data
;
struct
message
*
callback_msg
=
mem_alloc
(
sizeof
(
*
callback_msg
)
);
if
(
!
callback_msg
)
...
...
@@ -546,12 +541,6 @@ static struct message_result *alloc_message_result( struct msg_queue *send_queue
free
(
result
);
return
NULL
;
}
if
(
!
(
data
=
mem_alloc
(
sizeof
(
*
data
))))
{
free
(
callback_msg
);
free
(
result
);
return
NULL
;
}
callback_msg
->
type
=
MSG_CALLBACK_RESULT
;
callback_msg
->
win
=
msg
->
win
;
callback_msg
->
msg
=
msg
->
msg
;
...
...
@@ -562,10 +551,11 @@ static struct message_result *alloc_message_result( struct msg_queue *send_queue
callback_msg
->
y
=
0
;
callback_msg
->
info
=
0
;
callback_msg
->
result
=
NULL
;
callback_msg
->
data
=
data
;
callback_msg
->
data_size
=
sizeof
(
*
data
);
data
->
callback
=
callback
;
data
->
data
=
callback_data
;
/* steal the data from the original message */
callback_msg
->
data
=
msg
->
data
;
callback_msg
->
data_size
=
msg
->
data_size
;
msg
->
data
=
NULL
;
msg
->
data_size
=
0
;
result
->
callback_msg
=
callback_msg
;
list_add_head
(
&
send_queue
->
callback_result
,
&
result
->
sender_entry
);
...
...
@@ -1600,26 +1590,25 @@ DECL_HANDLER(send_message)
msg
->
time
=
get_tick_count
();
msg
->
x
=
0
;
msg
->
y
=
0
;
msg
->
info
=
req
->
info
;
msg
->
info
=
0
;
msg
->
result
=
NULL
;
msg
->
data
=
NULL
;
msg
->
data_size
=
0
;
msg
->
data_size
=
get_req_data_size
();
if
(
msg
->
data_size
&&
!
(
msg
->
data
=
memdup
(
get_req_data
(),
msg
->
data_size
)))
{
free
(
msg
);
release_object
(
thread
);
return
;
}
switch
(
msg
->
type
)
{
case
MSG_OTHER_PROCESS
:
msg
->
data_size
=
get_req_data_size
();
if
(
msg
->
data_size
&&
!
(
msg
->
data
=
memdup
(
get_req_data
(),
msg
->
data_size
)))
{
free
(
msg
);
break
;
}
/* fall through */
case
MSG_ASCII
:
case
MSG_UNICODE
:
case
MSG_CALLBACK
:
if
(
!
(
msg
->
result
=
alloc_message_result
(
send_queue
,
recv_queue
,
msg
,
req
->
timeout
,
req
->
callback
,
req
->
info
)))
if
(
!
(
msg
->
result
=
alloc_message_result
(
send_queue
,
recv_queue
,
msg
,
req
->
timeout
)))
{
free_message
(
msg
);
break
;
...
...
@@ -1630,13 +1619,6 @@ DECL_HANDLER(send_message)
set_queue_bits
(
recv_queue
,
QS_SENDMESSAGE
);
break
;
case
MSG_POSTED
:
/* needed for posted DDE messages */
msg
->
data_size
=
get_req_data_size
();
if
(
msg
->
data_size
&&
!
(
msg
->
data
=
memdup
(
get_req_data
(),
msg
->
data_size
)))
{
free
(
msg
);
break
;
}
list_add_tail
(
&
recv_queue
->
msg_list
[
POST_MESSAGE
],
&
msg
->
entry
);
set_queue_bits
(
recv_queue
,
QS_POSTMESSAGE
|
QS_ALLPOSTMESSAGE
);
break
;
...
...
server/trace.c
View file @
3ad97982
...
...
@@ -2098,11 +2098,9 @@ static void dump_send_message_request( const struct send_message_request *req )
fprintf
(
stderr
,
" msg=%08x,"
,
req
->
msg
);
fprintf
(
stderr
,
" wparam=%lx,"
,
req
->
wparam
);
fprintf
(
stderr
,
" lparam=%lx,"
,
req
->
lparam
);
fprintf
(
stderr
,
" info=%lx,"
,
req
->
info
);
fprintf
(
stderr
,
" timeout=%d,"
,
req
->
timeout
);
fprintf
(
stderr
,
" callback=%p,"
,
req
->
callback
);
fprintf
(
stderr
,
" data="
);
dump_varargs_
bytes
(
cur_size
);
dump_varargs_
message_data
(
cur_size
);
}
static
void
dump_post_quit_message_request
(
const
struct
post_quit_message_request
*
req
)
...
...
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