mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-01 11:43:37 +00:00
win32u: Use platform-independent layout for ntuser_thread_info.
This commit is contained in:
parent
149e750240
commit
1e9390e558
|
@ -235,7 +235,7 @@ static DWORD convert_candidatelist_AtoW(
|
||||||
|
|
||||||
static struct coinit_spy *get_thread_coinit_spy(void)
|
static struct coinit_spy *get_thread_coinit_spy(void)
|
||||||
{
|
{
|
||||||
return NtUserGetThreadInfo()->client_imm;
|
return (struct coinit_spy *)(UINT_PTR)NtUserGetThreadInfo()->client_imm;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void imm_couninit_thread(BOOL cleanup)
|
static void imm_couninit_thread(BOOL cleanup)
|
||||||
|
@ -299,7 +299,7 @@ static ULONG WINAPI InitializeSpy_Release(IInitializeSpy *iface)
|
||||||
if (!ref)
|
if (!ref)
|
||||||
{
|
{
|
||||||
HeapFree(GetProcessHeap(), 0, spy);
|
HeapFree(GetProcessHeap(), 0, spy);
|
||||||
NtUserGetThreadInfo()->client_imm = NULL;
|
NtUserGetThreadInfo()->client_imm = 0;
|
||||||
}
|
}
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
@ -373,7 +373,7 @@ static void imm_coinit_thread(void)
|
||||||
spy->ref = 1;
|
spy->ref = 1;
|
||||||
spy->cookie.QuadPart = 0;
|
spy->cookie.QuadPart = 0;
|
||||||
spy->apt_flags = 0;
|
spy->apt_flags = 0;
|
||||||
NtUserGetThreadInfo()->client_imm = spy;
|
NtUserGetThreadInfo()->client_imm = (UINT_PTR)spy;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -440,7 +440,7 @@ static void IMM_FreeThreadData(void)
|
||||||
{
|
{
|
||||||
struct coinit_spy *spy;
|
struct coinit_spy *spy;
|
||||||
|
|
||||||
free_input_context_data(NtUserGetThreadInfo()->default_imc);
|
free_input_context_data(UlongToHandle(NtUserGetThreadInfo()->default_imc));
|
||||||
if ((spy = get_thread_coinit_spy()))
|
if ((spy = get_thread_coinit_spy()))
|
||||||
IInitializeSpy_Release(&spy->IInitializeSpy_iface);
|
IInitializeSpy_Release(&spy->IInitializeSpy_iface);
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,10 +60,15 @@ static inline void *unpack_ptr( ULONGLONG ptr64 )
|
||||||
return (void *)(ULONG_PTR)ptr64;
|
return (void *)(ULONG_PTR)ptr64;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct wm_char_mapping_data *get_wmchar_data(void)
|
||||||
|
{
|
||||||
|
return (struct wm_char_mapping_data *)(UINT_PTR)NtUserGetThreadInfo()->wmchar_data;
|
||||||
|
}
|
||||||
|
|
||||||
/* check for pending WM_CHAR message with DBCS trailing byte */
|
/* check for pending WM_CHAR message with DBCS trailing byte */
|
||||||
static inline BOOL get_pending_wmchar( MSG *msg, UINT first, UINT last, BOOL remove )
|
static inline BOOL get_pending_wmchar( MSG *msg, UINT first, UINT last, BOOL remove )
|
||||||
{
|
{
|
||||||
struct wm_char_mapping_data *data = NtUserGetThreadInfo()->wmchar_data;
|
struct wm_char_mapping_data *data = get_wmchar_data();
|
||||||
|
|
||||||
if (!data || !data->get_msg.message) return FALSE;
|
if (!data || !data->get_msg.message) return FALSE;
|
||||||
if ((first || last) && (first > WM_CHAR || last < WM_CHAR)) return FALSE;
|
if ((first || last) && (first > WM_CHAR || last < WM_CHAR)) return FALSE;
|
||||||
|
@ -119,7 +124,7 @@ BOOL map_wparam_AtoW( UINT message, WPARAM *wparam, enum wm_char_mapping mapping
|
||||||
*/
|
*/
|
||||||
if (mapping != WMCHAR_MAP_NOMAPPING)
|
if (mapping != WMCHAR_MAP_NOMAPPING)
|
||||||
{
|
{
|
||||||
struct wm_char_mapping_data *data = NtUserGetThreadInfo()->wmchar_data;
|
struct wm_char_mapping_data *data = get_wmchar_data();
|
||||||
BYTE low = LOBYTE(*wparam);
|
BYTE low = LOBYTE(*wparam);
|
||||||
cp = get_input_codepage();
|
cp = get_input_codepage();
|
||||||
|
|
||||||
|
@ -152,7 +157,7 @@ BOOL map_wparam_AtoW( UINT message, WPARAM *wparam, enum wm_char_mapping mapping
|
||||||
{
|
{
|
||||||
if (!(data = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*data) )))
|
if (!(data = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*data) )))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
NtUserGetThreadInfo()->wmchar_data = data;
|
NtUserGetThreadInfo()->wmchar_data = (UINT_PTR)data;
|
||||||
}
|
}
|
||||||
TRACE( "storing lead byte %02x mapping %u\n", low, mapping );
|
TRACE( "storing lead byte %02x mapping %u\n", low, mapping );
|
||||||
data->lead_byte[mapping] = low;
|
data->lead_byte[mapping] = low;
|
||||||
|
@ -210,11 +215,11 @@ static void map_wparam_WtoA( MSG *msg, BOOL remove )
|
||||||
len = WideCharToMultiByte( cp, 0, wch, 1, (LPSTR)ch, 2, NULL, NULL );
|
len = WideCharToMultiByte( cp, 0, wch, 1, (LPSTR)ch, 2, NULL, NULL );
|
||||||
if (len == 2) /* DBCS char */
|
if (len == 2) /* DBCS char */
|
||||||
{
|
{
|
||||||
struct wm_char_mapping_data *data = NtUserGetThreadInfo()->wmchar_data;
|
struct wm_char_mapping_data *data = get_wmchar_data();
|
||||||
if (!data)
|
if (!data)
|
||||||
{
|
{
|
||||||
if (!(data = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*data) ))) return;
|
if (!(data = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*data) ))) return;
|
||||||
NtUserGetThreadInfo()->wmchar_data = data;
|
NtUserGetThreadInfo()->wmchar_data = (UINT_PTR)data;
|
||||||
}
|
}
|
||||||
if (remove)
|
if (remove)
|
||||||
{
|
{
|
||||||
|
|
|
@ -240,7 +240,7 @@ static void thread_detach(void)
|
||||||
WDML_NotifyThreadDetach();
|
WDML_NotifyThreadDetach();
|
||||||
|
|
||||||
NtUserCallNoParam( NtUserThreadDetach );
|
NtUserCallNoParam( NtUserThreadDetach );
|
||||||
HeapFree( GetProcessHeap(), 0, thread_info->wmchar_data );
|
HeapFree( GetProcessHeap(), 0, (void *)(UINT_PTR)thread_info->wmchar_data );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ HWND get_hwnd_message_parent(void)
|
||||||
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
||||||
|
|
||||||
if (!thread_info->msg_window) GetDesktopWindow(); /* trigger creation */
|
if (!thread_info->msg_window) GetDesktopWindow(); /* trigger creation */
|
||||||
return thread_info->msg_window;
|
return UlongToHandle( thread_info->msg_window );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -109,8 +109,8 @@ BOOL is_desktop_window( HWND hwnd )
|
||||||
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
||||||
|
|
||||||
if (!hwnd) return FALSE;
|
if (!hwnd) return FALSE;
|
||||||
if (hwnd == thread_info->top_window) return TRUE;
|
if (hwnd == UlongToHandle( thread_info->top_window )) return TRUE;
|
||||||
if (hwnd == thread_info->msg_window) return TRUE;
|
if (hwnd == UlongToHandle( thread_info->msg_window )) return TRUE;
|
||||||
|
|
||||||
if (!HIWORD(hwnd) || HIWORD(hwnd) == 0xffff)
|
if (!HIWORD(hwnd) || HIWORD(hwnd) == 0xffff)
|
||||||
{
|
{
|
||||||
|
@ -582,7 +582,7 @@ HWND WINAPI GetDesktopWindow(void)
|
||||||
{
|
{
|
||||||
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
||||||
|
|
||||||
if (thread_info->top_window) return thread_info->top_window;
|
if (thread_info->top_window) return UlongToHandle( thread_info->top_window );
|
||||||
return NtUserGetDesktopWindow();
|
return NtUserGetDesktopWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -785,7 +785,7 @@ static BOOL nodrv_CreateWindow( HWND hwnd )
|
||||||
HWND parent = NtUserGetAncestor( hwnd, GA_PARENT );
|
HWND parent = NtUserGetAncestor( hwnd, GA_PARENT );
|
||||||
|
|
||||||
/* HWND_MESSAGE windows don't need a graphics driver */
|
/* HWND_MESSAGE windows don't need a graphics driver */
|
||||||
if (!parent || parent == NtUserGetThreadInfo()->msg_window) return TRUE;
|
if (!parent || parent == UlongToHandle( NtUserGetThreadInfo()->msg_window )) return TRUE;
|
||||||
if (warned++) return FALSE;
|
if (warned++) return FALSE;
|
||||||
|
|
||||||
ERR_(winediag)( "Application tried to create a window, but no driver could be loaded.\n" );
|
ERR_(winediag)( "Application tried to create a window, but no driver could be loaded.\n" );
|
||||||
|
|
|
@ -212,8 +212,9 @@ UINT WINAPI NtUserAssociateInputContext( HWND hwnd, HIMC ctx, ULONG flags )
|
||||||
HIMC get_default_input_context(void)
|
HIMC get_default_input_context(void)
|
||||||
{
|
{
|
||||||
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
||||||
if (!thread_info->default_imc) thread_info->default_imc = NtUserCreateInputContext( 0 );
|
if (!thread_info->default_imc)
|
||||||
return thread_info->default_imc;
|
thread_info->default_imc = HandleToUlong( NtUserCreateInputContext( 0 ));
|
||||||
|
return UlongToHandle( thread_info->default_imc );
|
||||||
}
|
}
|
||||||
|
|
||||||
HIMC get_window_input_context( HWND hwnd )
|
HIMC get_window_input_context( HWND hwnd )
|
||||||
|
@ -390,7 +391,7 @@ void cleanup_imm_thread(void)
|
||||||
thread_info->imm_thread_data = NULL;
|
thread_info->imm_thread_data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
NtUserDestroyInputContext( thread_info->client_info.default_imc );
|
NtUserDestroyInputContext( UlongToHandle( thread_info->client_info.default_imc ));
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL WINAPI ImmProcessKey( HWND hwnd, HKL hkl, UINT vkey, LPARAM key_data, DWORD unknown )
|
BOOL WINAPI ImmProcessKey( HWND hwnd, HKL hkl, UINT vkey, LPARAM key_data, DWORD unknown )
|
||||||
|
|
|
@ -173,7 +173,7 @@ HWND get_hwnd_message_parent(void)
|
||||||
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
||||||
|
|
||||||
if (!thread_info->msg_window) get_desktop_window(); /* trigger creation */
|
if (!thread_info->msg_window) get_desktop_window(); /* trigger creation */
|
||||||
return thread_info->msg_window;
|
return UlongToHandle( thread_info->msg_window );
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -225,8 +225,8 @@ BOOL is_desktop_window( HWND hwnd )
|
||||||
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
||||||
|
|
||||||
if (!hwnd) return FALSE;
|
if (!hwnd) return FALSE;
|
||||||
if (hwnd == thread_info->top_window) return TRUE;
|
if (hwnd == UlongToHandle( thread_info->top_window )) return TRUE;
|
||||||
if (hwnd == thread_info->msg_window) return TRUE;
|
if (hwnd == UlongToHandle( thread_info->msg_window )) return TRUE;
|
||||||
|
|
||||||
if (!HIWORD(hwnd) || HIWORD(hwnd) == 0xffff)
|
if (!HIWORD(hwnd) || HIWORD(hwnd) == 0xffff)
|
||||||
{
|
{
|
||||||
|
@ -4930,15 +4930,18 @@ static WND *create_window_handle( HWND parent, HWND owner, UNICODE_STRING *name,
|
||||||
|
|
||||||
if (name->Buffer == (const WCHAR *)DESKTOP_CLASS_ATOM)
|
if (name->Buffer == (const WCHAR *)DESKTOP_CLASS_ATOM)
|
||||||
{
|
{
|
||||||
if (!thread_info->top_window) thread_info->top_window = full_parent ? full_parent : handle;
|
if (!thread_info->top_window)
|
||||||
else assert( full_parent == thread_info->top_window );
|
thread_info->top_window = HandleToUlong( full_parent ? full_parent : handle );
|
||||||
if (full_parent && !user_driver->pCreateDesktopWindow( thread_info->top_window ))
|
else assert( full_parent == UlongToHandle( thread_info->top_window ));
|
||||||
|
if (full_parent &&
|
||||||
|
!user_driver->pCreateDesktopWindow( UlongToHandle( thread_info->top_window )))
|
||||||
ERR( "failed to create desktop window\n" );
|
ERR( "failed to create desktop window\n" );
|
||||||
register_builtin_classes();
|
register_builtin_classes();
|
||||||
}
|
}
|
||||||
else /* HWND_MESSAGE parent */
|
else /* HWND_MESSAGE parent */
|
||||||
{
|
{
|
||||||
if (!thread_info->msg_window && !full_parent) thread_info->msg_window = handle;
|
if (!thread_info->msg_window && !full_parent)
|
||||||
|
thread_info->msg_window = HandleToUlong( handle );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -399,7 +399,7 @@ HWND get_desktop_window(void)
|
||||||
{
|
{
|
||||||
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
|
||||||
|
|
||||||
if (thread_info->top_window) return thread_info->top_window;
|
if (thread_info->top_window) return UlongToHandle( thread_info->top_window );
|
||||||
|
|
||||||
|
|
||||||
SERVER_START_REQ( get_desktop_window )
|
SERVER_START_REQ( get_desktop_window )
|
||||||
|
@ -407,8 +407,8 @@ HWND get_desktop_window(void)
|
||||||
req->force = 0;
|
req->force = 0;
|
||||||
if (!wine_server_call( req ))
|
if (!wine_server_call( req ))
|
||||||
{
|
{
|
||||||
thread_info->top_window = wine_server_ptr_handle( reply->top_window );
|
thread_info->top_window = reply->top_window;
|
||||||
thread_info->msg_window = wine_server_ptr_handle( reply->msg_window );
|
thread_info->msg_window = reply->msg_window;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SERVER_END_REQ;
|
SERVER_END_REQ;
|
||||||
|
@ -489,18 +489,19 @@ HWND get_desktop_window(void)
|
||||||
req->force = 1;
|
req->force = 1;
|
||||||
if (!wine_server_call( req ))
|
if (!wine_server_call( req ))
|
||||||
{
|
{
|
||||||
thread_info->top_window = wine_server_ptr_handle( reply->top_window );
|
thread_info->top_window = reply->top_window;
|
||||||
thread_info->msg_window = wine_server_ptr_handle( reply->msg_window );
|
thread_info->msg_window = reply->msg_window;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SERVER_END_REQ;
|
SERVER_END_REQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!thread_info->top_window || !user_driver->pCreateDesktopWindow( thread_info->top_window ))
|
if (!thread_info->top_window ||
|
||||||
|
!user_driver->pCreateDesktopWindow( UlongToHandle( thread_info->top_window )))
|
||||||
ERR_(win)( "failed to create desktop window\n" );
|
ERR_(win)( "failed to create desktop window\n" );
|
||||||
|
|
||||||
register_builtin_classes();
|
register_builtin_classes();
|
||||||
return thread_info->top_window;
|
return UlongToHandle( thread_info->top_window );
|
||||||
}
|
}
|
||||||
|
|
||||||
static HANDLE get_winstations_dir_handle(void)
|
static HANDLE get_winstations_dir_handle(void)
|
||||||
|
|
|
@ -245,7 +245,7 @@ static inline BOOL is_in_desktop_process(void)
|
||||||
|
|
||||||
static inline DWORD current_client_id(void)
|
static inline DWORD current_client_id(void)
|
||||||
{
|
{
|
||||||
DWORD client_id = PtrToUlong( NtUserGetThreadInfo()->driver_data );
|
DWORD client_id = NtUserGetThreadInfo()->driver_data;
|
||||||
return client_id ? client_id : GetCurrentProcessId();
|
return client_id ? client_id : GetCurrentProcessId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1137,7 +1137,7 @@ NTSTATUS android_dispatch_ioctl( void *arg )
|
||||||
if (in_size >= sizeof(*header))
|
if (in_size >= sizeof(*header))
|
||||||
{
|
{
|
||||||
irp->IoStatus.Information = 0;
|
irp->IoStatus.Information = 0;
|
||||||
NtUserGetThreadInfo()->driver_data = UlongToHandle( params->client_id );
|
NtUserGetThreadInfo()->driver_data = params->client_id;
|
||||||
irp->IoStatus.u.Status = func( irp->AssociatedIrp.SystemBuffer, in_size,
|
irp->IoStatus.u.Status = func( irp->AssociatedIrp.SystemBuffer, in_size,
|
||||||
irpsp->Parameters.DeviceIoControl.OutputBufferLength,
|
irpsp->Parameters.DeviceIoControl.OutputBufferLength,
|
||||||
&irp->IoStatus.Information );
|
&irp->IoStatus.Information );
|
||||||
|
|
|
@ -117,7 +117,7 @@ static inline RECT rect_from_cgrect(CGRect cgrect)
|
||||||
|
|
||||||
static inline struct macdrv_thread_data *macdrv_thread_data(void)
|
static inline struct macdrv_thread_data *macdrv_thread_data(void)
|
||||||
{
|
{
|
||||||
return NtUserGetThreadInfo()->driver_data;
|
return (struct macdrv_thread_data *)(UINT_PTR)NtUserGetThreadInfo()->driver_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -536,7 +536,7 @@ struct macdrv_thread_data *macdrv_init_thread_data(void)
|
||||||
macdrv_compute_keyboard_layout(data);
|
macdrv_compute_keyboard_layout(data);
|
||||||
|
|
||||||
set_queue_display_fd(macdrv_get_event_queue_fd(data->queue));
|
set_queue_display_fd(macdrv_get_event_queue_fd(data->queue));
|
||||||
NtUserGetThreadInfo()->driver_data = data;
|
NtUserGetThreadInfo()->driver_data = (UINT_PTR)data;
|
||||||
|
|
||||||
NtUserActivateKeyboardLayout(data->active_keyboard_layout, 0);
|
NtUserActivateKeyboardLayout(data->active_keyboard_layout, 0);
|
||||||
return data;
|
return data;
|
||||||
|
|
|
@ -393,7 +393,7 @@ extern struct x11drv_thread_data *x11drv_init_thread_data(void) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
static inline struct x11drv_thread_data *x11drv_thread_data(void)
|
static inline struct x11drv_thread_data *x11drv_thread_data(void)
|
||||||
{
|
{
|
||||||
return NtUserGetThreadInfo()->driver_data;
|
return (struct x11drv_thread_data *)(UINT_PTR)NtUserGetThreadInfo()->driver_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* retrieve the thread display, or NULL if not created yet */
|
/* retrieve the thread display, or NULL if not created yet */
|
||||||
|
|
|
@ -734,7 +734,7 @@ void X11DRV_ThreadDetach(void)
|
||||||
XCloseDisplay( data->display );
|
XCloseDisplay( data->display );
|
||||||
free( data );
|
free( data );
|
||||||
/* clear data in case we get re-entered from user32 before the thread is truly dead */
|
/* clear data in case we get re-entered from user32 before the thread is truly dead */
|
||||||
NtUserGetThreadInfo()->driver_data = NULL;
|
NtUserGetThreadInfo()->driver_data = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -795,7 +795,7 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
|
||||||
if (TRACE_ON(synchronous)) XSynchronize( data->display, True );
|
if (TRACE_ON(synchronous)) XSynchronize( data->display, True );
|
||||||
|
|
||||||
set_queue_display_fd( data->display );
|
set_queue_display_fd( data->display );
|
||||||
NtUserGetThreadInfo()->driver_data = data;
|
NtUserGetThreadInfo()->driver_data = (UINT_PTR)data;
|
||||||
|
|
||||||
if (use_xim) X11DRV_SetupXIM();
|
if (use_xim) X11DRV_SetupXIM();
|
||||||
|
|
||||||
|
|
|
@ -61,19 +61,19 @@ enum
|
||||||
/* TEB thread info, not compatible with Windows */
|
/* TEB thread info, not compatible with Windows */
|
||||||
struct ntuser_thread_info
|
struct ntuser_thread_info
|
||||||
{
|
{
|
||||||
void *driver_data; /* driver-specific data */
|
UINT64 driver_data; /* driver-specific data */
|
||||||
DWORD message_time; /* value for GetMessageTime */
|
DWORD message_time; /* value for GetMessageTime */
|
||||||
DWORD message_pos; /* value for GetMessagePos */
|
DWORD message_pos; /* value for GetMessagePos */
|
||||||
ULONG_PTR message_extra; /* value for GetMessageExtraInfo */
|
UINT64 message_extra; /* value for GetMessageExtraInfo */
|
||||||
INPUT_MESSAGE_SOURCE msg_source; /* Message source for current message */
|
INPUT_MESSAGE_SOURCE msg_source; /* Message source for current message */
|
||||||
WORD recursion_count; /* SendMessage recursion counter */
|
WORD recursion_count; /* SendMessage recursion counter */
|
||||||
UINT receive_flags; /* currently received message flags */
|
UINT receive_flags; /* currently received message flags */
|
||||||
HWND top_window; /* desktop window */
|
UINT top_window; /* desktop window */
|
||||||
HWND msg_window; /* HWND_MESSAGE parent window */
|
UINT msg_window; /* HWND_MESSAGE parent window */
|
||||||
DPI_AWARENESS dpi_awareness; /* DPI awareness */
|
DPI_AWARENESS dpi_awareness; /* DPI awareness */
|
||||||
HIMC default_imc; /* default input context */
|
UINT default_imc; /* default input context */
|
||||||
void *client_imm; /* client IMM thread info */
|
UINT64 client_imm; /* client IMM thread info */
|
||||||
struct wm_char_mapping_data *wmchar_data; /* Data for WM_CHAR mappings */
|
UINT64 wmchar_data; /* client data for WM_CHAR mappings */
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct ntuser_thread_info *NtUserGetThreadInfo(void)
|
static inline struct ntuser_thread_info *NtUserGetThreadInfo(void)
|
||||||
|
|
Loading…
Reference in a new issue