[gtk+/gtk-2-24-quartz] win32: Call GetQueueStatus instead of PeekMessage PM_NOREMOVE
- From: John Ralls <jralls src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-2-24-quartz] win32: Call GetQueueStatus instead of PeekMessage PM_NOREMOVE
- Date: Wed, 23 Nov 2011 22:58:27 +0000 (UTC)
commit e6c2001283f003b2db9f4d6f9e21767c326eb8c7
Author: Dieter Verfaillie <dieterv optionexplicit be>
Date: Fri Oct 21 11:38:31 2011 +0200
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
gdk/win32/gdkevents-win32.c | 9 +++------
1 files changed, 3 insertions(+), 6 deletions(-)
---
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index d2b2fdd..36b4ff7 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -375,10 +375,9 @@ _gdk_events_init (void)
gboolean
gdk_events_pending (void)
{
- MSG msg;
return (_gdk_event_queue_find_first (_gdk_display) ||
(modal_win32_dialog == NULL &&
- PeekMessageW (&msg, NULL, 0, 0, PM_NOREMOVE)));
+ GetQueueStatus (QS_ALLINPUT) != 0));
}
GdkEvent*
@@ -3563,7 +3562,6 @@ static gboolean
gdk_event_prepare (GSource *source,
gint *timeout)
{
- MSG msg;
gboolean retval;
GDK_THREADS_ENTER ();
@@ -3572,7 +3570,7 @@ gdk_event_prepare (GSource *source,
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
(modal_win32_dialog == NULL &&
- PeekMessageW (&msg, NULL, 0, 0, PM_NOREMOVE)));
+ GetQueueStatus (QS_ALLINPUT) != 0));
GDK_THREADS_LEAVE ();
@@ -3582,7 +3580,6 @@ gdk_event_prepare (GSource *source,
static gboolean
gdk_event_check (GSource *source)
{
- MSG msg;
gboolean retval;
GDK_THREADS_ENTER ();
@@ -3591,7 +3588,7 @@ gdk_event_check (GSource *source)
{
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
(modal_win32_dialog == NULL &&
- PeekMessageW (&msg, NULL, 0, 0, PM_NOREMOVE)));
+ GetQueueStatus (QS_ALLINPUT) != 0));
}
else
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]