Moving Event loop interfaces to it's new home from xpcom/apps. Implementation will start here. Also renamed msg to be event to be less windows-ish.
git-svn-id: svn://10.0.0.236/trunk@44257 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
23
mozilla/xpcom/appshell/eventloop/makefile.win
Normal file
23
mozilla/xpcom/appshell/eventloop/makefile.win
Normal file
@@ -0,0 +1,23 @@
|
||||
#!nmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
|
||||
DEPTH=..\..\..
|
||||
|
||||
DIRS=xp windows
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
include <$(DEPTH)\config\config.mak>
|
||||
27
mozilla/xpcom/appshell/eventloop/windows/makefile.win
Normal file
27
mozilla/xpcom/appshell/eventloop/windows/makefile.win
Normal file
@@ -0,0 +1,27 @@
|
||||
#!nmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
|
||||
DEPTH=..\..\..\..
|
||||
MODULE=xpcom_eventloop_windows
|
||||
|
||||
XPIDLSRCS= \
|
||||
.\nsIWinEvent.idl \
|
||||
.\nsIWinEventFilter.idl \
|
||||
$(NULL)
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
include <$(DEPTH)\config\config.mak>
|
||||
12
mozilla/xpcom/appshell/eventloop/windows/nsIWinEvent.idl
Normal file
12
mozilla/xpcom/appshell/eventloop/windows/nsIWinEvent.idl
Normal file
@@ -0,0 +1,12 @@
|
||||
#include "nsISupports.idl"
|
||||
#include "nsIEvent.idl"
|
||||
|
||||
/**
|
||||
* The nsIWinEvent defines what a message looks like on the Windows Platform.
|
||||
*/
|
||||
|
||||
[scriptable, uuid(2EFB5005-4508-11d3-AEDA-00A024FFC08C)]
|
||||
interface nsIWinEvent : nsIEvent
|
||||
{
|
||||
//XXX Place the contents of a Windows MSG struct here.
|
||||
};
|
||||
@@ -0,0 +1,14 @@
|
||||
#include "nsISupports.idl"
|
||||
#include "nsIEventFilter.idl"
|
||||
|
||||
/**
|
||||
* The nsIWinEventFilter defines what a message filter looks like on the Windows
|
||||
* Platform.
|
||||
*/
|
||||
|
||||
[scriptable, uuid(2EFB5006-4508-11d3-AEDA-00A024FFC08C)]
|
||||
interface nsIWinEventFilter : nsIEventFilter
|
||||
{
|
||||
//XXX Place the contents of a Windows MSG struct here.
|
||||
//As well as other needed filtering criteria.
|
||||
};
|
||||
30
mozilla/xpcom/appshell/eventloop/xp/makefile.win
Normal file
30
mozilla/xpcom/appshell/eventloop/xp/makefile.win
Normal file
@@ -0,0 +1,30 @@
|
||||
#!nmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
|
||||
DEPTH=..\..\..\..
|
||||
MODULE=xpcom_eventloop_xp
|
||||
|
||||
XPIDLSRCS= \
|
||||
.\nsIDispatchListener.idl \
|
||||
.\nsIEventLoop.idl \
|
||||
.\nsIEventFilter.idl \
|
||||
.\nsIEvent.idl \
|
||||
.\nsITranslateListener.idl \
|
||||
$(NULL)
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
include <$(DEPTH)\config\config.mak>
|
||||
44
mozilla/xpcom/appshell/eventloop/xp/nsIDispatchListener.idl
Normal file
44
mozilla/xpcom/appshell/eventloop/xp/nsIDispatchListener.idl
Normal file
@@ -0,0 +1,44 @@
|
||||
#include "nsISupports.idl"
|
||||
#include "nsIEvent.idl"
|
||||
|
||||
/**
|
||||
* The nsIDispatchListener defines the callback listener interface that
|
||||
* can be passed to the Run routine on and event loop. This allows
|
||||
* application override or additions to the default dispatching event mechanism.
|
||||
*/
|
||||
|
||||
[scriptable, uuid(2EFB5007-4508-11d3-AEDA-00A024FFC08C)]
|
||||
interface nsIDispatchListener : nsISupports
|
||||
{
|
||||
/* Called just before the nsIEventLoop::DispatchMessage() is called.
|
||||
This allows a listener first crack at dispatching Messages. The
|
||||
listener can then control if DispatchMessage() is called via the
|
||||
return.
|
||||
|
||||
@param msg This is the native message that has been retrieved from the Queue
|
||||
and awaiting dispatching.
|
||||
|
||||
@return NS_OK - Indicates nsIEventLoop::DispatchMessage() should be called
|
||||
following the return from this function.
|
||||
NS_FALSE - Processing went successfully, but
|
||||
nsIEventLoop::DispatchMessage() should not be called.
|
||||
NS_ERROR_FAILURE - Catastrophic processing failure. Event loop should
|
||||
die immediately.
|
||||
*/
|
||||
void PreDispatch(in nsIEvent msg);
|
||||
|
||||
/*
|
||||
Called just after the nsIEventLoop::DispatchMessage() has been called.
|
||||
|
||||
@param msg This is the native message that has been retrieved from the Queue
|
||||
and awaiting dispatching.
|
||||
|
||||
@param fDispatchHandled Indicates if nsIEventLoop::DispatchMessage() handled
|
||||
the message being passed in.
|
||||
|
||||
@return NS_OK - Processing completed fine.
|
||||
NS_ERROR_FAILURE - Catastrophic processing failure. Event loop
|
||||
should die immediately.
|
||||
*/
|
||||
void PostDispatch(in nsIEvent msg, in boolean fDispatchHandled);
|
||||
};
|
||||
11
mozilla/xpcom/appshell/eventloop/xp/nsIEvent.idl
Normal file
11
mozilla/xpcom/appshell/eventloop/xp/nsIEvent.idl
Normal file
@@ -0,0 +1,11 @@
|
||||
#include "nsISupports.idl"
|
||||
|
||||
/**
|
||||
* The nsIEvent serves as a base interface for the platform specific
|
||||
* interfaces that define what an event looks like.
|
||||
*/
|
||||
|
||||
[scriptable, uuid(2EFB5004-4508-11d3-AEDA-00A024FFC08C)]
|
||||
interface nsIEvent : nsISupports
|
||||
{
|
||||
};
|
||||
11
mozilla/xpcom/appshell/eventloop/xp/nsIEventFilter.idl
Normal file
11
mozilla/xpcom/appshell/eventloop/xp/nsIEventFilter.idl
Normal file
@@ -0,0 +1,11 @@
|
||||
#include "nsISupports.idl"
|
||||
|
||||
/**
|
||||
* The nsIEventFilter serves as a base interface for the platform specific
|
||||
* interfaces that define what a filter message looks like.
|
||||
*/
|
||||
|
||||
[scriptable, uuid(2EFB5003-4508-11d3-AEDA-00A024FFC08C)]
|
||||
interface nsIEventFilter : nsISupports
|
||||
{
|
||||
};
|
||||
200
mozilla/xpcom/appshell/eventloop/xp/nsIEventLoop.idl
Normal file
200
mozilla/xpcom/appshell/eventloop/xp/nsIEventLoop.idl
Normal file
@@ -0,0 +1,200 @@
|
||||
#include "nsISupports.idl"
|
||||
#include "nsIEventFilter.idl"
|
||||
#include "nsIEvent.idl"
|
||||
#include "nsIDispatchListener.idl"
|
||||
#include "nsITranslateListener.idl"
|
||||
|
||||
|
||||
typedef long nsEventLoopType;
|
||||
|
||||
/*
|
||||
There are three basic types of Event Loops that can exist in a system.
|
||||
1.) There is the Main Event loop that services the application. This
|
||||
is typically what would be found at the bottom of a main(). Event loops
|
||||
of this type are specified with the 'MainAppLoop' type. There can only
|
||||
be one of these per Application. It is also important to note that
|
||||
Run() called on a Loop of this type blocks until the loop exits.
|
||||
2.) User-interface threads are distinct from worker threads in that they
|
||||
provide an event loop that services native system events. This is the loop
|
||||
that that is found at the bottom of the ThreadMain often looking very
|
||||
similar to the one found in main(). Event loops of this type are specified
|
||||
with the 'ThreadLoop' type. There can only be one of these per thread.It is
|
||||
also important to note that Run() called on a Loop of this type blocks
|
||||
until the loop exits.
|
||||
3.) The third type of loop that exists is one that is done to allow the
|
||||
application and sytem to "breathe". This loop is often invoked from various
|
||||
places on the stack virtually always with the main thread loop living down
|
||||
the stack in some fashion. Great care should be taken in using loops of
|
||||
this kind. Event loops of this type are specified with the 'AppBreathLoop'
|
||||
type. There can be as many of these per application as the application
|
||||
wishes to create. This loop is different than others with respect to the
|
||||
way Run() works on events of this type. Run() will return once the app
|
||||
has had suffiecient breathe time. This may be once the event queue is
|
||||
empty or may be after a specified yield time. As loops of this type aren't
|
||||
tied to the life of a thread or app, the return from Run() does not
|
||||
indicate the desire to end a thread or app either.
|
||||
|
||||
|
||||
******* Talk about life of a loop of these types ******
|
||||
|
||||
*/
|
||||
|
||||
[scriptable, uuid(2EFB5002-4508-11d3-AEDA-00A024FFC08C)]
|
||||
interface nsEventLoopTypes
|
||||
{
|
||||
const long MainAppLoop = 1;
|
||||
const long ThreadLoop = 2;
|
||||
const long AppBreathLoop = 3;
|
||||
};
|
||||
|
||||
/**
|
||||
* The nsIEventLoop provides the facilities to interfact with a native
|
||||
* application event queue.
|
||||
*/
|
||||
|
||||
[scriptable, uuid(2EFB5001-4508-11d3-AEDA-00A024FFC08C)]
|
||||
interface nsIEventLoop : nsISupports
|
||||
{
|
||||
/******** High Level App Usage *******/
|
||||
|
||||
/* Runs the Event Loop. This is a blocking call, it will return when the
|
||||
application or OS has indicated the loop should quit. This is a convience
|
||||
function that can be recreated by a client of this interface using the
|
||||
low-level methods. Unless the application truly needs to handle events
|
||||
on it's own, it is suggested that this method be used rather than manually
|
||||
creating the event loop. To end an event loop one can call the Exit()
|
||||
method on the nsIEventLoop interface.
|
||||
|
||||
In the case of a AppBreathLoop this blocks the app has had suffiecient
|
||||
"breathe" time. This may be once the event queue is empty or may be after
|
||||
a specified yield time. As loops of this type aren't tied to the life of
|
||||
a thread or app, the return from Run() does not indicate the desire to end
|
||||
a thread or app either.
|
||||
|
||||
@param filter Message Filter for handling of events in this loop. If the
|
||||
application wishes to select ranges for message
|
||||
it can pass in a filter. This may be null.
|
||||
@param translateListener Callback called for application specific tranlation
|
||||
of events. This should be null unless the calling
|
||||
application really needs to override the default translation.
|
||||
@param dispatchListener Callback called for application specific dispatching
|
||||
of events. This should be null unless the calling application
|
||||
really needs to override the default processing.
|
||||
*/
|
||||
// Bool for nested PL_Events.
|
||||
|
||||
void Run(in nsIEventFilter filter, in nsITranslateListener translateListener,
|
||||
in nsIDispatchListener dispatchListener);
|
||||
|
||||
/* Exits the Event loop referred to by the instantiation of this interface
|
||||
*/
|
||||
void Exit();
|
||||
|
||||
/******* Low Level Loop Management *****/
|
||||
|
||||
/* This retrieves the next message in the queue for this event loop.
|
||||
If there are no messages in the queue, GetNextMessage will wait for
|
||||
messages to be placed in the queue offering control up to other applications
|
||||
while waiting. When an event to exit the queue is retrieved, GetNextMessage
|
||||
will return NS_FALSE to indicate the loop should finish.
|
||||
|
||||
@param filter Message Filter for handling of events in this loop. If the
|
||||
application wishes to select ranges for message
|
||||
it can pass in a filter. This may be null.
|
||||
@param msg This is the message returned from the queue. Each platform can
|
||||
QI on this returned interface to get the platform specific
|
||||
message contents. This interface is addrefd and must be
|
||||
released when processing is complete.
|
||||
@return NS_OK - msg has been retrieved and ready to be processed.
|
||||
NS_FALSE - An exit event has been signalled. msg will be null.
|
||||
NS_ERROR_FAILURE - Internal failure, ignore all results and
|
||||
cease use of loop.
|
||||
*/
|
||||
void GetNextMessage(in nsIEventFilter filter, out nsIEvent msg);
|
||||
|
||||
/* This retrieves the next message in the queue for this event loop.
|
||||
If there are no messages in the queue, unlike GetNextMessage,
|
||||
PeekNextMessage will return immediately with NS_FALSE.
|
||||
messages to be placed in the queue offering control up to other applications
|
||||
while waiting. When an event to exit the queue is retrieved, GetNextMessage
|
||||
will return NS_FALSE to indicate the loop should finish.
|
||||
|
||||
@param filter Message Filter for handling of events in this loop. If the
|
||||
application wishes to select ranges for message
|
||||
it can pass in a filter. This may be null.
|
||||
@param msg This is the message returned from the queue. Each platform can
|
||||
QI on this returned interface to get the platform specific
|
||||
message contents. This interface is addrefd and must be
|
||||
released when processing is complete.
|
||||
@return NS_OK - msg has been retrieved and ready to be processed.
|
||||
NS_FALSE - There are no more messages to retrieve. msg will be null.
|
||||
NS_ERROR_FAILURE - Internal failure, ignore all results and
|
||||
cease use of loop.
|
||||
*/
|
||||
void PeekNextMessage(in nsIEventFilter filter, out nsIEvent msg);
|
||||
|
||||
/* This does any pre-processing of the message that may be needed.
|
||||
@param msg This is the message returned from the queue. Each platform can
|
||||
QI on this returned interface to get the platform specific
|
||||
message contents. This interface is addrefd and must be
|
||||
released when processing is complete.
|
||||
@return NS_OK - Translated Message.
|
||||
NS_FALSE - Was unable to Translate Message, but this is normal.
|
||||
NS_ERROR_FAILURE - Catastrophic processing failure. Event loop
|
||||
should die immediately.
|
||||
*/
|
||||
void TranslateMessage(in nsIEvent msg);
|
||||
|
||||
/* This does any pre-processing of the message that may be needed.
|
||||
@param msg This is the message returned from the queue. Each platform can
|
||||
QI on this returned interface to get the platform specific
|
||||
message contents. This interface is addrefd and must be
|
||||
released when processing is complete.
|
||||
@return NS_OK - Processed and Dispatched Message.
|
||||
NS_FALSE - Was unable to Dispatch Message, but this is normal.
|
||||
NS_ERROR_FAILURE - Catastrophic processing failure. Event loop
|
||||
should die immediately.
|
||||
*/
|
||||
|
||||
void DispatchMessage(in nsIEvent msg);
|
||||
|
||||
/******* Loop Manipulation ******/
|
||||
|
||||
/* Puts a Message on the event loop referred to by the interface pointer
|
||||
and waits for the message to be processed.
|
||||
|
||||
@param msg This is the message returned from the queue. Each platform can
|
||||
QI on this returned interface to get the platform specific
|
||||
message contents. This interface is addrefd and must be
|
||||
released when processing is complete.
|
||||
@return NS_OK - Message Sent and Processed.
|
||||
NS_FALSE - Message was Sent but was unable to wait for event
|
||||
processing.
|
||||
NS_ERROR_INVALID_ARG - Message passed in was mal-formed.
|
||||
NS_ERROR_FAILURE - Catastrophic processing failure.
|
||||
|
||||
*/
|
||||
void SendLoopMessage(in nsIEvent msg);
|
||||
|
||||
/* Puts a Message on the event loop referred to by the interface pointer
|
||||
and then returns immediately not waiting for the message to be processed.
|
||||
|
||||
@param msg This is the message returned from the queue. Each platform can
|
||||
QI on this returned interface to get the platform specific
|
||||
message contents. This interface is addrefd and must be
|
||||
released when processing is complete.
|
||||
@return NS_OK - Message was placed on the event queue.
|
||||
NS_ERROR_INVALID_ARG - Message passed in was mal-formed.
|
||||
NS_ERROR_FAILURE - Catastrophic processing failure.
|
||||
|
||||
*/
|
||||
void PostLoopMessage(in nsIEvent msg);
|
||||
|
||||
/******* Event Loop Information ******/
|
||||
|
||||
/* Specifies the type of the event loop. This was set upon creation. */
|
||||
readonly attribute nsEventLoopType EventLoopType;
|
||||
|
||||
/* Specifies the name of the event loop. This was set upon creation. */
|
||||
readonly attribute wstring EventLoopName;
|
||||
};
|
||||
45
mozilla/xpcom/appshell/eventloop/xp/nsITranslateListener.idl
Normal file
45
mozilla/xpcom/appshell/eventloop/xp/nsITranslateListener.idl
Normal file
@@ -0,0 +1,45 @@
|
||||
#include "nsISupports.idl"
|
||||
#include "nsIEvent.idl"
|
||||
|
||||
/**
|
||||
* The nsITranslateListener defines the callback listener interface that
|
||||
* can be passed to the Run routine on and event loop. This allows
|
||||
* application overriding or additions to the default event translation
|
||||
* mechanism.
|
||||
*/
|
||||
|
||||
[scriptable, uuid(2EFB5008-4508-11d3-AEDA-00A024FFC08C)]
|
||||
interface nsITranslateListener : nsISupports
|
||||
{
|
||||
/* Called just before the nsIEventLoop::TranslateMessage() is called.
|
||||
This allows a listener first crack at translating Messages. The
|
||||
listener can then control if TranslateMessage() is called via the
|
||||
return.
|
||||
|
||||
@param msg This is the native message that has been retrieved from the Queue
|
||||
and awaiting dispatching.
|
||||
|
||||
@return NS_OK - Indicates nsIEventLoop::TranslateMessage() should be called
|
||||
following the return from this function.
|
||||
NS_FALSE - Translating went successfully, but
|
||||
nsIEventLoop::TranlateMessage() should not be called.
|
||||
NS_ERROR_FAILURE - Catastrophic processing failure. Event loop should
|
||||
die immediately.
|
||||
*/
|
||||
void PreTranslate(in nsIEvent msg);
|
||||
|
||||
/*
|
||||
Called just after the nsIEventLoop::TranslateMessage() has been called.
|
||||
|
||||
@param msg This is the native message that has been retrieved from the Queue
|
||||
and awaiting dispatching.
|
||||
|
||||
@param fTranslateHandled Indicates if nsIEventLoop::TranslateMessage() handled
|
||||
the message being passed in.
|
||||
|
||||
@return NS_OK - Processing completed fine.
|
||||
NS_ERROR_FAILURE - Catastrophic processing failure. Event loop
|
||||
should die immediately.
|
||||
*/
|
||||
void PostTranslate(in nsIEvent msg, in boolean fTranslateHandled);
|
||||
};
|
||||
Reference in New Issue
Block a user