diff -r 000000000000 -r 6474c204b198 widget/BasicEvents.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/widget/BasicEvents.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,1115 @@ +/* -*- 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_BasicEvents_h__ +#define mozilla_BasicEvents_h__ + +#include + +#include "mozilla/dom/EventTarget.h" +#include "nsCOMPtr.h" +#include "nsIAtom.h" +#include "nsISupportsImpl.h" +#include "nsIWidget.h" +#include "nsString.h" +#include "Units.h" + +/****************************************************************************** + * Event Struct Types + * + * TODO: Move it into mozilla namespace. + ******************************************************************************/ +enum nsEventStructType +{ + // BasicEvents.h + NS_EVENT, // WidgetEvent + NS_GUI_EVENT, // WidgetGUIEvent + NS_INPUT_EVENT, // WidgetInputEvent + NS_UI_EVENT, // InternalUIEvent + + // TextEvents.h + NS_KEY_EVENT, // WidgetKeyboardEvent + NS_COMPOSITION_EVENT, // WidgetCompositionEvent + NS_TEXT_EVENT, // WidgetTextEvent + NS_QUERY_CONTENT_EVENT, // WidgetQueryContentEvent + NS_SELECTION_EVENT, // WidgetSelectionEvent + NS_EDITOR_INPUT_EVENT, // InternalEditorInputEvent + + // MouseEvents.h + NS_MOUSE_EVENT, // WidgetMouseEvent + NS_DRAG_EVENT, // WidgetDragEvent + NS_MOUSE_SCROLL_EVENT, // WidgetMouseScrollEvent + NS_WHEEL_EVENT, // WidgetWheelEvent + NS_POINTER_EVENT, // PointerEvent + + // TouchEvents.h + NS_GESTURENOTIFY_EVENT, // WidgetGestureNotifyEvent + NS_SIMPLE_GESTURE_EVENT, // WidgetSimpleGestureEvent + NS_TOUCH_EVENT, // WidgetTouchEvent + + // ContentEvents.h + NS_SCROLLPORT_EVENT, // InternalScrollPortEvent + NS_SCROLLAREA_EVENT, // InternalScrollAreaEvent + NS_FORM_EVENT, // InternalFormEvent + NS_FOCUS_EVENT, // InternalFocusEvent + NS_CLIPBOARD_EVENT, // InternalClipboardEvent + NS_TRANSITION_EVENT, // InternalTransitionEvent + NS_ANIMATION_EVENT, // InternalAnimationEvent + + // MiscEvents.h + NS_COMMAND_EVENT, // WidgetCommandEvent + NS_CONTENT_COMMAND_EVENT, // WidgetContentCommandEvent + NS_PLUGIN_EVENT, // WidgetPluginEvent + + // InternalMutationEvent.h (dom/events) + NS_MUTATION_EVENT, // InternalMutationEvent + + // Follwoing struct type values are ugly. They indicate other struct type + // actually. However, they are used for distinguishing which DOM event + // should be created for the event. + NS_SVGZOOM_EVENT, // WidgetGUIEvent + NS_SMIL_TIME_EVENT // InternalUIEvent +}; + +/****************************************************************************** + * Messages + * + * TODO: Make them enum. + ******************************************************************************/ + +#define NS_EVENT_NULL 0 + +// This is a dummy event message for all event listener implementation in +// EventListenerManager. +#define NS_EVENT_ALL 1 + +#define NS_WINDOW_START 100 + +// Widget may be destroyed +#define NS_XUL_CLOSE (NS_WINDOW_START + 1) +// Key is pressed within a window +#define NS_KEY_PRESS (NS_WINDOW_START + 31) +// Key is released within a window +#define NS_KEY_UP (NS_WINDOW_START + 32) +// Key is pressed within a window +#define NS_KEY_DOWN (NS_WINDOW_START + 33) + +#define NS_RESIZE_EVENT (NS_WINDOW_START + 60) +#define NS_SCROLL_EVENT (NS_WINDOW_START + 61) + +// A plugin was clicked or otherwise focused. NS_PLUGIN_ACTIVATE should be +// used when the window is not active. NS_PLUGIN_FOCUS should be used when +// the window is active. In the latter case, the dispatcher of the event +// is expected to ensure that the plugin's widget is focused beforehand. +#define NS_PLUGIN_ACTIVATE (NS_WINDOW_START + 62) +#define NS_PLUGIN_FOCUS (NS_WINDOW_START + 63) + +#define NS_OFFLINE (NS_WINDOW_START + 64) +#define NS_ONLINE (NS_WINDOW_START + 65) + +// NS_BEFORERESIZE_EVENT used to be here (NS_WINDOW_START + 66) + +// Indicates that the user is either idle or active +#define NS_MOZ_USER_IDLE (NS_WINDOW_START + 67) +#define NS_MOZ_USER_ACTIVE (NS_WINDOW_START + 68) + +// The resolution at which a plugin should draw has changed, for +// example as the result of changing from a HiDPI mode to a non- +// HiDPI mode. +#define NS_PLUGIN_RESOLUTION_CHANGED (NS_WINDOW_START + 69) + +#define NS_MOUSE_MESSAGE_START 300 +#define NS_MOUSE_MOVE (NS_MOUSE_MESSAGE_START) +#define NS_MOUSE_BUTTON_UP (NS_MOUSE_MESSAGE_START + 1) +#define NS_MOUSE_BUTTON_DOWN (NS_MOUSE_MESSAGE_START + 2) +#define NS_MOUSE_ENTER (NS_MOUSE_MESSAGE_START + 22) +#define NS_MOUSE_EXIT (NS_MOUSE_MESSAGE_START + 23) +#define NS_MOUSE_DOUBLECLICK (NS_MOUSE_MESSAGE_START + 24) +#define NS_MOUSE_CLICK (NS_MOUSE_MESSAGE_START + 27) +#define NS_MOUSE_ACTIVATE (NS_MOUSE_MESSAGE_START + 30) +#define NS_MOUSE_ENTER_SYNTH (NS_MOUSE_MESSAGE_START + 31) +#define NS_MOUSE_EXIT_SYNTH (NS_MOUSE_MESSAGE_START + 32) +#define NS_MOUSE_MOZHITTEST (NS_MOUSE_MESSAGE_START + 33) +#define NS_MOUSEENTER (NS_MOUSE_MESSAGE_START + 34) +#define NS_MOUSELEAVE (NS_MOUSE_MESSAGE_START + 35) + +// Pointer spec events +#define NS_POINTER_EVENT_START 4400 +#define NS_POINTER_MOVE (NS_POINTER_EVENT_START) +#define NS_POINTER_UP (NS_POINTER_EVENT_START + 1) +#define NS_POINTER_DOWN (NS_POINTER_EVENT_START + 2) +#define NS_POINTER_OVER (NS_POINTER_EVENT_START + 22) +#define NS_POINTER_OUT (NS_POINTER_EVENT_START + 23) +#define NS_POINTER_ENTER (NS_POINTER_EVENT_START + 24) +#define NS_POINTER_LEAVE (NS_POINTER_EVENT_START + 25) +#define NS_POINTER_CANCEL (NS_POINTER_EVENT_START + 26) +#define NS_POINTER_GOT_CAPTURE (NS_POINTER_EVENT_START + 27) +#define NS_POINTER_LOST_CAPTURE (NS_POINTER_EVENT_START + 28) + +#define NS_CONTEXTMENU_MESSAGE_START 500 +#define NS_CONTEXTMENU (NS_CONTEXTMENU_MESSAGE_START) + +#define NS_STREAM_EVENT_START 1100 +#define NS_LOAD (NS_STREAM_EVENT_START) +#define NS_PAGE_UNLOAD (NS_STREAM_EVENT_START + 1) +#define NS_HASHCHANGE (NS_STREAM_EVENT_START + 2) +#define NS_IMAGE_ABORT (NS_STREAM_EVENT_START + 3) +#define NS_LOAD_ERROR (NS_STREAM_EVENT_START + 4) +#define NS_POPSTATE (NS_STREAM_EVENT_START + 5) +#define NS_BEFORE_PAGE_UNLOAD (NS_STREAM_EVENT_START + 6) +#define NS_PAGE_RESTORE (NS_STREAM_EVENT_START + 7) +#define NS_READYSTATECHANGE (NS_STREAM_EVENT_START + 8) + +#define NS_FORM_EVENT_START 1200 +#define NS_FORM_SUBMIT (NS_FORM_EVENT_START) +#define NS_FORM_RESET (NS_FORM_EVENT_START + 1) +#define NS_FORM_CHANGE (NS_FORM_EVENT_START + 2) +#define NS_FORM_SELECTED (NS_FORM_EVENT_START + 3) +#define NS_FORM_INVALID (NS_FORM_EVENT_START + 4) + +//Need separate focus/blur notifications for non-native widgets +#define NS_FOCUS_EVENT_START 1300 +#define NS_FOCUS_CONTENT (NS_FOCUS_EVENT_START) +#define NS_BLUR_CONTENT (NS_FOCUS_EVENT_START + 1) + +#define NS_DRAGDROP_EVENT_START 1400 +#define NS_DRAGDROP_ENTER (NS_DRAGDROP_EVENT_START) +#define NS_DRAGDROP_OVER (NS_DRAGDROP_EVENT_START + 1) +#define NS_DRAGDROP_EXIT (NS_DRAGDROP_EVENT_START + 2) +#define NS_DRAGDROP_DRAGDROP (NS_DRAGDROP_EVENT_START + 3) +#define NS_DRAGDROP_GESTURE (NS_DRAGDROP_EVENT_START + 4) +#define NS_DRAGDROP_DRAG (NS_DRAGDROP_EVENT_START + 5) +#define NS_DRAGDROP_END (NS_DRAGDROP_EVENT_START + 6) +#define NS_DRAGDROP_START (NS_DRAGDROP_EVENT_START + 7) +#define NS_DRAGDROP_DROP (NS_DRAGDROP_EVENT_START + 8) +#define NS_DRAGDROP_OVER_SYNTH (NS_DRAGDROP_EVENT_START + 1) +#define NS_DRAGDROP_EXIT_SYNTH (NS_DRAGDROP_EVENT_START + 2) +#define NS_DRAGDROP_LEAVE_SYNTH (NS_DRAGDROP_EVENT_START + 9) + +// Events for popups +#define NS_XUL_EVENT_START 1500 +#define NS_XUL_POPUP_SHOWING (NS_XUL_EVENT_START) +#define NS_XUL_POPUP_SHOWN (NS_XUL_EVENT_START+1) +#define NS_XUL_POPUP_HIDING (NS_XUL_EVENT_START+2) +#define NS_XUL_POPUP_HIDDEN (NS_XUL_EVENT_START+3) +// NS_XUL_COMMAND used to be here (NS_XUL_EVENT_START+4) +#define NS_XUL_BROADCAST (NS_XUL_EVENT_START+5) +#define NS_XUL_COMMAND_UPDATE (NS_XUL_EVENT_START+6) +//@} + +// Scroll events +#define NS_MOUSE_SCROLL_START 1600 +#define NS_MOUSE_SCROLL (NS_MOUSE_SCROLL_START) +#define NS_MOUSE_PIXEL_SCROLL (NS_MOUSE_SCROLL_START + 1) + +#define NS_SCROLLPORT_START 1700 +#define NS_SCROLLPORT_UNDERFLOW (NS_SCROLLPORT_START) +#define NS_SCROLLPORT_OVERFLOW (NS_SCROLLPORT_START+1) + +#define NS_MUTATION_START 1800 +#define NS_MUTATION_SUBTREEMODIFIED (NS_MUTATION_START) +#define NS_MUTATION_NODEINSERTED (NS_MUTATION_START+1) +#define NS_MUTATION_NODEREMOVED (NS_MUTATION_START+2) +#define NS_MUTATION_NODEREMOVEDFROMDOCUMENT (NS_MUTATION_START+3) +#define NS_MUTATION_NODEINSERTEDINTODOCUMENT (NS_MUTATION_START+4) +#define NS_MUTATION_ATTRMODIFIED (NS_MUTATION_START+5) +#define NS_MUTATION_CHARACTERDATAMODIFIED (NS_MUTATION_START+6) +#define NS_MUTATION_END (NS_MUTATION_START+6) + +#define NS_USER_DEFINED_EVENT 2000 + +// composition events +#define NS_COMPOSITION_EVENT_START 2200 +#define NS_COMPOSITION_START (NS_COMPOSITION_EVENT_START) +#define NS_COMPOSITION_END (NS_COMPOSITION_EVENT_START + 1) +#define NS_COMPOSITION_UPDATE (NS_COMPOSITION_EVENT_START + 2) + +// text events +#define NS_TEXT_START 2400 +#define NS_TEXT_TEXT (NS_TEXT_START) + +// UI events +#define NS_UI_EVENT_START 2500 +// this is not to be confused with NS_ACTIVATE! +#define NS_UI_ACTIVATE (NS_UI_EVENT_START) +#define NS_UI_FOCUSIN (NS_UI_EVENT_START + 1) +#define NS_UI_FOCUSOUT (NS_UI_EVENT_START + 2) + +// pagetransition events +#define NS_PAGETRANSITION_START 2700 +#define NS_PAGE_SHOW (NS_PAGETRANSITION_START + 1) +#define NS_PAGE_HIDE (NS_PAGETRANSITION_START + 2) + +// SVG events +#define NS_SVG_EVENT_START 2800 +#define NS_SVG_LOAD (NS_SVG_EVENT_START) +#define NS_SVG_UNLOAD (NS_SVG_EVENT_START + 1) +#define NS_SVG_ABORT (NS_SVG_EVENT_START + 2) +#define NS_SVG_ERROR (NS_SVG_EVENT_START + 3) +#define NS_SVG_RESIZE (NS_SVG_EVENT_START + 4) +#define NS_SVG_SCROLL (NS_SVG_EVENT_START + 5) + +// SVG Zoom events +#define NS_SVGZOOM_EVENT_START 2900 +#define NS_SVG_ZOOM (NS_SVGZOOM_EVENT_START) + +// XUL command events +#define NS_XULCOMMAND_EVENT_START 3000 +#define NS_XUL_COMMAND (NS_XULCOMMAND_EVENT_START) + +// Cut, copy, paste events +#define NS_CUTCOPYPASTE_EVENT_START 3100 +#define NS_COPY (NS_CUTCOPYPASTE_EVENT_START) +#define NS_CUT (NS_CUTCOPYPASTE_EVENT_START + 1) +#define NS_PASTE (NS_CUTCOPYPASTE_EVENT_START + 2) + +// Query the content information +#define NS_QUERY_CONTENT_EVENT_START 3200 +// Query for the selected text information, it return the selection offset, +// selection length and selected text. +#define NS_QUERY_SELECTED_TEXT (NS_QUERY_CONTENT_EVENT_START) +// Query for the text content of specified range, it returns actual lengh (if +// the specified range is too long) and the text of the specified range. +// Returns the entire text if requested length > actual length. +#define NS_QUERY_TEXT_CONTENT (NS_QUERY_CONTENT_EVENT_START + 1) +// Query for the caret rect of nth insertion point. The offset of the result is +// relative position from the top level widget. +#define NS_QUERY_CARET_RECT (NS_QUERY_CONTENT_EVENT_START + 3) +// Query for the bounding rect of a range of characters. This works on any +// valid character range given offset and length. Result is relative to top +// level widget coordinates +#define NS_QUERY_TEXT_RECT (NS_QUERY_CONTENT_EVENT_START + 4) +// Query for the bounding rect of the current focused frame. Result is relative +// to top level widget coordinates +#define NS_QUERY_EDITOR_RECT (NS_QUERY_CONTENT_EVENT_START + 5) +// Query for the current state of the content. The particular members of +// mReply that are set for each query content event will be valid on success. +#define NS_QUERY_CONTENT_STATE (NS_QUERY_CONTENT_EVENT_START + 6) +// Query for the selection in the form of a nsITransferable. +#define NS_QUERY_SELECTION_AS_TRANSFERABLE (NS_QUERY_CONTENT_EVENT_START + 7) +// Query for character at a point. This returns the character offset and its +// rect. The point is specified by Event::refPoint. +#define NS_QUERY_CHARACTER_AT_POINT (NS_QUERY_CONTENT_EVENT_START + 8) +// Query if the DOM element under Event::refPoint belongs to our widget +// or not. +#define NS_QUERY_DOM_WIDGET_HITTEST (NS_QUERY_CONTENT_EVENT_START + 9) + +// Video events +#define NS_MEDIA_EVENT_START 3300 +#define NS_LOADSTART (NS_MEDIA_EVENT_START) +#define NS_PROGRESS (NS_MEDIA_EVENT_START+1) +#define NS_SUSPEND (NS_MEDIA_EVENT_START+2) +#define NS_EMPTIED (NS_MEDIA_EVENT_START+3) +#define NS_STALLED (NS_MEDIA_EVENT_START+4) +#define NS_PLAY (NS_MEDIA_EVENT_START+5) +#define NS_PAUSE (NS_MEDIA_EVENT_START+6) +#define NS_LOADEDMETADATA (NS_MEDIA_EVENT_START+7) +#define NS_LOADEDDATA (NS_MEDIA_EVENT_START+8) +#define NS_WAITING (NS_MEDIA_EVENT_START+9) +#define NS_PLAYING (NS_MEDIA_EVENT_START+10) +#define NS_CANPLAY (NS_MEDIA_EVENT_START+11) +#define NS_CANPLAYTHROUGH (NS_MEDIA_EVENT_START+12) +#define NS_SEEKING (NS_MEDIA_EVENT_START+13) +#define NS_SEEKED (NS_MEDIA_EVENT_START+14) +#define NS_TIMEUPDATE (NS_MEDIA_EVENT_START+15) +#define NS_ENDED (NS_MEDIA_EVENT_START+16) +#define NS_RATECHANGE (NS_MEDIA_EVENT_START+17) +#define NS_DURATIONCHANGE (NS_MEDIA_EVENT_START+18) +#define NS_VOLUMECHANGE (NS_MEDIA_EVENT_START+19) + +// paint notification events +#define NS_NOTIFYPAINT_START 3400 +#define NS_AFTERPAINT (NS_NOTIFYPAINT_START) + +// Simple gesture events +#define NS_SIMPLE_GESTURE_EVENT_START 3500 +#define NS_SIMPLE_GESTURE_SWIPE_START (NS_SIMPLE_GESTURE_EVENT_START) +#define NS_SIMPLE_GESTURE_SWIPE_UPDATE (NS_SIMPLE_GESTURE_EVENT_START+1) +#define NS_SIMPLE_GESTURE_SWIPE_END (NS_SIMPLE_GESTURE_EVENT_START+2) +#define NS_SIMPLE_GESTURE_SWIPE (NS_SIMPLE_GESTURE_EVENT_START+3) +#define NS_SIMPLE_GESTURE_MAGNIFY_START (NS_SIMPLE_GESTURE_EVENT_START+4) +#define NS_SIMPLE_GESTURE_MAGNIFY_UPDATE (NS_SIMPLE_GESTURE_EVENT_START+5) +#define NS_SIMPLE_GESTURE_MAGNIFY (NS_SIMPLE_GESTURE_EVENT_START+6) +#define NS_SIMPLE_GESTURE_ROTATE_START (NS_SIMPLE_GESTURE_EVENT_START+7) +#define NS_SIMPLE_GESTURE_ROTATE_UPDATE (NS_SIMPLE_GESTURE_EVENT_START+8) +#define NS_SIMPLE_GESTURE_ROTATE (NS_SIMPLE_GESTURE_EVENT_START+9) +#define NS_SIMPLE_GESTURE_TAP (NS_SIMPLE_GESTURE_EVENT_START+10) +#define NS_SIMPLE_GESTURE_PRESSTAP (NS_SIMPLE_GESTURE_EVENT_START+11) +#define NS_SIMPLE_GESTURE_EDGE_STARTED (NS_SIMPLE_GESTURE_EVENT_START+12) +#define NS_SIMPLE_GESTURE_EDGE_CANCELED (NS_SIMPLE_GESTURE_EVENT_START+13) +#define NS_SIMPLE_GESTURE_EDGE_COMPLETED (NS_SIMPLE_GESTURE_EVENT_START+14) + +// These are used to send native events to plugins. +#define NS_PLUGIN_EVENT_START 3600 +#define NS_PLUGIN_INPUT_EVENT (NS_PLUGIN_EVENT_START) +#define NS_PLUGIN_FOCUS_EVENT (NS_PLUGIN_EVENT_START+1) + +// Events to manipulate selection (WidgetSelectionEvent) +#define NS_SELECTION_EVENT_START 3700 +// Clear any previous selection and set the given range as the selection +#define NS_SELECTION_SET (NS_SELECTION_EVENT_START) + +// Events of commands for the contents +#define NS_CONTENT_COMMAND_EVENT_START 3800 +#define NS_CONTENT_COMMAND_CUT (NS_CONTENT_COMMAND_EVENT_START) +#define NS_CONTENT_COMMAND_COPY (NS_CONTENT_COMMAND_EVENT_START+1) +#define NS_CONTENT_COMMAND_PASTE (NS_CONTENT_COMMAND_EVENT_START+2) +#define NS_CONTENT_COMMAND_DELETE (NS_CONTENT_COMMAND_EVENT_START+3) +#define NS_CONTENT_COMMAND_UNDO (NS_CONTENT_COMMAND_EVENT_START+4) +#define NS_CONTENT_COMMAND_REDO (NS_CONTENT_COMMAND_EVENT_START+5) +#define NS_CONTENT_COMMAND_PASTE_TRANSFERABLE (NS_CONTENT_COMMAND_EVENT_START+6) +// NS_CONTENT_COMMAND_SCROLL scrolls the nearest scrollable element to the +// currently focused content or latest DOM selection. This would normally be +// the same element scrolled by keyboard scroll commands, except that this event +// will scroll an element scrollable in either direction. I.e., if the nearest +// scrollable ancestor element can only be scrolled vertically, and horizontal +// scrolling is requested using this event, no scrolling will occur. +#define NS_CONTENT_COMMAND_SCROLL (NS_CONTENT_COMMAND_EVENT_START+7) + +// Event to gesture notification +#define NS_GESTURENOTIFY_EVENT_START 3900 + +#define NS_ORIENTATION_EVENT 4000 + +#define NS_SCROLLAREA_EVENT_START 4100 +#define NS_SCROLLEDAREACHANGED (NS_SCROLLAREA_EVENT_START) + +#define NS_TRANSITION_EVENT_START 4200 +#define NS_TRANSITION_END (NS_TRANSITION_EVENT_START) + +#define NS_ANIMATION_EVENT_START 4250 +#define NS_ANIMATION_START (NS_ANIMATION_EVENT_START) +#define NS_ANIMATION_END (NS_ANIMATION_EVENT_START + 1) +#define NS_ANIMATION_ITERATION (NS_ANIMATION_EVENT_START + 2) + +#define NS_SMIL_TIME_EVENT_START 4300 +#define NS_SMIL_BEGIN (NS_SMIL_TIME_EVENT_START) +#define NS_SMIL_END (NS_SMIL_TIME_EVENT_START + 1) +#define NS_SMIL_REPEAT (NS_SMIL_TIME_EVENT_START + 2) + +#define NS_WEBAUDIO_EVENT_START 4350 +#define NS_AUDIO_PROCESS (NS_WEBAUDIO_EVENT_START) +#define NS_AUDIO_COMPLETE (NS_WEBAUDIO_EVENT_START + 1) + +// script notification events +#define NS_NOTIFYSCRIPT_START 4500 +#define NS_BEFORE_SCRIPT_EXECUTE (NS_NOTIFYSCRIPT_START) +#define NS_AFTER_SCRIPT_EXECUTE (NS_NOTIFYSCRIPT_START+1) + +#define NS_PRINT_EVENT_START 4600 +#define NS_BEFOREPRINT (NS_PRINT_EVENT_START) +#define NS_AFTERPRINT (NS_PRINT_EVENT_START + 1) + +#define NS_MESSAGE_EVENT_START 4700 +#define NS_MESSAGE (NS_MESSAGE_EVENT_START) + +// Open and close events +#define NS_OPENCLOSE_EVENT_START 4800 +#define NS_OPEN (NS_OPENCLOSE_EVENT_START) +#define NS_CLOSE (NS_OPENCLOSE_EVENT_START+1) + +// Device motion and orientation +#define NS_DEVICE_ORIENTATION_START 4900 +#define NS_DEVICE_ORIENTATION (NS_DEVICE_ORIENTATION_START) +#define NS_DEVICE_MOTION (NS_DEVICE_ORIENTATION_START+1) +#define NS_DEVICE_PROXIMITY (NS_DEVICE_ORIENTATION_START+2) +#define NS_USER_PROXIMITY (NS_DEVICE_ORIENTATION_START+3) +#define NS_DEVICE_LIGHT (NS_DEVICE_ORIENTATION_START+4) + +#define NS_SHOW_EVENT 5000 + +// Fullscreen DOM API +#define NS_FULL_SCREEN_START 5100 +#define NS_FULLSCREENCHANGE (NS_FULL_SCREEN_START) +#define NS_FULLSCREENERROR (NS_FULL_SCREEN_START + 1) + +#define NS_TOUCH_EVENT_START 5200 +#define NS_TOUCH_START (NS_TOUCH_EVENT_START) +#define NS_TOUCH_MOVE (NS_TOUCH_EVENT_START+1) +#define NS_TOUCH_END (NS_TOUCH_EVENT_START+2) +#define NS_TOUCH_ENTER (NS_TOUCH_EVENT_START+3) +#define NS_TOUCH_LEAVE (NS_TOUCH_EVENT_START+4) +#define NS_TOUCH_CANCEL (NS_TOUCH_EVENT_START+5) + +// Pointerlock DOM API +#define NS_POINTERLOCK_START 5300 +#define NS_POINTERLOCKCHANGE (NS_POINTERLOCK_START) +#define NS_POINTERLOCKERROR (NS_POINTERLOCK_START + 1) + +#define NS_WHEEL_EVENT_START 5400 +#define NS_WHEEL_WHEEL (NS_WHEEL_EVENT_START) +#define NS_WHEEL_START (NS_WHEEL_EVENT_START + 1) +#define NS_WHEEL_STOP (NS_WHEEL_EVENT_START + 2) + +//System time is changed +#define NS_MOZ_TIME_CHANGE_EVENT 5500 + +// Network packet events. +#define NS_NETWORK_EVENT_START 5600 +#define NS_NETWORK_UPLOAD_EVENT (NS_NETWORK_EVENT_START + 1) +#define NS_NETWORK_DOWNLOAD_EVENT (NS_NETWORK_EVENT_START + 2) + +// MediaRecorder events. +#define NS_MEDIARECORDER_EVENT_START 5700 +#define NS_MEDIARECORDER_DATAAVAILABLE (NS_MEDIARECORDER_EVENT_START + 1) +#define NS_MEDIARECORDER_WARNING (NS_MEDIARECORDER_EVENT_START + 2) +#define NS_MEDIARECORDER_STOP (NS_MEDIARECORDER_EVENT_START + 3) + +// SpeakerManager events +#define NS_SPEAKERMANAGER_EVENT_START 5800 +#define NS_SPEAKERMANAGER_SPEAKERFORCEDCHANGE (NS_SPEAKERMANAGER_EVENT_START + 1) + +#ifdef MOZ_GAMEPAD +// Gamepad input events +#define NS_GAMEPAD_START 6000 +#define NS_GAMEPAD_BUTTONDOWN (NS_GAMEPAD_START) +#define NS_GAMEPAD_BUTTONUP (NS_GAMEPAD_START+1) +#define NS_GAMEPAD_AXISMOVE (NS_GAMEPAD_START+2) +#define NS_GAMEPAD_CONNECTED (NS_GAMEPAD_START+3) +#define NS_GAMEPAD_DISCONNECTED (NS_GAMEPAD_START+4) +// Keep this defined to the same value as the event above +#define NS_GAMEPAD_END (NS_GAMEPAD_START+4) +#endif + +// input and beforeinput events. +#define NS_EDITOR_EVENT_START 6100 +#define NS_EDITOR_INPUT (NS_EDITOR_EVENT_START) + +namespace mozilla { + +/****************************************************************************** + * mozilla::BaseEventFlags + * + * BaseEventFlags must be a POD struct for safe to use memcpy (including + * in ParamTraits). So don't make virtual methods, constructor, + * destructor and operators. + * This is necessary for VC which is NOT C++0x compiler. + ******************************************************************************/ + +struct BaseEventFlags +{ +public: + // If mIsTrusted is true, the event is a trusted event. Otherwise, it's + // an untrusted event. + bool mIsTrusted : 1; + // If mInBubblingPhase is true, the event is in bubbling phase or target + // phase. + bool mInBubblingPhase : 1; + // If mInCapturePhase is true, the event is in capture phase or target phase. + bool mInCapturePhase : 1; + // If mInSystemGroup is true, the event is being dispatched in system group. + bool mInSystemGroup: 1; + // If mCancelable is true, the event can be consumed. I.e., calling + // dom::Event::PreventDefault() can prevent the default action. + bool mCancelable : 1; + // If mBubbles is true, the event can bubble. Otherwise, cannot be handled + // in bubbling phase. + bool mBubbles : 1; + // If mPropagationStopped is true, dom::Event::StopPropagation() or + // dom::Event::StopImmediatePropagation() has been called. + bool mPropagationStopped : 1; + // If mImmediatePropagationStopped is true, + // dom::Event::StopImmediatePropagation() has been called. + // Note that mPropagationStopped must be true when this is true. + bool mImmediatePropagationStopped : 1; + // If mDefaultPrevented is true, the event has been consumed. + // E.g., dom::Event::PreventDefault() has been called or + // the default action has been performed. + bool mDefaultPrevented : 1; + // If mDefaultPreventedByContent is true, the event has been + // consumed by content. + // Note that mDefaultPrevented must be true when this is true. + bool mDefaultPreventedByContent : 1; + // mMultipleActionsPrevented may be used when default handling don't want to + // be prevented, but only one of the event targets should handle the event. + // For example, when a