From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/win32u/ntuser_private.h | 1 - dlls/win32u/window.c | 10 ++-------- server/protocol.def | 1 + server/window.c | 8 +++----- 4 files changed, 6 insertions(+), 14 deletions(-) diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h index 8cf372340f3..0c7f4802351 100644 --- a/dlls/win32u/ntuser_private.h +++ b/dlls/win32u/ntuser_private.h @@ -72,7 +72,6 @@ typedef struct tagWND int swap_interval; /* OpenGL surface swap interval */ int pixel_format; /* Pixel format set by the graphics driver */ int clip_clients; /* Has client surfaces that needs to be clipped out */ - DWORD_PTR userdata; /* User private data */ } WND; /* WND flags values */ diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index a236bfb309d..7afd444a027 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -1127,6 +1127,7 @@ static LONG_PTR get_window_long_shm( HWND hwnd, UINT offset, UINT size, BOOL int { case GWLP_ID: ret = window_shm->info.id; break; case GWLP_HINSTANCE: ret = window_shm->info.instance; break; + case GWLP_USERDATA: memcpy( &ret, (void *)&window_shm->info.user_data, size ); break; default: valid = size <= window_shm->extra_size && offset <= window_shm->extra_size - size && (internal || offset >= window_shm->private_size); @@ -1182,6 +1183,7 @@ static LONG_PTR get_window_long_size( HWND hwnd, INT offset, UINT size, BOOL ans /* fallthrough */ case GWLP_ID: case GWLP_HINSTANCE: + case GWLP_USERDATA: return get_window_long_shm( hwnd, offset, size, internal ); case GWLP_HWNDPARENT: { @@ -1208,7 +1210,6 @@ static LONG_PTR get_window_long_size( HWND hwnd, INT offset, UINT size, BOOL ans retval |= WS_VISIBLE; return retval; case GWL_EXSTYLE: - case GWLP_USERDATA: return 0; case GWLP_WNDPROC: RtlSetLastWin32Error( ERROR_ACCESS_DENIED ); @@ -1240,7 +1241,6 @@ static LONG_PTR get_window_long_size( HWND hwnd, INT offset, UINT size, BOOL ans switch(offset) { - case GWLP_USERDATA: retval = win->userdata; break; case GWL_STYLE: retval = win->dwStyle; break; case GWL_EXSTYLE: retval = win->dwExStyle; break; case GWLP_WNDPROC: @@ -1498,7 +1498,6 @@ static LONG_PTR set_window_long_internal( HWND hwnd, INT offset, UINT size, } if (offset == GWLP_WNDPROC) newval = !!(win->flags & WIN_ISUNICODE); - if (offset == GWLP_USERDATA && size == sizeof(WORD)) newval = MAKELONG( newval, win->userdata >> 16 ); if ((ok = server_set_window_info( hwnd, offset, newval, size, &oldval, internal ))) { @@ -1515,10 +1514,6 @@ static LONG_PTR set_window_long_internal( HWND hwnd, INT offset, UINT size, break; case GWLP_WNDPROC: break; - case GWLP_USERDATA: - win->userdata = newval; - retval = oldval; - break; default: retval = oldval; break; @@ -5748,7 +5743,6 @@ HWND WINAPI NtUserCreateWindowEx( DWORD ex_style, UNICODE_STRING *class_name, win->dwExStyle = ex_style; win->helpContext = 0; win->pScroll = NULL; - win->userdata = 0; win->hIcon = 0; win->hIconSmall = 0; win->hIconSmall2 = 0; diff --git a/server/protocol.def b/server/protocol.def index 2f11acd4385..e8fe6f1db58 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -1067,6 +1067,7 @@ struct window_info { lparam_t id; /* window id */ mod_handle_t instance; /* creator instance */ + lparam_t user_data; /* user-specific data */ }; typedef volatile struct diff --git a/server/window.c b/server/window.c index 8af6625af47..9665af1069f 100644 --- a/server/window.c +++ b/server/window.c @@ -83,7 +83,6 @@ struct window unsigned int alpha; /* alpha value for a layered window */ unsigned int layered_flags; /* flags for a layered window */ unsigned int monitor_dpi; /* DPI of the window monitor */ - lparam_t user_data; /* user-specific data */ WCHAR *text; /* window caption text */ data_size_t text_len; /* length of window caption */ unsigned int paint_flags; /* various painting flags */ @@ -662,7 +661,6 @@ static struct window *create_window( struct window *parent, struct window *owner win->is_orphan = 0; win->set_foreground = 0; win->monitor_dpi = USER_DEFAULT_SCREEN_DPI; - win->user_data = 0; win->text = NULL; win->text_len = 0; win->paint_flags = 0; @@ -2406,7 +2404,6 @@ DECL_HANDLER(get_window_info) case GWL_STYLE: reply->info = win->style; break; case GWL_EXSTYLE: reply->info = win->ex_style; break; case GWLP_WNDPROC: reply->info = win->is_unicode; break; - case GWLP_USERDATA: reply->info = win->user_data; break; default: if (req->size) set_win32_error( ERROR_INVALID_INDEX ); break; @@ -2469,8 +2466,9 @@ DECL_HANDLER(set_window_info) win->is_unicode = req->new_info; break; case GWLP_USERDATA: - reply->old_info = win->user_data; - win->user_data = req->new_info; + reply->old_info = shared->info.user_data; + if (req->size > sizeof(WORD)) shared->info.user_data = req->new_info; + else shared->info.user_data = MAKELONG(req->new_info, shared->info.user_data >> 16); break; default: if (req->size > sizeof(req->new_info) || req->offset < 0 || -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11106