Module: wine
Branch: master
Commit: 10254e326f89003706805d9a64def5415875e891
URL:
https://gitlab.winehq.org/wine/wine/-/commit/10254e326f89003706805d9a64def5…
Author: Jacek Caban <jacek(a)codeweavers.com>
Date: Tue Jul 18 13:43:25 2023 +0200
win32u: Use user message packing for scroll info messages.
---
dlls/user32/winproc.c | 15 ++++++---------
dlls/win32u/message.c | 29 +++++++++++++++++++++++------
dlls/win32u/tests/win32u.c | 19 +++++++++++++++++++
dlls/wow64win/user.c | 3 +++
4 files changed, 51 insertions(+), 15 deletions(-)
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c
index 6fd35691e68..66974e053ed 100644
--- a/dlls/user32/winproc.c
+++ b/dlls/user32/winproc.c
@@ -857,19 +857,13 @@ BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM
*lparam,
case WM_STYLECHANGING:
case WM_STYLECHANGED:
case WM_GETDLGCODE:
- break;
- case WM_NOTIFY:
- /* WM_NOTIFY cannot be sent across processes (MSDN) */
- return FALSE;
case SBM_SETSCROLLINFO:
- minsize = sizeof(SCROLLINFO);
- break;
case SBM_GETSCROLLINFO:
- if (!get_buffer_space( buffer, sizeof(SCROLLINFO), size )) return FALSE;
- break;
case SBM_GETSCROLLBARINFO:
- if (!get_buffer_space( buffer, sizeof(SCROLLBARINFO), size )) return FALSE;
break;
+ case WM_NOTIFY:
+ /* WM_NOTIFY cannot be sent across processes (MSDN) */
+ return FALSE;
case EM_GETSEL:
case SBM_GETRANGE:
case CB_GETEDITSEL:
@@ -1090,6 +1084,9 @@ BOOL WINAPI User32CallWindowProc( struct win_proc_params *params,
ULONG size )
case WM_STYLECHANGING:
case WM_STYLECHANGED:
case WM_GETDLGCODE:
+ case SBM_SETSCROLLINFO:
+ case SBM_GETSCROLLINFO:
+ case SBM_GETSCROLLBARINFO:
{
LRESULT *result_ptr = (LRESULT *)buffer - 1;
*result_ptr = result;
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c
index 9f8bf863b55..e2967446372 100644
--- a/dlls/win32u/message.c
+++ b/dlls/win32u/message.c
@@ -555,6 +555,15 @@ static BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam,
LPARAM *lpa
break;
}
return TRUE;
+ case SBM_SETSCROLLINFO:
+ minsize = sizeof(SCROLLINFO);
+ break;
+ case SBM_GETSCROLLINFO:
+ if (!get_buffer_space( buffer, sizeof(SCROLLINFO), size )) return FALSE;
+ break;
+ case SBM_GETSCROLLBARINFO:
+ if (!get_buffer_space( buffer, sizeof(SCROLLBARINFO), size )) return FALSE;
+ break;
case WM_WINE_SETWINDOWPOS:
{
WINDOWPOS wp;
@@ -1349,6 +1358,13 @@ size_t user_message_size( UINT message, WPARAM wparam, LPARAM
lparam, BOOL other
case WM_GETDLGCODE:
size = sizeof(MSG);
break;
+ case SBM_SETSCROLLINFO:
+ case SBM_GETSCROLLINFO:
+ size = sizeof(SCROLLINFO);
+ break;
+ case SBM_GETSCROLLBARINFO:
+ size = sizeof(SCROLLBARINFO);
+ break;
}
return size;
@@ -1480,6 +1496,13 @@ static void copy_user_result( void *buffer, size_t size, LRESULT
result, UINT me
case WM_STYLECHANGING:
copy_size = sizeof(STYLESTRUCT);
break;
+ case SBM_SETSCROLLINFO:
+ case SBM_GETSCROLLINFO:
+ copy_size = sizeof(SCROLLINFO);
+ break;
+ case SBM_GETSCROLLBARINFO:
+ copy_size = sizeof(SCROLLBARINFO);
+ break;
default:
return;
}
@@ -1507,12 +1530,6 @@ static void copy_reply( LRESULT result, HWND hwnd, UINT message,
WPARAM wparam,
case CB_GETCOMBOBOXINFO:
copy_size = sizeof(COMBOBOXINFO);
break;
- case SBM_GETSCROLLINFO:
- copy_size = sizeof(SCROLLINFO);
- break;
- case SBM_GETSCROLLBARINFO:
- copy_size = sizeof(SCROLLBARINFO);
- break;
case EM_GETRECT:
case LB_GETITEMRECT:
case CB_GETDROPPEDCONTROLRECT:
diff --git a/dlls/win32u/tests/win32u.c b/dlls/win32u/tests/win32u.c
index d6cecc778d9..c6ed563d444 100644
--- a/dlls/win32u/tests/win32u.c
+++ b/dlls/win32u/tests/win32u.c
@@ -1659,6 +1659,10 @@ static void test_wndproc_hook(void)
static const STYLESTRUCT style_in = { .styleOld = 1, .styleNew = 2 };
static const STYLESTRUCT style_out = { .styleOld = 10, .styleNew = 20 };
static const MSG msg_in = { .wParam = 1, .lParam = 2 };
+ static const SCROLLINFO si_in = { .cbSize = sizeof(si_in), .nPos = 6 };
+ static const SCROLLINFO si_out = { .cbSize = sizeof(si_in), .nPos = 60 };
+ static const SCROLLBARINFO sbi_in = { .xyThumbTop = 6 };
+ static const SCROLLBARINFO sbi_out = { .xyThumbTop = 60 };
static const struct lparam_hook_test lparam_hook_tests[] =
{
@@ -1813,6 +1817,21 @@ static void test_wndproc_hook(void)
.lparam_size = sizeof(msg_in), .lparam = &msg_in, .poison_lparam = TRUE,
.check_size = sizeof(msg_in),
},
+ {
+ "SBM_SETSCROLLINFO", SBM_SETSCROLLINFO,
+ .lparam_size = sizeof(si_in), .lparam = &si_in, .change_lparam =
&si_out,
+ .check_size = sizeof(si_in),
+ },
+ {
+ "SBM_GETSCROLLINFO", SBM_GETSCROLLINFO,
+ .lparam_size = sizeof(si_in), .lparam = &si_in, .change_lparam =
&si_out,
+ .check_size = sizeof(si_in),
+ },
+ {
+ "SBM_GETSCROLLBARINFO", SBM_GETSCROLLBARINFO,
+ .lparam_size = sizeof(sbi_in), .lparam = &sbi_in, .change_lparam =
&sbi_out,
+ .check_size = sizeof(sbi_in),
+ },
/* messages that don't change lparam */
{ "WM_USER", WM_USER },
{ "WM_NOTIFY", WM_NOTIFY },
diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c
index c90dc22e31f..47c3ae6849d 100644
--- a/dlls/wow64win/user.c
+++ b/dlls/wow64win/user.c
@@ -832,6 +832,9 @@ static size_t packed_result_32to64( UINT message, WPARAM wparam, const
void *par
case WM_ASKCBFORMATNAME:
case WM_GETMINMAXINFO:
case WM_STYLECHANGING:
+ case SBM_SETSCROLLINFO:
+ case SBM_GETSCROLLINFO:
+ case SBM_GETSCROLLBARINFO:
break;
default: