mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 857884 - Use dom::EventTarget more in content/ and dom/ Part 3 r=Ms2ger
This commit is contained in:
parent
6e22249506
commit
045fad43d6
@ -580,14 +580,12 @@ nsXBLService::AttachGlobalKeyHandler(EventTarget* aTarget)
|
||||
// the listener already exists, so skip this
|
||||
if (contentNode && contentNode->GetProperty(nsGkAtoms::listener))
|
||||
return NS_OK;
|
||||
|
||||
|
||||
nsCOMPtr<nsIDOMElement> elt(do_QueryInterface(contentNode));
|
||||
|
||||
// Create the key handler
|
||||
nsXBLWindowKeyHandler* handler;
|
||||
NS_NewXBLWindowKeyHandler(elt, piTarget, &handler); // This addRef's
|
||||
if (!handler)
|
||||
return NS_ERROR_FAILURE;
|
||||
nsRefPtr<nsXBLWindowKeyHandler> handler =
|
||||
NS_NewXBLWindowKeyHandler(elt, piTarget);
|
||||
|
||||
// listen to these events
|
||||
manager->AddEventListenerByType(handler, NS_LITERAL_STRING("keydown"),
|
||||
@ -598,12 +596,11 @@ nsXBLService::AttachGlobalKeyHandler(EventTarget* aTarget)
|
||||
dom::TrustedEventsAtSystemGroupBubble());
|
||||
|
||||
if (contentNode)
|
||||
return contentNode->SetProperty(nsGkAtoms::listener, handler,
|
||||
return contentNode->SetProperty(nsGkAtoms::listener, handler.forget().get(),
|
||||
nsPropertyTable::SupportsDtorFunc, true);
|
||||
|
||||
// release the handler. The reference will be maintained by the event target,
|
||||
// The reference to the handler will be maintained by the event target,
|
||||
// and, if there is a content node, the property.
|
||||
NS_RELEASE(handler);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -165,7 +165,7 @@ nsXBLSpecialDocInfo* nsXBLWindowKeyHandler::sXBLSpecialDocInfo = nullptr;
|
||||
uint32_t nsXBLWindowKeyHandler::sRefCnt = 0;
|
||||
|
||||
nsXBLWindowKeyHandler::nsXBLWindowKeyHandler(nsIDOMElement* aElement,
|
||||
nsIDOMEventTarget* aTarget)
|
||||
EventTarget* aTarget)
|
||||
: mTarget(aTarget),
|
||||
mHandler(nullptr),
|
||||
mUserHandler(nullptr)
|
||||
@ -234,7 +234,7 @@ BuildHandlerChain(nsIContent* aContent, nsXBLPrototypeHandler** aResult)
|
||||
nsresult
|
||||
nsXBLWindowKeyHandler::EnsureHandlers(bool *aIsEditor)
|
||||
{
|
||||
nsCOMPtr<nsIDOMElement> el = GetElement();
|
||||
nsCOMPtr<Element> el = GetElement();
|
||||
NS_ENSURE_STATE(!mWeakPtrForElement || el);
|
||||
if (el) {
|
||||
// We are actually a XUL <keyset>.
|
||||
@ -316,8 +316,8 @@ nsXBLWindowKeyHandler::WalkHandlers(nsIDOMKeyEvent* aKeyEvent, nsIAtom* aEventTy
|
||||
bool isEditor;
|
||||
nsresult rv = EnsureHandlers(&isEditor);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIDOMElement> el = GetElement();
|
||||
|
||||
nsCOMPtr<Element> el = GetElement();
|
||||
if (!el) {
|
||||
if (mUserHandler) {
|
||||
WalkHandlersInternal(aKeyEvent, aEventType, mUserHandler);
|
||||
@ -500,10 +500,10 @@ nsXBLWindowKeyHandler::WalkHandlersAndExecute(nsIDOMKeyEvent* aKeyEvent,
|
||||
// and that it has something to do (oncommand of the <key> or its
|
||||
// <command> is non-empty).
|
||||
nsCOMPtr<nsIContent> elt = currHandler->GetHandlerElement();
|
||||
nsCOMPtr<nsIDOMElement> commandElt;
|
||||
nsCOMPtr<Element> commandElt;
|
||||
|
||||
// See if we're in a XUL doc.
|
||||
nsCOMPtr<nsIDOMElement> el = GetElement();
|
||||
nsCOMPtr<Element> el = GetElement();
|
||||
if (el && elt) {
|
||||
// We are. Obtain our command attribute.
|
||||
nsAutoString command;
|
||||
@ -542,11 +542,11 @@ nsXBLWindowKeyHandler::WalkHandlersAndExecute(nsIDOMKeyEvent* aKeyEvent,
|
||||
}
|
||||
|
||||
nsCOMPtr<EventTarget> piTarget;
|
||||
nsCOMPtr<nsIDOMElement> element = GetElement();
|
||||
nsCOMPtr<Element> element = GetElement();
|
||||
if (element) {
|
||||
piTarget = do_QueryInterface(commandElt);
|
||||
piTarget = commandElt;
|
||||
} else {
|
||||
piTarget = do_QueryInterface(mTarget);
|
||||
piTarget = mTarget;
|
||||
}
|
||||
|
||||
rv = currHandler->ExecuteHandler(piTarget, aKeyEvent);
|
||||
@ -558,24 +558,19 @@ nsXBLWindowKeyHandler::WalkHandlersAndExecute(nsIDOMKeyEvent* aKeyEvent,
|
||||
return false;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMElement>
|
||||
already_AddRefed<Element>
|
||||
nsXBLWindowKeyHandler::GetElement()
|
||||
{
|
||||
nsCOMPtr<nsIDOMElement> element = do_QueryReferent(mWeakPtrForElement);
|
||||
nsIDOMElement* el = nullptr;
|
||||
element.swap(el);
|
||||
return el;
|
||||
nsCOMPtr<Element> element = do_QueryReferent(mWeakPtrForElement);
|
||||
return element.forget();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsresult
|
||||
NS_NewXBLWindowKeyHandler(nsIDOMElement* aElement, nsIDOMEventTarget* aTarget,
|
||||
nsXBLWindowKeyHandler** aResult)
|
||||
already_AddRefed<nsXBLWindowKeyHandler>
|
||||
NS_NewXBLWindowKeyHandler(nsIDOMElement* aElement, EventTarget* aTarget)
|
||||
{
|
||||
*aResult = new nsXBLWindowKeyHandler(aElement, aTarget);
|
||||
if (!*aResult)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
NS_ADDREF(*aResult);
|
||||
return NS_OK;
|
||||
nsRefPtr<nsXBLWindowKeyHandler> result =
|
||||
new nsXBLWindowKeyHandler(aElement, aTarget);
|
||||
return result.forget();
|
||||
}
|
||||
|
@ -17,10 +17,17 @@ class nsIDOMEventTarget;
|
||||
class nsXBLSpecialDocInfo;
|
||||
class nsXBLPrototypeHandler;
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
class Element;
|
||||
class EventTarget;
|
||||
}
|
||||
}
|
||||
|
||||
class nsXBLWindowKeyHandler : public nsIDOMEventListener
|
||||
{
|
||||
public:
|
||||
nsXBLWindowKeyHandler(nsIDOMElement* aElement, nsIDOMEventTarget* aTarget);
|
||||
nsXBLWindowKeyHandler(nsIDOMElement* aElement, mozilla::dom::EventTarget* aTarget);
|
||||
virtual ~nsXBLWindowKeyHandler();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
@ -56,10 +63,10 @@ protected:
|
||||
|
||||
// Returns the element which was passed as a parameter to the constructor,
|
||||
// unless the element has been removed from the document.
|
||||
already_AddRefed<nsIDOMElement> GetElement();
|
||||
already_AddRefed<mozilla::dom::Element> GetElement();
|
||||
// Using weak pointer to the DOM Element.
|
||||
nsWeakPtr mWeakPtrForElement;
|
||||
nsIDOMEventTarget* mTarget; // weak ref
|
||||
mozilla::dom::EventTarget* mTarget; // weak ref
|
||||
|
||||
// these are not owning references; the prototype handlers are owned
|
||||
// by the prototype bindings which are owned by the docinfo.
|
||||
@ -71,9 +78,8 @@ protected:
|
||||
static uint32_t sRefCnt;
|
||||
};
|
||||
|
||||
nsresult
|
||||
already_AddRefed<nsXBLWindowKeyHandler>
|
||||
NS_NewXBLWindowKeyHandler(nsIDOMElement* aElement,
|
||||
nsIDOMEventTarget* aTarget,
|
||||
nsXBLWindowKeyHandler** aResult);
|
||||
mozilla::dom::EventTarget* aTarget);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user