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
1767b455
Commit
1767b455
authored
Mar 05, 2007
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
server: Expose areas revealed by changes to the window region.
parent
366dbd2f
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
34 additions
and
3 deletions
+34
-3
winpos.c
dlls/user32/winpos.c
+2
-0
server_protocol.h
include/wine/server_protocol.h
+2
-1
protocol.def
server/protocol.def
+1
-0
trace.c
server/trace.c
+1
-0
window.c
server/window.c
+28
-2
No files found.
dlls/user32/winpos.c
View file @
1767b455
...
...
@@ -250,6 +250,7 @@ int WINAPI SetWindowRgn( HWND hwnd, HRGN hrgn, BOOL bRedraw )
SERVER_START_REQ
(
set_window_region
)
{
req
->
window
=
hwnd
;
req
->
redraw
=
(
bRedraw
!=
0
);
if
(
data
->
rdh
.
nCount
)
wine_server_add_data
(
req
,
data
->
Buffer
,
data
->
rdh
.
nCount
*
sizeof
(
RECT
)
);
else
...
...
@@ -263,6 +264,7 @@ int WINAPI SetWindowRgn( HWND hwnd, HRGN hrgn, BOOL bRedraw )
SERVER_START_REQ
(
set_window_region
)
{
req
->
window
=
hwnd
;
req
->
redraw
=
(
bRedraw
!=
0
);
ret
=
!
wine_server_call_err
(
req
);
}
SERVER_END_REQ
;
...
...
include/wine/server_protocol.h
View file @
1767b455
...
...
@@ -3060,6 +3060,7 @@ struct set_window_region_request
{
struct
request_header
__header
;
user_handle_t
window
;
int
redraw
;
/* VARARG(region,rectangles); */
};
struct
set_window_region_reply
...
...
@@ -4671,6 +4672,6 @@ union generic_reply
struct
get_token_impersonation_level_reply
get_token_impersonation_level_reply
;
};
#define SERVER_PROTOCOL_VERSION 27
8
#define SERVER_PROTOCOL_VERSION 27
9
#endif
/* __WINE_WINE_SERVER_PROTOCOL_H */
server/protocol.def
View file @
1767b455
...
...
@@ -2233,6 +2233,7 @@ enum message_type
/* Set the window region */
@REQ(set_window_region)
user_handle_t window; /* handle to the window */
int redraw; /* redraw the window? */
VARARG(region,rectangles); /* list of rectangles for the region */
@END
...
...
server/trace.c
View file @
1767b455
...
...
@@ -2708,6 +2708,7 @@ static void dump_get_window_region_reply( const struct get_window_region_reply *
static
void
dump_set_window_region_request
(
const
struct
set_window_region_request
*
req
)
{
fprintf
(
stderr
,
" window=%p,"
,
req
->
window
);
fprintf
(
stderr
,
" redraw=%d,"
,
req
->
redraw
);
fprintf
(
stderr
,
" region="
);
dump_varargs_rectangles
(
cur_size
);
}
...
...
server/window.c
View file @
1767b455
...
...
@@ -1443,6 +1443,33 @@ done:
}
/* set the window region, updating the update region if necessary */
static
void
set_window_region
(
struct
window
*
win
,
struct
region
*
region
,
int
redraw
)
{
struct
region
*
old_vis_rgn
=
NULL
,
*
new_vis_rgn
;
struct
window
*
top
=
get_top_clipping_window
(
win
);
/* no need to redraw if window is not visible */
if
(
redraw
&&
!
is_visible
(
win
))
redraw
=
0
;
if
(
redraw
)
old_vis_rgn
=
get_visible_region
(
win
,
top
,
DCX_WINDOW
);
if
(
win
->
win_region
)
free_region
(
win
->
win_region
);
win
->
win_region
=
region
;
if
(
old_vis_rgn
&&
(
new_vis_rgn
=
get_visible_region
(
win
,
top
,
DCX_WINDOW
)))
{
/* expose anything revealed by the change */
if
(
xor_region
(
new_vis_rgn
,
old_vis_rgn
,
new_vis_rgn
))
expose_window
(
win
,
top
,
new_vis_rgn
);
free_region
(
new_vis_rgn
);
}
if
(
old_vis_rgn
)
free_region
(
old_vis_rgn
);
clear_error
();
/* we ignore out of memory errors since the region has been set */
}
/* create a window */
DECL_HANDLER
(
create_window
)
{
...
...
@@ -1900,8 +1927,7 @@ DECL_HANDLER(set_window_region)
if
(
!
(
region
=
create_region_from_req_data
(
get_req_data
(),
get_req_data_size
()
)))
return
;
}
if
(
win
->
win_region
)
free_region
(
win
->
win_region
);
win
->
win_region
=
region
;
set_window_region
(
win
,
region
,
req
->
redraw
);
}
...
...
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