1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /* ***** BEGIN LICENSE BLOCK *****
3 : * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 : *
5 : * The contents of this file are subject to the Mozilla Public License Version
6 : * 1.1 (the "License"); you may not use this file except in compliance with
7 : * the License. You may obtain a copy of the License at
8 : * http://www.mozilla.org/MPL/
9 : *
10 : * Software distributed under the License is distributed on an "AS IS" basis,
11 : * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 : * for the specific language governing rights and limitations under the
13 : * License.
14 : *
15 : * The Original Code is mozilla.org code.
16 : *
17 : * The Initial Developer of the Original Code is
18 : * Netscape Communications Corporation.
19 : * Portions created by the Initial Developer are Copyright (C) 1998
20 : * the Initial Developer. All Rights Reserved.
21 : *
22 : * Contributor(s):
23 : * Original Author: David W. Hyatt (hyatt@netscape.com)
24 : *
25 : * Alternatively, the contents of this file may be used under the terms of
26 : * either of the GNU General Public License Version 2 or later (the "GPL"),
27 : * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28 : * in which case the provisions of the GPL or the LGPL are applicable instead
29 : * of those above. If you wish to allow use of your version of this file only
30 : * under the terms of either the GPL or the LGPL, and not to allow others to
31 : * use your version of this file under the terms of the MPL, indicate your
32 : * decision by deleting the provisions above and replace them with the notice
33 : * and other provisions required by the GPL or the LGPL. If you do not delete
34 : * the provisions above, a recipient may use your version of this file under
35 : * the terms of any one of the MPL, the GPL or the LGPL.
36 : *
37 : * ***** END LICENSE BLOCK ***** */
38 :
39 :
40 : /*
41 :
42 : This is the focus manager for XUL documents.
43 :
44 : */
45 :
46 : #ifndef nsXULCommandDispatcher_h__
47 : #define nsXULCommandDispatcher_h__
48 :
49 : #include "nsCOMPtr.h"
50 : #include "nsIDOMXULCommandDispatcher.h"
51 : #include "nsWeakReference.h"
52 : #include "nsIDOMNode.h"
53 : #include "nsString.h"
54 : #include "nsCycleCollectionParticipant.h"
55 :
56 : class nsIDOMElement;
57 : class nsPIWindowRoot;
58 :
59 : class nsXULCommandDispatcher : public nsIDOMXULCommandDispatcher,
60 : public nsSupportsWeakReference
61 : {
62 : public:
63 : nsXULCommandDispatcher(nsIDocument* aDocument);
64 : virtual ~nsXULCommandDispatcher();
65 :
66 : // nsISupports
67 0 : NS_DECL_CYCLE_COLLECTING_ISUPPORTS
68 1464 : NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsXULCommandDispatcher,
69 : nsIDOMXULCommandDispatcher)
70 :
71 : // nsIDOMXULCommandDispatcher interface
72 : NS_DECL_NSIDOMXULCOMMANDDISPATCHER
73 :
74 : void Disconnect();
75 : protected:
76 : already_AddRefed<nsPIWindowRoot> GetWindowRoot();
77 :
78 : nsIContent* GetRootFocusedContentAndWindow(nsPIDOMWindow** aWindow);
79 :
80 : nsCOMPtr<nsIDocument> mDocument;
81 :
82 0 : class Updater {
83 : public:
84 0 : Updater(nsIDOMElement* aElement,
85 : const nsAString& aEvents,
86 : const nsAString& aTargets)
87 : : mElement(aElement),
88 : mEvents(aEvents),
89 : mTargets(aTargets),
90 0 : mNext(nsnull)
91 0 : {}
92 :
93 : nsCOMPtr<nsIDOMElement> mElement;
94 : nsString mEvents;
95 : nsString mTargets;
96 : Updater* mNext;
97 : };
98 :
99 : Updater* mUpdaters;
100 :
101 : bool Matches(const nsString& aList,
102 : const nsAString& aElement);
103 : };
104 :
105 : #endif // nsXULCommandDispatcher_h__
|