summaryrefslogtreecommitdiffstats
path: root/accessible/android/RootAccessibleWrap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'accessible/android/RootAccessibleWrap.cpp')
-rw-r--r--accessible/android/RootAccessibleWrap.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/accessible/android/RootAccessibleWrap.cpp b/accessible/android/RootAccessibleWrap.cpp
new file mode 100644
index 0000000000..d21aed39ba
--- /dev/null
+++ b/accessible/android/RootAccessibleWrap.cpp
@@ -0,0 +1,69 @@
+/* -*- Mode: c++; c-basic-offset: 2; tab-width: 20; indent-tabs-mode: nil; -*-
+ * 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 "RootAccessibleWrap.h"
+
+#include "LocalAccessible-inl.h"
+
+#include "DocAccessibleParent.h"
+#include "DocAccessible-inl.h"
+#include "SessionAccessibility.h"
+#include "mozilla/PresShell.h"
+#include "mozilla/dom/EventTarget.h"
+#include "mozilla/dom/Event.h"
+#include "mozilla/dom/MouseEvent.h"
+
+using namespace mozilla;
+using namespace mozilla::a11y;
+using namespace mozilla::dom;
+
+RootAccessibleWrap::RootAccessibleWrap(dom::Document* aDoc,
+ PresShell* aPresShell)
+ : RootAccessible(aDoc, aPresShell) {}
+
+RootAccessibleWrap::~RootAccessibleWrap() {}
+
+nsresult RootAccessibleWrap::AddEventListeners() {
+ nsPIDOMWindowOuter* window = mDocumentNode->GetWindow();
+ nsCOMPtr<EventTarget> nstarget = window ? window->GetParentTarget() : nullptr;
+
+ if (nstarget) {
+ nstarget->AddEventListener(u"MozMouseExploreByTouch"_ns, this, false, true);
+ }
+
+ return RootAccessible::AddEventListeners();
+}
+
+nsresult RootAccessibleWrap::RemoveEventListeners() {
+ nsPIDOMWindowOuter* window = mDocumentNode->GetWindow();
+ nsCOMPtr<EventTarget> nstarget = window ? window->GetParentTarget() : nullptr;
+ if (nstarget) {
+ nstarget->RemoveEventListener(u"MozMouseExploreByTouch"_ns, this, true);
+ }
+
+ return RootAccessible::RemoveEventListeners();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// nsIDOMEventListener
+
+NS_IMETHODIMP
+RootAccessibleWrap::HandleEvent(Event* aDOMEvent) {
+ WidgetMouseEvent* widgetEvent = aDOMEvent->WidgetEventPtr()->AsMouseEvent();
+ if (widgetEvent && widgetEvent->mMessage == eMouseExploreByTouch) {
+ if (HasShutdown()) {
+ return NS_OK;
+ }
+
+ if (MouseEvent* mouseEvent = aDOMEvent->AsMouseEvent()) {
+ LayoutDeviceIntPoint point = mouseEvent->ScreenPointLayoutDevicePix();
+ ExploreByTouch(point.x, point.y);
+ }
+
+ return NS_OK;
+ }
+
+ return RootAccessible::HandleEvent(aDOMEvent);
+}