summaryrefslogtreecommitdiffstats
path: root/widget/MiscEvents.h
diff options
context:
space:
mode:
Diffstat (limited to 'widget/MiscEvents.h')
-rw-r--r--widget/MiscEvents.h150
1 files changed, 150 insertions, 0 deletions
diff --git a/widget/MiscEvents.h b/widget/MiscEvents.h
new file mode 100644
index 0000000000..44c9d771e2
--- /dev/null
+++ b/widget/MiscEvents.h
@@ -0,0 +1,150 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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/. */
+
+#ifndef mozilla_MiscEvents_h__
+#define mozilla_MiscEvents_h__
+
+#include <stdint.h>
+
+#include "mozilla/BasicEvents.h"
+#include "mozilla/Maybe.h"
+#include "nsCOMPtr.h"
+#include "nsAtom.h"
+#include "nsGkAtoms.h"
+#include "nsITransferable.h"
+#include "nsString.h"
+
+namespace mozilla {
+
+namespace dom {
+class PBrowserParent;
+class PBrowserChild;
+} // namespace dom
+
+/******************************************************************************
+ * mozilla::WidgetContentCommandEvent
+ ******************************************************************************/
+
+class WidgetContentCommandEvent : public WidgetGUIEvent {
+ public:
+ virtual WidgetContentCommandEvent* AsContentCommandEvent() override {
+ return this;
+ }
+
+ WidgetContentCommandEvent(bool aIsTrusted, EventMessage aMessage,
+ nsIWidget* aWidget, bool aOnlyEnabledCheck = false)
+ : WidgetGUIEvent(aIsTrusted, aMessage, aWidget,
+ eContentCommandEventClass),
+ mOnlyEnabledCheck(aOnlyEnabledCheck),
+ mSucceeded(false),
+ mIsEnabled(false) {}
+
+ virtual WidgetEvent* Duplicate() const override {
+ // This event isn't an internal event of any DOM event.
+ NS_ASSERTION(!IsAllowedToDispatchDOMEvent(),
+ "WidgetQueryContentEvent needs to support Duplicate()");
+ MOZ_CRASH("WidgetQueryContentEvent doesn't support Duplicate()");
+ return nullptr;
+ }
+
+ // eContentCommandInsertText
+ mozilla::Maybe<nsString> mString; // [in]
+
+ // eContentCommandPasteTransferable
+ nsCOMPtr<nsITransferable> mTransferable; // [in]
+
+ // eContentCommandScroll
+ // for mScroll.mUnit
+ enum { eCmdScrollUnit_Line, eCmdScrollUnit_Page, eCmdScrollUnit_Whole };
+
+ struct ScrollInfo {
+ ScrollInfo()
+ : mAmount(0), mUnit(eCmdScrollUnit_Line), mIsHorizontal(false) {}
+
+ int32_t mAmount; // [in]
+ uint8_t mUnit; // [in]
+ bool mIsHorizontal; // [in]
+ } mScroll;
+
+ bool mOnlyEnabledCheck; // [in]
+
+ bool mSucceeded; // [out]
+ bool mIsEnabled; // [out]
+
+ void AssignContentCommandEventData(const WidgetContentCommandEvent& aEvent,
+ bool aCopyTargets) {
+ AssignGUIEventData(aEvent, aCopyTargets);
+
+ mString = aEvent.mString;
+ mScroll = aEvent.mScroll;
+ mOnlyEnabledCheck = aEvent.mOnlyEnabledCheck;
+ mSucceeded = aEvent.mSucceeded;
+ mIsEnabled = aEvent.mIsEnabled;
+ }
+};
+
+/******************************************************************************
+ * mozilla::WidgetCommandEvent
+ *
+ * This sends a command to chrome. If you want to request what is performed
+ * in focused content, you should use WidgetContentCommandEvent instead.
+ *
+ * XXX Should be |WidgetChromeCommandEvent|?
+ ******************************************************************************/
+
+class WidgetCommandEvent : public WidgetGUIEvent {
+ public:
+ virtual WidgetCommandEvent* AsCommandEvent() override { return this; }
+
+ protected:
+ WidgetCommandEvent(bool aIsTrusted, nsAtom* aEventType, nsAtom* aCommand,
+ nsIWidget* aWidget, const WidgetEventTime* aTime = nullptr)
+ : WidgetGUIEvent(aIsTrusted, eUnidentifiedEvent, aWidget,
+ eCommandEventClass, aTime),
+ mCommand(aCommand) {
+ mSpecifiedEventType = aEventType;
+ }
+
+ public:
+ /**
+ * Constructor to initialize an app command. This is the only case to
+ * initialize this class as a command in C++ stack.
+ */
+ WidgetCommandEvent(bool aIsTrusted, nsAtom* aCommand, nsIWidget* aWidget,
+ const WidgetEventTime* aTime = nullptr)
+ : WidgetCommandEvent(aIsTrusted, nsGkAtoms::onAppCommand, aCommand,
+ aWidget, aTime) {}
+
+ /**
+ * Constructor to initialize as internal event of dom::CommandEvent.
+ */
+ WidgetCommandEvent()
+ : WidgetCommandEvent(false, nullptr, nullptr, nullptr, nullptr) {}
+
+ virtual WidgetEvent* Duplicate() const override {
+ MOZ_ASSERT(mClass == eCommandEventClass,
+ "Duplicate() must be overridden by sub class");
+ // Not copying widget, it is a weak reference.
+ WidgetCommandEvent* result = new WidgetCommandEvent(
+ false, mSpecifiedEventType, mCommand, nullptr, this);
+ result->AssignCommandEventData(*this, true);
+ result->mFlags = mFlags;
+ return result;
+ }
+
+ RefPtr<nsAtom> mCommand;
+
+ // XXX Not tested by test_assign_event_data.html
+ void AssignCommandEventData(const WidgetCommandEvent& aEvent,
+ bool aCopyTargets) {
+ AssignGUIEventData(aEvent, aCopyTargets);
+
+ // mCommand must have been initialized with the constructor.
+ }
+};
+
+} // namespace mozilla
+
+#endif // mozilla_MiscEvents_h__