diff --git a/mozilla/editor/libeditor/base/nsEditor.cpp b/mozilla/editor/libeditor/base/nsEditor.cpp index 27614487156..d32cdc6f7d1 100644 --- a/mozilla/editor/libeditor/base/nsEditor.cpp +++ b/mozilla/editor/libeditor/base/nsEditor.cpp @@ -43,6 +43,7 @@ #include "nsIDOMHTMLDocument.h" #include "nsIDOMHTMLElement.h" #include "nsIDOMEventReceiver.h" +#include "nsIEventListenerManager.h" #include "nsIPrefBranch.h" #include "nsIPrefService.h" #include "nsUnicharUtils.h" @@ -56,7 +57,6 @@ #include "nsIDOMNamedNodeMap.h" #include "nsIDOMNodeList.h" #include "nsIDOMRange.h" -#include "nsIDOM3EventTarget.h" #include "nsIDOMEventListener.h" #include "nsIDOMEventGroup.h" #include "nsIDOMMouseListener.h" @@ -160,7 +160,6 @@ nsEditor::nsEditor() , mActionListeners(nsnull) , mEditorObservers(nsnull) , mDocDirtyState(-1) -, mGotDOMEventReceiver(PR_FALSE) , mDocWeak(nsnull) , mPhonetic(nsnull) { @@ -360,15 +359,19 @@ nsEditor::InstallEventListeners() nsresult rv = NS_OK; - // register the event listeners with the DOM event reveiver - nsCOMPtr dom3Targ(do_QueryInterface(erP)); + // register the event listeners with the listener manager nsCOMPtr sysGroup; erP->GetSystemEventGroup(getter_AddRefs(sysGroup)); + nsCOMPtr elmP; + erP->GetListenerManager(getter_AddRefs(elmP)); - if (sysGroup) + if (sysGroup && elmP) { - rv = dom3Targ->AddGroupedEventListener(NS_LITERAL_STRING("keypress"), - mKeyListenerP, PR_FALSE, sysGroup); + rv = elmP->AddEventListenerByType(mKeyListenerP, + NS_LITERAL_STRING("keypress"), + NS_EVENT_FLAG_BUBBLE | + NS_PRIV_EVENT_UNTRUSTED_PERMITTED, + sysGroup); NS_ASSERTION(NS_SUCCEEDED(rv), "failed to register key listener in system group"); } @@ -411,13 +414,15 @@ nsEditor::RemoveEventListeners() { nsCOMPtr sysGroup; erP->GetSystemEventGroup(getter_AddRefs(sysGroup)); - if (sysGroup) + nsCOMPtr elmP; + erP->GetListenerManager(getter_AddRefs(elmP)); + if (sysGroup && elmP) { - nsCOMPtr dom3Targ(do_QueryInterface(erP)); - - dom3Targ->RemoveGroupedEventListener(NS_LITERAL_STRING("keypress"), - mKeyListenerP, PR_FALSE, - sysGroup); + elmP->RemoveEventListenerByType(mKeyListenerP, + NS_LITERAL_STRING("keypress"), + NS_EVENT_FLAG_BUBBLE | + NS_PRIV_EVENT_UNTRUSTED_PERMITTED, + sysGroup); } } @@ -5330,59 +5335,33 @@ nsEditor::HandleInlineSpellCheck(PRInt32 action, already_AddRefed nsEditor::GetDOMEventReceiver() { - if (mDOMEventReceiver) + nsIDOMEventReceiver *erp = mDOMEventReceiver; + if (erp) { - nsIDOMEventReceiver *erp = mDOMEventReceiver; NS_ADDREF(erp); return erp; - } - - nsIDOMEventReceiver *erp = nsnull; - - if (!mGotDOMEventReceiver) - { - // Look for one - nsIDOMElement *rootElement = GetRoot(); - - // Now hack to make sure we are not anonymous content. - // If we are grab the parent of root element for our observer. - - nsCOMPtr content = do_QueryInterface(rootElement); - - if (content) - { - nsIContent* parent = content->GetParent(); - if (parent) - { - if (parent->IndexOf(content) < 0) - { - // this will put listener on the form element basically - CallQueryInterface(parent, &erp); - } - } - } } - if (!erp) + nsIDOMElement *rootElement = GetRoot(); + + // Now hack to make sure we are not anonymous content. + // If we are grab the parent of root element for our observer. + + nsCOMPtr content = do_QueryInterface(rootElement); + + if (content && content->IsNativeAnonymous()) + { + mDOMEventReceiver = do_QueryInterface(content->GetParent()); + erp = mDOMEventReceiver; + NS_IF_ADDREF(erp); + } + else { // Don't use getDocument here, because we have no way of knowing // if Init() was ever called. So we need to get the document // ourselves, if it exists. - - nsCOMPtr domdoc = do_QueryReferent(mDocWeak); - if (domdoc) - { - CallQueryInterface(domdoc, &erp); - } + CallQueryReferent(mDocWeak.get(), &erp); } - else - { - // We got a DOM event receiver from our content. Cache it. - mDOMEventReceiver = erp; - } - - // If we found something, make a note of that. - mGotDOMEventReceiver = mGotDOMEventReceiver || erp; return erp; } diff --git a/mozilla/editor/libeditor/base/nsEditor.h b/mozilla/editor/libeditor/base/nsEditor.h index 9854c54e0d3..6108a530710 100644 --- a/mozilla/editor/libeditor/base/nsEditor.h +++ b/mozilla/editor/libeditor/base/nsEditor.h @@ -617,12 +617,8 @@ protected: nsCOMPtr mDocStateListeners;// listen to overall doc state (dirty or not, just created, etc) PRInt8 mDocDirtyState; // -1 = not initialized - PRPackedBool mGotDOMEventReceiver; // True if we've gotten our DOMEventReceiver once nsWeakPtr mDocWeak; // weak reference to the nsIDOMDocument - // When mGotDOMEventReceiver is set, a null mDOMEventReceiver means we didn't - // find one (and hence should be using the document). We cache the event - // receiver when we get it off anonymous content because during document - // teardown the anonymous content can get unhooked before we get unhooked. + // The form field as an event receiver nsCOMPtr mDOMEventReceiver; nsString* mPhonetic;