diff options
author | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-08-06 08:52:49 +0000 |
---|---|---|
committer | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-08-06 09:57:37 +0000 |
commit | 80e4577e3b10245164d6a2c2416772b2819a9f6a (patch) | |
tree | 1edde1c509f306766cda56172f6f46cbbb9d9744 /dom/events/EventListenerManager.cpp | |
parent | f5c848aa9b73ccaebd42dacaccfe7f2568ede343 (diff) | |
download | UXP-80e4577e3b10245164d6a2c2416772b2819a9f6a.tar UXP-80e4577e3b10245164d6a2c2416772b2819a9f6a.tar.gz UXP-80e4577e3b10245164d6a2c2416772b2819a9f6a.tar.lz UXP-80e4577e3b10245164d6a2c2416772b2819a9f6a.tar.xz UXP-80e4577e3b10245164d6a2c2416772b2819a9f6a.zip |
Issue #1118 Part 3: Add a public RemoveAllListeners method on
EventListenerManager.
Diffstat (limited to 'dom/events/EventListenerManager.cpp')
-rw-r--r-- | dom/events/EventListenerManager.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/dom/events/EventListenerManager.cpp b/dom/events/EventListenerManager.cpp index fe896870c..0774c3296 100644 --- a/dom/events/EventListenerManager.cpp +++ b/dom/events/EventListenerManager.cpp @@ -166,11 +166,11 @@ EventListenerManager::~EventListenerManager() // XXX azakai: Is there any reason to not just call Disconnect // from right here, if not previously called? NS_ASSERTION(!mTarget, "didn't call Disconnect"); - RemoveAllListeners(); + RemoveAllListenersSilently(); } void -EventListenerManager::RemoveAllListeners() +EventListenerManager::RemoveAllListenersSilently() { if (mClearingListeners) { return; @@ -1329,7 +1329,7 @@ void EventListenerManager::Disconnect() { mTarget = nullptr; - RemoveAllListeners(); + RemoveAllListenersSilently(); } void @@ -1734,6 +1734,21 @@ EventListenerManager::IsApzAwareEvent(nsIAtom* aEvent) return false; } +void +EventListenerManager::RemoveAllListeners() +{ + while (!mListeners.IsEmpty()) { + size_t idx = mListeners.Length() - 1; + nsCOMPtr<nsIAtom> type = mListeners.ElementAt(idx).mTypeAtom; + EventMessage message = mListeners.ElementAt(idx).mEventMessage; + mListeners.RemoveElementAt(idx); + NotifyEventListenerRemoved(type); + if (IsDeviceType(message)) { + DisableDevice(message); + } + } +} + already_AddRefed<nsIScriptGlobalObject> EventListenerManager::GetScriptGlobalAndDocument(nsIDocument** aDoc) { |