mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-24 18:55:30 +00:00
c38e071dbe
This is for adding a pref that will allow web content to have key listeners and use keyboard APZ, if they are marked passive. This commit also reworks the function names and comments to make them more accurate. MozReview-Commit-ID: LGDaVQOK1CS --HG-- extra : rebase_source : a6bb4b7fff3488dea62b9114aa164814c74561a4
93 lines
2.7 KiB
C++
93 lines
2.7 KiB
C++
/* -*- 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/. */
|
|
|
|
#include "mozilla/EventListenerManager.h"
|
|
#include "mozilla/dom/EventTarget.h"
|
|
#include "mozilla/dom/EventTargetBinding.h"
|
|
#include "nsThreadUtils.h"
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
void
|
|
EventTarget::RemoveEventListener(const nsAString& aType,
|
|
EventListener* aListener,
|
|
const EventListenerOptionsOrBoolean& aOptions,
|
|
ErrorResult& aRv)
|
|
{
|
|
EventListenerManager* elm = GetExistingListenerManager();
|
|
if (elm) {
|
|
elm->RemoveEventListener(aType, aListener, aOptions);
|
|
}
|
|
}
|
|
|
|
EventHandlerNonNull*
|
|
EventTarget::GetEventHandler(nsIAtom* aType, const nsAString& aTypeString)
|
|
{
|
|
EventListenerManager* elm = GetExistingListenerManager();
|
|
return elm ? elm->GetEventHandler(aType, aTypeString) : nullptr;
|
|
}
|
|
|
|
void
|
|
EventTarget::SetEventHandler(const nsAString& aType,
|
|
EventHandlerNonNull* aHandler,
|
|
ErrorResult& aRv)
|
|
{
|
|
if (!StringBeginsWith(aType, NS_LITERAL_STRING("on"))) {
|
|
aRv.Throw(NS_ERROR_INVALID_ARG);
|
|
return;
|
|
}
|
|
if (NS_IsMainThread()) {
|
|
nsCOMPtr<nsIAtom> type = NS_Atomize(aType);
|
|
SetEventHandler(type, EmptyString(), aHandler);
|
|
return;
|
|
}
|
|
SetEventHandler(nullptr,
|
|
Substring(aType, 2), // Remove "on"
|
|
aHandler);
|
|
}
|
|
|
|
void
|
|
EventTarget::SetEventHandler(nsIAtom* aType, const nsAString& aTypeString,
|
|
EventHandlerNonNull* aHandler)
|
|
{
|
|
GetOrCreateListenerManager()->SetEventHandler(aType, aTypeString, aHandler);
|
|
}
|
|
|
|
bool
|
|
EventTarget::HasNonSystemGroupListenersForUntrustedKeyEvents() const
|
|
{
|
|
EventListenerManager* elm = GetExistingListenerManager();
|
|
return elm && elm->HasNonSystemGroupListenersForUntrustedKeyEvents();
|
|
}
|
|
|
|
bool
|
|
EventTarget::HasNonPassiveNonSystemGroupListenersForUntrustedKeyEvents() const
|
|
{
|
|
EventListenerManager* elm = GetExistingListenerManager();
|
|
return elm && elm->HasNonPassiveNonSystemGroupListenersForUntrustedKeyEvents();
|
|
}
|
|
|
|
bool
|
|
EventTarget::IsApzAware() const
|
|
{
|
|
EventListenerManager* elm = GetExistingListenerManager();
|
|
return elm && elm->HasApzAwareListeners();
|
|
}
|
|
|
|
bool
|
|
EventTarget::DispatchEvent(Event& aEvent,
|
|
CallerType aCallerType,
|
|
ErrorResult& aRv)
|
|
{
|
|
bool result = false;
|
|
aRv = DispatchEvent(&aEvent, &result);
|
|
return !aEvent.DefaultPrevented(aCallerType);
|
|
}
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|