forked from AuroraMiddleware/gtk
win32: Call GetQueueStatus instead of PeekMessage PM_NOREMOVE
Calling PeekMessage can cause reentrant calls into the window procedure for sent (as opposed to posted) messages, so its not safe to call when we're not expecting reentrancy. Instead we call GetQueueStatus when we're just looking for availible messages. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=552041
This commit is contained in:
parent
d66ad8c39d
commit
1df95b4c0a
@ -395,10 +395,9 @@ _gdk_events_init (void)
|
|||||||
gboolean
|
gboolean
|
||||||
_gdk_win32_display_has_pending (GdkDisplay *display)
|
_gdk_win32_display_has_pending (GdkDisplay *display)
|
||||||
{
|
{
|
||||||
MSG msg;
|
|
||||||
return (_gdk_event_queue_find_first (display) ||
|
return (_gdk_event_queue_find_first (display) ||
|
||||||
(modal_win32_dialog == NULL &&
|
(modal_win32_dialog == NULL &&
|
||||||
PeekMessageW (&msg, NULL, 0, 0, PM_NOREMOVE)));
|
GetQueueStatus (QS_ALLINPUT) != 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0 /* Unused, but might be useful to re-introduce in some debugging output? */
|
#if 0 /* Unused, but might be useful to re-introduce in some debugging output? */
|
||||||
@ -3367,7 +3366,6 @@ static gboolean
|
|||||||
gdk_event_prepare (GSource *source,
|
gdk_event_prepare (GSource *source,
|
||||||
gint *timeout)
|
gint *timeout)
|
||||||
{
|
{
|
||||||
MSG msg;
|
|
||||||
gboolean retval;
|
gboolean retval;
|
||||||
|
|
||||||
GDK_THREADS_ENTER ();
|
GDK_THREADS_ENTER ();
|
||||||
@ -3376,7 +3374,7 @@ gdk_event_prepare (GSource *source,
|
|||||||
|
|
||||||
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
|
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
|
||||||
(modal_win32_dialog == NULL &&
|
(modal_win32_dialog == NULL &&
|
||||||
PeekMessageW (&msg, NULL, 0, 0, PM_NOREMOVE)));
|
GetQueueStatus (QS_ALLINPUT) != 0));
|
||||||
|
|
||||||
GDK_THREADS_LEAVE ();
|
GDK_THREADS_LEAVE ();
|
||||||
|
|
||||||
@ -3386,7 +3384,6 @@ gdk_event_prepare (GSource *source,
|
|||||||
static gboolean
|
static gboolean
|
||||||
gdk_event_check (GSource *source)
|
gdk_event_check (GSource *source)
|
||||||
{
|
{
|
||||||
MSG msg;
|
|
||||||
gboolean retval;
|
gboolean retval;
|
||||||
|
|
||||||
GDK_THREADS_ENTER ();
|
GDK_THREADS_ENTER ();
|
||||||
@ -3395,7 +3392,7 @@ gdk_event_check (GSource *source)
|
|||||||
{
|
{
|
||||||
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
|
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
|
||||||
(modal_win32_dialog == NULL &&
|
(modal_win32_dialog == NULL &&
|
||||||
PeekMessageW (&msg, NULL, 0, 0, PM_NOREMOVE)));
|
GetQueueStatus (QS_ALLINPUT) != 0));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user