user32: Check for driver events more quickly once we start getting timer messages.
This commit is contained in:
parent
005565d90d
commit
fa311c57bf
@ -3683,13 +3683,18 @@ void WINAPI PostQuitMessage( INT exit_code )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* check for driver events if we detect that the app is not properly consuming messages */
|
/* check for driver events if we detect that the app is not properly consuming messages */
|
||||||
static inline void check_for_driver_events(void)
|
static inline void check_for_driver_events( UINT msg )
|
||||||
{
|
{
|
||||||
if (get_user_thread_info()->message_count > 200)
|
if (get_user_thread_info()->message_count > 200)
|
||||||
{
|
{
|
||||||
flush_window_surfaces( FALSE );
|
flush_window_surfaces( FALSE );
|
||||||
USER_Driver->pMsgWaitForMultipleObjectsEx( 0, NULL, 0, QS_ALLINPUT, 0 );
|
USER_Driver->pMsgWaitForMultipleObjectsEx( 0, NULL, 0, QS_ALLINPUT, 0 );
|
||||||
}
|
}
|
||||||
|
else if (msg == WM_TIMER || msg == WM_SYSTIMER)
|
||||||
|
{
|
||||||
|
/* driver events should have priority over timers, so make sure we'll check for them soon */
|
||||||
|
get_user_thread_info()->message_count += 100;
|
||||||
|
}
|
||||||
else get_user_thread_info()->message_count++;
|
else get_user_thread_info()->message_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3701,7 +3706,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH PeekMessageW( MSG *msg_out, HWND hwnd, UINT first,
|
|||||||
MSG msg;
|
MSG msg;
|
||||||
|
|
||||||
USER_CheckNotLock();
|
USER_CheckNotLock();
|
||||||
check_for_driver_events();
|
check_for_driver_events( 0 );
|
||||||
|
|
||||||
if (!peek_message( &msg, hwnd, first, last, flags, 0 ))
|
if (!peek_message( &msg, hwnd, first, last, flags, 0 ))
|
||||||
{
|
{
|
||||||
@ -3713,6 +3718,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH PeekMessageW( MSG *msg_out, HWND hwnd, UINT first,
|
|||||||
if (ret == WAIT_TIMEOUT || !peek_message( &msg, hwnd, first, last, flags, 0 )) return FALSE;
|
if (ret == WAIT_TIMEOUT || !peek_message( &msg, hwnd, first, last, flags, 0 )) return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
check_for_driver_events( msg.message );
|
||||||
|
|
||||||
/* copy back our internal safe copy of message data to msg_out.
|
/* copy back our internal safe copy of message data to msg_out.
|
||||||
* msg_out is a variable from the *program*, so it can't be used
|
* msg_out is a variable from the *program*, so it can't be used
|
||||||
* internally as it can get "corrupted" by our use of SendMessage()
|
* internally as it can get "corrupted" by our use of SendMessage()
|
||||||
@ -3748,7 +3755,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetMessageW( MSG *msg, HWND hwnd, UINT first, UINT
|
|||||||
unsigned int mask = QS_POSTMESSAGE | QS_SENDMESSAGE; /* Always selected */
|
unsigned int mask = QS_POSTMESSAGE | QS_SENDMESSAGE; /* Always selected */
|
||||||
|
|
||||||
USER_CheckNotLock();
|
USER_CheckNotLock();
|
||||||
check_for_driver_events();
|
check_for_driver_events( 0 );
|
||||||
|
|
||||||
if (first || last)
|
if (first || last)
|
||||||
{
|
{
|
||||||
@ -3766,6 +3773,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetMessageW( MSG *msg, HWND hwnd, UINT first, UINT
|
|||||||
flush_window_surfaces( TRUE );
|
flush_window_surfaces( TRUE );
|
||||||
wow_handlers.wait_message( 1, &server_queue, INFINITE, mask, 0 );
|
wow_handlers.wait_message( 1, &server_queue, INFINITE, mask, 0 );
|
||||||
}
|
}
|
||||||
|
check_for_driver_events( msg->message );
|
||||||
|
|
||||||
return (msg->message != WM_QUIT);
|
return (msg->message != WM_QUIT);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user