From c802cd626d6d34d3c4f13aa8bd2d87ca6877874e Mon Sep 17 00:00:00 2001 From: "tbogard%aol.net" Date: Tue, 28 Sep 1999 16:52:10 +0000 Subject: [PATCH] 1.) nsIEvent now has an attribute for isExitEvent(). This allows one to test if the current event represented by nsIEvent is a signal to exit the loop. 2.) The various Run* routines were made more general. This allowed me to move them completely within the nsCBaseLoop code rather than have them duplicated across the different Base Loop Typed classes. This avoids the cut and pasting of code, that will probably be tweaked in the future. 3.) To support the new Run* routines, I have added a RetrieveNextEvent and then a PlatformRetrieveNextEvent. The first is implemented in nsCBaseLoop. This was added to facilitate ordering of event retrieval in the near future (ie, pulling system events before normal events, or pulling PLEvents etc.) The second function is one that platform code must override. This is different for each loop type. Basically this is supposed to be whatever it takes for a given implementation to pull the next event off the queue for the given loop type. So in the Windows world, this function calls GetMessage() for the Thread and App loop types and then PeekMessage() with PM_REMOVE set for the Breath loop type. This code is compiled but not used by the main build. A=chofmann git-svn-id: svn://10.0.0.236/trunk@49214 18797224-902f-48f8-a5cc-f745e15eee43 --- .../eventloop/windows/nsCBreathLoop.cpp | 13 ++ .../eventloop/windows/nsCBreathLoop.h | 2 + .../appshell/eventloop/windows/nsCEvent.cpp | 9 ++ .../eventloop/windows/nsCPlatformBaseLoop.cpp | 11 ++ .../eventloop/windows/nsCPlatformBaseLoop.h | 2 + .../appshell/eventloop/xp/nsCBaseAppLoop.cpp | 124 +---------------- .../appshell/eventloop/xp/nsCBaseAppLoop.h | 9 -- .../eventloop/xp/nsCBaseBreathLoop.cpp | 126 ------------------ .../appshell/eventloop/xp/nsCBaseBreathLoop.h | 9 -- .../appshell/eventloop/xp/nsCBaseLoop.cpp | 125 ++++++++++++++++- .../xpcom/appshell/eventloop/xp/nsCBaseLoop.h | 21 +-- .../eventloop/xp/nsCBaseThreadLoop.cpp | 122 ----------------- .../appshell/eventloop/xp/nsCBaseThreadLoop.h | 9 -- .../xpcom/appshell/eventloop/xp/nsIEvent.idl | 2 + 14 files changed, 176 insertions(+), 408 deletions(-) diff --git a/mozilla/xpcom/appshell/eventloop/windows/nsCBreathLoop.cpp b/mozilla/xpcom/appshell/eventloop/windows/nsCBreathLoop.cpp index e34a1ea51db..d376b7ced63 100644 --- a/mozilla/xpcom/appshell/eventloop/windows/nsCBreathLoop.cpp +++ b/mozilla/xpcom/appshell/eventloop/windows/nsCBreathLoop.cpp @@ -64,4 +64,17 @@ nsresult nsCBreathLoop::PlatformExit(PRInt32 exitCode) PRInt32 nsCBreathLoop::PlatformGetReturnCode(void* platformEventData) { return 0; +} + +nsresult nsCBreathLoop::PlatformRetrieveNextEvent(void* platformFilterData, + void* platformEventData) +{ + nsCWinFilter* filter=(nsCWinFilter*)platformFilterData; + MSG* pMsg=(MSG*)platformEventData; + + filter->wRemoveFlags|= PM_REMOVE; + if(::PeekMessage(pMsg, filter->hWnd, filter->wMsgFilterMin, + filter->wMsgFilterMax, filter->wRemoveFlags)) + return NS_OK; + return NS_COMFALSE; } \ No newline at end of file diff --git a/mozilla/xpcom/appshell/eventloop/windows/nsCBreathLoop.h b/mozilla/xpcom/appshell/eventloop/windows/nsCBreathLoop.h index d108b5e0b6c..1f86c92cbfc 100644 --- a/mozilla/xpcom/appshell/eventloop/windows/nsCBreathLoop.h +++ b/mozilla/xpcom/appshell/eventloop/windows/nsCBreathLoop.h @@ -41,6 +41,8 @@ protected: nsresult PlatformExit(PRInt32 exitCode); PRInt32 PlatformGetReturnCode(void* platformEventData); + nsresult PlatformRetrieveNextEvent(void* platformFilterData, + void* platformEventData); }; #endif /* nsCBreathLoop_h__ */ diff --git a/mozilla/xpcom/appshell/eventloop/windows/nsCEvent.cpp b/mozilla/xpcom/appshell/eventloop/windows/nsCEvent.cpp index 7f03237c340..7e6662a03b0 100644 --- a/mozilla/xpcom/appshell/eventloop/windows/nsCEvent.cpp +++ b/mozilla/xpcom/appshell/eventloop/windows/nsCEvent.cpp @@ -75,6 +75,15 @@ NS_IMETHODIMP nsCEvent::SetNativeData(nsNativeEventDataType dataType, return NS_OK; } + +NS_IMETHODIMP nsCEvent::GetIsExitEvent(PRBool* aIsExitEvent) +{ + NS_ENSURE_ARG_POINTER(aIsExitEvent); + + *aIsExitEvent = m_msg.message == WM_QUIT ? PR_TRUE : PR_FALSE; + + return NS_OK; +} //***************************************************************************** // nsCEvent::nsIWinEvent //***************************************************************************** diff --git a/mozilla/xpcom/appshell/eventloop/windows/nsCPlatformBaseLoop.cpp b/mozilla/xpcom/appshell/eventloop/windows/nsCPlatformBaseLoop.cpp index d5a572b5232..9470b64013a 100644 --- a/mozilla/xpcom/appshell/eventloop/windows/nsCPlatformBaseLoop.cpp +++ b/mozilla/xpcom/appshell/eventloop/windows/nsCPlatformBaseLoop.cpp @@ -118,4 +118,15 @@ PRInt32 nsCPlatformBaseLoop::PlatformGetReturnCode(void* platformEventData) { MSG* pMsg=(MSG*)platformEventData; return pMsg->wParam; +} + +nsresult nsCPlatformBaseLoop::PlatformRetrieveNextEvent(void* platformFilterData, + void* platformEventData) +{ + nsCWinFilter* filter=(nsCWinFilter*)platformFilterData; + MSG* pMsg=(MSG*)platformEventData; + if(::GetMessage(pMsg, filter->hWnd, filter->wMsgFilterMin, + filter->wMsgFilterMax)) + return NS_OK; + return NS_COMFALSE; } \ No newline at end of file diff --git a/mozilla/xpcom/appshell/eventloop/windows/nsCPlatformBaseLoop.h b/mozilla/xpcom/appshell/eventloop/windows/nsCPlatformBaseLoop.h index a5fc4a8d980..84fe71723eb 100644 --- a/mozilla/xpcom/appshell/eventloop/windows/nsCPlatformBaseLoop.h +++ b/mozilla/xpcom/appshell/eventloop/windows/nsCPlatformBaseLoop.h @@ -48,6 +48,8 @@ protected: nsNativeEventDataType PlatformGetEventType(); nsNativeFilterDataType PlatformGetFilterType(); PRInt32 PlatformGetReturnCode(void* platformEventData); + nsresult PlatformRetrieveNextEvent(void* platformFilterData, + void* platformEventData); protected: DWORD m_WinThreadId; diff --git a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseAppLoop.cpp b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseAppLoop.cpp index 4ef2b696f01..7235dbe1d2b 100644 --- a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseAppLoop.cpp +++ b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseAppLoop.cpp @@ -36,126 +36,4 @@ nsCBaseAppLoop::nsCBaseAppLoop() : nsCPlatformBaseLoop(nsEventLoopTypes::MainApp nsCBaseAppLoop::~nsCBaseAppLoop() { -} - - -//***************************************************************************** -// nsCBaseAppLoop:: App Loop Runs -//***************************************************************************** - -nsresult nsCBaseAppLoop::RunWithNoListener(nsIEvent* event, - nsIEventFilter* filter) -{ - nsresult rv; - - void* platformEventData = GetPlatformEventData(event); - void* platformFilterData = GetPlatformFilterData(filter); - NS_ENSURE(platformEventData, NS_ERROR_FAILURE); - - while(NS_OK == (rv = PlatformGetNextEvent(platformFilterData, platformEventData))) - { - if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) - break; - - if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) - break; - } - - return rv; -} - -nsresult nsCBaseAppLoop::RunWithTranslateListener(nsIEvent* event, - nsIEventFilter* filter, nsITranslateListener* translateListener) -{ - nsresult rv; - - void* platformEventData = GetPlatformEventData(event); - void* platformFilterData = GetPlatformFilterData(filter); - NS_ENSURE(platformEventData, NS_ERROR_FAILURE); - - while(NS_OK == (rv = PlatformGetNextEvent(platformFilterData, platformEventData))) - { - if(NS_FAILED(rv = translateListener->PreTranslate(event))) - break; - if(NS_OK == rv) - { - if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) - break; - if(NS_FAILED(rv = translateListener->PostTranslate(event, - NS_OK == rv ? PR_TRUE : PR_FALSE))) - break; - } - - if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) - break; - } - - return rv; -} - -nsresult nsCBaseAppLoop::RunWithDispatchListener(nsIEvent* event, - nsIEventFilter* filter, nsIDispatchListener* dispatchListener) -{ - nsresult rv; - - void* platformEventData = GetPlatformEventData(event); - void* platformFilterData = GetPlatformFilterData(filter); - NS_ENSURE(platformEventData, NS_ERROR_FAILURE); - - while(NS_OK == (rv = PlatformGetNextEvent(platformFilterData, platformEventData))) - { - if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) - break; - - if(NS_FAILED(rv = dispatchListener->PreDispatch(event))) - break; - if(NS_OK == rv) - { - if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) - break; - if(NS_FAILED(rv = dispatchListener->PostDispatch(event, - NS_OK == rv ? PR_TRUE : PR_FALSE))) - break; - } - } - - return rv; -} - -nsresult nsCBaseAppLoop::RunWithTranslateAndDispatchListener(nsIEvent* event, - nsIEventFilter* filter, nsITranslateListener* translateListener, - nsIDispatchListener* dispatchListener) -{ - nsresult rv; - - void* platformEventData = GetPlatformEventData(event); - void* platformFilterData = GetPlatformFilterData(filter); - NS_ENSURE(platformEventData, NS_ERROR_FAILURE); - - while(NS_OK == (rv = PlatformGetNextEvent(platformFilterData, platformEventData))) - { - if(NS_FAILED(rv = translateListener->PreTranslate(event))) - break; - if(NS_OK == rv) - { - if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) - break; - if(NS_FAILED(rv = translateListener->PostTranslate(event, - NS_OK == rv ? PR_TRUE : PR_FALSE))) - break; - } - - if(NS_FAILED(rv = dispatchListener->PreDispatch(event))) - break; - if(NS_OK == rv) - { - if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) - break; - if(NS_FAILED(rv = dispatchListener->PostDispatch(event, - NS_OK == rv ? PR_TRUE : PR_FALSE))) - break; - } - } - - return rv; -} \ No newline at end of file +} \ No newline at end of file diff --git a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseAppLoop.h b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseAppLoop.h index 6a61cbfdf6b..ed430a554dc 100644 --- a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseAppLoop.h +++ b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseAppLoop.h @@ -32,15 +32,6 @@ public: protected: nsCBaseAppLoop(); virtual ~nsCBaseAppLoop(); - - nsresult RunWithNoListener(nsIEvent* event, nsIEventFilter* filter); - nsresult RunWithTranslateListener(nsIEvent* event, nsIEventFilter* filter, - nsITranslateListener* translateListener); - nsresult RunWithDispatchListener(nsIEvent* event, nsIEventFilter* filter, - nsIDispatchListener* dispatchListener); - nsresult RunWithTranslateAndDispatchListener(nsIEvent* event, - nsIEventFilter* filter, nsITranslateListener* translateListener, - nsIDispatchListener* dispatchListener); }; #endif /* nsCBaseAppLoop_h__ */ diff --git a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseBreathLoop.cpp b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseBreathLoop.cpp index 0f0f8b96a40..fcf2858ea14 100644 --- a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseBreathLoop.cpp +++ b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseBreathLoop.cpp @@ -37,130 +37,4 @@ nsCBaseBreathLoop::nsCBaseBreathLoop() : nsCBaseBreathLoop::~nsCBaseBreathLoop() { -} - - -//***************************************************************************** -// nsCBaseBreathLoop:: App Loop Runs -//***************************************************************************** - -nsresult nsCBaseBreathLoop::RunWithNoListener(nsIEvent* event, - nsIEventFilter* filter) -{ - nsresult rv; - - void* platformEventData = GetPlatformEventData(event); - void* platformFilterData = GetPlatformFilterData(filter); - NS_ENSURE(platformEventData, NS_ERROR_FAILURE); - - while(NS_OK == (rv = PlatformPeekNextEvent(platformFilterData, - platformEventData, PR_TRUE))) - { - if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) - break; - - if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) - break; - } - - return rv; -} - -nsresult nsCBaseBreathLoop::RunWithTranslateListener(nsIEvent* event, - nsIEventFilter* filter, nsITranslateListener* translateListener) -{ - nsresult rv; - - void* platformEventData = GetPlatformEventData(event); - void* platformFilterData = GetPlatformFilterData(filter); - NS_ENSURE(platformEventData, NS_ERROR_FAILURE); - - while(NS_OK == (rv = PlatformPeekNextEvent(platformFilterData, - platformEventData, PR_TRUE))) - { - if(NS_FAILED(rv = translateListener->PreTranslate(event))) - break; - if(NS_OK == rv) - { - if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) - break; - if(NS_FAILED(rv = translateListener->PostTranslate(event, - NS_OK == rv ? PR_TRUE : PR_FALSE))) - break; - } - - if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) - break; - } - - return rv; -} - -nsresult nsCBaseBreathLoop::RunWithDispatchListener(nsIEvent* event, - nsIEventFilter* filter, nsIDispatchListener* dispatchListener) -{ - nsresult rv; - - void* platformEventData = GetPlatformEventData(event); - void* platformFilterData = GetPlatformFilterData(filter); - NS_ENSURE(platformEventData, NS_ERROR_FAILURE); - - while(NS_OK == (rv = PlatformPeekNextEvent(platformFilterData, - platformEventData, PR_TRUE))) - { - if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) - break; - - if(NS_FAILED(rv = dispatchListener->PreDispatch(event))) - break; - if(NS_OK == rv) - { - if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) - break; - if(NS_FAILED(rv = dispatchListener->PostDispatch(event, - NS_OK == rv ? PR_TRUE : PR_FALSE))) - break; - } - } - - return rv; -} - -nsresult nsCBaseBreathLoop::RunWithTranslateAndDispatchListener(nsIEvent* event, - nsIEventFilter* filter, nsITranslateListener* translateListener, - nsIDispatchListener* dispatchListener) -{ - nsresult rv; - - void* platformEventData = GetPlatformEventData(event); - void* platformFilterData = GetPlatformFilterData(filter); - NS_ENSURE(platformEventData, NS_ERROR_FAILURE); - - while(NS_OK == (rv = PlatformPeekNextEvent(platformFilterData, - platformEventData, PR_TRUE))) - { - if(NS_FAILED(rv = translateListener->PreTranslate(event))) - break; - if(NS_OK == rv) - { - if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) - break; - if(NS_FAILED(rv = translateListener->PostTranslate(event, - NS_OK == rv ? PR_TRUE : PR_FALSE))) - break; - } - - if(NS_FAILED(rv = dispatchListener->PreDispatch(event))) - break; - if(NS_OK == rv) - { - if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) - break; - if(NS_FAILED(rv = dispatchListener->PostDispatch(event, - NS_OK == rv ? PR_TRUE : PR_FALSE))) - break; - } - } - - return rv; } \ No newline at end of file diff --git a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseBreathLoop.h b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseBreathLoop.h index 0a6483fd40f..3485c2ad405 100644 --- a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseBreathLoop.h +++ b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseBreathLoop.h @@ -32,15 +32,6 @@ public: protected: nsCBaseBreathLoop(); virtual ~nsCBaseBreathLoop(); - - nsresult RunWithNoListener(nsIEvent* event, nsIEventFilter* filter); - nsresult RunWithTranslateListener(nsIEvent* event, nsIEventFilter* filter, - nsITranslateListener* translateListener); - nsresult RunWithDispatchListener(nsIEvent* event, nsIEventFilter* filter, - nsIDispatchListener* dispatchListener); - nsresult RunWithTranslateAndDispatchListener(nsIEvent* event, - nsIEventFilter* filter, nsITranslateListener* translateListener, - nsIDispatchListener* dispatchListener); }; #endif /* nsCBaseBreathLoop_h__ */ diff --git a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseLoop.cpp b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseLoop.cpp index 408b3a0f62d..edeaf084bf6 100644 --- a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseLoop.cpp +++ b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseLoop.cpp @@ -269,4 +269,127 @@ void* nsCBaseLoop::GetPlatformFilterData(nsIEventFilter* filter) filter->GetNativeData(platformFilterType, &platformFilterData); return platformFilterData; -} \ No newline at end of file +} + +nsresult nsCBaseLoop::RunWithNoListener(nsIEvent* event, + nsIEventFilter* filter) +{ + nsresult rv; + + void* platformEventData = GetPlatformEventData(event); + void* platformFilterData = GetPlatformFilterData(filter); + NS_ENSURE(platformEventData, NS_ERROR_FAILURE); + + while(NS_OK == (rv = RetrieveNextEvent(platformFilterData, platformEventData))) + { + if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) + break; + + if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) + break; + } + + return rv; +} + +nsresult nsCBaseLoop::RunWithTranslateListener(nsIEvent* event, + nsIEventFilter* filter, nsITranslateListener* translateListener) +{ + nsresult rv; + + void* platformEventData = GetPlatformEventData(event); + void* platformFilterData = GetPlatformFilterData(filter); + NS_ENSURE(platformEventData, NS_ERROR_FAILURE); + + while(NS_OK == (rv = RetrieveNextEvent(platformFilterData, platformEventData))) + { + if(NS_FAILED(rv = translateListener->PreTranslate(event))) + break; + if(NS_OK == rv) + { + if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) + break; + if(NS_FAILED(rv = translateListener->PostTranslate(event, + NS_OK == rv ? PR_TRUE : PR_FALSE))) + break; + } + + if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) + break; + } + + return rv; +} + +nsresult nsCBaseLoop::RunWithDispatchListener(nsIEvent* event, + nsIEventFilter* filter, nsIDispatchListener* dispatchListener) +{ + nsresult rv; + + void* platformEventData = GetPlatformEventData(event); + void* platformFilterData = GetPlatformFilterData(filter); + NS_ENSURE(platformEventData, NS_ERROR_FAILURE); + + while(NS_OK == (rv = RetrieveNextEvent(platformFilterData, platformEventData))) + { + if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) + break; + + if(NS_FAILED(rv = dispatchListener->PreDispatch(event))) + break; + if(NS_OK == rv) + { + if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) + break; + if(NS_FAILED(rv = dispatchListener->PostDispatch(event, + NS_OK == rv ? PR_TRUE : PR_FALSE))) + break; + } + } + + return rv; +} + +nsresult nsCBaseLoop::RunWithTranslateAndDispatchListener(nsIEvent* event, + nsIEventFilter* filter, nsITranslateListener* translateListener, + nsIDispatchListener* dispatchListener) +{ + nsresult rv; + + void* platformEventData = GetPlatformEventData(event); + void* platformFilterData = GetPlatformFilterData(filter); + NS_ENSURE(platformEventData, NS_ERROR_FAILURE); + + while(NS_OK == (rv = RetrieveNextEvent(platformFilterData, platformEventData))) + { + if(NS_FAILED(rv = translateListener->PreTranslate(event))) + break; + if(NS_OK == rv) + { + if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) + break; + if(NS_FAILED(rv = translateListener->PostTranslate(event, + NS_OK == rv ? PR_TRUE : PR_FALSE))) + break; + } + + if(NS_FAILED(rv = dispatchListener->PreDispatch(event))) + break; + if(NS_OK == rv) + { + if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) + break; + if(NS_FAILED(rv = dispatchListener->PostDispatch(event, + NS_OK == rv ? PR_TRUE : PR_FALSE))) + break; + } + } + + return rv; +} + +nsresult nsCBaseLoop::RetrieveNextEvent(void* platformFilterData, + void* platformEventData) +{ + return PlatformRetrieveNextEvent(platformFilterData, platformEventData); +} diff --git a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseLoop.h b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseLoop.h index 707de5d1270..8c3d1eb213d 100644 --- a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseLoop.h +++ b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseLoop.h @@ -48,16 +48,17 @@ protected: // Internal Helpers void* GetPlatformEventData(nsIEvent* event); void* GetPlatformFilterData(nsIEventFilter* filter); - - // Virtuals Specific Base Loop must override. - virtual nsresult RunWithNoListener(nsIEvent* event, nsIEventFilter* filter)=0; - virtual nsresult RunWithTranslateListener(nsIEvent* event, - nsIEventFilter* filter, nsITranslateListener* translateListener)=0; - virtual nsresult RunWithDispatchListener(nsIEvent* event, - nsIEventFilter* filter, nsIDispatchListener* dispatchListener)=0; - virtual nsresult RunWithTranslateAndDispatchListener(nsIEvent* event, + nsresult RunWithNoListener(nsIEvent* event, nsIEventFilter* filter); + nsresult RunWithTranslateListener(nsIEvent* event, + nsIEventFilter* filter, nsITranslateListener* translateListener); + nsresult RunWithDispatchListener(nsIEvent* event, + nsIEventFilter* filter, nsIDispatchListener* dispatchListener); + nsresult RunWithTranslateAndDispatchListener(nsIEvent* event, nsIEventFilter* filter, nsITranslateListener* translateListener, - nsIDispatchListener* dispatchListener)=0; + nsIDispatchListener* dispatchListener); + + nsresult RetrieveNextEvent(void* platformFilterData, + void* platformEventData); // Virtuals Platform Loop must override // Internal Platform Implementations of nsIEventLoop @@ -76,6 +77,8 @@ protected: virtual nsNativeEventDataType PlatformGetEventType()=0; virtual nsNativeFilterDataType PlatformGetFilterType()=0; virtual PRInt32 PlatformGetReturnCode(void* platformEventData)=0; + virtual nsresult PlatformRetrieveNextEvent(void* platformFilterData, + void* platformEventData)=0; protected: nsAutoString m_LoopName; diff --git a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseThreadLoop.cpp b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseThreadLoop.cpp index 9d62e3f83ff..4c52c14399c 100644 --- a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseThreadLoop.cpp +++ b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseThreadLoop.cpp @@ -37,126 +37,4 @@ nsCBaseThreadLoop::nsCBaseThreadLoop() : nsCBaseThreadLoop::~nsCBaseThreadLoop() { -} - - -//***************************************************************************** -// nsCBaseThreadLoop:: App Loop Runs -//***************************************************************************** - -nsresult nsCBaseThreadLoop::RunWithNoListener(nsIEvent* event, - nsIEventFilter* filter) -{ - nsresult rv; - - void* platformEventData = GetPlatformEventData(event); - void* platformFilterData = GetPlatformFilterData(filter); - NS_ENSURE(platformEventData, NS_ERROR_FAILURE); - - while(NS_OK == (rv = PlatformGetNextEvent(platformFilterData, platformEventData))) - { - if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) - break; - - if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) - break; - } - - return rv; -} - -nsresult nsCBaseThreadLoop::RunWithTranslateListener(nsIEvent* event, - nsIEventFilter* filter, nsITranslateListener* translateListener) -{ - nsresult rv; - - void* platformEventData = GetPlatformEventData(event); - void* platformFilterData = GetPlatformFilterData(filter); - NS_ENSURE(platformEventData, NS_ERROR_FAILURE); - - while(NS_OK == (rv = PlatformGetNextEvent(platformFilterData, platformEventData))) - { - if(NS_FAILED(rv = translateListener->PreTranslate(event))) - break; - if(NS_OK == rv) - { - if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) - break; - if(NS_FAILED(rv = translateListener->PostTranslate(event, - NS_OK == rv ? PR_TRUE : PR_FALSE))) - break; - } - - if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) - break; - } - - return rv; -} - -nsresult nsCBaseThreadLoop::RunWithDispatchListener(nsIEvent* event, - nsIEventFilter* filter, nsIDispatchListener* dispatchListener) -{ - nsresult rv; - - void* platformEventData = GetPlatformEventData(event); - void* platformFilterData = GetPlatformFilterData(filter); - NS_ENSURE(platformEventData, NS_ERROR_FAILURE); - - while(NS_OK == (rv = PlatformGetNextEvent(platformFilterData, platformEventData))) - { - if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) - break; - - if(NS_FAILED(rv = dispatchListener->PreDispatch(event))) - break; - if(NS_OK == rv) - { - if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) - break; - if(NS_FAILED(rv = dispatchListener->PostDispatch(event, - NS_OK == rv ? PR_TRUE : PR_FALSE))) - break; - } - } - - return rv; -} - -nsresult nsCBaseThreadLoop::RunWithTranslateAndDispatchListener(nsIEvent* event, - nsIEventFilter* filter, nsITranslateListener* translateListener, - nsIDispatchListener* dispatchListener) -{ - nsresult rv; - - void* platformEventData = GetPlatformEventData(event); - void* platformFilterData = GetPlatformFilterData(filter); - NS_ENSURE(platformEventData, NS_ERROR_FAILURE); - - while(NS_OK == (rv = PlatformGetNextEvent(platformFilterData, platformEventData))) - { - if(NS_FAILED(rv = translateListener->PreTranslate(event))) - break; - if(NS_OK == rv) - { - if(NS_FAILED(rv = PlatformTranslateEvent(platformEventData))) - break; - if(NS_FAILED(rv = translateListener->PostTranslate(event, - NS_OK == rv ? PR_TRUE : PR_FALSE))) - break; - } - - if(NS_FAILED(rv = dispatchListener->PreDispatch(event))) - break; - if(NS_OK == rv) - { - if(NS_FAILED(rv = PlatformDispatchEvent(platformEventData))) - break; - if(NS_FAILED(rv = dispatchListener->PostDispatch(event, - NS_OK == rv ? PR_TRUE : PR_FALSE))) - break; - } - } - - return rv; } \ No newline at end of file diff --git a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseThreadLoop.h b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseThreadLoop.h index a3c26cebf12..8860616a89d 100644 --- a/mozilla/xpcom/appshell/eventloop/xp/nsCBaseThreadLoop.h +++ b/mozilla/xpcom/appshell/eventloop/xp/nsCBaseThreadLoop.h @@ -32,15 +32,6 @@ public: protected: nsCBaseThreadLoop(); virtual ~nsCBaseThreadLoop(); - - nsresult RunWithNoListener(nsIEvent* event, nsIEventFilter* filter); - nsresult RunWithTranslateListener(nsIEvent* event, nsIEventFilter* filter, - nsITranslateListener* translateListener); - nsresult RunWithDispatchListener(nsIEvent* event, nsIEventFilter* filter, - nsIDispatchListener* dispatchListener); - nsresult RunWithTranslateAndDispatchListener(nsIEvent* event, - nsIEventFilter* filter, nsITranslateListener* translateListener, - nsIDispatchListener* dispatchListener); }; #endif /* nsCBaseThreadLoop_h__ */ diff --git a/mozilla/xpcom/appshell/eventloop/xp/nsIEvent.idl b/mozilla/xpcom/appshell/eventloop/xp/nsIEvent.idl index ce2144b08ab..66283e33927 100644 --- a/mozilla/xpcom/appshell/eventloop/xp/nsIEvent.idl +++ b/mozilla/xpcom/appshell/eventloop/xp/nsIEvent.idl @@ -78,4 +78,6 @@ interface nsIEvent : nsISupports */ [noscript] void SetNativeData(in nsNativeEventDataType dataType, in voidStar data); + + readonly attribute boolean isExitEvent; }; \ No newline at end of file