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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -41,6 +41,8 @@ protected:
|
||||
nsresult PlatformExit(PRInt32 exitCode);
|
||||
|
||||
PRInt32 PlatformGetReturnCode(void* platformEventData);
|
||||
nsresult PlatformRetrieveNextEvent(void* platformFilterData,
|
||||
void* platformEventData);
|
||||
};
|
||||
|
||||
#endif /* nsCBreathLoop_h__ */
|
||||
|
||||
@@ -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
|
||||
//*****************************************************************************
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -48,6 +48,8 @@ protected:
|
||||
nsNativeEventDataType PlatformGetEventType();
|
||||
nsNativeFilterDataType PlatformGetFilterType();
|
||||
PRInt32 PlatformGetReturnCode(void* platformEventData);
|
||||
nsresult PlatformRetrieveNextEvent(void* platformFilterData,
|
||||
void* platformEventData);
|
||||
|
||||
protected:
|
||||
DWORD m_WinThreadId;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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__ */
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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__ */
|
||||
|
||||
@@ -269,4 +269,127 @@ void* nsCBaseLoop::GetPlatformFilterData(nsIEventFilter* filter)
|
||||
filter->GetNativeData(platformFilterType, &platformFilterData);
|
||||
|
||||
return platformFilterData;
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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__ */
|
||||
|
||||
@@ -78,4 +78,6 @@ interface nsIEvent : nsISupports
|
||||
*/
|
||||
[noscript] void SetNativeData(in nsNativeEventDataType dataType,
|
||||
in voidStar data);
|
||||
|
||||
readonly attribute boolean isExitEvent;
|
||||
};
|
||||
Reference in New Issue
Block a user