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
c0b62eb5
Commit
c0b62eb5
authored
Jul 28, 2022
by
Jacek Caban
Committed by
Alexandre Julliard
Aug 05, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
user32: Use win32u to get and set MDI client info.
parent
1bd73c6c
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
25 additions
and
41 deletions
+25
-41
mdi.c
dlls/user32/mdi.c
+2
-18
win.c
dlls/user32/win.c
+3
-21
win.h
dlls/user32/win.h
+0
-2
window.c
dlls/win32u/window.c
+8
-0
ntuser.h
include/ntuser.h
+12
-0
No files found.
dlls/user32/mdi.c
View file @
c0b62eb5
...
@@ -194,22 +194,7 @@ const struct builtin_class_descr MDICLIENT_builtin_class =
...
@@ -194,22 +194,7 @@ const struct builtin_class_descr MDICLIENT_builtin_class =
static
MDICLIENTINFO
*
get_client_info
(
HWND
client
)
static
MDICLIENTINFO
*
get_client_info
(
HWND
client
)
{
{
MDICLIENTINFO
*
ret
=
NULL
;
return
NtUserGetMDIClientInfo
(
client
);
WND
*
win
=
WIN_GetPtr
(
client
);
if
(
win
)
{
if
(
win
==
WND_OTHER_PROCESS
||
win
==
WND_DESKTOP
)
{
if
(
IsWindow
(
client
))
WARN
(
"client %p belongs to other process
\n
"
,
client
);
return
NULL
;
}
if
(
win
->
flags
&
WIN_ISMDICLIENT
)
ret
=
((
MDICLIENTINFO
**
)
win
->
wExtra
)[
1
];
else
WARN
(
"%p is not an MDI client
\n
"
,
client
);
WIN_ReleasePtr
(
win
);
}
return
ret
;
}
}
static
BOOL
is_close_enabled
(
HWND
hwnd
,
HMENU
hSysMenu
)
static
BOOL
is_close_enabled
(
HWND
hwnd
,
HMENU
hSysMenu
)
...
@@ -1038,8 +1023,7 @@ LRESULT MDIClientWndProc_common( HWND hwnd, UINT message, WPARAM wParam, LPARAM
...
@@ -1038,8 +1023,7 @@ LRESULT MDIClientWndProc_common( HWND hwnd, UINT message, WPARAM wParam, LPARAM
if
(
message
==
WM_NCCREATE
)
if
(
message
==
WM_NCCREATE
)
{
{
if
(
!
(
ci
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
*
ci
)
)))
return
0
;
if
(
!
(
ci
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
*
ci
)
)))
return
0
;
SetWindowLongPtrW
(
hwnd
,
sizeof
(
void
*
),
(
ULONG_PTR
)
ci
);
NtUserSetMDIClientInfo
(
hwnd
,
ci
);
win_set_flags
(
hwnd
,
WIN_ISMDICLIENT
,
0
);
}
}
return
unicode
?
DefWindowProcW
(
hwnd
,
message
,
wParam
,
lParam
)
:
return
unicode
?
DefWindowProcW
(
hwnd
,
message
,
wParam
,
lParam
)
:
DefWindowProcA
(
hwnd
,
message
,
wParam
,
lParam
);
DefWindowProcA
(
hwnd
,
message
,
wParam
,
lParam
);
...
...
dlls/user32/win.c
View file @
c0b62eb5
...
@@ -128,7 +128,7 @@ BOOL is_desktop_window( HWND hwnd )
...
@@ -128,7 +128,7 @@ BOOL is_desktop_window( HWND hwnd )
* or WND_OTHER_PROCESS if handle may be valid in other process.
* or WND_OTHER_PROCESS if handle may be valid in other process.
* If ret value is a valid pointer, it must be released with WIN_ReleasePtr.
* If ret value is a valid pointer, it must be released with WIN_ReleasePtr.
*/
*/
WND
*
WIN_GetPtr
(
HWND
hwnd
)
static
WND
*
WIN_GetPtr
(
HWND
hwnd
)
{
{
WND
*
ptr
=
(
void
*
)
NtUserCallTwoParam
(
HandleToUlong
(
hwnd
),
NTUSER_OBJ_WINDOW
,
NtUserGetHandlePtr
);
WND
*
ptr
=
(
void
*
)
NtUserCallTwoParam
(
HandleToUlong
(
hwnd
),
NTUSER_OBJ_WINDOW
,
NtUserGetHandlePtr
);
if
(
ptr
==
WND_OTHER_PROCESS
&&
is_desktop_window
(
hwnd
))
ptr
=
WND_DESKTOP
;
if
(
ptr
==
WND_OTHER_PROCESS
&&
is_desktop_window
(
hwnd
))
ptr
=
WND_DESKTOP
;
...
@@ -139,7 +139,7 @@ WND *WIN_GetPtr( HWND hwnd )
...
@@ -139,7 +139,7 @@ WND *WIN_GetPtr( HWND hwnd )
/***********************************************************************
/***********************************************************************
* WIN_ReleasePtr
* WIN_ReleasePtr
*/
*/
void
WIN_ReleasePtr
(
WND
*
ptr
)
static
void
WIN_ReleasePtr
(
WND
*
ptr
)
{
{
assert
(
ptr
&&
ptr
!=
OBJ_OTHER_PROCESS
);
assert
(
ptr
&&
ptr
!=
OBJ_OTHER_PROCESS
);
NtUserCallOneParam
(
1
,
NtUserLock
);
NtUserCallOneParam
(
1
,
NtUserLock
);
...
@@ -169,24 +169,6 @@ HWND WIN_IsCurrentThread( HWND hwnd )
...
@@ -169,24 +169,6 @@ HWND WIN_IsCurrentThread( HWND hwnd )
/***********************************************************************
/***********************************************************************
* win_set_flags
*
* Set the flags of a window and return the previous value.
*/
UINT
win_set_flags
(
HWND
hwnd
,
UINT
set_mask
,
UINT
clear_mask
)
{
UINT
ret
;
WND
*
ptr
=
WIN_GetPtr
(
hwnd
);
if
(
!
ptr
||
ptr
==
WND_OTHER_PROCESS
||
ptr
==
WND_DESKTOP
)
return
0
;
ret
=
ptr
->
flags
;
ptr
->
flags
=
(
ret
&
~
clear_mask
)
|
set_mask
;
WIN_ReleasePtr
(
ptr
);
return
ret
;
}
/***********************************************************************
* WIN_GetFullHandle
* WIN_GetFullHandle
*
*
* Convert a possibly truncated window handle to a full 32-bit handle.
* Convert a possibly truncated window handle to a full 32-bit handle.
...
@@ -494,7 +476,7 @@ HWND WIN_CreateWindowEx( CREATESTRUCTW *cs, LPCWSTR className, HINSTANCE module,
...
@@ -494,7 +476,7 @@ HWND WIN_CreateWindowEx( CREATESTRUCTW *cs, LPCWSTR className, HINSTANCE module,
POINT
pos
[
2
];
POINT
pos
[
2
];
UINT
id
=
0
;
UINT
id
=
0
;
if
(
!
(
win_get_flags
(
cs
->
hwndParent
)
&
WIN_ISMDICLIENT
))
if
(
!
NtUserGetMDIClientInfo
(
cs
->
hwndParent
))
{
{
WARN
(
"WS_EX_MDICHILD, but parent %p is not MDIClient
\n
"
,
cs
->
hwndParent
);
WARN
(
"WS_EX_MDICHILD, but parent %p is not MDIClient
\n
"
,
cs
->
hwndParent
);
return
0
;
return
0
;
...
...
dlls/user32/win.h
View file @
c0b62eb5
...
@@ -36,8 +36,6 @@ struct tagDIALOGINFO;
...
@@ -36,8 +36,6 @@ struct tagDIALOGINFO;
/* Window functions */
/* Window functions */
extern
HWND
get_hwnd_message_parent
(
void
)
DECLSPEC_HIDDEN
;
extern
HWND
get_hwnd_message_parent
(
void
)
DECLSPEC_HIDDEN
;
extern
BOOL
is_desktop_window
(
HWND
hwnd
)
DECLSPEC_HIDDEN
;
extern
BOOL
is_desktop_window
(
HWND
hwnd
)
DECLSPEC_HIDDEN
;
extern
WND
*
WIN_GetPtr
(
HWND
hwnd
)
DECLSPEC_HIDDEN
;
extern
void
WIN_ReleasePtr
(
WND
*
ptr
)
DECLSPEC_HIDDEN
;
extern
HWND
WIN_GetFullHandle
(
HWND
hwnd
)
DECLSPEC_HIDDEN
;
extern
HWND
WIN_GetFullHandle
(
HWND
hwnd
)
DECLSPEC_HIDDEN
;
extern
HWND
WIN_IsCurrentProcess
(
HWND
hwnd
)
DECLSPEC_HIDDEN
;
extern
HWND
WIN_IsCurrentProcess
(
HWND
hwnd
)
DECLSPEC_HIDDEN
;
extern
HWND
WIN_IsCurrentThread
(
HWND
hwnd
)
DECLSPEC_HIDDEN
;
extern
HWND
WIN_IsCurrentThread
(
HWND
hwnd
)
DECLSPEC_HIDDEN
;
...
...
dlls/win32u/window.c
View file @
c0b62eb5
...
@@ -5410,6 +5410,10 @@ ULONG_PTR WINAPI NtUserCallHwnd( HWND hwnd, DWORD code )
...
@@ -5410,6 +5410,10 @@ ULONG_PTR WINAPI NtUserCallHwnd( HWND hwnd, DWORD code )
case
NtUserCallHwnd_GetDialogInfo
:
case
NtUserCallHwnd_GetDialogInfo
:
return
(
ULONG_PTR
)
get_dialog_info
(
hwnd
);
return
(
ULONG_PTR
)
get_dialog_info
(
hwnd
);
case
NtUserCallHwnd_GetMDIClientInfo
:
if
(
!
(
win_get_flags
(
hwnd
)
&
WIN_ISMDICLIENT
))
return
0
;
return
get_window_long_ptr
(
hwnd
,
sizeof
(
void
*
),
FALSE
);
case
NtUserCallHwnd_GetWindowContextHelpId
:
case
NtUserCallHwnd_GetWindowContextHelpId
:
return
get_window_context_help_id
(
hwnd
);
return
get_window_context_help_id
(
hwnd
);
...
@@ -5548,6 +5552,10 @@ ULONG_PTR WINAPI NtUserCallHwndParam( HWND hwnd, DWORD_PTR param, DWORD code )
...
@@ -5548,6 +5552,10 @@ ULONG_PTR WINAPI NtUserCallHwndParam( HWND hwnd, DWORD_PTR param, DWORD code )
case
NtUserCallHwndParam_SetDialogInfo
:
case
NtUserCallHwndParam_SetDialogInfo
:
return
set_dialog_info
(
hwnd
,
(
void
*
)
param
);
return
set_dialog_info
(
hwnd
,
(
void
*
)
param
);
case
NtUserCallHwndParam_SetMDIClientInfo
:
NtUserSetWindowLongPtr
(
hwnd
,
sizeof
(
void
*
),
param
,
FALSE
);
return
win_set_flags
(
hwnd
,
WIN_ISMDICLIENT
,
0
);
case
NtUserCallHwndParam_SetWindowContextHelpId
:
case
NtUserCallHwndParam_SetWindowContextHelpId
:
return
set_window_context_help_id
(
hwnd
,
param
);
return
set_window_context_help_id
(
hwnd
,
param
);
...
...
include/ntuser.h
View file @
c0b62eb5
...
@@ -1101,6 +1101,7 @@ enum
...
@@ -1101,6 +1101,7 @@ enum
NtUserCallHwnd_GetDefaultImeWindow
,
NtUserCallHwnd_GetDefaultImeWindow
,
NtUserCallHwnd_GetDialogInfo
,
NtUserCallHwnd_GetDialogInfo
,
NtUserCallHwnd_GetDpiForWindow
,
NtUserCallHwnd_GetDpiForWindow
,
NtUserCallHwnd_GetMDIClientInfo
,
NtUserCallHwnd_GetParent
,
NtUserCallHwnd_GetParent
,
NtUserCallHwnd_GetWindowContextHelpId
,
NtUserCallHwnd_GetWindowContextHelpId
,
NtUserCallHwnd_GetWindowDpiAwarenessContext
,
NtUserCallHwnd_GetWindowDpiAwarenessContext
,
...
@@ -1148,6 +1149,11 @@ static inline UINT NtUserGetDpiForWindow( HWND hwnd )
...
@@ -1148,6 +1149,11 @@ static inline UINT NtUserGetDpiForWindow( HWND hwnd )
return
NtUserCallHwnd
(
hwnd
,
NtUserCallHwnd_GetDpiForWindow
);
return
NtUserCallHwnd
(
hwnd
,
NtUserCallHwnd_GetDpiForWindow
);
}
}
static
inline
void
*
NtUserGetMDIClientInfo
(
HWND
hwnd
)
{
return
(
void
*
)
NtUserCallHwnd
(
hwnd
,
NtUserCallHwnd_GetMDIClientInfo
);
}
static
inline
HWND
NtUserGetParent
(
HWND
hwnd
)
static
inline
HWND
NtUserGetParent
(
HWND
hwnd
)
{
{
return
UlongToHandle
(
NtUserCallHwnd
(
hwnd
,
NtUserCallHwnd_GetParent
));
return
UlongToHandle
(
NtUserCallHwnd
(
hwnd
,
NtUserCallHwnd_GetParent
));
...
@@ -1228,6 +1234,7 @@ enum
...
@@ -1228,6 +1234,7 @@ enum
NtUserCallHwndParam_MonitorFromWindow
,
NtUserCallHwndParam_MonitorFromWindow
,
NtUserCallHwndParam_ScreenToClient
,
NtUserCallHwndParam_ScreenToClient
,
NtUserCallHwndParam_SetDialogInfo
,
NtUserCallHwndParam_SetDialogInfo
,
NtUserCallHwndParam_SetMDIClientInfo
,
NtUserCallHwndParam_SetWindowContextHelpId
,
NtUserCallHwndParam_SetWindowContextHelpId
,
NtUserCallHwndParam_SetWindowPixelFormat
,
NtUserCallHwndParam_SetWindowPixelFormat
,
NtUserCallHwndParam_ShowOwnedPopups
,
NtUserCallHwndParam_ShowOwnedPopups
,
...
@@ -1394,6 +1401,11 @@ static inline void NtUserSetDialogInfo( HWND hwnd, void *info )
...
@@ -1394,6 +1401,11 @@ static inline void NtUserSetDialogInfo( HWND hwnd, void *info )
NtUserCallHwndParam
(
hwnd
,
(
UINT_PTR
)
info
,
NtUserCallHwndParam_SetDialogInfo
);
NtUserCallHwndParam
(
hwnd
,
(
UINT_PTR
)
info
,
NtUserCallHwndParam_SetDialogInfo
);
}
}
static
inline
void
NtUserSetMDIClientInfo
(
HWND
hwnd
,
void
*
info
)
{
NtUserCallHwndParam
(
hwnd
,
(
UINT_PTR
)
info
,
NtUserCallHwndParam_SetMDIClientInfo
);
}
static
inline
BOOL
NtUserSetWindowContextHelpId
(
HWND
hwnd
,
DWORD
id
)
static
inline
BOOL
NtUserSetWindowContextHelpId
(
HWND
hwnd
,
DWORD
id
)
{
{
return
NtUserCallHwndParam
(
hwnd
,
id
,
NtUserCallHwndParam_SetWindowContextHelpId
);
return
NtUserCallHwndParam
(
hwnd
,
id
,
NtUserCallHwndParam_SetWindowContextHelpId
);
...
...
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