Bug 1358064 - Part1: Combine MaybeWindowHasSeenGamepad and FireConnectionEvent; r?daoshengmu, ted.mielczarek
MozReview-Commit-ID: Fw9I5RCE6GV
--- a/dom/gamepad/GamepadManager.cpp
+++ b/dom/gamepad/GamepadManager.cpp
@@ -295,24 +295,20 @@ GamepadManager::NewButtonEvent(uint32_t
MOZ_ASSERT(listeners[i]->IsInnerWindow());
// Only send events to non-background windows
if (!listeners[i]->AsInner()->IsCurrentInnerWindow() ||
listeners[i]->GetOuterWindow()->IsBackground()) {
continue;
}
- bool firstTime = MaybeWindowHasSeenGamepad(listeners[i], newIndex);
-
RefPtr<Gamepad> listenerGamepad = listeners[i]->GetGamepad(newIndex);
if (listenerGamepad) {
listenerGamepad->SetButton(aButton, aPressed, aTouched, aValue);
- if (firstTime) {
- FireConnectionEvent(listeners[i], listenerGamepad, true);
- }
+ MaybeFireConnectionEvent(listeners[i], newIndex);
if (mNonstandardEventsEnabled) {
// Fire event
FireButtonEvent(listeners[i], listenerGamepad, aButton, aValue);
}
}
}
}
@@ -364,24 +360,20 @@ GamepadManager::NewAxisMoveEvent(uint32_
MOZ_ASSERT(listeners[i]->IsInnerWindow());
// Only send events to non-background windows
if (!listeners[i]->AsInner()->IsCurrentInnerWindow() ||
listeners[i]->GetOuterWindow()->IsBackground()) {
continue;
}
- bool firstTime = MaybeWindowHasSeenGamepad(listeners[i], newIndex);
-
RefPtr<Gamepad> listenerGamepad = listeners[i]->GetGamepad(newIndex);
if (listenerGamepad) {
listenerGamepad->SetAxis(aAxis, aValue);
- if (firstTime) {
- FireConnectionEvent(listeners[i], listenerGamepad, true);
- }
+ MaybeFireConnectionEvent(listeners[i], newIndex);
if (mNonstandardEventsEnabled) {
// Fire event
FireAxisMoveEvent(listeners[i], listenerGamepad, aAxis, aValue);
}
}
}
}
@@ -434,24 +426,20 @@ GamepadManager::NewPoseEvent(uint32_t aI
MOZ_ASSERT(listeners[i]->IsInnerWindow());
// Only send events to non-background windows
if (!listeners[i]->AsInner()->IsCurrentInnerWindow() ||
listeners[i]->GetOuterWindow()->IsBackground()) {
continue;
}
- bool firstTime = MaybeWindowHasSeenGamepad(listeners[i], newIndex);
-
RefPtr<Gamepad> listenerGamepad = listeners[i]->GetGamepad(newIndex);
if (listenerGamepad) {
listenerGamepad->SetPose(aPose);
- if (firstTime) {
- FireConnectionEvent(listeners[i], listenerGamepad, true);
- }
+ MaybeFireConnectionEvent(listeners[i], newIndex);
}
}
}
void
GamepadManager::NewHandChangeEvent(uint32_t aIndex, GamepadServiceType aServiceType,
GamepadHand aHand)
{
@@ -477,24 +465,20 @@ GamepadManager::NewHandChangeEvent(uint3
MOZ_ASSERT(listeners[i]->IsInnerWindow());
// Only send events to non-background windows
if (!listeners[i]->AsInner()->IsCurrentInnerWindow() ||
listeners[i]->GetOuterWindow()->IsBackground()) {
continue;
}
- bool firstTime = MaybeWindowHasSeenGamepad(listeners[i], newIndex);
-
RefPtr<Gamepad> listenerGamepad = listeners[i]->GetGamepad(newIndex);
if (listenerGamepad) {
listenerGamepad->SetHand(aHand);
- if (firstTime) {
- FireConnectionEvent(listeners[i], listenerGamepad, true);
- }
+ MaybeFireConnectionEvent(listeners[i], newIndex);
}
}
}
void
GamepadManager::NewConnectionEvent(uint32_t aIndex, bool aConnected)
{
if (mShuttingDown) {
@@ -623,22 +607,24 @@ GamepadManager::GetService()
// static
bool
GamepadManager::IsAPIEnabled() {
return Preferences::GetBool(kGamepadEnabledPref, false);
}
bool
-GamepadManager::MaybeWindowHasSeenGamepad(nsGlobalWindow* aWindow, uint32_t aIndex)
+GamepadManager::MaybeFireConnectionEvent(nsGlobalWindow* aWindow, uint32_t aIndex)
{
if (!WindowHasSeenGamepad(aWindow, aIndex)) {
// This window hasn't seen this gamepad before, so
// send a connection event first.
SetWindowHasSeenGamepad(aWindow, aIndex);
+ RefPtr<Gamepad> listenerGamepad = aWindow->GetGamepad(aIndex);
+ FireConnectionEvent(aWindow, listenerGamepad, true);
return true;
}
return false;
}
bool
GamepadManager::WindowHasSeenGamepad(nsGlobalWindow* aWindow, uint32_t aIndex) const
{
--- a/dom/gamepad/GamepadManager.h
+++ b/dom/gamepad/GamepadManager.h
@@ -136,17 +136,17 @@ class GamepadManager final : public nsIO
// will be destroyed during the IPDL shutdown chain, so we
// don't need to refcount it here.
nsTArray<GamepadEventChannelChild *> mChannelChildren;
private:
nsresult Init();
- bool MaybeWindowHasSeenGamepad(nsGlobalWindow* aWindow, uint32_t aIndex);
+ bool MaybeFireConnectionEvent(nsGlobalWindow* aWindow, uint32_t aIndex);
// Returns true if we have already sent data from this gamepad
// to this window. This should only return true if the user
// explicitly interacted with a gamepad while this window
// was focused, by pressing buttons or similar actions.
bool WindowHasSeenGamepad(nsGlobalWindow* aWindow, uint32_t aIndex) const;
// Indicate that a window has received data from a gamepad.
void SetWindowHasSeenGamepad(nsGlobalWindow* aWindow, uint32_t aIndex,
bool aHasSeen = true);