sbBaseDeviceEventTarget.h
Go to the documentation of this file.
1 /* vim: set sw=2 :miv */
2 /*
3 //
4 // BEGIN SONGBIRD GPL
5 //
6 // This file is part of the Songbird web player.
7 //
8 // Copyright(c) 2005-2008 POTI, Inc.
9 // http://songbirdnest.com
10 //
11 // This file may be licensed under the terms of of the
12 // GNU General Public License Version 2 (the "GPL").
13 //
14 // Software distributed under the License is distributed
15 // on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
16 // express or implied. See the GPL for the specific language
17 // governing rights and limitations.
18 //
19 // You should have received a copy of the GPL along with this
20 // program. If not, go to http://www.gnu.org/licenses/gpl.html
21 // or write to the Free Software Foundation, Inc.,
22 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23 //
24 // END SONGBIRD GPL
25 //
26 */
27 #ifndef SBBASEDEVICEEVENTTARGET_H
28 #define SBBASEDEVICEEVENTTARGET_H
29 
30 #include "sbIDeviceEventTarget.h"
31 
32 #include <nsCOMArray.h>
33 #include <nsDeque.h>
34 #include <nsWeakReference.h>
35 #include <prmon.h>
36 
38 
46 {
47 public:
50 
51 protected:
52  virtual ~sbBaseDeviceEventTarget();
53 
54 protected:
55  nsresult DispatchEventInternal(nsCOMPtr<sbIDeviceEvent> aEvent);
56 
57 protected:
58  // the listener array should always be accessed from the main thread
59  nsCOMArray<sbIDeviceEventListener> mListeners;
60 
61  struct DispatchState {
62  // these are indices into mListeners
63  PRInt32 index; // the currently processing listener index
64  PRInt32 length; // the number of listeners at the start of this dispatch
65  };
66  // our stack of states (holds *pointers* to DispatchStates)
67  nsDeque mStates;
69 
70  nsCOMPtr<nsIWeakReference> mParentEventTarget;
71 
72 private:
73  PRMonitor* mMonitor;
74 };
75 
76 #endif
77 
nsCOMPtr< nsIWeakReference > mParentEventTarget
nsresult DispatchEventInternal(nsCOMPtr< sbIDeviceEvent > aEvent)
nsCOMArray< sbIDeviceEventListener > mListeners