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
04716457
Commit
04716457
authored
Jun 20, 2022
by
Jacek Caban
Committed by
Alexandre Julliard
Jun 20, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
win32u: Move more default window messages implementation from user32.
Signed-off-by:
Jacek Caban
<
jacek@codeweavers.com
>
parent
8d964870
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
111 additions
and
99 deletions
+111
-99
defwnd.c
dlls/user32/defwnd.c
+0
-98
defwnd.c
dlls/win32u/defwnd.c
+109
-0
win32u_private.h
dlls/win32u/win32u_private.h
+1
-0
window.c
dlls/win32u/window.c
+1
-1
No files found.
dlls/user32/defwnd.c
View file @
04716457
...
...
@@ -36,8 +36,6 @@
WINE_DEFAULT_DEBUG_CHANNEL
(
win
);
#define DRAG_FILE 0x454C4946
/***********************************************************************
* DEFWND_ControlColor
*
...
...
@@ -90,34 +88,6 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa
case
WM_NCMOUSELEAVE
:
return
NC_HandleNCMouseLeave
(
hwnd
);
case
WM_RBUTTONUP
:
{
POINT
pt
;
pt
.
x
=
(
short
)
LOWORD
(
lParam
);
pt
.
y
=
(
short
)
HIWORD
(
lParam
);
ClientToScreen
(
hwnd
,
&
pt
);
SendMessageW
(
hwnd
,
WM_CONTEXTMENU
,
(
WPARAM
)
hwnd
,
MAKELPARAM
(
pt
.
x
,
pt
.
y
)
);
}
break
;
case
WM_NCRBUTTONUP
:
/*
* FIXME : we must NOT send WM_CONTEXTMENU on a WM_NCRBUTTONUP (checked
* in Windows), but what _should_ we do? According to MSDN :
* "If it is appropriate to do so, the system sends the WM_SYSCOMMAND
* message to the window". When is it appropriate?
*/
break
;
case
WM_XBUTTONUP
:
case
WM_NCXBUTTONUP
:
if
(
HIWORD
(
wParam
)
==
XBUTTON1
||
HIWORD
(
wParam
)
==
XBUTTON2
)
{
SendMessageW
(
hwnd
,
WM_APPCOMMAND
,
(
WPARAM
)
hwnd
,
MAKELPARAM
(
LOWORD
(
wParam
),
FAPPCOMMAND_MOUSE
|
HIWORD
(
wParam
)));
}
break
;
case
WM_SYSCOMMAND
:
return
NC_HandleSysCommand
(
hwnd
,
wParam
,
lParam
);
...
...
@@ -146,74 +116,6 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa
break
;
}
case
WM_VKEYTOITEM
:
case
WM_CHARTOITEM
:
return
-
1
;
case
WM_DROPOBJECT
:
return
DRAG_FILE
;
case
WM_QUERYDROPOBJECT
:
return
(
GetWindowLongA
(
hwnd
,
GWL_EXSTYLE
)
&
WS_EX_ACCEPTFILES
)
!=
0
;
case
WM_QUERYDRAGICON
:
{
UINT
len
;
HICON
hIcon
=
(
HICON
)
GetClassLongPtrW
(
hwnd
,
GCLP_HICON
);
HINSTANCE
instance
=
(
HINSTANCE
)
GetWindowLongPtrW
(
hwnd
,
GWLP_HINSTANCE
);
if
(
hIcon
)
return
(
LRESULT
)
hIcon
;
for
(
len
=
1
;
len
<
64
;
len
++
)
if
((
hIcon
=
LoadIconW
(
instance
,
MAKEINTRESOURCEW
(
len
))))
return
(
LRESULT
)
hIcon
;
return
(
LRESULT
)
LoadIconW
(
0
,
(
LPWSTR
)
IDI_APPLICATION
);
}
break
;
case
WM_ISACTIVEICON
:
return
(
win_get_flags
(
hwnd
)
&
WIN_NCACTIVATED
)
!=
0
;
case
WM_NOTIFYFORMAT
:
if
(
IsWindowUnicode
(
hwnd
))
return
NFR_UNICODE
;
else
return
NFR_ANSI
;
case
WM_QUERYOPEN
:
case
WM_QUERYENDSESSION
:
return
1
;
case
WM_HELP
:
SendMessageW
(
GetParent
(
hwnd
),
msg
,
wParam
,
lParam
);
break
;
case
WM_STYLECHANGED
:
if
(
wParam
==
GWL_STYLE
&&
(
GetWindowLongW
(
hwnd
,
GWL_EXSTYLE
)
&
WS_EX_LAYERED
))
{
STYLESTRUCT
*
style
=
(
STYLESTRUCT
*
)
lParam
;
if
((
style
->
styleOld
^
style
->
styleNew
)
&
(
WS_CAPTION
|
WS_THICKFRAME
|
WS_VSCROLL
|
WS_HSCROLL
))
NtUserSetWindowPos
(
hwnd
,
0
,
0
,
0
,
0
,
0
,
SWP_FRAMECHANGED
|
SWP_NOACTIVATE
|
SWP_NOZORDER
|
SWP_NOSIZE
|
SWP_NOMOVE
|
SWP_NOCLIENTSIZE
|
SWP_NOCLIENTMOVE
);
}
break
;
case
WM_INPUTLANGCHANGEREQUEST
:
NtUserActivateKeyboardLayout
(
(
HKL
)
lParam
,
0
);
break
;
case
WM_INPUTLANGCHANGE
:
{
struct
user_thread_info
*
info
=
get_user_thread_info
();
int
count
=
0
;
HWND
*
win_array
=
WIN_ListChildren
(
hwnd
);
info
->
kbd_layout
=
(
HKL
)
lParam
;
if
(
!
win_array
)
break
;
while
(
win_array
[
count
])
SendMessageW
(
win_array
[
count
++
],
WM_INPUTLANGCHANGE
,
wParam
,
lParam
);
HeapFree
(
GetProcessHeap
(),
0
,
win_array
);
break
;
}
default:
return
NtUserMessageCall
(
hwnd
,
msg
,
wParam
,
lParam
,
0
,
NtUserDefWindowProc
,
FALSE
);
...
...
dlls/win32u/defwnd.c
View file @
04716457
...
...
@@ -31,6 +31,8 @@
WINE_DEFAULT_DEBUG_CHANNEL
(
win
);
#define DRAG_FILE 0x454c4946
/* bits in the dwKeyData */
#define KEYDATA_ALT 0x2000
#define KEYDATA_PREVSTATE 0x4000
...
...
@@ -2350,6 +2352,28 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam,
case
WM_NCLBUTTONDBLCLK
:
return
handle_nc_button_dbl_click
(
hwnd
,
wparam
,
lparam
);
case
WM_RBUTTONUP
:
{
POINT
pt
;
pt
.
x
=
(
short
)
LOWORD
(
lparam
);
pt
.
y
=
(
short
)
HIWORD
(
lparam
);
client_to_screen
(
hwnd
,
&
pt
);
send_message
(
hwnd
,
WM_CONTEXTMENU
,
(
WPARAM
)
hwnd
,
MAKELPARAM
(
pt
.
x
,
pt
.
y
));
}
break
;
case
WM_NCRBUTTONUP
:
break
;
case
WM_XBUTTONUP
:
case
WM_NCXBUTTONUP
:
if
(
HIWORD
(
wparam
)
==
XBUTTON1
||
HIWORD
(
wparam
)
==
XBUTTON2
)
{
send_message
(
hwnd
,
WM_APPCOMMAND
,
(
WPARAM
)
hwnd
,
MAKELPARAM
(
LOWORD
(
wparam
),
FAPPCOMMAND_MOUSE
|
HIWORD
(
wparam
)));
}
break
;
case
WM_CONTEXTMENU
:
if
(
get_window_long
(
hwnd
,
GWL_STYLE
)
&
WS_CHILD
)
send_message
(
get_parent
(
hwnd
),
msg
,
(
WPARAM
)
hwnd
,
lparam
);
...
...
@@ -2640,6 +2664,91 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam,
send_message
(
parent
,
msg
,
wparam
,
lparam
);
break
;
}
case
WM_VKEYTOITEM
:
case
WM_CHARTOITEM
:
result
=
-
1
;
break
;
case
WM_DROPOBJECT
:
result
=
DRAG_FILE
;
break
;
case
WM_QUERYDROPOBJECT
:
result
=
(
get_window_long
(
hwnd
,
GWL_EXSTYLE
)
&
WS_EX_ACCEPTFILES
)
!=
0
;
break
;
case
WM_QUERYDRAGICON
:
{
UINT
len
;
HICON
icon
=
(
HICON
)
get_class_long_ptr
(
hwnd
,
GCLP_HICON
,
FALSE
);
HINSTANCE
instance
=
(
HINSTANCE
)
get_window_long_ptr
(
hwnd
,
GWLP_HINSTANCE
,
FALSE
);
if
(
icon
)
{
result
=
(
LRESULT
)
icon
;
break
;
}
for
(
len
=
1
;
len
<
64
;
len
++
)
{
if
((
icon
=
LoadImageW
(
instance
,
MAKEINTRESOURCEW
(
len
),
IMAGE_ICON
,
0
,
0
,
LR_SHARED
|
LR_DEFAULTSIZE
)))
{
result
=
(
LRESULT
)
icon
;
break
;
}
}
if
(
!
result
)
result
=
(
LRESULT
)
LoadImageW
(
0
,
(
WCHAR
*
)
IDI_APPLICATION
,
IMAGE_ICON
,
0
,
0
,
LR_SHARED
|
LR_DEFAULTSIZE
);
break
;
}
case
WM_ISACTIVEICON
:
result
=
(
win_get_flags
(
hwnd
)
&
WIN_NCACTIVATED
)
!=
0
;
break
;
case
WM_NOTIFYFORMAT
:
result
=
is_window_unicode
(
hwnd
)
?
NFR_UNICODE
:
NFR_ANSI
;
break
;
case
WM_QUERYOPEN
:
case
WM_QUERYENDSESSION
:
result
=
1
;
break
;
case
WM_HELP
:
send_message
(
get_parent
(
hwnd
),
msg
,
wparam
,
lparam
);
break
;
case
WM_STYLECHANGED
:
if
(
wparam
==
GWL_STYLE
&&
(
get_window_long
(
hwnd
,
GWL_EXSTYLE
)
&
WS_EX_LAYERED
))
{
STYLESTRUCT
*
style
=
(
STYLESTRUCT
*
)
lparam
;
if
((
style
->
styleOld
^
style
->
styleNew
)
&
(
WS_CAPTION
|
WS_THICKFRAME
|
WS_VSCROLL
|
WS_HSCROLL
))
NtUserSetWindowPos
(
hwnd
,
0
,
0
,
0
,
0
,
0
,
SWP_FRAMECHANGED
|
SWP_NOACTIVATE
|
SWP_NOZORDER
|
SWP_NOSIZE
|
SWP_NOMOVE
|
SWP_NOCLIENTSIZE
|
SWP_NOCLIENTMOVE
);
}
break
;
case
WM_INPUTLANGCHANGEREQUEST
:
NtUserActivateKeyboardLayout
(
(
HKL
)
lparam
,
0
);
break
;
case
WM_INPUTLANGCHANGE
:
{
struct
user_thread_info
*
info
=
get_user_thread_info
();
HWND
*
win_array
=
list_window_children
(
0
,
hwnd
,
NULL
,
0
);
int
count
=
0
;
info
->
kbd_layout
=
(
HKL
)
lparam
;
if
(
!
win_array
)
break
;
while
(
win_array
[
count
])
send_message
(
win_array
[
count
++
],
WM_INPUTLANGCHANGE
,
wparam
,
lparam
);
free
(
win_array
);
break
;
}
}
return
result
;
...
...
dlls/win32u/win32u_private.h
View file @
04716457
...
...
@@ -473,6 +473,7 @@ extern void user_check_not_lock(void) DECLSPEC_HIDDEN;
/* window.c */
struct
tagWND
;
extern
HDWP
begin_defer_window_pos
(
INT
count
)
DECLSPEC_HIDDEN
;
extern
BOOL
client_to_screen
(
HWND
hwnd
,
POINT
*
pt
)
DECLSPEC_HIDDEN
;
extern
void
destroy_thread_windows
(
void
)
DECLSPEC_HIDDEN
;
extern
LRESULT
destroy_window
(
HWND
hwnd
)
DECLSPEC_HIDDEN
;
extern
BOOL
get_client_rect
(
HWND
hwnd
,
RECT
*
rect
)
DECLSPEC_HIDDEN
;
...
...
dlls/win32u/window.c
View file @
04716457
...
...
@@ -2840,7 +2840,7 @@ other_process: /* one of the parents may belong to another process, do it the h
}
/* see ClientToScreen */
static
BOOL
client_to_screen
(
HWND
hwnd
,
POINT
*
pt
)
BOOL
client_to_screen
(
HWND
hwnd
,
POINT
*
pt
)
{
POINT
offset
;
BOOL
mirrored
;
...
...
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