win32u: Implement marshaling for CB_GETCOMBOBOXINFO.

This commit is contained in:
Esme Povirk 2023-07-01 14:15:26 -05:00 committed by Alexandre Julliard
parent 95ea605b10
commit 45ac4ce9c9
2 changed files with 50 additions and 1 deletions

View file

@ -80,6 +80,7 @@ C_ASSERT( sizeof(struct packed_NCCALCSIZE_PARAMS) >= sizeof(NCCALCSIZE_PARAMS) +
C_ASSERT( sizeof(struct packed_MSG) >= sizeof(MSG) );
C_ASSERT( sizeof(struct packed_MDINEXTMENU) >= sizeof(MDINEXTMENU) );
C_ASSERT( sizeof(struct packed_MDICREATESTRUCTW) >= sizeof(MDICREATESTRUCTW) );
C_ASSERT( sizeof(struct packed_COMBOBOXINFO) >= sizeof(COMBOBOXINFO) );
C_ASSERT( sizeof(struct packed_hook_extra_info) >= sizeof(struct hook_extra_info) );
union packed_structs
@ -96,6 +97,7 @@ union packed_structs
struct packed_MSG msg;
struct packed_MDINEXTMENU mnm;
struct packed_MDICREATESTRUCTW mcs;
struct packed_COMBOBOXINFO cbi;
struct packed_hook_extra_info hook;
};
@ -161,7 +163,7 @@ static const unsigned int message_pointer_flags[] =
SET(CB_INSERTSTRING) | SET(CB_FINDSTRING) | SET(CB_SELECTSTRING) |
SET(CB_GETDROPPEDCONTROLRECT) | SET(CB_FINDSTRINGEXACT),
/* 0x160 - 0x17f */
0,
SET(CB_GETCOMBOBOXINFO),
/* 0x180 - 0x19f */
SET(LB_ADDSTRING) | SET(LB_INSERTSTRING) | SET(LB_GETTEXT) | SET(LB_SELECTSTRING) |
SET(LB_DIR) | SET(LB_FINDSTRING) |
@ -373,6 +375,12 @@ static BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lpa
memcpy( &ps->hook, &h_extra, sizeof(h_extra) );
break;
}
case CB_GETCOMBOBOXINFO:
{
COMBOBOXINFO cbi = { sizeof(COMBOBOXINFO) };
memcpy( ps, &cbi, sizeof(cbi) );
break;
}
default:
return TRUE; /* message doesn't need any unpacking */
}
@ -616,6 +624,8 @@ static size_t pack_message( HWND hwnd, UINT message, WPARAM wparam, LPARAM lpara
case CB_GETLBTEXT:
if (!combobox_has_strings( hwnd )) return sizeof(ULONG_PTR);
return (send_message( hwnd, CB_GETLBTEXTLEN, wparam, 0 ) + 1) * sizeof(WCHAR);
case CB_GETCOMBOBOXINFO:
return sizeof(data->ps.cbi);
case LB_ADDSTRING:
case LB_INSERTSTRING:
case LB_FINDSTRING:
@ -763,6 +773,18 @@ static void pack_reply( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam,
case LB_GETTEXT:
push_data( data, (WCHAR *)lparam, (res + 1) * sizeof(WCHAR) );
break;
case CB_GETCOMBOBOXINFO:
{
COMBOBOXINFO *cbi = (COMBOBOXINFO *)lparam;
data->ps.cbi.rcItem = cbi->rcItem;
data->ps.cbi.rcButton = cbi->rcButton;
data->ps.cbi.stateButton = cbi->stateButton;
data->ps.cbi.hwndCombo = wine_server_user_handle( cbi->hwndCombo );
data->ps.cbi.hwndItem = wine_server_user_handle( cbi->hwndItem );
data->ps.cbi.hwndList = wine_server_user_handle( cbi->hwndList );
push_data( data, &data->ps.cbi, sizeof(data->ps.cbi) );
break;
}
case WM_GETMINMAXINFO:
push_data( data, (MINMAXINFO *)lparam, sizeof(MINMAXINFO) );
break;
@ -981,6 +1003,19 @@ static void unpack_reply( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam,
case CB_GETLBTEXT:
memcpy( (WCHAR *)lparam, buffer, size );
break;
case CB_GETCOMBOBOXINFO:
if (lparam && size >= sizeof(ps->cbi) &&
((COMBOBOXINFO*)lparam)->cbSize == sizeof(COMBOBOXINFO))
{
COMBOBOXINFO *cbi = (COMBOBOXINFO *)lparam;
cbi->rcItem = ps->cbi.rcItem;
cbi->rcButton = ps->cbi.rcButton;
cbi->stateButton = ps->cbi.stateButton;
cbi->hwndCombo = wine_server_ptr_handle( ps->cbi.hwndCombo );
cbi->hwndItem = wine_server_ptr_handle( ps->cbi.hwndItem );
cbi->hwndList = wine_server_ptr_handle( ps->cbi.hwndList );
}
break;
case WM_NEXTMENU:
if (size >= sizeof(ps->mnm))
{
@ -1088,6 +1123,9 @@ static void copy_reply( LRESULT result, HWND hwnd, UINT message, WPARAM wparam,
case WM_WINDOWPOSCHANGED:
copy_size = sizeof(WINDOWPOS);
break;
case CB_GETCOMBOBOXINFO:
copy_size = sizeof(COMBOBOXINFO);
break;
case WM_STYLECHANGING:
copy_size = sizeof(STYLESTRUCT);
break;

View file

@ -669,6 +669,17 @@ struct packed_MDICREATESTRUCTW
ULONGLONG lParam;
};
struct packed_COMBOBOXINFO
{
DWORD cbSize;
RECT rcItem;
RECT rcButton;
DWORD stateButton;
ULONGLONG hwndCombo;
ULONGLONG hwndItem;
ULONGLONG hwndList;
};
HKL WINAPI NtUserActivateKeyboardLayout( HKL layout, UINT flags );
BOOL WINAPI NtUserAddClipboardFormatListener( HWND hwnd );