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
039603c7
Commit
039603c7
authored
Mar 24, 2005
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Don't maintain a client-side WND structure for the desktop window.
Made WIN_GetPtr return WND_DESKTOP in that case.
parent
bf0f6a22
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
117 additions
and
113 deletions
+117
-113
wnd.c
dlls/ttydrv/wnd.c
+1
-0
menu.c
dlls/user/menu.c
+3
-2
message.c
dlls/user/message.c
+2
-2
msg16.c
dlls/user/msg16.c
+3
-4
painting.c
dlls/user/painting.c
+1
-1
scroll.c
dlls/user/scroll.c
+3
-3
desktop.c
dlls/x11drv/desktop.c
+0
-6
winpos.c
dlls/x11drv/winpos.c
+4
-1
win.h
include/win.h
+1
-0
class.c
windows/class.c
+4
-6
dce.c
windows/dce.c
+1
-1
defdlg.c
windows/defdlg.c
+1
-1
dialog.c
windows/dialog.c
+2
-1
mdi.c
windows/mdi.c
+1
-1
nonclient.c
windows/nonclient.c
+6
-14
win.c
windows/win.c
+78
-66
winpos.c
windows/winpos.c
+6
-4
No files found.
dlls/ttydrv/wnd.c
View file @
039603c7
...
...
@@ -109,6 +109,7 @@ static BOOL set_window_pos( HWND hwnd, HWND insert_after, const RECT *rectWindow
ret
=
!
wine_server_call
(
req
);
}
SERVER_END_REQ
;
if
(
win
==
WND_DESKTOP
)
return
ret
;
if
(
ret
)
{
win
->
rectWindow
=
*
rectWindow
;
...
...
dlls/user/menu.c
View file @
039603c7
...
...
@@ -319,7 +319,7 @@ static HMENU get_win_sys_menu( HWND hwnd )
{
HMENU
ret
=
0
;
WND
*
win
=
WIN_GetPtr
(
hwnd
);
if
(
win
&&
win
!=
WND_OTHER_PROCESS
)
if
(
win
&&
win
!=
WND_OTHER_PROCESS
&&
win
!=
WND_DESKTOP
)
{
ret
=
win
->
hSysMenu
;
WIN_ReleasePtr
(
win
);
...
...
@@ -3667,6 +3667,7 @@ HMENU WINAPI GetSystemMenu( HWND hWnd, BOOL bRevert )
WND
*
wndPtr
=
WIN_GetPtr
(
hWnd
);
HMENU
retvalue
=
0
;
if
(
wndPtr
==
WND_DESKTOP
)
return
0
;
if
(
wndPtr
==
WND_OTHER_PROCESS
)
{
if
(
IsWindow
(
hWnd
))
FIXME
(
"not supported on other process window %p
\n
"
,
hWnd
);
...
...
@@ -3724,7 +3725,7 @@ BOOL WINAPI SetSystemMenu( HWND hwnd, HMENU hMenu )
{
WND
*
wndPtr
=
WIN_GetPtr
(
hwnd
);
if
(
wndPtr
&&
wndPtr
!=
WND_OTHER_PROCESS
)
if
(
wndPtr
&&
wndPtr
!=
WND_OTHER_PROCESS
&&
wndPtr
!=
WND_DESKTOP
)
{
if
(
wndPtr
->
hSysMenu
)
DestroyMenu
(
wndPtr
->
hSysMenu
);
wndPtr
->
hSysMenu
=
MENU_GetSysMenu
(
hwnd
,
hMenu
);
...
...
dlls/user/message.c
View file @
039603c7
...
...
@@ -2867,7 +2867,7 @@ LONG WINAPI DispatchMessageA( const MSG* msg )
if
(
msg
->
hwnd
)
SetLastError
(
ERROR_INVALID_WINDOW_HANDLE
);
return
0
;
}
if
(
wndPtr
==
WND_OTHER_PROCESS
)
if
(
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
{
if
(
IsWindow
(
msg
->
hwnd
))
SetLastError
(
ERROR_MESSAGE_SYNC_ONLY
);
else
SetLastError
(
ERROR_INVALID_WINDOW_HANDLE
);
...
...
@@ -2942,7 +2942,7 @@ LONG WINAPI DispatchMessageW( const MSG* msg )
if
(
msg
->
hwnd
)
SetLastError
(
ERROR_INVALID_WINDOW_HANDLE
);
return
0
;
}
if
(
wndPtr
==
WND_OTHER_PROCESS
)
if
(
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
{
if
(
IsWindow
(
msg
->
hwnd
))
SetLastError
(
ERROR_MESSAGE_SYNC_ONLY
);
else
SetLastError
(
ERROR_INVALID_WINDOW_HANDLE
);
...
...
dlls/user/msg16.c
View file @
039603c7
...
...
@@ -363,11 +363,10 @@ LONG WINAPI DispatchMessage16( const MSG16* msg )
if
(
msg
->
hwnd
)
SetLastError
(
ERROR_INVALID_WINDOW_HANDLE
);
return
0
;
}
if
(
wndPtr
==
WND_OTHER_PROCESS
)
if
(
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
{
if
(
IsWindow
(
hwnd
))
ERR
(
"cannot dispatch msg to other process window %p
\n
"
,
hwnd
);
SetLastError
(
ERROR_INVALID_WINDOW_HANDLE
);
if
(
IsWindow
(
hwnd
))
SetLastError
(
ERROR_MESSAGE_SYNC_ONLY
);
else
SetLastError
(
ERROR_INVALID_WINDOW_HANDLE
);
return
0
;
}
winproc
=
(
WNDPROC16
)
wndPtr
->
winproc
;
...
...
dlls/user/painting.c
View file @
039603c7
...
...
@@ -188,7 +188,7 @@ static HRGN send_ncpaint( HWND hwnd, HWND *child, UINT *flags )
INT
type
;
WND
*
win
=
WIN_GetPtr
(
hwnd
);
if
(
!
win
||
win
==
WND_OTHER_PROCESS
)
if
(
!
win
||
win
==
WND_OTHER_PROCESS
||
win
==
WND_DESKTOP
)
{
DeleteObject
(
whole_rgn
);
return
0
;
...
...
dlls/user/scroll.c
View file @
039603c7
...
...
@@ -152,7 +152,7 @@ static SCROLLBAR_INFO *SCROLL_GetInternalInfo( HWND hwnd, INT nBar, BOOL alloc )
SCROLLBAR_INFO
*
infoPtr
=
NULL
;
WND
*
wndPtr
=
WIN_GetPtr
(
hwnd
);
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
)
return
NULL
;
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
return
NULL
;
switch
(
nBar
)
{
case
SB_HORZ
:
infoPtr
=
(
SCROLLBAR_INFO
*
)
wndPtr
->
pHScroll
;
break
;
...
...
@@ -201,7 +201,7 @@ static BOOL SCROLL_GetScrollBarRect( HWND hwnd, INT nBar, RECT *lprect,
BOOL
vertical
;
WND
*
wndPtr
=
WIN_GetPtr
(
hwnd
);
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
)
return
FALSE
;
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
return
FALSE
;
switch
(
nBar
)
{
...
...
@@ -1069,7 +1069,7 @@ void SCROLL_TrackScrollBar( HWND hwnd, INT scrollbar, POINT pt )
if
(
scrollbar
!=
SB_CTL
)
{
WND
*
wndPtr
=
WIN_GetPtr
(
hwnd
);
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
)
return
;
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
return
;
xoffset
=
wndPtr
->
rectClient
.
left
-
wndPtr
->
rectWindow
.
left
;
yoffset
=
wndPtr
->
rectClient
.
top
-
wndPtr
->
rectWindow
.
top
;
WIN_ReleasePtr
(
wndPtr
);
...
...
dlls/x11drv/desktop.c
View file @
039603c7
...
...
@@ -66,18 +66,12 @@ static DWORD CALLBACK desktop_thread( LPVOID driver_data )
Display
*
display
;
MSG
msg
;
HWND
hwnd
;
WND
*
win
;
Atom
atom
=
x11drv_atom
(
WM_DELETE_WINDOW
);
NtCurrentTeb
()
->
driver_data
=
driver_data
;
display
=
thread_display
();
hwnd
=
GetDesktopWindow
();
/* patch the desktop window queue to point to our queue */
win
=
WIN_GetPtr
(
hwnd
);
win
->
tid
=
GetCurrentThreadId
();
WIN_ReleasePtr
(
win
);
SetWindowLongPtrW
(
hwnd
,
GWLP_WNDPROC
,
(
LONG_PTR
)
desktop_winproc
);
wine_tsx11_lock
();
XSaveContext
(
display
,
root_window
,
winContext
,
(
char
*
)
hwnd
);
...
...
dlls/x11drv/winpos.c
View file @
039603c7
...
...
@@ -724,7 +724,6 @@ BOOL X11DRV_set_window_pos( HWND hwnd, HWND insert_after, const RECT *rectWindow
if
(
IsWindow
(
hwnd
))
ERR
(
"cannot set rectangles of other process window %p
\n
"
,
hwnd
);
return
FALSE
;
}
old_style
=
win
->
dwStyle
;
SERVER_START_REQ
(
set_window_pos
)
{
req
->
handle
=
hwnd
;
...
...
@@ -749,6 +748,8 @@ BOOL X11DRV_set_window_pos( HWND hwnd, HWND insert_after, const RECT *rectWindow
}
SERVER_END_REQ
;
if
(
win
==
WND_DESKTOP
)
return
ret
;
if
(
ret
)
{
Display
*
display
=
thread_display
();
...
...
@@ -765,6 +766,7 @@ BOOL X11DRV_set_window_pos( HWND hwnd, HWND insert_after, const RECT *rectWindow
win
->
rectWindow
=
*
rectWindow
;
win
->
rectClient
=
*
rectClient
;
old_style
=
win
->
dwStyle
;
win
->
dwStyle
=
new_style
;
data
->
window_rect
=
*
rectWindow
;
...
...
@@ -1090,6 +1092,7 @@ BOOL X11DRV_ShowWindow( HWND hwnd, INT cmd )
RECT
newPos
=
{
0
,
0
,
0
,
0
};
UINT
swp
=
0
;
if
(
hwnd
==
GetDesktopWindow
())
return
FALSE
;
TRACE
(
"hwnd=%p, cmd=%d, wasVisible %d
\n
"
,
hwnd
,
cmd
,
wasVisible
);
...
...
include/win.h
View file @
039603c7
...
...
@@ -106,6 +106,7 @@ inline static void WIN_ReleasePtr( WND *ptr )
}
#define WND_OTHER_PROCESS ((WND *)1)
/* returned by WIN_GetPtr on unknown window handles */
#define WND_DESKTOP ((WND *)2)
/* returned by WIN_GetPtr on the desktop window */
extern
LRESULT
HOOK_CallHooks
(
INT
id
,
INT
code
,
WPARAM
wparam
,
LPARAM
lparam
,
BOOL
unicode
);
...
...
windows/class.c
View file @
039603c7
...
...
@@ -65,7 +65,6 @@ typedef struct tagCLASS
}
CLASS
;
static
struct
list
class_list
=
LIST_INIT
(
class_list
);
static
CLASS
*
desktop_class
;
#define CLASS_OTHER_PROCESS ((CLASS *)1)
...
...
@@ -78,8 +77,9 @@ static CLASS *get_class_ptr( HWND hwnd, BOOL write_access )
if
(
ptr
)
{
if
(
ptr
!=
WND_OTHER_PROCESS
)
return
ptr
->
class
;
if
(
write_access
&&
IsWindow
(
hwnd
))
/* check other processes */
if
(
ptr
!=
WND_OTHER_PROCESS
&&
ptr
!=
WND_DESKTOP
)
return
ptr
->
class
;
if
(
write_access
&&
(
ptr
==
WND_DESKTOP
||
IsWindow
(
hwnd
)))
/* check other processes */
{
/* modifying classes in other processes is not allowed */
SetLastError
(
ERROR_ACCESS_DENIED
);
...
...
@@ -476,7 +476,7 @@ void CLASS_RegisterBuiltinClasses(void)
extern
const
struct
builtin_class_descr
SCROLL_builtin_class
;
extern
const
struct
builtin_class_descr
STATIC_builtin_class
;
desktop_class
=
register_builtin
(
&
DESKTOP_builtin_class
);
register_builtin
(
&
DESKTOP_builtin_class
);
register_builtin
(
&
BUTTON_builtin_class
);
register_builtin
(
&
COMBO_builtin_class
);
register_builtin
(
&
COMBOLBOX_builtin_class
);
...
...
@@ -499,8 +499,6 @@ void CLASS_RegisterBuiltinClasses(void)
*/
void
CLASS_AddWindow
(
CLASS
*
class
,
WND
*
win
,
WINDOWPROCTYPE
type
)
{
if
(
!
class
)
class
=
desktop_class
;
if
(
type
==
WIN_PROC_32W
)
{
if
(
!
(
win
->
winproc
=
class
->
winprocW
))
win
->
winproc
=
class
->
winprocA
;
...
...
windows/dce.c
View file @
039603c7
...
...
@@ -349,7 +349,7 @@ HDC WINAPI GetDCEx( HWND hwnd, HRGN hrgnClip, DWORD flags )
else
hwnd
=
WIN_GetFullHandle
(
hwnd
);
if
(
!
(
wndPtr
=
WIN_GetPtr
(
hwnd
)))
return
0
;
if
(
wndPtr
==
WND_OTHER_PROCESS
)
if
(
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
{
wndPtr
=
NULL
;
USER_Lock
();
...
...
windows/defdlg.c
View file @
039603c7
...
...
@@ -359,7 +359,7 @@ DIALOGINFO *DIALOG_get_info( HWND hwnd, BOOL create )
dlgInfo
->
flags
=
0
;
dlgInfo
->
hDialogHeap
=
0
;
wndPtr
=
WIN_GetPtr
(
hwnd
);
if
(
wndPtr
&&
wndPtr
!=
WND_OTHER_PROCESS
)
if
(
wndPtr
&&
wndPtr
!=
WND_OTHER_PROCESS
&&
wndPtr
!=
WND_DESKTOP
)
{
wndPtr
->
flags
|=
WIN_ISDIALOG
;
WIN_ReleasePtr
(
wndPtr
);
...
...
windows/dialog.c
View file @
039603c7
...
...
@@ -997,7 +997,7 @@ static HWND DIALOG_FindMsgDestination( HWND hwndDlg )
if
(
!
hParent
)
break
;
pParent
=
WIN_GetPtr
(
hParent
);
if
(
!
pParent
||
pParent
==
WND_OTHER_PROCESS
)
break
;
if
(
!
pParent
||
pParent
==
WND_OTHER_PROCESS
||
pParent
==
WND_DESKTOP
)
break
;
if
(
!
(
pParent
->
flags
&
WIN_ISDIALOG
))
{
...
...
@@ -1086,6 +1086,7 @@ BOOL WINAPI IsDialogMessageW( HWND hwndDlg, LPMSG msg )
if
(
CallMsgFilterW
(
msg
,
MSGF_DIALOGBOX
))
return
TRUE
;
hwndDlg
=
WIN_GetFullHandle
(
hwndDlg
);
if
(
hwndDlg
==
GetDesktopWindow
())
return
FALSE
;
if
((
hwndDlg
!=
msg
->
hwnd
)
&&
!
IsChild
(
hwndDlg
,
msg
->
hwnd
))
return
FALSE
;
hwndDlg
=
DIALOG_FindMsgDestination
(
hwndDlg
);
...
...
windows/mdi.c
View file @
039603c7
...
...
@@ -191,7 +191,7 @@ static MDICLIENTINFO *get_client_info( HWND client )
{
if
(
win
==
WND_OTHER_PROCESS
)
{
ERR
(
"client %p belongs to other process
\n
"
,
client
);
if
(
IsWindow
(
client
))
ERR
(
"client %p belongs to other process
\n
"
,
client
);
return
NULL
;
}
if
(
win
->
cbWndExtra
<
sizeof
(
MDICLIENTINFO
))
WARN
(
"%p is not an MDI client
\n
"
,
client
);
...
...
windows/nonclient.c
View file @
039603c7
...
...
@@ -182,7 +182,7 @@ static HICON NC_IconForWindow( HWND hwnd )
HICON
hIcon
=
0
;
WND
*
wndPtr
=
WIN_GetPtr
(
hwnd
);
if
(
wndPtr
&&
wndPtr
!=
WND_OTHER_PROCESS
)
if
(
wndPtr
&&
wndPtr
!=
WND_OTHER_PROCESS
&&
wndPtr
!=
WND_DESKTOP
)
{
hIcon
=
wndPtr
->
hIconSmall
;
if
(
!
hIcon
)
hIcon
=
wndPtr
->
hIcon
;
...
...
@@ -441,7 +441,7 @@ static void NC_GetInsideRect( HWND hwnd, RECT *rect )
{
WND
*
wndPtr
=
WIN_GetPtr
(
hwnd
);
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
)
return
;
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
return
;
rect
->
top
=
rect
->
left
=
0
;
rect
->
right
=
wndPtr
->
rectWindow
.
right
-
wndPtr
->
rectWindow
.
left
;
...
...
@@ -642,7 +642,7 @@ LONG NC_HandleNCHitTest (HWND hwnd , POINT pt)
LONG
retvalue
;
WND
*
wndPtr
=
WIN_GetPtr
(
hwnd
);
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
)
return
HTERROR
;
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
return
HTERROR
;
retvalue
=
NC_DoNCHitTest
(
wndPtr
,
pt
);
WIN_ReleasePtr
(
wndPtr
);
...
...
@@ -933,18 +933,10 @@ static void NC_DrawCaption( HDC hdc, RECT *rect, HWND hwnd, DWORD style,
/******************************************************************************
*
* NC_DoNCPaint
*
* Paint the non-client area for windows. The clip region is
* currently ignored.
*
* Bugs
* grep -E -A10 -B5 \(95\)\|\(Bugs\)\|\(FIXME\) windows/nonclient.c \
* misc/tweak.c controls/menu.c # :-)
*
*****************************************************************************/
* Paint the non-client area for windows.
*/
static
void
NC_DoNCPaint
(
HWND
hwnd
,
HRGN
clip
,
BOOL
suppress_menupaint
)
{
HDC
hdc
;
...
...
@@ -1185,7 +1177,7 @@ void NC_GetSysPopupPos( HWND hwnd, RECT* rect )
else
{
WND
*
wndPtr
=
WIN_GetPtr
(
hwnd
);
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
)
return
;
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
return
;
NC_GetInsideRect
(
hwnd
,
rect
);
OffsetRect
(
rect
,
wndPtr
->
rectWindow
.
left
,
wndPtr
->
rectWindow
.
top
);
...
...
windows/win.c
View file @
039603c7
...
...
@@ -51,7 +51,7 @@ WINE_DECLARE_DEBUG_CHANNEL(msg);
/**********************************************************************/
/* Desktop window */
static
WND
*
pWndDesktop
=
NULL
;
static
HWND
hwndDesktop
;
static
WORD
wDragWidth
=
4
;
static
WORD
wDragHeight
=
3
;
...
...
@@ -213,13 +213,14 @@ static HWND *list_window_parents( HWND hwnd )
{
if
(
!
(
win
=
WIN_GetPtr
(
current
)))
goto
empty
;
if
(
win
==
WND_OTHER_PROCESS
)
break
;
/* need to do it the hard way */
list
[
pos
]
=
win
->
parent
;
WIN_ReleasePtr
(
win
);
if
(
!
(
current
=
list
[
pos
]))
if
(
win
==
WND_DESKTOP
)
{
if
(
!
pos
)
goto
empty
;
list
[
pos
]
=
0
;
return
list
;
}
list
[
pos
]
=
current
=
win
->
parent
;
WIN_ReleasePtr
(
win
);
if
(
++
pos
==
size
-
1
)
{
/* need to grow the list */
...
...
@@ -312,6 +313,11 @@ WND *WIN_GetPtr( HWND hwnd )
return
ptr
;
ptr
=
NULL
;
}
else
if
(
index
==
USER_HANDLE_TO_INDEX
(
hwndDesktop
))
{
if
(
!
HIWORD
(
hwnd
)
||
hwnd
==
GetDesktopWindow
())
ptr
=
WND_DESKTOP
;
else
ptr
=
NULL
;
}
else
ptr
=
WND_OTHER_PROCESS
;
USER_Unlock
();
return
ptr
;
...
...
@@ -328,7 +334,7 @@ HWND WIN_IsCurrentProcess( HWND hwnd )
WND
*
ptr
;
HWND
ret
;
if
(
!
(
ptr
=
WIN_GetPtr
(
hwnd
))
||
ptr
==
WND_OTHER_PROCESS
)
return
0
;
if
(
!
(
ptr
=
WIN_GetPtr
(
hwnd
))
||
ptr
==
WND_OTHER_PROCESS
||
ptr
==
WND_DESKTOP
)
return
0
;
ret
=
ptr
->
hwndSelf
;
WIN_ReleasePtr
(
ptr
);
return
ret
;
...
...
@@ -345,11 +351,9 @@ HWND WIN_IsCurrentThread( HWND hwnd )
WND
*
ptr
;
HWND
ret
=
0
;
if
((
ptr
=
WIN_GetPtr
(
hwnd
))
&&
ptr
!=
WND_OTHER_PROCESS
)
{
if
(
!
(
ptr
=
WIN_GetPtr
(
hwnd
))
||
ptr
==
WND_OTHER_PROCESS
||
ptr
==
WND_DESKTOP
)
return
0
;
if
(
ptr
->
tid
==
GetCurrentThreadId
())
ret
=
ptr
->
hwndSelf
;
WIN_ReleasePtr
(
ptr
);
}
return
ret
;
}
...
...
@@ -370,6 +374,8 @@ HWND WIN_Handle32( HWND16 hwnd16 )
if
(
!
(
ptr
=
WIN_GetPtr
(
hwnd
)))
return
hwnd
;
if
(
ptr
==
WND_DESKTOP
)
return
GetDesktopWindow
();
if
(
ptr
!=
WND_OTHER_PROCESS
)
{
hwnd
=
ptr
->
hwndSelf
;
...
...
@@ -411,7 +417,7 @@ void WIN_LinkWindow( HWND hwnd, HWND parent, HWND hwndInsertAfter )
{
WND
*
wndPtr
=
WIN_GetPtr
(
hwnd
);
if
(
!
wndPtr
)
return
;
if
(
!
wndPtr
||
wndPtr
==
WND_DESKTOP
)
return
;
if
(
wndPtr
==
WND_OTHER_PROCESS
)
{
if
(
IsWindow
(
hwnd
))
ERR
(
" cannot link other process window %p
\n
"
,
hwnd
);
...
...
@@ -444,7 +450,7 @@ HWND WIN_SetOwner( HWND hwnd, HWND owner )
WND
*
win
=
WIN_GetPtr
(
hwnd
);
HWND
ret
=
0
;
if
(
!
win
)
return
0
;
if
(
!
win
||
win
==
WND_DESKTOP
)
return
0
;
if
(
win
==
WND_OTHER_PROCESS
)
{
if
(
IsWindow
(
hwnd
))
ERR
(
"cannot set owner %p on other process window %p
\n
"
,
owner
,
hwnd
);
...
...
@@ -477,7 +483,7 @@ ULONG WIN_SetStyle( HWND hwnd, ULONG set_bits, ULONG clear_bits )
ULONG
new_style
,
old_style
=
0
;
WND
*
win
=
WIN_GetPtr
(
hwnd
);
if
(
!
win
)
return
0
;
if
(
!
win
||
win
==
WND_DESKTOP
)
return
0
;
if
(
win
==
WND_OTHER_PROCESS
)
{
if
(
IsWindow
(
hwnd
))
...
...
@@ -521,7 +527,16 @@ BOOL WIN_GetRectangles( HWND hwnd, RECT *rectWindow, RECT *rectClient )
BOOL
ret
=
TRUE
;
if
(
!
win
)
return
FALSE
;
if
(
win
==
WND_OTHER_PROCESS
)
if
(
win
==
WND_DESKTOP
)
{
RECT
rect
;
rect
.
left
=
rect
.
top
=
0
;
rect
.
right
=
GetSystemMetrics
(
SM_CXSCREEN
);
rect
.
bottom
=
GetSystemMetrics
(
SM_CYSCREEN
);
if
(
rectWindow
)
*
rectWindow
=
rect
;
if
(
rectClient
)
*
rectClient
=
rect
;
}
else
if
(
win
==
WND_OTHER_PROCESS
)
{
SERVER_START_REQ
(
get_window_rectangles
)
{
...
...
@@ -645,26 +660,27 @@ void WIN_DestroyThreadWindows( HWND hwnd )
*/
BOOL
WIN_CreateDesktopWindow
(
void
)
{
HWND
hwndDesktop
;
CREATESTRUCTA
cs
;
TRACE
(
"Creating desktop window
\n
"
);
if
(
!
WINPOS_CreateInternalPosAtom
())
return
FALSE
;
pWndDesktop
=
create_window_handle
(
0
,
0
,
LOWORD
(
DESKTOP_CLASS_ATOM
),
0
,
WIN_PROC_32W
);
if
(
!
pWndDesktop
)
return
FALSE
;
hwndDesktop
=
pWndDesktop
->
hwndSelf
;
SERVER_START_REQ
(
create_window
)
{
req
->
parent
=
0
;
req
->
owner
=
0
;
req
->
atom
=
LOWORD
(
DESKTOP_CLASS_ATOM
);
req
->
instance
=
0
;
if
(
!
wine_server_call_err
(
req
))
hwndDesktop
=
reply
->
handle
;
}
SERVER_END_REQ
;
pWndDesktop
->
tid
=
0
;
/* nobody owns the desktop */
pWndDesktop
->
parent
=
0
;
pWndDesktop
->
owner
=
0
;
pWndDesktop
->
text
=
NULL
;
pWndDesktop
->
pVScroll
=
NULL
;
pWndDesktop
->
pHScroll
=
NULL
;
pWndDesktop
->
helpContext
=
0
;
pWndDesktop
->
flags
=
0
;
pWndDesktop
->
hSysMenu
=
0
;
if
(
!
hwndDesktop
)
{
ERR
(
"error %ld creating desktop window
\n
"
,
GetLastError
()
);
return
FALSE
;
}
cs
.
lpCreateParams
=
NULL
;
cs
.
hInstance
=
0
;
...
...
@@ -674,30 +690,12 @@ BOOL WIN_CreateDesktopWindow(void)
cs
.
y
=
0
;
cs
.
cx
=
GetSystemMetrics
(
SM_CXSCREEN
);
cs
.
cy
=
GetSystemMetrics
(
SM_CYSCREEN
);
cs
.
style
=
pWndDesktop
->
dwStyle
;
cs
.
dwExStyle
=
pWndDesktop
->
dwExStyle
;
cs
.
style
=
WS_POPUP
|
WS_VISIBLE
|
WS_CLIPSIBLINGS
|
WS_CLIPCHILDREN
;
cs
.
dwExStyle
=
0
;
cs
.
lpszName
=
NULL
;
cs
.
lpszClass
=
DESKTOP_CLASS_ATOM
;
SERVER_START_REQ
(
set_window_info
)
{
req
->
handle
=
hwndDesktop
;
req
->
flags
=
0
;
/* don't set anything, just retrieve */
req
->
extra_offset
=
-
1
;
wine_server_call
(
req
);
pWndDesktop
->
dwStyle
=
reply
->
old_style
;
pWndDesktop
->
dwExStyle
=
reply
->
old_ex_style
;
pWndDesktop
->
hInstance
=
(
HINSTANCE
)
reply
->
old_instance
;
pWndDesktop
->
userdata
=
(
ULONG_PTR
)
reply
->
old_user_data
;
pWndDesktop
->
wIDmenu
=
reply
->
old_id
;
}
SERVER_END_REQ
;
WIN_ReleasePtr
(
pWndDesktop
);
if
(
!
USER_Driver
.
pCreateWindow
||
!
USER_Driver
.
pCreateWindow
(
hwndDesktop
,
&
cs
,
FALSE
))
return
FALSE
;
return
TRUE
;
return
USER_Driver
.
pCreateWindow
(
hwndDesktop
,
&
cs
,
TRUE
);
}
...
...
@@ -946,7 +944,7 @@ static HWND WIN_CreateWindowEx( CREATESTRUCTA *cs, ATOM classAtom,
UINT
flags
=
0
;
wndPtr
=
WIN_GetPtr
(
cs
->
hwndParent
);
if
(
wndPtr
&&
wndPtr
!=
WND_OTHER_PROCESS
)
if
(
wndPtr
&&
wndPtr
!=
WND_OTHER_PROCESS
&&
wndPtr
!=
WND_DESKTOP
)
{
flags
=
wndPtr
->
flags
;
WIN_ReleasePtr
(
wndPtr
);
...
...
@@ -1640,7 +1638,7 @@ HWND WINAPI FindWindowW( LPCWSTR className, LPCWSTR title )
*/
HWND
WINAPI
GetDesktopWindow
(
void
)
{
if
(
pWndDesktop
)
return
pWndDesktop
->
hwndSelf
;
if
(
hwndDesktop
)
return
hwndDesktop
;
ERR
(
"Wine init error: either you're trying to use an invalid native USER.EXE config, or some graphics/GUI libraries or DLLs didn't initialize properly. Aborting.
\n
"
);
ExitProcess
(
1
);
return
0
;
...
...
@@ -1714,6 +1712,7 @@ BOOL WINAPI IsWindowUnicode( HWND hwnd )
BOOL
retvalue
;
if
(
!
(
wndPtr
=
WIN_GetPtr
(
hwnd
))
||
wndPtr
==
WND_OTHER_PROCESS
)
return
FALSE
;
if
(
wndPtr
==
WND_DESKTOP
)
return
TRUE
;
retvalue
=
(
WINPROC_GetProcType
(
wndPtr
->
winproc
)
==
WIN_PROC_32W
);
WIN_ReleasePtr
(
wndPtr
);
return
retvalue
;
...
...
@@ -1734,7 +1733,7 @@ WORD WINAPI GetWindowWord( HWND hwnd, INT offset )
SetLastError
(
ERROR_INVALID_WINDOW_HANDLE
);
return
0
;
}
if
(
wndPtr
==
WND_OTHER_PROCESS
)
if
(
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
{
SERVER_START_REQ
(
set_window_info
)
{
...
...
@@ -1801,6 +1800,11 @@ WORD WINAPI SetWindowWord( HWND hwnd, INT offset, WORD newval )
}
wndPtr
=
WIN_GetPtr
(
hwnd
);
if
(
wndPtr
==
WND_DESKTOP
)
{
SetLastError
(
ERROR_ACCESS_DENIED
);
return
0
;
}
if
(
wndPtr
==
WND_OTHER_PROCESS
)
{
if
(
IsWindow
(
hwnd
))
...
...
@@ -1865,7 +1869,7 @@ static LONG_PTR WIN_GetWindowLong( HWND hwnd, INT offset, WINDOWPROCTYPE type )
return
0
;
}
if
(
wndPtr
==
WND_OTHER_PROCESS
)
if
(
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
{
if
(
offset
==
GWLP_WNDPROC
)
{
...
...
@@ -1976,24 +1980,27 @@ static LONG_PTR WIN_SetWindowLong( HWND hwnd, INT offset, LONG_PTR newval,
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
FALSE
;
}
if
(
!
WIN_IsCurrentProcess
(
hwnd
))
if
(
!
(
wndPtr
=
WIN_GetPtr
(
hwnd
)))
{
if
(
offset
==
GWLP_WNDPROC
)
SetLastError
(
ERROR_INVALID_WINDOW_HANDLE
);
return
0
;
}
if
(
wndPtr
==
WND_DESKTOP
)
{
/* can't change anything on the desktop window */
SetLastError
(
ERROR_ACCESS_DENIED
);
return
0
;
}
return
SendMessageW
(
hwnd
,
WM_WINE_SETWINDOWLONG
,
offset
,
newval
);
}
wndPtr
=
WIN_GetPtr
(
hwnd
);
if
(
wndPtr
->
hwndSelf
==
GetDesktopWindow
())
if
(
wndPtr
==
WND_OTHER_PROCESS
)
{
if
(
offset
==
GWLP_WNDPROC
)
{
/* can't change anything on the desktop window */
WIN_ReleasePtr
(
wndPtr
);
SetLastError
(
ERROR_ACCESS_DENIED
);
return
0
;
}
return
SendMessageW
(
hwnd
,
WM_WINE_SETWINDOWLONG
,
offset
,
newval
);
}
/* first some special cases */
switch
(
offset
)
...
...
@@ -2289,7 +2296,8 @@ INT WINAPI InternalGetWindowText(HWND hwnd,LPWSTR lpString,INT nMaxCount )
if
(
nMaxCount
<=
0
)
return
0
;
if
(
!
(
win
=
WIN_GetPtr
(
hwnd
)))
return
0
;
if
(
win
!=
WND_OTHER_PROCESS
)
if
(
win
==
WND_DESKTOP
)
lpString
[
0
]
=
0
;
else
if
(
win
!=
WND_OTHER_PROCESS
)
{
if
(
win
->
text
)
lstrcpynW
(
lpString
,
win
->
text
,
nMaxCount
);
else
lpString
[
0
]
=
0
;
...
...
@@ -2385,6 +2393,7 @@ BOOL WINAPI IsWindow( HWND hwnd )
BOOL
ret
;
if
(
!
(
ptr
=
WIN_GetPtr
(
hwnd
)))
return
FALSE
;
if
(
ptr
==
WND_DESKTOP
)
return
TRUE
;
if
(
ptr
!=
WND_OTHER_PROCESS
)
{
...
...
@@ -2417,7 +2426,7 @@ DWORD WINAPI GetWindowThreadProcessId( HWND hwnd, LPDWORD process )
return
0
;
}
if
(
ptr
!=
WND_OTHER_PROCESS
)
if
(
ptr
!=
WND_OTHER_PROCESS
&&
ptr
!=
WND_DESKTOP
)
{
/* got a valid window */
tid
=
ptr
->
tid
;
...
...
@@ -2454,6 +2463,7 @@ HWND WINAPI GetParent( HWND hwnd )
SetLastError
(
ERROR_INVALID_WINDOW_HANDLE
);
return
0
;
}
if
(
wndPtr
==
WND_DESKTOP
)
return
0
;
if
(
wndPtr
==
WND_OTHER_PROCESS
)
{
LONG
style
=
GetWindowLongW
(
hwnd
,
GWL_STYLE
);
...
...
@@ -2497,6 +2507,7 @@ HWND WINAPI GetAncestor( HWND hwnd, UINT type )
SetLastError
(
ERROR_INVALID_WINDOW_HANDLE
);
return
0
;
}
if
(
win
==
WND_DESKTOP
)
return
0
;
if
(
win
!=
WND_OTHER_PROCESS
)
{
ret
=
win
->
parent
;
...
...
@@ -2584,7 +2595,7 @@ HWND WINAPI SetParent( HWND hwnd, HWND parent )
was_visible
=
ShowWindow
(
hwnd
,
SW_HIDE
);
if
(
!
IsWindow
(
parent
))
return
0
;
if
(
!
(
wndPtr
=
WIN_GetPtr
(
hwnd
))
||
wndPtr
==
WND_OTHER_PROCESS
)
return
0
;
if
(
!
(
wndPtr
=
WIN_GetPtr
(
hwnd
))
||
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
return
0
;
retvalue
=
wndPtr
->
parent
;
/* old parent */
if
(
parent
!=
retvalue
)
...
...
@@ -2703,6 +2714,7 @@ HWND WINAPI GetWindow( HWND hwnd, UINT rel )
SetLastError
(
ERROR_INVALID_HANDLE
);
return
0
;
}
if
(
wndPtr
==
WND_DESKTOP
)
return
0
;
if
(
wndPtr
!=
WND_OTHER_PROCESS
)
{
retval
=
wndPtr
->
owner
;
...
...
@@ -2972,7 +2984,7 @@ BOOL WINAPI FlashWindow( HWND hWnd, BOOL bInvert )
RedrawWindow
(
hWnd
,
0
,
0
,
RDW_INVALIDATE
|
RDW_ERASE
|
RDW_UPDATENOW
|
RDW_FRAME
);
wndPtr
=
WIN_GetPtr
(
hWnd
);
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
)
return
FALSE
;
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
return
FALSE
;
if
(
bInvert
&&
!
(
wndPtr
->
flags
&
WIN_NCACTIVATED
))
{
wndPtr
->
flags
|=
WIN_NCACTIVATED
;
...
...
@@ -2989,7 +3001,7 @@ BOOL WINAPI FlashWindow( HWND hWnd, BOOL bInvert )
WPARAM
wparam
;
wndPtr
=
WIN_GetPtr
(
hWnd
);
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
)
return
FALSE
;
if
(
!
wndPtr
||
wndPtr
==
WND_OTHER_PROCESS
||
wndPtr
==
WND_DESKTOP
)
return
FALSE
;
hWnd
=
wndPtr
->
hwndSelf
;
/* make it a full handle */
if
(
bInvert
)
wparam
=
!
(
wndPtr
->
flags
&
WIN_NCACTIVATED
);
...
...
@@ -3017,7 +3029,7 @@ DWORD WINAPI GetWindowContextHelpId( HWND hwnd )
{
DWORD
retval
;
WND
*
wnd
=
WIN_GetPtr
(
hwnd
);
if
(
!
wnd
)
return
0
;
if
(
!
wnd
||
wnd
==
WND_DESKTOP
)
return
0
;
if
(
wnd
==
WND_OTHER_PROCESS
)
{
if
(
IsWindow
(
hwnd
))
FIXME
(
"not supported on other process window %p
\n
"
,
hwnd
);
...
...
@@ -3035,7 +3047,7 @@ DWORD WINAPI GetWindowContextHelpId( HWND hwnd )
BOOL
WINAPI
SetWindowContextHelpId
(
HWND
hwnd
,
DWORD
id
)
{
WND
*
wnd
=
WIN_GetPtr
(
hwnd
);
if
(
!
wnd
)
return
FALSE
;
if
(
!
wnd
||
wnd
==
WND_DESKTOP
)
return
FALSE
;
if
(
wnd
==
WND_OTHER_PROCESS
)
{
if
(
IsWindow
(
hwnd
))
FIXME
(
"not supported on other process window %p
\n
"
,
hwnd
);
...
...
windows/winpos.c
View file @
039603c7
...
...
@@ -477,7 +477,7 @@ static void WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, POINT *offset )
{
HWND
hwnd
=
hwndFrom
;
while
(
hwnd
&&
hwnd
!=
GetDesktopWindow
()
)
while
(
hwnd
)
{
if
(
hwnd
==
hwndTo
)
return
;
if
(
!
(
wndPtr
=
WIN_GetPtr
(
hwnd
)))
...
...
@@ -485,6 +485,7 @@ static void WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, POINT *offset )
ERR
(
"bad hwndFrom = %p
\n
"
,
hwnd
);
return
;
}
if
(
wndPtr
==
WND_DESKTOP
)
break
;
if
(
wndPtr
==
WND_OTHER_PROCESS
)
goto
other_process
;
offset
->
x
+=
wndPtr
->
rectClient
.
left
;
offset
->
y
+=
wndPtr
->
rectClient
.
top
;
...
...
@@ -498,13 +499,14 @@ static void WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, POINT *offset )
{
HWND
hwnd
=
hwndTo
;
while
(
hwnd
&&
hwnd
!=
GetDesktopWindow
()
)
while
(
hwnd
)
{
if
(
!
(
wndPtr
=
WIN_GetPtr
(
hwnd
)))
{
ERR
(
"bad hwndTo = %p
\n
"
,
hwnd
);
return
;
}
if
(
wndPtr
==
WND_DESKTOP
)
break
;
if
(
wndPtr
==
WND_OTHER_PROCESS
)
goto
other_process
;
offset
->
x
-=
wndPtr
->
rectClient
.
left
;
offset
->
y
-=
wndPtr
->
rectClient
.
top
;
...
...
@@ -893,7 +895,7 @@ BOOL WINAPI GetWindowPlacement( HWND hwnd, WINDOWPLACEMENT *wndpl )
WND
*
pWnd
=
WIN_GetPtr
(
hwnd
);
LPINTERNALPOS
lpPos
;
if
(
!
pWnd
)
return
FALSE
;
if
(
!
pWnd
||
pWnd
==
WND_DESKTOP
)
return
FALSE
;
if
(
pWnd
==
WND_OTHER_PROCESS
)
{
if
(
IsWindow
(
hwnd
))
FIXME
(
"not supported on other process window %p
\n
"
,
hwnd
);
...
...
@@ -932,7 +934,7 @@ static BOOL WINPOS_SetPlacement( HWND hwnd, const WINDOWPLACEMENT *wndpl, UINT f
DWORD
style
;
WND
*
pWnd
=
WIN_GetPtr
(
hwnd
);
if
(
!
pWnd
||
pWnd
==
WND_OTHER_PROCESS
)
return
FALSE
;
if
(
!
pWnd
||
pWnd
==
WND_OTHER_PROCESS
||
pWnd
==
WND_DESKTOP
)
return
FALSE
;
lpPos
=
WINPOS_InitInternalPos
(
pWnd
);
if
(
flags
&
PLACE_MIN
)
...
...
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