diff options
Diffstat (limited to 'dom/xbl/nsXBLEventHandler.h')
-rw-r--r-- | dom/xbl/nsXBLEventHandler.h | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/dom/xbl/nsXBLEventHandler.h b/dom/xbl/nsXBLEventHandler.h new file mode 100644 index 0000000000..8c74cabdb1 --- /dev/null +++ b/dom/xbl/nsXBLEventHandler.h @@ -0,0 +1,121 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef nsXBLEventHandler_h__ +#define nsXBLEventHandler_h__ + +#include "mozilla/Attributes.h" +#include "nsCOMPtr.h" +#include "nsIDOMEventListener.h" +#include "nsTArray.h" + +class nsIAtom; +class nsIDOMKeyEvent; +class nsXBLPrototypeHandler; + +namespace mozilla { +namespace dom { +struct IgnoreModifierState; +} // namespace dom +} // namespace mozilla + +class nsXBLEventHandler : public nsIDOMEventListener +{ +public: + explicit nsXBLEventHandler(nsXBLPrototypeHandler* aHandler); + + NS_DECL_ISUPPORTS + + NS_DECL_NSIDOMEVENTLISTENER + +protected: + virtual ~nsXBLEventHandler(); + nsXBLPrototypeHandler* mProtoHandler; + +private: + nsXBLEventHandler(); + virtual bool EventMatched(nsIDOMEvent* aEvent) + { + return true; + } +}; + +class nsXBLMouseEventHandler : public nsXBLEventHandler +{ +public: + explicit nsXBLMouseEventHandler(nsXBLPrototypeHandler* aHandler); + virtual ~nsXBLMouseEventHandler(); + +private: + bool EventMatched(nsIDOMEvent* aEvent) override; +}; + +class nsXBLKeyEventHandler : public nsIDOMEventListener +{ + typedef mozilla::dom::IgnoreModifierState IgnoreModifierState; + +public: + nsXBLKeyEventHandler(nsIAtom* aEventType, uint8_t aPhase, uint8_t aType); + + NS_DECL_ISUPPORTS + + NS_DECL_NSIDOMEVENTLISTENER + + void AddProtoHandler(nsXBLPrototypeHandler* aProtoHandler) + { + mProtoHandlers.AppendElement(aProtoHandler); + } + + bool Matches(nsIAtom* aEventType, uint8_t aPhase, uint8_t aType) const + { + return (mEventType == aEventType && mPhase == aPhase && mType == aType); + } + + void GetEventName(nsAString& aString) const + { + mEventType->ToString(aString); + } + + uint8_t GetPhase() const + { + return mPhase; + } + + uint8_t GetType() const + { + return mType; + } + + void SetIsBoundToChrome(bool aIsBoundToChrome) + { + mIsBoundToChrome = aIsBoundToChrome; + } + + void SetUsingContentXBLScope(bool aUsingContentXBLScope) + { + mUsingContentXBLScope = aUsingContentXBLScope; + } + +private: + nsXBLKeyEventHandler(); + virtual ~nsXBLKeyEventHandler(); + + bool ExecuteMatchedHandlers(nsIDOMKeyEvent* aEvent, uint32_t aCharCode, + const IgnoreModifierState& aIgnoreModifierState); + + nsTArray<nsXBLPrototypeHandler*> mProtoHandlers; + nsCOMPtr<nsIAtom> mEventType; + uint8_t mPhase; + uint8_t mType; + bool mIsBoundToChrome; + bool mUsingContentXBLScope; +}; + +already_AddRefed<nsXBLEventHandler> +NS_NewXBLEventHandler(nsXBLPrototypeHandler* aHandler, + nsIAtom* aEventType); + +#endif |