diff options
author | wtc%netscape.com <devnull@localhost> | 2000-01-25 03:00:35 +0000 |
---|---|---|
committer | wtc%netscape.com <devnull@localhost> | 2000-01-25 03:00:35 +0000 |
commit | 4d4473d7bb43b82608f036c3cf021f4b8da38604 (patch) | |
tree | 1901062ad96ee7e9dfd090d252d668b920acb73a | |
parent | 2de1653c8771e30e5942bffeada18d8e225796bf (diff) | |
download | nspr-hg-4d4473d7bb43b82608f036c3cf021f4b8da38604.tar.gz |
Bugzilla bug #23969: checked in dougt/bienvenu's modified fix.PLEVENT_MOVE_BASE
-rw-r--r-- | lib/ds/plevent.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/lib/ds/plevent.c b/lib/ds/plevent.c index ba7deedf..237bffef 100644 --- a/lib/ds/plevent.c +++ b/lib/ds/plevent.c @@ -101,6 +101,7 @@ struct PLEventQueue { int notifyCount; #elif defined(_WIN32) || defined(WIN16) HWND eventReceiverWindow; + PRBool removeMsg; #elif defined(XP_OS2) HWND eventReceiverWindow; #elif defined(XP_BEOS) @@ -163,6 +164,9 @@ static PLEventQueue * self->handlerThread = handlerThread; self->processingEvents = PR_FALSE; self->type = qtype; +#if defined(_WIN32) || defined(WIN16) + self->removeMsg = PR_TRUE; +#endif PR_INIT_CLIST(&self->queue); if ( qtype == EventQueueIsNative ) { @@ -717,6 +721,8 @@ _pl_CleanupNativeNotifier(PLEventQueue* self) #elif defined(XP_UNIX) close(self->eventPipe[0]); close(self->eventPipe[1]); +#elif defined(_WIN32) || defined(WIN16) + DestroyWindow(self->eventReceiverWindow); #endif } @@ -809,7 +815,22 @@ _pl_NativeNotify(PLEventQueue* self) static PRStatus _pl_AcknowledgeNativeNotify(PLEventQueue* self) { -#if defined(VMS) +#if defined(_WIN32) || defined(WIN16) + MSG aMsg; + /* + * only remove msg when we've been called directly by + * PL_ProcessPendingEvents, not when we've been called by + * the window proc because the window proc will remove the + * msg for us. + */ + if (self->removeMsg) { + PR_LOG(event_lm, PR_LOG_DEBUG, + ("_pl_AcknowledgeNativeNotify: self=%p", self)); + PeekMessage(&aMsg, self->eventReceiverWindow, + _pr_PostEventMsgId, _pr_PostEventMsgId, PM_REMOVE); + } + return PR_SUCCESS; +#elif defined(VMS) PR_LOG(event_lm, PR_LOG_DEBUG, ("_pl_AcknowledgeNativeNotify: self=%p notifyCount=%d efn=%d", self, self->notifyCount, self->efn)); @@ -948,7 +969,13 @@ _md_EventReceiverProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PREventQueue *queue = (PREventQueue *)lParam; - PR_ProcessPendingEvents(queue); +#if defined(_WIN32) || defined(WIN16) + queue->removeMsg = PR_FALSE; +#endif + PL_ProcessPendingEvents(queue); +#if defined(_WIN32) || defined(WIN16) + queue->removeMsg = PR_TRUE; +#endif #ifdef XP_OS2 return MRFROMLONG(TRUE); #else |