/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Makoto Kato * Dean Tessman * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef nsGUIEvent_h__ #define nsGUIEvent_h__ #include "nsPoint.h" #include "nsRect.h" #include "nsEvent.h" #include "nsHashtable.h" #include "nsString.h" // nsIDOMEvent contains a long enum which includes a member called ERROR, // which conflicts with something that Windows defines somewhere. // So, undefine it: #ifdef WIN32 #undef ERROR #endif #include "nsCOMPtr.h" #include "nsIDOMKeyEvent.h" #include "nsWeakPtr.h" class nsIRenderingContext; class nsIRegion; class nsIWidget; class nsIMenuItem; class nsIAccessible; class nsIContent; class nsIURI; class nsIDOMEvent; /** * Event Struct Types */ #define NS_EVENT 1 #define NS_GUI_EVENT 2 #define NS_SIZE_EVENT 3 #define NS_SIZEMODE_EVENT 4 #define NS_ZLEVEL_EVENT 5 #define NS_PAINT_EVENT 6 #define NS_SCROLLBAR_EVENT 7 #define NS_INPUT_EVENT 8 #define NS_KEY_EVENT 9 #define NS_MOUSE_EVENT 10 #define NS_MENU_EVENT 11 #define NS_SCRIPT_ERROR_EVENT 12 #define NS_TEXT_EVENT 13 #define NS_COMPOSITION_EVENT 14 #define NS_RECONVERSION_EVENT 15 #define NS_MOUSE_SCROLL_EVENT 16 #define NS_SCROLLPORT_EVENT 18 #define NS_MUTATION_EVENT 19 // |nsMutationEvent| in content #define NS_ACCESSIBLE_EVENT 20 #define NS_FORM_EVENT 21 #define NS_FOCUS_EVENT 22 #define NS_POPUP_EVENT 23 #define NS_APPCOMMAND_EVENT 24 #define NS_POPUPBLOCKED_EVENT 25 #define NS_BEFORE_PAGE_UNLOAD_EVENT 26 #define NS_UI_EVENT 27 #define NS_QUERYCARETRECT_EVENT 28 #define NS_PAGETRANSITION_EVENT 29 #ifdef MOZ_SVG #define NS_SVG_EVENT 30 #define NS_SVGZOOM_EVENT 31 #endif // MOZ_SVG #define NS_XUL_COMMAND_EVENT 32 // These flags are sort of a mess. They're sort of shared between event // listener flags and event flags, but only some of them. You've been // warned! #define NS_EVENT_FLAG_NONE 0x0000 #define NS_EVENT_FLAG_INIT 0x0001 #define NS_EVENT_FLAG_BUBBLE 0x0002 #define NS_EVENT_FLAG_CAPTURE 0x0004 #define NS_EVENT_FLAG_STOP_DISPATCH 0x0008 #define NS_EVENT_FLAG_NO_DEFAULT 0x0010 #define NS_EVENT_FLAG_CANT_CANCEL 0x0020 #define NS_EVENT_FLAG_CANT_BUBBLE 0x0040 #define NS_PRIV_EVENT_FLAG_SCRIPT 0x0080 #define NS_EVENT_FLAG_NO_CONTENT_DISPATCH 0x0100 #define NS_EVENT_FLAG_SYSTEM_EVENT 0x0200 #define NS_EVENT_FLAG_STOP_DISPATCH_IMMEDIATELY 0x0400 // @see nsIDOM3Event::stopImmediatePropagation() #define NS_EVENT_FLAG_DISPATCHING 0x0800 #define NS_PRIV_EVENT_UNTRUSTED_PERMITTED 0x8000 #define NS_EVENT_CAPTURE_MASK (~(NS_EVENT_FLAG_INIT | NS_EVENT_FLAG_BUBBLE | NS_EVENT_FLAG_NO_CONTENT_DISPATCH)) #define NS_EVENT_BUBBLE_MASK (~(NS_EVENT_FLAG_INIT | NS_EVENT_FLAG_CAPTURE | NS_EVENT_FLAG_NO_CONTENT_DISPATCH)) // Flags for internalAppFlags #define NS_APP_EVENT_FLAG_NONE 0x00000000 // Similar to NS_EVENT_FLAG_NO_DEFAULT, but it allows focus #define NS_APP_EVENT_FLAG_HANDLED 0x00000001 // True if the event came from a trusted source #define NS_APP_EVENT_FLAG_TRUSTED 0x00000002 #define NS_EVENT_TYPE_NULL 0 /** * GUI MESSAGES */ //@{ #define NS_EVENT_NULL 0 #define NS_WINDOW_START 100 // Widget is being created #define NS_CREATE (NS_WINDOW_START) // Widget may be destroyed #define NS_XUL_CLOSE (NS_WINDOW_START + 1) // Widget is being destroyed #define NS_DESTROY (NS_WINDOW_START + 2) // Widget was resized #define NS_SIZE (NS_WINDOW_START + 3) // Widget size mode was changed #define NS_SIZEMODE (NS_WINDOW_START + 4) // Widget gained focus #define NS_GOTFOCUS (NS_WINDOW_START + 5) // Widget lost focus #define NS_LOSTFOCUS (NS_WINDOW_START + 6) // Widget got activated #define NS_ACTIVATE (NS_WINDOW_START + 7) // Widget got deactivated #define NS_DEACTIVATE (NS_WINDOW_START + 8) // top-level window z-level change request #define NS_SETZLEVEL (NS_WINDOW_START + 9) // Widget needs to be repainted #define NS_PAINT (NS_WINDOW_START + 30) // 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) // Window has been moved to a new location. // The events point contains the x, y location in screen coordinates #define NS_MOVE (NS_WINDOW_START + 34) // Tab control's selected tab has changed #define NS_TABCHANGE (NS_WINDOW_START + 35) #define NS_OS_TOOLBAR (NS_WINDOW_START + 36) // Menu item selected #define NS_MENU_SELECTED (NS_WINDOW_START + 38) // Form control changed: currently == combo box selection changed // but could be expanded to mean textbox, checkbox changed, etc. // This is a GUI specific event that does not necessarily correspond // directly to a mouse click or a key press. #define NS_CONTROL_CHANGE (NS_WINDOW_START + 39) // Indicates the display has changed depth #define NS_DISPLAYCHANGED (NS_WINDOW_START + 40) // Indicates a theme change has occurred #define NS_THEMECHANGED (NS_WINDOW_START + 41) // Indicates a System color has changed. It is the platform // toolkits responsibility to invalidate the window to // ensure that it is drawn using the current system colors. #define NS_SYSCOLORCHANGED (NS_WINDOW_START + 42) // Indicates a script error has occurred #define NS_SCRIPT_ERROR (NS_WINDOW_START + 50) #define NS_RESIZE_EVENT (NS_WINDOW_START + 60) #define NS_SCROLL_EVENT (NS_WINDOW_START + 61) #define NS_PLUGIN_ACTIVATE (NS_WINDOW_START + 62) #define NS_MOUSE_MESSAGE_START 300 #define NS_MOUSE_MOVE (NS_MOUSE_MESSAGE_START) #define NS_MOUSE_LEFT_BUTTON_UP (NS_MOUSE_MESSAGE_START + 1) #define NS_MOUSE_LEFT_BUTTON_DOWN (NS_MOUSE_MESSAGE_START + 2) #define NS_MOUSE_MIDDLE_BUTTON_UP (NS_MOUSE_MESSAGE_START + 10) #define NS_MOUSE_MIDDLE_BUTTON_DOWN (NS_MOUSE_MESSAGE_START + 11) #define NS_MOUSE_RIGHT_BUTTON_UP (NS_MOUSE_MESSAGE_START + 20) #define NS_MOUSE_RIGHT_BUTTON_DOWN (NS_MOUSE_MESSAGE_START + 21) #define NS_MOUSE_ENTER (NS_MOUSE_MESSAGE_START + 22) #define NS_MOUSE_EXIT (NS_MOUSE_MESSAGE_START + 23) #define NS_MOUSE_LEFT_DOUBLECLICK (NS_MOUSE_MESSAGE_START + 24) #define NS_MOUSE_MIDDLE_DOUBLECLICK (NS_MOUSE_MESSAGE_START + 25) #define NS_MOUSE_RIGHT_DOUBLECLICK (NS_MOUSE_MESSAGE_START + 26) #define NS_MOUSE_LEFT_CLICK (NS_MOUSE_MESSAGE_START + 27) #define NS_MOUSE_MIDDLE_CLICK (NS_MOUSE_MESSAGE_START + 28) #define NS_MOUSE_RIGHT_CLICK (NS_MOUSE_MESSAGE_START + 29) #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_CONTEXTMENU_MESSAGE_START 500 #define NS_CONTEXTMENU (NS_CONTEXTMENU_MESSAGE_START) #define NS_CONTEXTMENU_KEY (NS_CONTEXTMENU_MESSAGE_START + 1) #define NS_SCROLLBAR_MESSAGE_START 1000 #define NS_SCROLLBAR_POS (NS_SCROLLBAR_MESSAGE_START) #define NS_SCROLLBAR_PAGE_NEXT (NS_SCROLLBAR_MESSAGE_START + 1) #define NS_SCROLLBAR_PAGE_PREV (NS_SCROLLBAR_MESSAGE_START + 2) #define NS_SCROLLBAR_LINE_NEXT (NS_SCROLLBAR_MESSAGE_START + 3) #define NS_SCROLLBAR_LINE_PREV (NS_SCROLLBAR_MESSAGE_START + 4) #define NS_STREAM_EVENT_START 1100 #define NS_PAGE_LOAD (NS_STREAM_EVENT_START) #define NS_PAGE_UNLOAD (NS_STREAM_EVENT_START + 1) #define NS_IMAGE_LOAD (NS_STREAM_EVENT_START + 2) #define NS_IMAGE_ABORT (NS_STREAM_EVENT_START + 3) #define NS_IMAGE_ERROR (NS_STREAM_EVENT_START + 4) #define NS_SCRIPT_LOAD (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_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_INPUT (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_DROP (NS_DRAGDROP_EVENT_START + 3) #define NS_DRAGDROP_GESTURE (NS_DRAGDROP_EVENT_START + 4) #define NS_DRAGDROP_OVER_SYNTH (NS_DRAGDROP_EVENT_START + 1) #define NS_DRAGDROP_EXIT_SYNTH (NS_DRAGDROP_EVENT_START + 2) // 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) #define NS_XUL_CLICK (NS_XUL_EVENT_START+7) //@} // Scroll events #define NS_MOUSE_SCROLL_START 1600 #define NS_MOUSE_SCROLL (NS_MOUSE_SCROLL_START) #define NS_SCROLLPORT_START 1700 #define NS_SCROLLPORT_UNDERFLOW (NS_SCROLLPORT_START) #define NS_SCROLLPORT_OVERFLOW (NS_SCROLLPORT_START+1) #define NS_SCROLLPORT_OVERFLOWCHANGED (NS_SCROLLPORT_START+2) // Mutation events defined elsewhere starting at 1800 // accessible events #define NS_ACCESSIBLE_START 1900 #define NS_GETACCESSIBLE (NS_ACCESSIBLE_START) #define NS_USER_DEFINED_EVENT 2000 // custom OS events #define NS_APPCOMMAND_START 2100 #define NS_APPCOMMAND (NS_APPCOMMAND_START) #define NS_APPCOMMAND_BACK (NS_APPCOMMAND_START + 1) #define NS_APPCOMMAND_FORWARD (NS_APPCOMMAND_START + 2) #define NS_APPCOMMAND_REFRESH (NS_APPCOMMAND_START + 3) #define NS_APPCOMMAND_STOP (NS_APPCOMMAND_START + 4) #define NS_APPCOMMAND_SEARCH (NS_APPCOMMAND_START + 5) #define NS_APPCOMMAND_FAVORITES (NS_APPCOMMAND_START + 6) #define NS_APPCOMMAND_HOME (NS_APPCOMMAND_START + 7) // 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_QUERY (NS_COMPOSITION_EVENT_START + 2) // reconversion events #define NS_RECONVERSION_START 2300 #define NS_RECONVERSION_QUERY (NS_RECONVERSION_START) // 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) // query caret rect events #define NS_QUERYCARETRECT_START 2600 #define NS_QUERYCARETRECT (NS_QUERYCARETRECT_START) // pagetransition events #define NS_PAGETRANSITION_START 2700 #define NS_PAGE_SHOW (NS_PAGETRANSITION_START + 1) #define NS_PAGE_HIDE (NS_PAGETRANSITION_START + 2) #ifdef MOZ_SVG // 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) #endif // MOZ_SVG // XUL command events #define NS_XULCOMMAND_EVENT_START 3000 #define NS_XUL_COMMAND (NS_XULCOMMAND_EVENT_START) /** * Return status for event processors, nsEventStatus, is defined in * nsEvent.h. */ /** * sizemode is an adjunct to widget size */ enum nsSizeMode { nsSizeMode_Normal = 0, nsSizeMode_Minimized, nsSizeMode_Maximized }; /** * different types of (top-level) window z-level positioning */ enum nsWindowZ { nsWindowZTop = 0, // on top nsWindowZBottom, // on bottom nsWindowZRelative // just below some specified widget }; /** * General event */ class nsEvent { protected: nsEvent(PRBool isTrusted, PRUint32 msg, PRUint8 structType) : eventStructType(structType), message(msg), point(0, 0), refPoint(0, 0), time(0), flags(0), internalAppFlags(isTrusted ? NS_APP_EVENT_FLAG_TRUSTED : NS_APP_EVENT_FLAG_NONE), userType(0) { } public: nsEvent(PRBool isTrusted, PRUint32 msg) : eventStructType(NS_EVENT), message(msg), point(0, 0), refPoint(0, 0), time(0), flags(0), internalAppFlags(isTrusted ? NS_APP_EVENT_FLAG_TRUSTED : NS_APP_EVENT_FLAG_NONE), userType(0) { } // See event struct types PRUint8 eventStructType; // See GUI MESSAGES, PRUint32 message; // In widget relative coordinates, modified to be relative to // current view in layout. nsPoint point; // In widget relative coordinates, not modified by layout code. nsPoint refPoint; // Elapsed time, in milliseconds, from the time the system was // started to the time the message was created PRUint32 time; // Flags to hold event flow stage and capture/bubble cancellation // status PRUint32 flags; // Flags for indicating more event state for Mozilla applications. PRUint32 internalAppFlags; // Additional type info for user defined events nsHashKey* userType; }; /** * General graphic user interface event */ class nsGUIEvent : public nsEvent { protected: nsGUIEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w, PRUint8 structType) : nsEvent(isTrusted, msg, structType), widget(w), nativeMsg(nsnull) { } public: nsGUIEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsEvent(isTrusted, msg, NS_GUI_EVENT), widget(w), nativeMsg(nsnull) { } /// Originator of the event nsIWidget* widget; /// Internal platform specific message. void* nativeMsg; }; /** * Script error event */ class nsScriptErrorEvent : public nsEvent { public: nsScriptErrorEvent(PRBool isTrusted, PRUint32 msg) : nsEvent(isTrusted, msg, NS_SCRIPT_ERROR_EVENT), lineNr(0), errorMsg(nsnull), fileName(nsnull) { } PRInt32 lineNr; const PRUnichar* errorMsg; const PRUnichar* fileName; }; class nsBeforePageUnloadEvent : public nsEvent { public: nsBeforePageUnloadEvent(PRBool isTrusted, PRUint32 msg) : nsEvent(isTrusted, msg, NS_BEFORE_PAGE_UNLOAD_EVENT) { } nsString text; }; /** * Window resize event */ class nsSizeEvent : public nsGUIEvent { public: nsSizeEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsGUIEvent(isTrusted, msg, w, NS_SIZE_EVENT), windowSize(nsnull), mWinWidth(0), mWinHeight(0) { } /// x,y width, height in pixels (client area) nsRect *windowSize; /// width of entire window (in pixels) PRInt32 mWinWidth; /// height of entire window (in pixels) PRInt32 mWinHeight; }; /** * Window size mode event */ class nsSizeModeEvent : public nsGUIEvent { public: nsSizeModeEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsGUIEvent(isTrusted, msg, w, NS_SIZEMODE_EVENT), mSizeMode(nsSizeMode_Normal) { } nsSizeMode mSizeMode; }; /** * Window z-level event */ class nsZLevelEvent : public nsGUIEvent { public: nsZLevelEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsGUIEvent(isTrusted, msg, w, NS_ZLEVEL_EVENT), mPlacement(nsWindowZTop), mReqBelow(nsnull), mActualBelow(nsnull), mImmediate(PR_FALSE), mAdjusted(PR_FALSE) { } nsWindowZ mPlacement; nsIWidget *mReqBelow, // widget we request being below, if any *mActualBelow; // widget to be below, returned by handler PRBool mImmediate, // handler should make changes immediately mAdjusted; // handler changed placement }; /** * Window repaint event */ class nsPaintEvent : public nsGUIEvent { public: nsPaintEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsGUIEvent(isTrusted, msg, w, NS_PAINT_EVENT), renderingContext(nsnull), region(nsnull), rect(nsnull) { } /// Context to paint in. nsIRenderingContext *renderingContext; /// area to paint (should be used instead of rect) nsIRegion *region; /// x,y, width, height in pixels of area to paint nsRect *rect; }; /** * Scrollbar event */ class nsScrollbarEvent : public nsGUIEvent { public: nsScrollbarEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsGUIEvent(isTrusted, msg, w, NS_SCROLLBAR_EVENT), position(0) { } /// ranges between scrollbar 0 and (maxRange - thumbSize). See nsIScrollbar PRUint32 position; }; class nsScrollPortEvent : public nsGUIEvent { public: enum orientType { vertical = 0, horizontal = 1, both = 2 }; nsScrollPortEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsGUIEvent(isTrusted, msg, w, NS_SCROLLPORT_EVENT), orient(vertical) { } orientType orient; }; class nsInputEvent : public nsGUIEvent { protected: nsInputEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w, PRUint8 structType) : nsGUIEvent(isTrusted, msg, w, structType), isShift(PR_FALSE), isControl(PR_FALSE), isAlt(PR_FALSE), isMeta(PR_FALSE) { } public: nsInputEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsGUIEvent(isTrusted, msg, w, NS_INPUT_EVENT), isShift(PR_FALSE), isControl(PR_FALSE), isAlt(PR_FALSE), isMeta(PR_FALSE) { } /// PR_TRUE indicates the shift key is down PRBool isShift; /// PR_TRUE indicates the control key is down PRBool isControl; /// PR_TRUE indicates the alt key is down PRBool isAlt; /// PR_TRUE indicates the meta key is down (or, on Mac, the Command key) PRBool isMeta; }; /** * Mouse event */ class nsMouseEvent : public nsInputEvent { public: enum reasonType { eReal, eSynthesized }; nsMouseEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w, reasonType aReason) : nsInputEvent(isTrusted, msg, w, NS_MOUSE_EVENT), clickCount(0), acceptActivation(PR_FALSE), reason(aReason) { if (msg == NS_MOUSE_MOVE) { flags |= NS_EVENT_FLAG_CANT_CANCEL; } } /// The number of mouse clicks PRUint32 clickCount; /// Special return code for MOUSE_ACTIVATE to signal /// if the target accepts activation (1), or denies it (0) PRPackedBool acceptActivation; reasonType reason : 8; }; /** * Accessible event */ class nsAccessibleEvent : public nsInputEvent { public: nsAccessibleEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsInputEvent(isTrusted, msg, w, NS_ACCESSIBLE_EVENT), accessible(nsnull) { } nsIAccessible* accessible; }; /** * Keyboard event */ class nsKeyEvent : public nsInputEvent { public: nsKeyEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsInputEvent(isTrusted, msg, w, NS_KEY_EVENT), keyCode(0), charCode(0), isChar(0) { } /// see NS_VK codes PRUint32 keyCode; /// OS translated Unicode char PRUint32 charCode; // indicates whether the event signifies a printable character PRBool isChar; }; /** * IME Related Events */ struct nsTextRange { nsTextRange() : mStartOffset(0), mEndOffset(0), mRangeType(0) { } PRUint32 mStartOffset; PRUint32 mEndOffset; PRUint32 mRangeType; }; typedef nsTextRange* nsTextRangeArray; struct nsTextEventReply { nsTextEventReply() : mCursorIsCollapsed(PR_FALSE) { } nsRect mCursorPosition; PRBool mCursorIsCollapsed; }; typedef struct nsTextEventReply nsTextEventReply; class nsTextEvent : public nsInputEvent { public: nsTextEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsInputEvent(isTrusted, msg, w, NS_TEXT_EVENT), theText(nsnull), rangeCount(0), rangeArray(nsnull), isChar(PR_FALSE) { } const PRUnichar* theText; nsTextEventReply theReply; PRUint32 rangeCount; nsTextRangeArray rangeArray; PRBool isChar; }; class nsCompositionEvent : public nsInputEvent { public: nsCompositionEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsInputEvent(isTrusted, msg, w, NS_COMPOSITION_EVENT) { } nsTextEventReply theReply; }; class nsMouseScrollEvent : public nsInputEvent { public: enum nsMouseScrollFlags { kIsFullPage = 1 << 0, kIsVertical = 1 << 1, kIsHorizontal = 1 << 2, kIsPixels = 1 << 3 }; nsMouseScrollEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsInputEvent(isTrusted, msg, w, NS_MOUSE_SCROLL_EVENT), scrollFlags(0), delta(0) { } PRInt32 scrollFlags; PRInt32 delta; }; struct nsReconversionEventReply { nsReconversionEventReply() : mReconversionString(nsnull) { } PRUnichar *mReconversionString; }; class nsReconversionEvent : public nsInputEvent { public: nsReconversionEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsInputEvent(isTrusted, msg, w, NS_RECONVERSION_EVENT) { } nsReconversionEventReply theReply; }; struct nsQueryCaretRectEventReply { nsQueryCaretRectEventReply() : mRectIsValid(PR_FALSE) { } PRBool mRectIsValid; nsRect mCaretRect; }; class nsQueryCaretRectEvent : public nsInputEvent { public: nsQueryCaretRectEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsInputEvent(isTrusted, msg, w, NS_QUERYCARETRECT_EVENT) { } nsQueryCaretRectEventReply theReply; }; /** * MenuItem event * * When this event occurs the widget field in nsGUIEvent holds the "target" * for the event */ class nsMenuEvent : public nsGUIEvent { public: nsMenuEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsGUIEvent(isTrusted, msg, w, NS_MENU_EVENT), mMenuItem(nsnull), mCommand(0) { } nsIMenuItem * mMenuItem; PRUint32 mCommand; }; /** * Form event * * We hold the originating form control for form submit and reset events. * originator is a weak pointer (does not hold a strong reference). */ class nsFormEvent : public nsEvent { public: nsFormEvent(PRBool isTrusted, PRUint32 msg) : nsEvent(isTrusted, msg, NS_FORM_EVENT), originator(nsnull) { } nsIContent *originator; }; /** * Focus event */ class nsFocusEvent : public nsGUIEvent { public: nsFocusEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsGUIEvent(isTrusted, msg, w, NS_FOCUS_EVENT), isMozWindowTakingFocus(PR_FALSE) { } PRBool isMozWindowTakingFocus; }; /** * App Command event * * Custom commands from the operating system. eg. WM_APPCOMMAND on Windows */ class nsAppCommandEvent : public nsInputEvent { public: nsAppCommandEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsInputEvent(isTrusted, msg, w, NS_APPCOMMAND_EVENT), appCommand(0) { } PRUint32 appCommand; }; /** * blocked popup window event */ class nsPopupBlockedEvent : public nsEvent { public: nsPopupBlockedEvent(PRBool isTrusted, PRUint32 msg) : nsEvent(isTrusted, msg, NS_POPUPBLOCKED_EVENT), mRequestingWindowURI(nsnull), mPopupWindowURI(nsnull) { } nsIURI* mRequestingWindowURI; // owning reference nsWeakPtr mRequestingWindow; nsIURI* mPopupWindowURI; // owning reference nsString mPopupWindowFeatures; }; /** * DOM UIEvent */ class nsUIEvent : public nsEvent { public: nsUIEvent(PRBool isTrusted, PRUint32 msg, PRInt32 d) : nsEvent(isTrusted, msg, NS_UI_EVENT), detail(d) { } PRInt32 detail; }; /** * PageTransition event */ class nsPageTransitionEvent : public nsEvent { public: nsPageTransitionEvent(PRBool isTrusted, PRUint32 msg, PRBool p) : nsEvent(isTrusted, msg, NS_PAGETRANSITION_EVENT), persisted(p) { } PRBool persisted; }; /** * XUL command event */ class nsXULCommandEvent : public nsInputEvent { public: nsXULCommandEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w) : nsInputEvent(isTrusted, msg, w, NS_XUL_COMMAND_EVENT) { } nsCOMPtr sourceEvent; }; /** * Event status for D&D Event */ enum nsDragDropEventStatus { /// The event is a enter nsDragDropEventStatus_eDragEntered, /// The event is exit nsDragDropEventStatus_eDragExited, /// The event is drop nsDragDropEventStatus_eDrop }; #define NS_IS_MOUSE_EVENT(evnt) \ (((evnt)->message == NS_MOUSE_LEFT_BUTTON_DOWN) || \ ((evnt)->message == NS_MOUSE_LEFT_BUTTON_UP) || \ ((evnt)->message == NS_MOUSE_LEFT_CLICK) || \ ((evnt)->message == NS_MOUSE_LEFT_DOUBLECLICK) || \ ((evnt)->message == NS_MOUSE_MIDDLE_BUTTON_DOWN) || \ ((evnt)->message == NS_MOUSE_MIDDLE_BUTTON_UP) || \ ((evnt)->message == NS_MOUSE_MIDDLE_CLICK) || \ ((evnt)->message == NS_MOUSE_MIDDLE_DOUBLECLICK) || \ ((evnt)->message == NS_MOUSE_RIGHT_BUTTON_DOWN) || \ ((evnt)->message == NS_MOUSE_RIGHT_BUTTON_UP) || \ ((evnt)->message == NS_MOUSE_RIGHT_CLICK) || \ ((evnt)->message == NS_MOUSE_RIGHT_DOUBLECLICK) || \ ((evnt)->message == NS_MOUSE_ENTER) || \ ((evnt)->message == NS_MOUSE_EXIT) || \ ((evnt)->message == NS_MOUSE_ENTER) || \ ((evnt)->message == NS_MOUSE_EXIT) || \ ((evnt)->message == NS_MOUSE_ENTER_SYNTH) || \ ((evnt)->message == NS_MOUSE_EXIT_SYNTH) || \ ((evnt)->message == NS_MOUSE_MOVE)) #define NS_IS_DRAG_EVENT(evnt) \ (((evnt)->message == NS_DRAGDROP_ENTER) || \ ((evnt)->message == NS_DRAGDROP_OVER) || \ ((evnt)->message == NS_DRAGDROP_EXIT) || \ ((evnt)->message == NS_DRAGDROP_DROP) || \ ((evnt)->message == NS_DRAGDROP_GESTURE) || \ ((evnt)->message == NS_DRAGDROP_OVER_SYNTH) || \ ((evnt)->message == NS_DRAGDROP_EXIT_SYNTH)) #define NS_IS_KEY_EVENT(evnt) \ (((evnt)->message == NS_KEY_DOWN) || \ ((evnt)->message == NS_KEY_PRESS) || \ ((evnt)->message == NS_KEY_UP)) #define NS_IS_IME_EVENT(evnt) \ (((evnt)->message == NS_TEXT_TEXT) || \ ((evnt)->message == NS_COMPOSITION_START) || \ ((evnt)->message == NS_COMPOSITION_END) || \ ((evnt)->message == NS_RECONVERSION_QUERY) || \ ((evnt)->message == NS_QUERYCARETRECT) || \ ((evnt)->message == NS_COMPOSITION_QUERY)) #define NS_IS_FOCUS_EVENT(evnt) \ (((evnt)->message == NS_GOTFOCUS) || \ ((evnt)->message == NS_LOSTFOCUS) || \ ((evnt)->message == NS_ACTIVATE) || \ ((evnt)->message == NS_DEACTIVATE) || \ ((evnt)->message == NS_PLUGIN_ACTIVATE)) #define NS_IS_TRUSTED_EVENT(event) \ (((event)->internalAppFlags & NS_APP_EVENT_FLAG_TRUSTED) != 0) // Mark an event as being dispatching. #define NS_MARK_EVENT_DISPATCH_STARTED(event) \ (event)->flags |= NS_EVENT_FLAG_DISPATCHING; #define NS_IS_EVENT_IN_DISPATCH(event) \ (((event)->flags & NS_EVENT_FLAG_DISPATCHING) != 0) // Mark an event as being done dispatching. #define NS_MARK_EVENT_DISPATCH_DONE(event) \ NS_ASSERTION(NS_IS_EVENT_IN_DISPATCH(event), \ "Event never got marked for dispatch!"); \ (event)->flags &= ~NS_EVENT_FLAG_DISPATCHING; \ (event)->flags |= NS_EVENT_FLAG_STOP_DISPATCH_IMMEDIATELY; /* * Virtual key bindings for keyboard events. * These come from nsIDOMKeyEvent.h, which is generated from MouseKeyEvent.idl. * Really, it would be better if we phased out the NS_VK symbols altogether * in favor of the DOM ones, but at least this way they'll be in sync. */ #define NS_VK_CANCEL nsIDOMKeyEvent::DOM_VK_CANCEL #define NS_VK_BACK nsIDOMKeyEvent::DOM_VK_BACK_SPACE #define NS_VK_TAB nsIDOMKeyEvent::DOM_VK_TAB #define NS_VK_CLEAR nsIDOMKeyEvent::DOM_VK_CLEAR #define NS_VK_RETURN nsIDOMKeyEvent::DOM_VK_RETURN #define NS_VK_ENTER nsIDOMKeyEvent::DOM_VK_ENTER #define NS_VK_SHIFT nsIDOMKeyEvent::DOM_VK_SHIFT #define NS_VK_CONTROL nsIDOMKeyEvent::DOM_VK_CONTROL #define NS_VK_ALT nsIDOMKeyEvent::DOM_VK_ALT #define NS_VK_PAUSE nsIDOMKeyEvent::DOM_VK_PAUSE #define NS_VK_CAPS_LOCK nsIDOMKeyEvent::DOM_VK_CAPS_LOCK #define NS_VK_ESCAPE nsIDOMKeyEvent::DOM_VK_ESCAPE #define NS_VK_SPACE nsIDOMKeyEvent::DOM_VK_SPACE #define NS_VK_PAGE_UP nsIDOMKeyEvent::DOM_VK_PAGE_UP #define NS_VK_PAGE_DOWN nsIDOMKeyEvent::DOM_VK_PAGE_DOWN #define NS_VK_END nsIDOMKeyEvent::DOM_VK_END #define NS_VK_HOME nsIDOMKeyEvent::DOM_VK_HOME #define NS_VK_LEFT nsIDOMKeyEvent::DOM_VK_LEFT #define NS_VK_UP nsIDOMKeyEvent::DOM_VK_UP #define NS_VK_RIGHT nsIDOMKeyEvent::DOM_VK_RIGHT #define NS_VK_DOWN nsIDOMKeyEvent::DOM_VK_DOWN #define NS_VK_PRINTSCREEN nsIDOMKeyEvent::DOM_VK_PRINTSCREEN #define NS_VK_INSERT nsIDOMKeyEvent::DOM_VK_INSERT #define NS_VK_DELETE nsIDOMKeyEvent::DOM_VK_DELETE // NS_VK_0 - NS_VK_9 match their ascii values #define NS_VK_0 nsIDOMKeyEvent::DOM_VK_0 #define NS_VK_1 nsIDOMKeyEvent::DOM_VK_1 #define NS_VK_2 nsIDOMKeyEvent::DOM_VK_2 #define NS_VK_3 nsIDOMKeyEvent::DOM_VK_3 #define NS_VK_4 nsIDOMKeyEvent::DOM_VK_4 #define NS_VK_5 nsIDOMKeyEvent::DOM_VK_5 #define NS_VK_6 nsIDOMKeyEvent::DOM_VK_6 #define NS_VK_7 nsIDOMKeyEvent::DOM_VK_7 #define NS_VK_8 nsIDOMKeyEvent::DOM_VK_8 #define NS_VK_9 nsIDOMKeyEvent::DOM_VK_9 #define NS_VK_SEMICOLON nsIDOMKeyEvent::DOM_VK_SEMICOLON #define NS_VK_EQUALS nsIDOMKeyEvent::DOM_VK_EQUALS // NS_VK_A - NS_VK_Z match their ascii values #define NS_VK_A nsIDOMKeyEvent::DOM_VK_A #define NS_VK_B nsIDOMKeyEvent::DOM_VK_B #define NS_VK_C nsIDOMKeyEvent::DOM_VK_C #define NS_VK_D nsIDOMKeyEvent::DOM_VK_D #define NS_VK_E nsIDOMKeyEvent::DOM_VK_E #define NS_VK_F nsIDOMKeyEvent::DOM_VK_F #define NS_VK_G nsIDOMKeyEvent::DOM_VK_G #define NS_VK_H nsIDOMKeyEvent::DOM_VK_H #define NS_VK_I nsIDOMKeyEvent::DOM_VK_I #define NS_VK_J nsIDOMKeyEvent::DOM_VK_J #define NS_VK_K nsIDOMKeyEvent::DOM_VK_K #define NS_VK_L nsIDOMKeyEvent::DOM_VK_L #define NS_VK_M nsIDOMKeyEvent::DOM_VK_M #define NS_VK_N nsIDOMKeyEvent::DOM_VK_N #define NS_VK_O nsIDOMKeyEvent::DOM_VK_O #define NS_VK_P nsIDOMKeyEvent::DOM_VK_P #define NS_VK_Q nsIDOMKeyEvent::DOM_VK_Q #define NS_VK_R nsIDOMKeyEvent::DOM_VK_R #define NS_VK_S nsIDOMKeyEvent::DOM_VK_S #define NS_VK_T nsIDOMKeyEvent::DOM_VK_T #define NS_VK_U nsIDOMKeyEvent::DOM_VK_U #define NS_VK_V nsIDOMKeyEvent::DOM_VK_V #define NS_VK_W nsIDOMKeyEvent::DOM_VK_W #define NS_VK_X nsIDOMKeyEvent::DOM_VK_X #define NS_VK_Y nsIDOMKeyEvent::DOM_VK_Y #define NS_VK_Z nsIDOMKeyEvent::DOM_VK_Z #define NS_VK_CONTEXT_MENU nsIDOMKeyEvent::DOM_VK_CONTEXT_MENU #define NS_VK_NUMPAD0 nsIDOMKeyEvent::DOM_VK_NUMPAD0 #define NS_VK_NUMPAD1 nsIDOMKeyEvent::DOM_VK_NUMPAD1 #define NS_VK_NUMPAD2 nsIDOMKeyEvent::DOM_VK_NUMPAD2 #define NS_VK_NUMPAD3 nsIDOMKeyEvent::DOM_VK_NUMPAD3 #define NS_VK_NUMPAD4 nsIDOMKeyEvent::DOM_VK_NUMPAD4 #define NS_VK_NUMPAD5 nsIDOMKeyEvent::DOM_VK_NUMPAD5 #define NS_VK_NUMPAD6 nsIDOMKeyEvent::DOM_VK_NUMPAD6 #define NS_VK_NUMPAD7 nsIDOMKeyEvent::DOM_VK_NUMPAD7 #define NS_VK_NUMPAD8 nsIDOMKeyEvent::DOM_VK_NUMPAD8 #define NS_VK_NUMPAD9 nsIDOMKeyEvent::DOM_VK_NUMPAD9 #define NS_VK_MULTIPLY nsIDOMKeyEvent::DOM_VK_MULTIPLY #define NS_VK_ADD nsIDOMKeyEvent::DOM_VK_ADD #define NS_VK_SEPARATOR nsIDOMKeyEvent::DOM_VK_SEPARATOR #define NS_VK_SUBTRACT nsIDOMKeyEvent::DOM_VK_SUBTRACT #define NS_VK_DECIMAL nsIDOMKeyEvent::DOM_VK_DECIMAL #define NS_VK_DIVIDE nsIDOMKeyEvent::DOM_VK_DIVIDE #define NS_VK_F1 nsIDOMKeyEvent::DOM_VK_F1 #define NS_VK_F2 nsIDOMKeyEvent::DOM_VK_F2 #define NS_VK_F3 nsIDOMKeyEvent::DOM_VK_F3 #define NS_VK_F4 nsIDOMKeyEvent::DOM_VK_F4 #define NS_VK_F5 nsIDOMKeyEvent::DOM_VK_F5 #define NS_VK_F6 nsIDOMKeyEvent::DOM_VK_F6 #define NS_VK_F7 nsIDOMKeyEvent::DOM_VK_F7 #define NS_VK_F8 nsIDOMKeyEvent::DOM_VK_F8 #define NS_VK_F9 nsIDOMKeyEvent::DOM_VK_F9 #define NS_VK_F10 nsIDOMKeyEvent::DOM_VK_F10 #define NS_VK_F11 nsIDOMKeyEvent::DOM_VK_F11 #define NS_VK_F12 nsIDOMKeyEvent::DOM_VK_F12 #define NS_VK_F13 nsIDOMKeyEvent::DOM_VK_F13 #define NS_VK_F14 nsIDOMKeyEvent::DOM_VK_F14 #define NS_VK_F15 nsIDOMKeyEvent::DOM_VK_F15 #define NS_VK_F16 nsIDOMKeyEvent::DOM_VK_F16 #define NS_VK_F17 nsIDOMKeyEvent::DOM_VK_F17 #define NS_VK_F18 nsIDOMKeyEvent::DOM_VK_F18 #define NS_VK_F19 nsIDOMKeyEvent::DOM_VK_F19 #define NS_VK_F20 nsIDOMKeyEvent::DOM_VK_F20 #define NS_VK_F21 nsIDOMKeyEvent::DOM_VK_F21 #define NS_VK_F22 nsIDOMKeyEvent::DOM_VK_F22 #define NS_VK_F23 nsIDOMKeyEvent::DOM_VK_F23 #define NS_VK_F24 nsIDOMKeyEvent::DOM_VK_F24 #define NS_VK_NUM_LOCK nsIDOMKeyEvent::DOM_VK_NUM_LOCK #define NS_VK_SCROLL_LOCK nsIDOMKeyEvent::DOM_VK_SCROLL_LOCK #define NS_VK_COMMA nsIDOMKeyEvent::DOM_VK_COMMA #define NS_VK_PERIOD nsIDOMKeyEvent::DOM_VK_PERIOD #define NS_VK_SLASH nsIDOMKeyEvent::DOM_VK_SLASH #define NS_VK_BACK_QUOTE nsIDOMKeyEvent::DOM_VK_BACK_QUOTE #define NS_VK_OPEN_BRACKET nsIDOMKeyEvent::DOM_VK_OPEN_BRACKET #define NS_VK_BACK_SLASH nsIDOMKeyEvent::DOM_VK_BACK_SLASH #define NS_VK_CLOSE_BRACKET nsIDOMKeyEvent::DOM_VK_CLOSE_BRACKET #define NS_VK_QUOTE nsIDOMKeyEvent::DOM_VK_QUOTE #define NS_VK_META nsIDOMKeyEvent::DOM_VK_META // IME Constants -- keep in synch with nsIDOMTextRange.h #define NS_TEXTRANGE_CARETPOSITION 0x01 #define NS_TEXTRANGE_RAWINPUT 0X02 #define NS_TEXTRANGE_SELECTEDRAWTEXT 0x03 #define NS_TEXTRANGE_CONVERTEDTEXT 0x04 #define NS_TEXTRANGE_SELECTEDCONVERTEDTEXT 0x05 #endif // nsGUIEvent_h__