LCOV - app.info - objdir/dist/include/nsGUIEvent.h

LCOV - code coverage report
| Current view: | directory - objdir/dist/include - nsGUIEvent.h (source / functions) |  | Found | Hit | Coverage |
| Test: | app.info | Lines: | 261 | 40 | 15.3 %
| Date: | 2012-07-07 | Functions: | 113 | 13 | 11.5 %

           1                 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
           2                 : /* ***** BEGIN LICENSE BLOCK *****
           3                 :  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
           4                 :  *
           5                 :  * The contents of this file are subject to the Mozilla Public License Version
           6                 :  * 1.1 (the "License"); you may not use this file except in compliance with
           7                 :  * the License. You may obtain a copy of the License at
           8                 :  * http://www.mozilla.org/MPL/
           9                 :  *
          10                 :  * Software distributed under the License is distributed on an "AS IS" basis,
          11                 :  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
          12                 :  * for the specific language governing rights and limitations under the
          13                 :  * License.
          14                 :  *
          15                 :  * The Original Code is mozilla.org code.
          16                 :  *
          17                 :  * The Initial Developer of the Original Code is
          18                 :  * Netscape Communications Corporation.
          19                 :  * Portions created by the Initial Developer are Copyright (C) 1998
          20                 :  * the Initial Developer. All Rights Reserved.
          21                 :  *
          22                 :  * Contributor(s):
          23                 :  *   Makoto Kato  <m_kato@ga2.so-net.ne.jp>
          24                 :  *   Dean Tessman <dean_tessman@hotmail.com>
          25                 :  *   Thomas K. Dyas <tdyas@zecador.org> (simple gestures support)
          26                 :  *   Masayuki Nakano <masayuki@d-toybox.com>
          27                 :  *
          28                 :  * Alternatively, the contents of this file may be used under the terms of
          29                 :  * either the GNU General Public License Version 2 or later (the "GPL"), or
          30                 :  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
          31                 :  * in which case the provisions of the GPL or the LGPL are applicable instead
          32                 :  * of those above. If you wish to allow use of your version of this file only
          33                 :  * under the terms of either the GPL or the LGPL, and not to allow others to
          34                 :  * use your version of this file under the terms of the MPL, indicate your
          35                 :  * decision by deleting the provisions above and replace them with the notice
          36                 :  * and other provisions required by the GPL or the LGPL. If you do not delete
          37                 :  * the provisions above, a recipient may use your version of this file under
          38                 :  * the terms of any one of the MPL, the GPL or the LGPL.
          39                 :  *
          40                 :  * ***** END LICENSE BLOCK ***** */
          41                 :
          42                 : #ifndef nsGUIEvent_h__
          43                 : #define nsGUIEvent_h__
          44                 :
          45                 : #include "nsCOMArray.h"
          46                 : #include "nsPoint.h"
          47                 : #include "nsRect.h"
          48                 : #include "nsRegion.h"
          49                 : #include "nsEvent.h"
          50                 : #include "nsStringGlue.h"
          51                 : #include "nsCOMPtr.h"
          52                 : #include "nsIAtom.h"
          53                 : #include "nsIDOMKeyEvent.h"
          54                 : #include "nsIDOMMouseEvent.h"
          55                 : #include "nsIDOMDataTransfer.h"
          56                 : #include "nsIDOMEventTarget.h"
          57                 : #include "nsIDOMTouchEvent.h"
          58                 : #include "nsWeakPtr.h"
          59                 : #include "nsIWidget.h"
          60                 : #include "nsTArray.h"
          61                 : #include "nsTraceRefcnt.h"
          62                 : #include "nsITransferable.h"
          63                 : #include "nsIVariant.h"
          64                 : #include "nsStyleConsts.h"
          65                 : #include "nsAutoPtr.h"
          66                 :
          67                 : namespace mozilla {
          68                 : namespace dom {
          69                 :   class PBrowserParent;
          70                 :   class PBrowserChild;
          71                 : }
          72                 : namespace plugins {
          73                 :   class PPluginInstanceChild;
          74                 : }
          75                 : }
          76                 :
          77                 : #ifdef ACCESSIBILITY
          78                 : class nsAccessible;
          79                 : #endif
          80                 : class nsRenderingContext;
          81                 : class nsIMenuItem;
          82                 : class nsIContent;
          83                 : class nsIURI;
          84                 : class nsHashKey;
          85                 :
          86                 : /**
          87                 :  * Event Struct Types
          88                 :  */
          89                 : #define NS_EVENT                           1
          90                 : #define NS_GUI_EVENT                       2
          91                 : #define NS_SIZE_EVENT                      3
          92                 : #define NS_SIZEMODE_EVENT                  4
          93                 : #define NS_ZLEVEL_EVENT                    5
          94                 : #define NS_PAINT_EVENT                     6
          95                 : #define NS_SCROLLBAR_EVENT                 7
          96                 : #define NS_INPUT_EVENT                     8
          97                 : #define NS_KEY_EVENT                       9
          98                 : #define NS_MOUSE_EVENT                    10
          99                 : #define NS_SCRIPT_ERROR_EVENT             12
         100                 : #define NS_TEXT_EVENT                     13
         101                 : #define NS_COMPOSITION_EVENT              14
         102                 : #define NS_MOUSE_SCROLL_EVENT             16
         103                 : #define NS_SCROLLPORT_EVENT               18
         104                 : #define NS_MUTATION_EVENT                 19 // |nsMutationEvent| in content
         105                 : #define NS_ACCESSIBLE_EVENT               20
         106                 : #define NS_FORM_EVENT                     21
         107                 : #define NS_FOCUS_EVENT                    22
         108                 : #define NS_POPUP_EVENT                    23
         109                 : #define NS_COMMAND_EVENT                  24
         110                 : #define NS_SCROLLAREA_EVENT               25
         111                 : #define NS_TRANSITION_EVENT               26
         112                 : #define NS_ANIMATION_EVENT                27
         113                 :
         114                 : #define NS_UI_EVENT                       28
         115                 : #define NS_SVG_EVENT                      30
         116                 : #define NS_SVGZOOM_EVENT                  31
         117                 : #define NS_SMIL_TIME_EVENT                32
         118                 :
         119                 : #define NS_QUERY_CONTENT_EVENT            33
         120                 :
         121                 : #define NS_DRAG_EVENT                     35
         122                 : #define NS_NOTIFYPAINT_EVENT              36
         123                 : #define NS_SIMPLE_GESTURE_EVENT           37
         124                 : #define NS_SELECTION_EVENT                38
         125                 : #define NS_CONTENT_COMMAND_EVENT          39
         126                 : #define NS_GESTURENOTIFY_EVENT            40
         127                 : #define NS_UISTATECHANGE_EVENT            41
         128                 : #define NS_MOZTOUCH_EVENT                 42
         129                 : #define NS_PLUGIN_EVENT                   43
         130                 : #define NS_TOUCH_EVENT                    44
         131                 :
         132                 : // These flags are sort of a mess. They're sort of shared between event
         133                 : // listener flags and event flags, but only some of them. You've been
         134                 : // warned!
         135                 : #define NS_EVENT_FLAG_NONE                0x0000
         136                 : #define NS_EVENT_FLAG_TRUSTED             0x0001
         137                 : #define NS_EVENT_FLAG_BUBBLE              0x0002
         138                 : #define NS_EVENT_FLAG_CAPTURE             0x0004
         139                 : #define NS_EVENT_FLAG_STOP_DISPATCH       0x0008
         140                 : #define NS_EVENT_FLAG_NO_DEFAULT          0x0010
         141                 : #define NS_EVENT_FLAG_CANT_CANCEL         0x0020
         142                 : #define NS_EVENT_FLAG_CANT_BUBBLE         0x0040
         143                 : #define NS_PRIV_EVENT_FLAG_SCRIPT         0x0080
         144                 : #define NS_EVENT_FLAG_NO_CONTENT_DISPATCH 0x0100
         145                 : #define NS_EVENT_FLAG_SYSTEM_EVENT        0x0200
         146                 : // Event has been dispatched at least once
         147                 : #define NS_EVENT_DISPATCHED               0x0400
         148                 : #define NS_EVENT_FLAG_DISPATCHING         0x0800
         149                 : // When an event is synthesized for testing, this flag will be set.
         150                 : // Note that this is currently used only with mouse events, because this
         151                 : // flag is not needed on other events now.  It could be added to other
         152                 : // events.
         153                 : #define NS_EVENT_FLAG_SYNTHETIC_TEST_EVENT 0x1000
         154                 :
         155                 : // Use this flag if the event should be dispatched only to chrome.
         156                 : #define NS_EVENT_FLAG_ONLY_CHROME_DISPATCH 0x2000
         157                 :
         158                 : // A flag for drag&drop handling.
         159                 : #define NS_EVENT_FLAG_NO_DEFAULT_CALLED_IN_CONTENT 0x4000
         160                 :
         161                 : #define NS_PRIV_EVENT_UNTRUSTED_PERMITTED 0x8000
         162                 :
         163                 : #define NS_EVENT_FLAG_EXCEPTION_THROWN    0x10000
         164                 :
         165                 : #define NS_EVENT_FLAG_PREVENT_MULTIPLE_ACTIONS 0x20000
         166                 :
         167                 : #define NS_EVENT_RETARGET_TO_NON_NATIVE_ANONYMOUS 0x40000
         168                 :
         169                 : #define NS_EVENT_FLAG_STOP_DISPATCH_IMMEDIATELY 0x80000
         170                 :
         171                 : #define NS_EVENT_CAPTURE_MASK             (~(NS_EVENT_FLAG_BUBBLE | NS_EVENT_FLAG_NO_CONTENT_DISPATCH))
         172                 : #define NS_EVENT_BUBBLE_MASK              (~(NS_EVENT_FLAG_CAPTURE | NS_EVENT_FLAG_NO_CONTENT_DISPATCH))
         173                 :
         174                 : #define NS_EVENT_TYPE_NULL                   0
         175                 :
         176                 : /**
         177                 :  * GUI MESSAGES
         178                 :  */
         179                 :  //@{
         180                 : #define NS_EVENT_NULL                   0
         181                 :
         182                 :
         183                 : #define NS_WINDOW_START                 100
         184                 :
         185                 : // Widget is being created
         186                 : #define NS_CREATE                       (NS_WINDOW_START)
         187                 : // Widget may be destroyed
         188                 : #define NS_XUL_CLOSE                    (NS_WINDOW_START + 1)
         189                 : // Widget is being destroyed
         190                 : #define NS_DESTROY                      (NS_WINDOW_START + 2)
         191                 : // Widget was resized
         192                 : #define NS_SIZE                         (NS_WINDOW_START + 3)
         193                 : // Widget size mode was changed
         194                 : #define NS_SIZEMODE                     (NS_WINDOW_START + 4)
         195                 : // Widget got activated
         196                 : #define NS_ACTIVATE                     (NS_WINDOW_START + 7)
         197                 : // Widget got deactivated
         198                 : #define NS_DEACTIVATE                   (NS_WINDOW_START + 8)
         199                 : // top-level window z-level change request
         200                 : #define NS_SETZLEVEL                    (NS_WINDOW_START + 9)
         201                 : // Widget was repainted (dispatched when it's safe to move widgets, but
         202                 : // only on some platforms (including GTK2 and Windows))
         203                 : #define NS_DID_PAINT                   (NS_WINDOW_START + 28)
         204                 : // Widget will need to be painted
         205                 : #define NS_WILL_PAINT                   (NS_WINDOW_START + 29)
         206                 : // Widget needs to be repainted
         207                 : #define NS_PAINT                        (NS_WINDOW_START + 30)
         208                 : // Key is pressed within a window
         209                 : #define NS_KEY_PRESS                    (NS_WINDOW_START + 31)
         210                 : // Key is released within a window
         211                 : #define NS_KEY_UP                       (NS_WINDOW_START + 32)
         212                 : // Key is pressed within a window
         213                 : #define NS_KEY_DOWN                     (NS_WINDOW_START + 33)
         214                 : // Window has been moved to a new location.
         215                 : // The events point contains the x, y location in screen coordinates
         216                 : #define NS_MOVE                         (NS_WINDOW_START + 34)
         217                 :
         218                 : // Tab control's selected tab has changed
         219                 : #define NS_TABCHANGE                    (NS_WINDOW_START + 35)
         220                 :
         221                 : #define NS_OS_TOOLBAR                   (NS_WINDOW_START + 36)
         222                 :
         223                 : // Indicates the display has changed depth
         224                 : #define NS_DISPLAYCHANGED                (NS_WINDOW_START + 40)
         225                 :
         226                 : // Indicates a theme change has occurred
         227                 : #define NS_THEMECHANGED                 (NS_WINDOW_START + 41)
         228                 :
         229                 : // Indicates a System color has changed. It is the platform
         230                 : // toolkits responsibility to invalidate the window to
         231                 : // ensure that it is drawn using the current system colors.
         232                 : #define NS_SYSCOLORCHANGED              (NS_WINDOW_START + 42)
         233                 :
         234                 : // Indicates that the ui state such as whether to show focus or
         235                 : // keyboard accelerator indicators has changed.
         236                 : #define NS_UISTATECHANGED               (NS_WINDOW_START + 43)
         237                 :
         238                 : // Done sizing or moving a window, so ensure that the mousedown state was cleared.
         239                 : #define NS_DONESIZEMOVE                 (NS_WINDOW_START + 44)
         240                 :
         241                 : #define NS_RESIZE_EVENT                 (NS_WINDOW_START + 60)
         242                 : #define NS_SCROLL_EVENT                 (NS_WINDOW_START + 61)
         243                 :
         244                 : // A plugin was clicked or otherwise focused. NS_PLUGIN_ACTIVATE should be
         245                 : // used when the window is not active. NS_PLUGIN_FOCUS should be used when
         246                 : // the window is active. In the latter case, the dispatcher of the event
         247                 : // is expected to ensure that the plugin's widget is focused beforehand.
         248                 : #define NS_PLUGIN_ACTIVATE               (NS_WINDOW_START + 62)
         249                 : #define NS_PLUGIN_FOCUS                  (NS_WINDOW_START + 63)
         250                 :
         251                 : #define NS_OFFLINE                       (NS_WINDOW_START + 64)
         252                 : #define NS_ONLINE                        (NS_WINDOW_START + 65)
         253                 :
         254                 : // Indicates a resize will occur
         255                 : #define NS_BEFORERESIZE_EVENT            (NS_WINDOW_START + 66)
         256                 :
         257                 : #define NS_MOUSE_MESSAGE_START          300
         258                 : #define NS_MOUSE_MOVE                   (NS_MOUSE_MESSAGE_START)
         259                 : #define NS_MOUSE_BUTTON_UP              (NS_MOUSE_MESSAGE_START + 1)
         260                 : #define NS_MOUSE_BUTTON_DOWN            (NS_MOUSE_MESSAGE_START + 2)
         261                 : #define NS_MOUSE_ENTER                  (NS_MOUSE_MESSAGE_START + 22)
         262                 : #define NS_MOUSE_EXIT                   (NS_MOUSE_MESSAGE_START + 23)
         263                 : #define NS_MOUSE_DOUBLECLICK            (NS_MOUSE_MESSAGE_START + 24)
         264                 : #define NS_MOUSE_CLICK                  (NS_MOUSE_MESSAGE_START + 27)
         265                 : #define NS_MOUSE_ACTIVATE               (NS_MOUSE_MESSAGE_START + 30)
         266                 : #define NS_MOUSE_ENTER_SYNTH            (NS_MOUSE_MESSAGE_START + 31)
         267                 : #define NS_MOUSE_EXIT_SYNTH             (NS_MOUSE_MESSAGE_START + 32)
         268                 : #define NS_MOUSE_MOZHITTEST             (NS_MOUSE_MESSAGE_START + 33)
         269                 : #define NS_MOUSEENTER                   (NS_MOUSE_MESSAGE_START + 34)
         270                 : #define NS_MOUSELEAVE                   (NS_MOUSE_MESSAGE_START + 35)
         271                 :
         272                 : #define NS_CONTEXTMENU_MESSAGE_START    500
         273                 : #define NS_CONTEXTMENU                  (NS_CONTEXTMENU_MESSAGE_START)
         274                 :
         275                 : #define NS_SCROLLBAR_MESSAGE_START      1000
         276                 : #define NS_SCROLLBAR_POS                (NS_SCROLLBAR_MESSAGE_START)
         277                 : #define NS_SCROLLBAR_PAGE_NEXT          (NS_SCROLLBAR_MESSAGE_START + 1)
         278                 : #define NS_SCROLLBAR_PAGE_PREV          (NS_SCROLLBAR_MESSAGE_START + 2)
         279                 : #define NS_SCROLLBAR_LINE_NEXT          (NS_SCROLLBAR_MESSAGE_START + 3)
         280                 : #define NS_SCROLLBAR_LINE_PREV          (NS_SCROLLBAR_MESSAGE_START + 4)
         281                 :
         282                 : #define NS_STREAM_EVENT_START           1100
         283                 : #define NS_LOAD                         (NS_STREAM_EVENT_START)
         284                 : #define NS_PAGE_UNLOAD                  (NS_STREAM_EVENT_START + 1)
         285                 : #define NS_HASHCHANGE                   (NS_STREAM_EVENT_START + 2)
         286                 : #define NS_IMAGE_ABORT                  (NS_STREAM_EVENT_START + 3)
         287                 : #define NS_LOAD_ERROR                   (NS_STREAM_EVENT_START + 4)
         288                 : #define NS_POPSTATE                     (NS_STREAM_EVENT_START + 5)
         289                 : #define NS_BEFORE_PAGE_UNLOAD           (NS_STREAM_EVENT_START + 6)
         290                 : #define NS_PAGE_RESTORE                 (NS_STREAM_EVENT_START + 7)
         291                 : #define NS_READYSTATECHANGE             (NS_STREAM_EVENT_START + 8)
         292                 :
         293                 : #define NS_FORM_EVENT_START             1200
         294                 : #define NS_FORM_SUBMIT                  (NS_FORM_EVENT_START)
         295                 : #define NS_FORM_RESET                   (NS_FORM_EVENT_START + 1)
         296                 : #define NS_FORM_CHANGE                  (NS_FORM_EVENT_START + 2)
         297                 : #define NS_FORM_SELECTED                (NS_FORM_EVENT_START + 3)
         298                 : #define NS_FORM_INPUT                   (NS_FORM_EVENT_START + 4)
         299                 : #define NS_FORM_INVALID                 (NS_FORM_EVENT_START + 5)
         300                 :
         301                 : //Need separate focus/blur notifications for non-native widgets
         302                 : #define NS_FOCUS_EVENT_START            1300
         303                 : #define NS_FOCUS_CONTENT                (NS_FOCUS_EVENT_START)
         304                 : #define NS_BLUR_CONTENT                 (NS_FOCUS_EVENT_START + 1)
         305                 :
         306                 : #define NS_DRAGDROP_EVENT_START         1400
         307                 : #define NS_DRAGDROP_ENTER               (NS_DRAGDROP_EVENT_START)
         308                 : #define NS_DRAGDROP_OVER                (NS_DRAGDROP_EVENT_START + 1)
         309                 : #define NS_DRAGDROP_EXIT                (NS_DRAGDROP_EVENT_START + 2)
         310                 : #define NS_DRAGDROP_DRAGDROP            (NS_DRAGDROP_EVENT_START + 3)
         311                 : #define NS_DRAGDROP_GESTURE             (NS_DRAGDROP_EVENT_START + 4)
         312                 : #define NS_DRAGDROP_DRAG                (NS_DRAGDROP_EVENT_START + 5)
         313                 : #define NS_DRAGDROP_END                 (NS_DRAGDROP_EVENT_START + 6)
         314                 : #define NS_DRAGDROP_START               (NS_DRAGDROP_EVENT_START + 7)
         315                 : #define NS_DRAGDROP_DROP                (NS_DRAGDROP_EVENT_START + 8)
         316                 : #define NS_DRAGDROP_OVER_SYNTH          (NS_DRAGDROP_EVENT_START + 1)
         317                 : #define NS_DRAGDROP_EXIT_SYNTH          (NS_DRAGDROP_EVENT_START + 2)
         318                 : #define NS_DRAGDROP_LEAVE_SYNTH         (NS_DRAGDROP_EVENT_START + 9)
         319                 :
         320                 : // Events for popups
         321                 : #define NS_XUL_EVENT_START            1500
         322                 : #define NS_XUL_POPUP_SHOWING          (NS_XUL_EVENT_START)
         323                 : #define NS_XUL_POPUP_SHOWN            (NS_XUL_EVENT_START+1)
         324                 : #define NS_XUL_POPUP_HIDING           (NS_XUL_EVENT_START+2)
         325                 : #define NS_XUL_POPUP_HIDDEN           (NS_XUL_EVENT_START+3)
         326                 : // NS_XUL_COMMAND used to be here     (NS_XUL_EVENT_START+4)
         327                 : #define NS_XUL_BROADCAST              (NS_XUL_EVENT_START+5)
         328                 : #define NS_XUL_COMMAND_UPDATE         (NS_XUL_EVENT_START+6)
         329                 : //@}
         330                 :
         331                 : // Scroll events
         332                 : #define NS_MOUSE_SCROLL_START         1600
         333                 : #define NS_MOUSE_SCROLL               (NS_MOUSE_SCROLL_START)
         334                 : #define NS_MOUSE_PIXEL_SCROLL         (NS_MOUSE_SCROLL_START + 1)
         335                 :
         336                 : #define NS_SCROLLPORT_START           1700
         337                 : #define NS_SCROLLPORT_UNDERFLOW       (NS_SCROLLPORT_START)
         338                 : #define NS_SCROLLPORT_OVERFLOW        (NS_SCROLLPORT_START+1)
         339                 : #define NS_SCROLLPORT_OVERFLOWCHANGED (NS_SCROLLPORT_START+2)
         340                 :
         341                 : // Mutation events defined elsewhere starting at 1800
         342                 :
         343                 : // accessible events
         344                 : #define NS_ACCESSIBLE_START           1900
         345                 : #define NS_GETACCESSIBLE              (NS_ACCESSIBLE_START)
         346                 :
         347                 : #define NS_USER_DEFINED_EVENT         2000
         348                 :
         349                 : // composition events
         350                 : #define NS_COMPOSITION_EVENT_START    2200
         351                 : #define NS_COMPOSITION_START          (NS_COMPOSITION_EVENT_START)
         352                 : #define NS_COMPOSITION_END            (NS_COMPOSITION_EVENT_START + 1)
         353                 : #define NS_COMPOSITION_UPDATE         (NS_COMPOSITION_EVENT_START + 2)
         354                 :
         355                 : // text events
         356                 : #define NS_TEXT_START                 2400
         357                 : #define NS_TEXT_TEXT                  (NS_TEXT_START)
         358                 :
         359                 : // UI events
         360                 : #define NS_UI_EVENT_START          2500
         361                 : // this is not to be confused with NS_ACTIVATE!
         362                 : #define NS_UI_ACTIVATE             (NS_UI_EVENT_START)
         363                 : #define NS_UI_FOCUSIN              (NS_UI_EVENT_START + 1)
         364                 : #define NS_UI_FOCUSOUT             (NS_UI_EVENT_START + 2)
         365                 :
         366                 : // pagetransition events
         367                 : #define NS_PAGETRANSITION_START    2700
         368                 : #define NS_PAGE_SHOW               (NS_PAGETRANSITION_START + 1)
         369                 : #define NS_PAGE_HIDE               (NS_PAGETRANSITION_START + 2)
         370                 :
         371                 : // SVG events
         372                 : #define NS_SVG_EVENT_START              2800
         373                 : #define NS_SVG_LOAD                     (NS_SVG_EVENT_START)
         374                 : #define NS_SVG_UNLOAD                   (NS_SVG_EVENT_START + 1)
         375                 : #define NS_SVG_ABORT                    (NS_SVG_EVENT_START + 2)
         376                 : #define NS_SVG_ERROR                    (NS_SVG_EVENT_START + 3)
         377                 : #define NS_SVG_RESIZE                   (NS_SVG_EVENT_START + 4)
         378                 : #define NS_SVG_SCROLL                   (NS_SVG_EVENT_START + 5)
         379                 :
         380                 : // SVG Zoom events
         381                 : #define NS_SVGZOOM_EVENT_START          2900
         382                 : #define NS_SVG_ZOOM                     (NS_SVGZOOM_EVENT_START)
         383                 :
         384                 : // XUL command events
         385                 : #define NS_XULCOMMAND_EVENT_START       3000
         386                 : #define NS_XUL_COMMAND                  (NS_XULCOMMAND_EVENT_START)
         387                 :
         388                 : // Cut, copy, paste events
         389                 : #define NS_CUTCOPYPASTE_EVENT_START     3100
         390                 : #define NS_COPY             (NS_CUTCOPYPASTE_EVENT_START)
         391                 : #define NS_CUT              (NS_CUTCOPYPASTE_EVENT_START + 1)
         392                 : #define NS_PASTE            (NS_CUTCOPYPASTE_EVENT_START + 2)
         393                 :
         394                 : // Query the content information
         395                 : #define NS_QUERY_CONTENT_EVENT_START    3200
         396                 : // Query for the selected text information, it return the selection offset,
         397                 : // selection length and selected text.
         398                 : #define NS_QUERY_SELECTED_TEXT          (NS_QUERY_CONTENT_EVENT_START)
         399                 : // Query for the text content of specified range, it returns actual lengh (if
         400                 : // the specified range is too long) and the text of the specified range.
         401                 : // Returns the entire text if requested length > actual length.
         402                 : #define NS_QUERY_TEXT_CONTENT           (NS_QUERY_CONTENT_EVENT_START + 1)
         403                 : // Query for the caret rect of nth insertion point. The offset of the result is
         404                 : // relative position from the top level widget.
         405                 : #define NS_QUERY_CARET_RECT             (NS_QUERY_CONTENT_EVENT_START + 3)
         406                 : // Query for the bounding rect of a range of characters. This works on any
         407                 : // valid character range given offset and length. Result is relative to top
         408                 : // level widget coordinates
         409                 : #define NS_QUERY_TEXT_RECT              (NS_QUERY_CONTENT_EVENT_START + 4)
         410                 : // Query for the bounding rect of the current focused frame. Result is relative
         411                 : // to top level widget coordinates
         412                 : #define NS_QUERY_EDITOR_RECT            (NS_QUERY_CONTENT_EVENT_START + 5)
         413                 : // Query for the current state of the content. The particular members of
         414                 : // mReply that are set for each query content event will be valid on success.
         415                 : #define NS_QUERY_CONTENT_STATE          (NS_QUERY_CONTENT_EVENT_START + 6)
         416                 : // Query for the selection in the form of a nsITransferable.
         417                 : #define NS_QUERY_SELECTION_AS_TRANSFERABLE (NS_QUERY_CONTENT_EVENT_START + 7)
         418                 : // Query for character at a point.  This returns the character offset and its
         419                 : // rect.  The point is specified by nsEvent::refPoint.
         420                 : #define NS_QUERY_CHARACTER_AT_POINT     (NS_QUERY_CONTENT_EVENT_START + 8)
         421                 : // Query if the DOM element under nsEvent::refPoint belongs to our widget
         422                 : // or not.
         423                 : #define NS_QUERY_DOM_WIDGET_HITTEST     (NS_QUERY_CONTENT_EVENT_START + 9)
         424                 : // Query for some information about mouse wheel event's target
         425                 : // XXX This is used only for supporting high resolution mouse scroll on Windows
         426                 : //     and it's going to be reimplemented with another approach.  At that time,
         427                 : //     this even is going to be removed. Therefore,  DON'T use this event for
         428                 : //     other purpose.
         429                 : #define NS_QUERY_SCROLL_TARGET_INFO     (NS_QUERY_CONTENT_EVENT_START + 99)
         430                 :
         431                 : // Video events
         432                 : #define NS_MEDIA_EVENT_START            3300
         433                 : #define NS_LOADSTART           (NS_MEDIA_EVENT_START)
         434                 : #define NS_PROGRESS            (NS_MEDIA_EVENT_START+1)
         435                 : #define NS_SUSPEND             (NS_MEDIA_EVENT_START+2)
         436                 : #define NS_EMPTIED             (NS_MEDIA_EVENT_START+3)
         437                 : #define NS_STALLED             (NS_MEDIA_EVENT_START+4)
         438                 : #define NS_PLAY                (NS_MEDIA_EVENT_START+5)
         439                 : #define NS_PAUSE               (NS_MEDIA_EVENT_START+6)
         440                 : #define NS_LOADEDMETADATA      (NS_MEDIA_EVENT_START+7)
         441                 : #define NS_LOADEDDATA          (NS_MEDIA_EVENT_START+8)
         442                 : #define NS_WAITING             (NS_MEDIA_EVENT_START+9)
         443                 : #define NS_PLAYING             (NS_MEDIA_EVENT_START+10)
         444                 : #define NS_CANPLAY             (NS_MEDIA_EVENT_START+11)
         445                 : #define NS_CANPLAYTHROUGH      (NS_MEDIA_EVENT_START+12)
         446                 : #define NS_SEEKING             (NS_MEDIA_EVENT_START+13)
         447                 : #define NS_SEEKED              (NS_MEDIA_EVENT_START+14)
         448                 : #define NS_TIMEUPDATE          (NS_MEDIA_EVENT_START+15)
         449                 : #define NS_ENDED               (NS_MEDIA_EVENT_START+16)
         450                 : #define NS_RATECHANGE          (NS_MEDIA_EVENT_START+17)
         451                 : #define NS_DURATIONCHANGE      (NS_MEDIA_EVENT_START+18)
         452                 : #define NS_VOLUMECHANGE        (NS_MEDIA_EVENT_START+19)
         453                 : #define NS_MOZAUDIOAVAILABLE   (NS_MEDIA_EVENT_START+20)
         454                 :
         455                 : // paint notification events
         456                 : #define NS_NOTIFYPAINT_START    3400
         457                 : #define NS_AFTERPAINT           (NS_NOTIFYPAINT_START)
         458                 :
         459                 : // Simple gesture events
         460                 : #define NS_SIMPLE_GESTURE_EVENT_START    3500
         461                 : #define NS_SIMPLE_GESTURE_SWIPE          (NS_SIMPLE_GESTURE_EVENT_START)
         462                 : #define NS_SIMPLE_GESTURE_MAGNIFY_START  (NS_SIMPLE_GESTURE_EVENT_START+1)
         463                 : #define NS_SIMPLE_GESTURE_MAGNIFY_UPDATE (NS_SIMPLE_GESTURE_EVENT_START+2)
         464                 : #define NS_SIMPLE_GESTURE_MAGNIFY        (NS_SIMPLE_GESTURE_EVENT_START+3)
         465                 : #define NS_SIMPLE_GESTURE_ROTATE_START   (NS_SIMPLE_GESTURE_EVENT_START+4)
         466                 : #define NS_SIMPLE_GESTURE_ROTATE_UPDATE  (NS_SIMPLE_GESTURE_EVENT_START+5)
         467                 : #define NS_SIMPLE_GESTURE_ROTATE         (NS_SIMPLE_GESTURE_EVENT_START+6)
         468                 : #define NS_SIMPLE_GESTURE_TAP            (NS_SIMPLE_GESTURE_EVENT_START+7)
         469                 : #define NS_SIMPLE_GESTURE_PRESSTAP       (NS_SIMPLE_GESTURE_EVENT_START+8)
         470                 :
         471                 : // These are used to send native events to plugins.
         472                 : #define NS_PLUGIN_EVENT_START            3600
         473                 : #define NS_PLUGIN_INPUT_EVENT            (NS_PLUGIN_EVENT_START)
         474                 : #define NS_PLUGIN_FOCUS_EVENT            (NS_PLUGIN_EVENT_START+1)
         475                 :
         476                 : // Events to manipulate selection (nsSelectionEvent)
         477                 : #define NS_SELECTION_EVENT_START        3700
         478                 : // Clear any previous selection and set the given range as the selection
         479                 : #define NS_SELECTION_SET                (NS_SELECTION_EVENT_START)
         480                 :
         481                 : // Events of commands for the contents
         482                 : #define NS_CONTENT_COMMAND_EVENT_START  3800
         483                 : #define NS_CONTENT_COMMAND_CUT          (NS_CONTENT_COMMAND_EVENT_START)
         484                 : #define NS_CONTENT_COMMAND_COPY         (NS_CONTENT_COMMAND_EVENT_START+1)
         485                 : #define NS_CONTENT_COMMAND_PASTE        (NS_CONTENT_COMMAND_EVENT_START+2)
         486                 : #define NS_CONTENT_COMMAND_DELETE       (NS_CONTENT_COMMAND_EVENT_START+3)
         487                 : #define NS_CONTENT_COMMAND_UNDO         (NS_CONTENT_COMMAND_EVENT_START+4)
         488                 : #define NS_CONTENT_COMMAND_REDO         (NS_CONTENT_COMMAND_EVENT_START+5)
         489                 : #define NS_CONTENT_COMMAND_PASTE_TRANSFERABLE (NS_CONTENT_COMMAND_EVENT_START+6)
         490                 : // NS_CONTENT_COMMAND_SCROLL scrolls the nearest scrollable element to the
         491                 : // currently focused content or latest DOM selection. This would normally be
         492                 : // the same element scrolled by keyboard scroll commands, except that this event
         493                 : // will scroll an element scrollable in either direction.  I.e., if the nearest
         494                 : // scrollable ancestor element can only be scrolled vertically, and horizontal
         495                 : // scrolling is requested using this event, no scrolling will occur.
         496                 : #define NS_CONTENT_COMMAND_SCROLL       (NS_CONTENT_COMMAND_EVENT_START+7)
         497                 :
         498                 : // Event to gesture notification
         499                 : #define NS_GESTURENOTIFY_EVENT_START 3900
         500                 :
         501                 : #define NS_ORIENTATION_EVENT         4000
         502                 :
         503                 : #define NS_SCROLLAREA_EVENT_START    4100
         504                 : #define NS_SCROLLEDAREACHANGED       (NS_SCROLLAREA_EVENT_START)
         505                 :
         506                 : #define NS_TRANSITION_EVENT_START    4200
         507                 : #define NS_TRANSITION_END            (NS_TRANSITION_EVENT_START)
         508                 :
         509                 : #define NS_ANIMATION_EVENT_START     4250
         510                 : #define NS_ANIMATION_START           (NS_ANIMATION_EVENT_START)
         511                 : #define NS_ANIMATION_END             (NS_ANIMATION_EVENT_START + 1)
         512                 : #define NS_ANIMATION_ITERATION       (NS_ANIMATION_EVENT_START + 2)
         513                 :
         514                 : #define NS_SMIL_TIME_EVENT_START     4300
         515                 : #define NS_SMIL_BEGIN                (NS_SMIL_TIME_EVENT_START)
         516                 : #define NS_SMIL_END                  (NS_SMIL_TIME_EVENT_START + 1)
         517                 : #define NS_SMIL_REPEAT               (NS_SMIL_TIME_EVENT_START + 2)
         518                 :
         519                 : #define NS_MOZTOUCH_EVENT_START      4400
         520                 : #define NS_MOZTOUCH_DOWN             (NS_MOZTOUCH_EVENT_START)
         521                 : #define NS_MOZTOUCH_MOVE             (NS_MOZTOUCH_EVENT_START+1)
         522                 : #define NS_MOZTOUCH_UP               (NS_MOZTOUCH_EVENT_START+2)
         523                 :
         524                 : // script notification events
         525                 : #define NS_NOTIFYSCRIPT_START        4500
         526                 : #define NS_BEFORE_SCRIPT_EXECUTE     (NS_NOTIFYSCRIPT_START)
         527                 : #define NS_AFTER_SCRIPT_EXECUTE      (NS_NOTIFYSCRIPT_START+1)
         528                 :
         529                 : #define NS_PRINT_EVENT_START         4600
         530                 : #define NS_BEFOREPRINT               (NS_PRINT_EVENT_START)
         531                 : #define NS_AFTERPRINT                (NS_PRINT_EVENT_START + 1)
         532                 :
         533                 : #define NS_MESSAGE_EVENT_START       4700
         534                 : #define NS_MESSAGE                   (NS_MESSAGE_EVENT_START)
         535                 :
         536                 : // Open and close events
         537                 : #define NS_OPENCLOSE_EVENT_START     4800
         538                 : #define NS_OPEN                      (NS_OPENCLOSE_EVENT_START)
         539                 : #define NS_CLOSE                     (NS_OPENCLOSE_EVENT_START+1)
         540                 :
         541                 : // Device motion and orientation
         542                 : #define NS_DEVICE_ORIENTATION_START  4900
         543                 : #define NS_DEVICE_ORIENTATION        (NS_DEVICE_ORIENTATION_START)
         544                 : #define NS_DEVICE_MOTION             (NS_DEVICE_ORIENTATION_START+1)
         545                 :
         546                 : #define NS_SHOW_EVENT                5000
         547                 :
         548                 : // Fullscreen DOM API
         549                 : #define NS_FULL_SCREEN_START         5100
         550                 : #define NS_FULLSCREENCHANGE          (NS_FULL_SCREEN_START)
         551                 : #define NS_FULLSCREENERROR           (NS_FULL_SCREEN_START + 1)
         552                 :
         553                 : #define NS_TOUCH_EVENT_START         5200
         554                 : #define NS_TOUCH_START               (NS_TOUCH_EVENT_START)
         555                 : #define NS_TOUCH_MOVE                (NS_TOUCH_EVENT_START+1)
         556                 : #define NS_TOUCH_END                 (NS_TOUCH_EVENT_START+2)
         557                 : #define NS_TOUCH_ENTER               (NS_TOUCH_EVENT_START+3)
         558                 : #define NS_TOUCH_LEAVE               (NS_TOUCH_EVENT_START+4)
         559                 : #define NS_TOUCH_CANCEL              (NS_TOUCH_EVENT_START+5)
         560                 :
         561                 : /**
         562                 :  * Return status for event processors, nsEventStatus, is defined in
         563                 :  * nsEvent.h.
         564                 :  */
         565                 :
         566                 : /**
         567                 :  * different types of (top-level) window z-level positioning
         568                 :  */
         569                 : enum nsWindowZ {
         570                 :   nsWindowZTop = 0,   // on top
         571                 :   nsWindowZBottom,    // on bottom
         572                 :   nsWindowZRelative   // just below some specified widget
         573                 : };
         574                 :
         575                 : /**
         576                 :  * General event
         577                 :  */
         578                 :
         579                 : class nsEvent
         580               0 : {
         581                 : protected:
         582              90 :   nsEvent(bool isTrusted, PRUint32 msg, PRUint8 structType)
         583                 :     : eventStructType(structType),
         584                 :       message(msg),
         585                 :       refPoint(0, 0),
         586                 :       time(0),
         587                 :       flags(isTrusted ? NS_EVENT_FLAG_TRUSTED : NS_EVENT_FLAG_NONE),
         588              90 :       userType(0)
         589                 :   {
         590              90 :     MOZ_COUNT_CTOR(nsEvent);
         591              90 :   }
         592                 :
         593               0 :   nsEvent()
         594               0 :   {
         595               0 :   }
         596                 :
         597                 : public:
         598           17402 :   nsEvent(bool isTrusted, PRUint32 msg)
         599                 :     : eventStructType(NS_EVENT),
         600                 :       message(msg),
         601                 :       refPoint(0, 0),
         602                 :       time(0),
         603                 :       flags(isTrusted ? NS_EVENT_FLAG_TRUSTED : NS_EVENT_FLAG_NONE),
         604           17402 :       userType(0)
         605                 :   {
         606           17402 :     MOZ_COUNT_CTOR(nsEvent);
         607           17402 :   }
         608                 :
         609           17492 :   ~nsEvent()
         610           17492 :   {
         611           17492 :     MOZ_COUNT_DTOR(nsEvent);
         612           17492 :   }
         613                 :
         614                 :   // See event struct types
         615                 :   PRUint8     eventStructType;
         616                 :   // See GUI MESSAGES,
         617                 :   PRUint32    message;
         618                 :   // Relative to the widget of the event, or if there is no widget then it is
         619                 :   // in screen coordinates. Not modified by layout code.
         620                 :   nsIntPoint  refPoint;
         621                 :   // Elapsed time, in milliseconds, from a platform-specific zero time
         622                 :   // to the time the message was created
         623                 :   PRUint64    time;
         624                 :   // Flags to hold event flow stage and capture/bubble cancellation
         625                 :   // status. This is used also to indicate whether the event is trusted.
         626                 :   PRUint32    flags;
         627                 :   // Additional type info for user defined events
         628                 :   nsCOMPtr<nsIAtom>     userType;
         629                 :   // Event targets, needed by DOM Events
         630                 :   nsCOMPtr<nsIDOMEventTarget> target;
         631                 :   nsCOMPtr<nsIDOMEventTarget> currentTarget;
         632                 :   nsCOMPtr<nsIDOMEventTarget> originalTarget;
         633                 : };
         634                 :
         635                 : /**
         636                 :  * General graphic user interface event
         637                 :  */
         638                 :
         639                 : class nsGUIEvent : public nsEvent
         640               2 : {
         641                 : protected:
         642               2 :   nsGUIEvent(bool isTrusted, PRUint32 msg, nsIWidget *w, PRUint8 structType)
         643                 :     : nsEvent(isTrusted, msg, structType),
         644               2 :       widget(w), pluginEvent(nsnull)
         645                 :   {
         646               2 :   }
         647                 :
         648               0 :   nsGUIEvent()
         649               0 :     : pluginEvent(nsnull)
         650                 :   {
         651               0 :   }
         652                 :
         653                 : public:
         654               0 :   nsGUIEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
         655                 :     : nsEvent(isTrusted, msg, NS_GUI_EVENT),
         656               0 :       widget(w), pluginEvent(nsnull)
         657                 :   {
         658               0 :   }
         659                 :
         660                 :   /// Originator of the event
         661                 :   nsCOMPtr<nsIWidget> widget;
         662                 :
         663                 :   /// Event for NPAPI plugin
         664                 :   void* pluginEvent;
         665                 : };
         666                 :
         667                 : /**
         668                 :  * Script error event
         669                 :  */
         670                 :
         671                 : class nsScriptErrorEvent : public nsEvent
         672               0 : {
         673                 : public:
         674               0 :   nsScriptErrorEvent(bool isTrusted, PRUint32 msg)
         675                 :     : nsEvent(isTrusted, msg, NS_SCRIPT_ERROR_EVENT),
         676               0 :       lineNr(0), errorMsg(nsnull), fileName(nsnull)
         677                 :   {
         678               0 :   }
         679                 :
         680                 :   PRInt32           lineNr;
         681                 :   const PRUnichar*  errorMsg;
         682                 :   const PRUnichar*  fileName;
         683                 : };
         684                 :
         685                 : /**
         686                 :  * Window resize event
         687                 :  */
         688                 :
         689                 : class nsSizeEvent : public nsGUIEvent
         690               0 : {
         691                 : public:
         692               0 :   nsSizeEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
         693                 :     : nsGUIEvent(isTrusted, msg, w, NS_SIZE_EVENT),
         694               0 :       windowSize(nsnull), mWinWidth(0), mWinHeight(0)
         695                 :   {
         696               0 :   }
         697                 :
         698                 :   /// x,y width, height in pixels (client area)
         699                 :   nsIntRect       *windowSize;
         700                 :   /// width of entire window (in pixels)
         701                 :   PRInt32         mWinWidth;
         702                 :   /// height of entire window (in pixels)
         703                 :   PRInt32         mWinHeight;
         704                 : };
         705                 :
         706                 : /**
         707                 :  * Window size mode event
         708                 :  */
         709                 :
         710                 : class nsSizeModeEvent : public nsGUIEvent
         711               0 : {
         712                 : public:
         713               0 :   nsSizeModeEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
         714                 :     : nsGUIEvent(isTrusted, msg, w, NS_SIZEMODE_EVENT),
         715               0 :       mSizeMode(nsSizeMode_Normal)
         716                 :   {
         717               0 :   }
         718                 :
         719                 :   nsSizeMode      mSizeMode;
         720                 : };
         721                 :
         722                 : /**
         723                 :  * Window z-level event
         724                 :  */
         725                 :
         726                 : class nsZLevelEvent : public nsGUIEvent
         727                 : {
         728                 : public:
         729               0 :   nsZLevelEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
         730                 :     : nsGUIEvent(isTrusted, msg, w, NS_ZLEVEL_EVENT),
         731                 :       mPlacement(nsWindowZTop), mReqBelow(nsnull), mActualBelow(nsnull),
         732               0 :       mImmediate(false), mAdjusted(false)
         733                 :   {
         734               0 :   }
         735                 :
         736                 :   nsWindowZ  mPlacement;
         737                 :   nsIWidget *mReqBelow,    // widget we request being below, if any
         738                 :             *mActualBelow; // widget to be below, returned by handler
         739                 :   bool       mImmediate,   // handler should make changes immediately
         740                 :              mAdjusted;    // handler changed placement
         741                 : };
         742                 :
         743                 : /**
         744                 :  * Window repaint event
         745                 :  */
         746                 :
         747                 : class nsPaintEvent : public nsGUIEvent
         748               0 : {
         749                 : public:
         750               0 :   nsPaintEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
         751                 :     : nsGUIEvent(isTrusted, msg, w, NS_PAINT_EVENT),
         752                 :       willSendDidPaint(false),
         753               0 :       didSendWillPaint(false)
         754                 :   {
         755               0 :   }
         756                 :
         757                 :   // area that needs repainting
         758                 :   nsIntRegion region;
         759                 :   bool willSendDidPaint;
         760                 :   bool didSendWillPaint;
         761                 : };
         762                 :
         763                 : /**
         764                 :  * Scrollbar event
         765                 :  */
         766                 :
         767                 : class nsScrollbarEvent : public nsGUIEvent
         768               0 : {
         769                 : public:
         770               0 :   nsScrollbarEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
         771                 :     : nsGUIEvent(isTrusted, msg, w, NS_SCROLLBAR_EVENT),
         772               0 :       position(0)
         773                 :   {
         774               0 :   }
         775                 :
         776                 :   /// ranges between scrollbar 0 and (maxRange - thumbSize). See nsIScrollbar
         777                 :   PRUint32        position;
         778                 : };
         779                 :
         780                 : class nsScrollPortEvent : public nsGUIEvent
         781               0 : {
         782                 : public:
         783                 :   enum orientType {
         784                 :     vertical   = 0,
         785                 :     horizontal = 1,
         786                 :     both       = 2
         787                 :   };
         788                 :
         789               0 :   nsScrollPortEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
         790                 :     : nsGUIEvent(isTrusted, msg, w, NS_SCROLLPORT_EVENT),
         791               0 :       orient(vertical)
         792                 :   {
         793               0 :   }
         794                 :
         795                 :   orientType orient;
         796                 : };
         797                 :
         798                 : class nsScrollAreaEvent : public nsGUIEvent
         799               0 : {
         800                 : public:
         801               0 :   nsScrollAreaEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
         802               0 :     : nsGUIEvent(isTrusted, msg, w, NS_SCROLLAREA_EVENT)
         803                 :   {
         804               0 :   }
         805                 :
         806                 :   nsRect mArea;
         807                 : };
         808                 :
         809                 : class nsInputEvent : public nsGUIEvent
         810               2 : {
         811                 : protected:
         812               2 :   nsInputEvent(bool isTrusted, PRUint32 msg, nsIWidget *w,
         813                 :                PRUint8 structType)
         814                 :     : nsGUIEvent(isTrusted, msg, w, structType),
         815               2 :       isShift(false), isControl(false), isAlt(false), isMeta(false)
         816                 :   {
         817               2 :   }
         818                 :
         819               0 :   nsInputEvent()
         820               0 :   {
         821               0 :   }
         822                 :
         823                 : public:
         824               0 :   nsInputEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
         825                 :     : nsGUIEvent(isTrusted, msg, w, NS_INPUT_EVENT),
         826               0 :       isShift(false), isControl(false), isAlt(false), isMeta(false)
         827                 :   {
         828               0 :   }
         829                 :
         830                 :   /// true indicates the shift key is down
         831                 :   bool            isShift;
         832                 :   /// true indicates the control key is down
         833                 :   bool            isControl;
         834                 :   /// true indicates the alt key is down
         835                 :   bool            isAlt;
         836                 :   /// true indicates the meta key is down (or, on Mac, the Command key)
         837                 :   bool            isMeta;
         838                 : };
         839                 :
         840                 : /**
         841                 :  * Mouse event
         842                 :  */
         843                 :
         844                 : class nsMouseEvent_base : public nsInputEvent
         845               2 : {
         846                 : private:
         847                 :   friend class mozilla::dom::PBrowserParent;
         848                 :   friend class mozilla::dom::PBrowserChild;
         849                 :
         850                 : public:
         851                 :
         852               0 :   nsMouseEvent_base()
         853               0 :   {
         854               0 :   }
         855                 :
         856               2 :   nsMouseEvent_base(bool isTrusted, PRUint32 msg, nsIWidget *w, PRUint8 type)
         857                 :     : nsInputEvent(isTrusted, msg, w, type), button(0), pressure(0)
         858               2 :     , inputSource(nsIDOMMouseEvent::MOZ_SOURCE_MOUSE) {}
         859                 :
         860                 :   /// The possible related target
         861                 :   nsCOMPtr<nsISupports> relatedTarget;
         862                 :
         863                 :   PRInt16               button;
         864                 :
         865                 :   // Finger or touch pressure of event
         866                 :   // ranges between 0.0 and 1.0
         867                 :   float                 pressure;
         868                 :
         869                 :   // Possible values at nsIDOMMouseEvent
         870                 :   PRUint16              inputSource;
         871                 : };
         872                 :
         873                 : class nsMouseEvent : public nsMouseEvent_base
         874               0 : {
         875                 : private:
         876                 :   friend class mozilla::dom::PBrowserParent;
         877                 :   friend class mozilla::dom::PBrowserChild;
         878                 :
         879                 : public:
         880                 :   enum buttonType  { eLeftButton = 0, eMiddleButton = 1, eRightButton = 2 };
         881                 :   enum reasonType  { eReal, eSynthesized };
         882                 :   enum contextType { eNormal, eContextMenuKey };
         883                 :   enum exitType    { eChild, eTopLevel };
         884                 :
         885               0 :   nsMouseEvent()
         886               0 :   {
         887               0 :   }
         888                 :
         889                 : protected:
         890               0 :   nsMouseEvent(bool isTrusted, PRUint32 msg, nsIWidget *w,
         891                 :                PRUint8 structType, reasonType aReason)
         892                 :     : nsMouseEvent_base(isTrusted, msg, w, structType),
         893                 :       acceptActivation(false), ignoreRootScrollFrame(false),
         894               0 :       reason(aReason), context(eNormal), exit(eChild), clickCount(0)
         895                 :   {
         896               0 :     switch (msg) {
         897                 :       case NS_MOUSE_MOVE:
         898               0 :         flags |= NS_EVENT_FLAG_CANT_CANCEL;
         899               0 :         break;
         900                 :       case NS_MOUSEENTER:
         901                 :       case NS_MOUSELEAVE:
         902               0 :         flags |= (NS_EVENT_FLAG_CANT_CANCEL & NS_EVENT_FLAG_CANT_BUBBLE);
         903               0 :         break;
         904                 :       default:
         905               0 :         break;
         906                 :     }
         907               0 :   }
         908                 :
         909                 : public:
         910                 :
         911               2 :   nsMouseEvent(bool isTrusted, PRUint32 msg, nsIWidget *w,
         912                 :                reasonType aReason, contextType aContext = eNormal)
         913                 :     : nsMouseEvent_base(isTrusted, msg, w, NS_MOUSE_EVENT),
         914                 :       acceptActivation(false), ignoreRootScrollFrame(false),
         915               2 :       reason(aReason), context(aContext), exit(eChild), clickCount(0)
         916                 :   {
         917               2 :     switch (msg) {
         918                 :       case NS_MOUSE_MOVE:
         919               0 :         flags |= NS_EVENT_FLAG_CANT_CANCEL;
         920               0 :         break;
         921                 :       case NS_MOUSEENTER:
         922                 :       case NS_MOUSELEAVE:
         923               0 :         flags |= (NS_EVENT_FLAG_CANT_CANCEL | NS_EVENT_FLAG_CANT_BUBBLE);
         924               0 :         break;
         925                 :       case NS_CONTEXTMENU:
         926               0 :         button = (context == eNormal) ? eRightButton : eLeftButton;
         927               0 :         break;
         928                 :       default:
         929               2 :         break;
         930                 :     }
         931               2 :   }
         932                 :
         933                 : #ifdef NS_DEBUG
         934               4 :   ~nsMouseEvent() {
         935               2 :     NS_WARN_IF_FALSE(message != NS_CONTEXTMENU ||
         936                 :                      button ==
         937                 :                        ((context == eNormal) ? eRightButton : eLeftButton),
         938                 :                      "Wrong button set to NS_CONTEXTMENU event?");
         939               2 :   }
         940                 : #endif
         941                 :
         942                 :   /// Special return code for MOUSE_ACTIVATE to signal
         943                 :   /// if the target accepts activation (1), or denies it (0)
         944                 :   bool acceptActivation;
         945                 :   // Whether the event should ignore scroll frame bounds
         946                 :   // during dispatch.
         947                 :   bool ignoreRootScrollFrame;
         948                 :
         949                 :   reasonType   reason : 4;
         950                 :   contextType  context : 4;
         951                 :   exitType     exit;
         952                 :
         953                 :   /// The number of mouse clicks
         954                 :   PRUint32     clickCount;
         955                 : };
         956                 :
         957                 : /**
         958                 :  * Drag event
         959                 :  */
         960                 :
         961                 : class nsDragEvent : public nsMouseEvent
         962               0 : {
         963                 : public:
         964               0 :   nsDragEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
         965                 :     : nsMouseEvent(isTrusted, msg, w, NS_DRAG_EVENT, eReal),
         966               0 :       userCancelled(false)
         967                 :   {
         968               0 :     if (msg == NS_DRAGDROP_EXIT_SYNTH ||
         969                 :         msg == NS_DRAGDROP_LEAVE_SYNTH ||
         970                 :         msg == NS_DRAGDROP_END) {
         971               0 :       flags |= NS_EVENT_FLAG_CANT_CANCEL;
         972                 :     }
         973               0 :   }
         974                 :
         975                 :   nsCOMPtr<nsIDOMDataTransfer> dataTransfer;
         976                 :   bool userCancelled;
         977                 : };
         978                 :
         979                 : #ifdef ACCESSIBILITY
         980                 : /**
         981                 :  * Accessible event
         982                 :  */
         983                 :
         984                 : class nsAccessibleEvent : public nsInputEvent
         985               0 : {
         986                 : public:
         987               0 :   nsAccessibleEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
         988                 :     : nsInputEvent(isTrusted, msg, w, NS_ACCESSIBLE_EVENT),
         989               0 :       mAccessible(nsnull)
         990                 :   {
         991               0 :   }
         992                 :
         993                 :   nsAccessible *mAccessible;
         994                 : };
         995                 : #endif
         996                 :
         997                 : /**
         998                 :  * Keyboard event
         999                 :  */
        1000                 :
        1001               0 : struct nsAlternativeCharCode {
        1002               0 :   nsAlternativeCharCode(PRUint32 aUnshiftedCharCode,
        1003                 :                         PRUint32 aShiftedCharCode) :
        1004               0 :     mUnshiftedCharCode(aUnshiftedCharCode), mShiftedCharCode(aShiftedCharCode)
        1005                 :   {
        1006               0 :   }
        1007                 :   PRUint32 mUnshiftedCharCode;
        1008                 :   PRUint32 mShiftedCharCode;
        1009                 : };
        1010                 :
        1011                 : class nsKeyEvent : public nsInputEvent
        1012               0 : {
        1013                 : private:
        1014                 :   friend class mozilla::dom::PBrowserParent;
        1015                 :   friend class mozilla::dom::PBrowserChild;
        1016                 :
        1017                 : public:
        1018               0 :   nsKeyEvent()
        1019               0 :   {
        1020               0 :   }
        1021                 :
        1022               0 :   nsKeyEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
        1023                 :     : nsInputEvent(isTrusted, msg, w, NS_KEY_EVENT),
        1024               0 :       keyCode(0), charCode(0), isChar(0)
        1025                 :   {
        1026               0 :   }
        1027                 :
        1028                 :   /// see NS_VK codes
        1029                 :   PRUint32        keyCode;
        1030                 :   /// OS translated Unicode char
        1031                 :   PRUint32        charCode;
        1032                 :   // OS translated Unicode chars which are used for accesskey and accelkey
        1033                 :   // handling. The handlers will try from first character to last character.
        1034                 :   nsTArray<nsAlternativeCharCode> alternativeCharCodes;
        1035                 :   // indicates whether the event signifies a printable character
        1036                 :   bool            isChar;
        1037                 : };
        1038                 :
        1039                 : /**
        1040                 :  * IME Related Events
        1041                 :  */
        1042                 :
        1043                 : struct nsTextRangeStyle
        1044                 : {
        1045                 :   enum {
        1046                 :     LINESTYLE_NONE   = NS_STYLE_TEXT_DECORATION_STYLE_NONE,
        1047                 :     LINESTYLE_SOLID  = NS_STYLE_TEXT_DECORATION_STYLE_SOLID,
        1048                 :     LINESTYLE_DOTTED = NS_STYLE_TEXT_DECORATION_STYLE_DOTTED,
        1049                 :     LINESTYLE_DASHED = NS_STYLE_TEXT_DECORATION_STYLE_DASHED,
        1050                 :     LINESTYLE_DOUBLE = NS_STYLE_TEXT_DECORATION_STYLE_DOUBLE,
        1051                 :     LINESTYLE_WAVY   = NS_STYLE_TEXT_DECORATION_STYLE_WAVY
        1052                 :   };
        1053                 :
        1054                 :   enum {
        1055                 :     DEFINED_NONE             = 0x00,
        1056                 :     DEFINED_LINESTYLE        = 0x01,
        1057                 :     DEFINED_FOREGROUND_COLOR = 0x02,
        1058                 :     DEFINED_BACKGROUND_COLOR = 0x04,
        1059                 :     DEFINED_UNDERLINE_COLOR  = 0x08
        1060                 :   };
        1061                 :
        1062                 :   // Initialize all members, because nsTextRange instances may be compared by
        1063                 :   // memcomp.
        1064            1464 :   nsTextRangeStyle()
        1065                 :   {
        1066            1464 :     Clear();
        1067            1464 :   }
        1068                 :
        1069            1464 :   void Clear()
        1070                 :   {
        1071            1464 :     mDefinedStyles = DEFINED_NONE;
        1072            1464 :     mLineStyle = LINESTYLE_NONE;
        1073            1464 :     mIsBoldLine = false;
        1074            1464 :     mForegroundColor = mBackgroundColor = mUnderlineColor = NS_RGBA(0, 0, 0, 0);
        1075            1464 :   }
        1076                 :
        1077               0 :   bool IsDefined() const { return mDefinedStyles != DEFINED_NONE; }
        1078                 :
        1079               0 :   bool IsLineStyleDefined() const
        1080                 :   {
        1081               0 :     return (mDefinedStyles & DEFINED_LINESTYLE) != 0;
        1082                 :   }
        1083                 :
        1084               0 :   bool IsForegroundColorDefined() const
        1085                 :   {
        1086               0 :     return (mDefinedStyles & DEFINED_FOREGROUND_COLOR) != 0;
        1087                 :   }
        1088                 :
        1089               0 :   bool IsBackgroundColorDefined() const
        1090                 :   {
        1091               0 :     return (mDefinedStyles & DEFINED_BACKGROUND_COLOR) != 0;
        1092                 :   }
        1093                 :
        1094               0 :   bool IsUnderlineColorDefined() const
        1095                 :   {
        1096               0 :     return (mDefinedStyles & DEFINED_UNDERLINE_COLOR) != 0;
        1097                 :   }
        1098                 :
        1099                 :   bool IsNoChangeStyle() const
        1100                 :   {
        1101                 :     return !IsForegroundColorDefined() && !IsBackgroundColorDefined() &&
        1102                 :            IsLineStyleDefined() && mLineStyle == LINESTYLE_NONE;
        1103                 :   }
        1104                 :
        1105                 :   bool Equals(const nsTextRangeStyle& aOther)
        1106                 :   {
        1107                 :     if (mDefinedStyles != aOther.mDefinedStyles)
        1108                 :       return false;
        1109                 :     if (IsLineStyleDefined() && (mLineStyle != aOther.mLineStyle ||
        1110                 :                                  !mIsBoldLine != !aOther.mIsBoldLine))
        1111                 :       return false;
        1112                 :     if (IsForegroundColorDefined() &&
        1113                 :         (mForegroundColor != aOther.mForegroundColor))
        1114                 :       return false;
        1115                 :     if (IsBackgroundColorDefined() &&
        1116                 :         (mBackgroundColor != aOther.mBackgroundColor))
        1117                 :       return false;
        1118                 :     if (IsUnderlineColorDefined() &&
        1119                 :         (mUnderlineColor != aOther.mUnderlineColor))
        1120                 :       return false;
        1121                 :     return true;
        1122                 :   }
        1123                 :
        1124                 :   bool operator !=(const nsTextRangeStyle &aOther)
        1125                 :   {
        1126                 :     return !Equals(aOther);
        1127                 :   }
        1128                 :
        1129                 :   bool operator ==(const nsTextRangeStyle &aOther)
        1130                 :   {
        1131                 :     return Equals(aOther);
        1132                 :   }
        1133                 :
        1134                 :   PRUint8 mDefinedStyles;
        1135                 :   PRUint8 mLineStyle;        // DEFINED_LINESTYLE
        1136                 :
        1137                 :   bool mIsBoldLine;  // DEFINED_LINESTYLE
        1138                 :
        1139                 :   nscolor mForegroundColor;  // DEFINED_FOREGROUND_COLOR
        1140                 :   nscolor mBackgroundColor;  // DEFINED_BACKGROUND_COLOR
        1141                 :   nscolor mUnderlineColor;   // DEFINED_UNDERLINE_COLOR
        1142                 : };
        1143                 :
        1144                 : struct nsTextRange
        1145               0 : {
        1146               0 :   nsTextRange()
        1147               0 :     : mStartOffset(0), mEndOffset(0), mRangeType(0)
        1148                 :   {
        1149               0 :   }
        1150                 :
        1151                 :   PRUint32 mStartOffset;
        1152                 :   PRUint32 mEndOffset;
        1153                 :   PRUint32 mRangeType;
        1154                 :
        1155                 :   nsTextRangeStyle mRangeStyle;
        1156                 : };
        1157                 :
        1158                 : typedef nsTextRange* nsTextRangeArray;
        1159                 :
        1160                 : class nsTextEvent : public nsInputEvent
        1161               0 : {
        1162                 : private:
        1163                 :   friend class mozilla::dom::PBrowserParent;
        1164                 :   friend class mozilla::dom::PBrowserChild;
        1165                 :   friend class mozilla::plugins::PPluginInstanceChild;
        1166                 :
        1167               0 :   nsTextEvent()
        1168               0 :   {
        1169               0 :   }
        1170                 :
        1171                 : public:
        1172                 :   PRUint32 seqno;
        1173                 :
        1174                 : public:
        1175               0 :   nsTextEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
        1176                 :     : nsInputEvent(isTrusted, msg, w, NS_TEXT_EVENT),
        1177               0 :       rangeCount(0), rangeArray(nsnull), isChar(false)
        1178                 :   {
        1179               0 :   }
        1180                 :
        1181                 :   nsString          theText;
        1182                 :   PRUint32          rangeCount;
        1183                 :   // Note that the range array may not specify a caret position; in that
        1184                 :   // case there will be no range of type NS_TEXTRANGE_CARETPOSITION in the
        1185                 :   // array.
        1186                 :   nsTextRangeArray  rangeArray;
        1187                 :   bool              isChar;
        1188                 : };
        1189                 :
        1190                 : class nsCompositionEvent : public nsGUIEvent
        1191               0 : {
        1192                 : private:
        1193                 :   friend class mozilla::dom::PBrowserParent;
        1194                 :   friend class mozilla::dom::PBrowserChild;
        1195                 :
        1196               0 :   nsCompositionEvent()
        1197               0 :   {
        1198               0 :   }
        1199                 :
        1200                 : public:
        1201                 :   PRUint32 seqno;
        1202                 :
        1203                 : public:
        1204               0 :   nsCompositionEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
        1205               0 :     : nsGUIEvent(isTrusted, msg, w, NS_COMPOSITION_EVENT)
        1206                 :   {
        1207                 :     // XXX compositionstart is cancelable in draft of DOM3 Events.
        1208                 :     //     However, it doesn't make sense for us, we cannot cancel composition
        1209                 :     //     when we send compositionstart event.
        1210               0 :     flags |= NS_EVENT_FLAG_CANT_CANCEL;
        1211               0 :   }
        1212                 :
        1213                 :   nsString data;
        1214                 : };
        1215                 :
        1216                 : /* Mouse Scroll Events: Line Scrolling, Pixel Scrolling and Common Event Flows
        1217                 :  *
        1218                 :  * There are two common event flows:
        1219                 :  *  (1) Normal line scrolling:
        1220                 :  *      1. An NS_MOUSE_SCROLL event without kHasPixels is dispatched to Gecko.
        1221                 :  *      2. A DOMMouseScroll event is sent into the DOM.
        1222                 :  *      3. A MozMousePixelScroll event is sent into the DOM.
        1223                 :  *      4. If neither event has been consumed, the default handling of the
        1224                 :  *         NS_MOUSE_SCROLL event is executed.
        1225                 :  *
        1226                 :  *  (2) Pixel scrolling:
        1227                 :  *      1. An NS_MOUSE_SCROLL event with kHasPixels is dispatched to Gecko.
        1228                 :  *      2. A DOMMouseScroll event is sent into the DOM.
        1229                 :  *      3. No scrolling takes place in the default handler.
        1230                 :  *      4. An NS_MOUSE_PIXEL_SCROLL event is dispatched to Gecko.
        1231                 :  *      5. A MozMousePixelScroll event is sent into the DOM.
        1232                 :  *      6. If neither the NS_MOUSE_PIXELSCROLL event nor the preceding
        1233                 :  *         NS_MOUSE_SCROLL event have been consumed, the default handler scrolls.
        1234                 :  *      7. Steps 4.-6. are repeated for every pixel scroll that belongs to
        1235                 :  *         the announced line scroll. Once enough pixels have been sent to
        1236                 :  *         complete a line, a new NS_MOUSE_SCROLL event is sent (goto step 1.).
        1237                 :  *
        1238                 :  * If a DOMMouseScroll event has been preventDefaulted, the associated
        1239                 :  * following MozMousePixelScroll events are still sent - they just don't result
        1240                 :  * in any scrolling (their default handler isn't executed).
        1241                 :  *
        1242                 :  * How many pixel scrolls make up one line scroll is decided in the widget layer
        1243                 :  * where the NS_MOUSE(_PIXEL)_SCROLL events are created.
        1244                 :  *
        1245                 :  * This event flow model satisfies several requirements:
        1246                 :  *  - DOMMouseScroll handlers don't need to be aware of the existence of pixel
        1247                 :  *    scrolling.
        1248                 :  *  - preventDefault on a DOMMouseScroll event results in no scrolling.
        1249                 :  *  - DOMMouseScroll events aren't polluted with a kHasPixels flag.
        1250                 :  *  - You can make use of pixel scroll DOM events (MozMousePixelScroll).
        1251                 :  */
        1252                 :
        1253                 : class nsMouseScrollEvent : public nsMouseEvent_base
        1254               0 : {
        1255                 : private:
        1256                 :   friend class mozilla::dom::PBrowserParent;
        1257                 :   friend class mozilla::dom::PBrowserChild;
        1258                 :
        1259               0 :   nsMouseScrollEvent()
        1260               0 :   {
        1261               0 :   }
        1262                 :
        1263                 : public:
        1264                 :   enum nsMouseScrollFlags {
        1265                 :     kIsFullPage =   1 << 0,
        1266                 :     kIsVertical =   1 << 1,
        1267                 :     kIsHorizontal = 1 << 2,
        1268                 :     kHasPixels =    1 << 3, // Marks line scroll events that are provided as
        1269                 :                             // a fallback for pixel scroll events.
        1270                 :                             // These scroll events are used by things that can't
        1271                 :                             // be scrolled pixel-wise, like trees. You should
        1272                 :                             // ignore them when processing pixel scroll events
        1273                 :                             // to avoid double-processing the same scroll gesture.
        1274                 :                             // When kHasPixels is set, the event is guaranteed to
        1275                 :                             // be followed up by an event that contains pixel
        1276                 :                             // scrolling information.
        1277                 :     kNoLines =      1 << 4, // Marks pixel scroll events that will not be
        1278                 :                             // followed by a line scroll events. EventStateManager
        1279                 :                             // will compute the appropriate height/width based on
        1280                 :                             // view lineHeight and generate line scroll events
        1281                 :                             // as needed.
        1282                 :     kNoDefer =      1 << 5, // For scrollable views, indicates scroll should not
        1283                 :                             // occur asynchronously.
        1284                 :     kIsMomentum =   1 << 6, // Marks scroll events that aren't controlled by the
        1285                 :                             // user but fire automatically as the result of a
        1286                 :                             // "momentum" scroll.
        1287                 :     kAllowSmoothScroll = 1 << 7, // Allow smooth scroll for the pixel scroll
        1288                 :                                  // event.
        1289                 :     kFromLines =    1 << 8  // For a pixels scroll event, indicates that it
        1290                 :                             // originated from a lines scroll event.
        1291                 :                             // (Only used on windows which generates "faked"
        1292                 :                             // pixel scroll events even for simple mouse wheel
        1293                 :                             // scroll)
        1294                 : };
        1295                 :
        1296               0 :   nsMouseScrollEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
        1297                 :     : nsMouseEvent_base(isTrusted, msg, w, NS_MOUSE_SCROLL_EVENT),
        1298               0 :       scrollFlags(0), delta(0), scrollOverflow(0)
        1299                 :   {
        1300               0 :   }
        1301                 :
        1302                 :   PRInt32               scrollFlags;
        1303                 :   PRInt32               delta;
        1304                 :   PRInt32               scrollOverflow;
        1305                 : };
        1306                 :
        1307                 : /*
        1308                 :  * Gesture Notify Event:
        1309                 :  *
        1310                 :  * This event is the first event generated when the user touches
        1311                 :  * the screen with a finger, and it's meant to decide what kind
        1312                 :  * of action we'll use for that touch interaction.
        1313                 :  *
        1314                 :  * The event is dispatched to the layout and based on what is underneath
        1315                 :  * the initial contact point it's then decided if we should pan
        1316                 :  * (finger scrolling) or drag the target element.
        1317                 :  */
        1318                 : class nsGestureNotifyEvent : public nsGUIEvent
        1319                 : {
        1320                 : public:
        1321                 :   enum ePanDirection {
        1322                 :     ePanNone,
        1323                 :     ePanVertical,
        1324                 :     ePanHorizontal,
        1325                 :     ePanBoth
        1326                 :   };
        1327                 :
        1328                 :   ePanDirection panDirection;
        1329                 :   bool          displayPanFeedback;
        1330                 :
        1331                 :   nsGestureNotifyEvent(bool aIsTrusted, PRUint32 aMsg, nsIWidget *aWidget):
        1332                 :     nsGUIEvent(aIsTrusted, aMsg, aWidget, NS_GESTURENOTIFY_EVENT),
        1333                 :     panDirection(ePanNone),
        1334                 :     displayPanFeedback(false)
        1335                 :   {
        1336                 :   }
        1337                 : };
        1338                 :
        1339                 : class nsQueryContentEvent : public nsGUIEvent
        1340               0 : {
        1341                 : private:
        1342                 :   friend class mozilla::dom::PBrowserParent;
        1343                 :   friend class mozilla::dom::PBrowserChild;
        1344                 :
        1345                 :   nsQueryContentEvent()
        1346                 :   {
        1347                 :     mReply.mContentsRoot = nsnull;
        1348                 :     mReply.mFocusedWidget = nsnull;
        1349                 :   }
        1350                 :
        1351                 : public:
        1352               0 :   nsQueryContentEvent(bool aIsTrusted, PRUint32 aMsg, nsIWidget *aWidget) :
        1353                 :     nsGUIEvent(aIsTrusted, aMsg, aWidget, NS_QUERY_CONTENT_EVENT),
        1354               0 :     mSucceeded(false), mWasAsync(false)
        1355                 :   {
        1356               0 :   }
        1357                 :
        1358               0 :   void InitForQueryTextContent(PRUint32 aOffset, PRUint32 aLength)
        1359                 :   {
        1360               0 :     NS_ASSERTION(message == NS_QUERY_TEXT_CONTENT,
        1361                 :                  "wrong initializer is called");
        1362               0 :     mInput.mOffset = aOffset;
        1363               0 :     mInput.mLength = aLength;
        1364               0 :   }
        1365                 :
        1366               0 :   void InitForQueryCaretRect(PRUint32 aOffset)
        1367                 :   {
        1368               0 :     NS_ASSERTION(message == NS_QUERY_CARET_RECT,
        1369                 :                  "wrong initializer is called");
        1370               0 :     mInput.mOffset = aOffset;
        1371               0 :   }
        1372                 :
        1373               0 :   void InitForQueryTextRect(PRUint32 aOffset, PRUint32 aLength)
        1374                 :   {
        1375               0 :     NS_ASSERTION(message == NS_QUERY_TEXT_RECT,
        1376                 :                  "wrong initializer is called");
        1377               0 :     mInput.mOffset = aOffset;
        1378               0 :     mInput.mLength = aLength;
        1379               0 :   }
        1380                 :
        1381                 :   void InitForQueryDOMWidgetHittest(nsIntPoint& aPoint)
        1382                 :   {
        1383                 :     NS_ASSERTION(message == NS_QUERY_DOM_WIDGET_HITTEST,
        1384                 :                  "wrong initializer is called");
        1385                 :     refPoint = aPoint;
        1386                 :   }
        1387                 :
        1388                 :   void InitForQueryScrollTargetInfo(nsMouseScrollEvent* aEvent)
        1389                 :   {
        1390                 :     NS_ASSERTION(message == NS_QUERY_SCROLL_TARGET_INFO,
        1391                 :                  "wrong initializer is called");
        1392                 :     mInput.mMouseScrollEvent = aEvent;
        1393                 :   }
        1394                 :
        1395               0 :   PRUint32 GetSelectionStart(void) const
        1396                 :   {
        1397               0 :     NS_ASSERTION(message == NS_QUERY_SELECTED_TEXT,
        1398                 :                  "not querying selection");
        1399               0 :     return mReply.mOffset + (mReply.mReversed ? mReply.mString.Length() : 0);
        1400                 :   }
        1401                 :
        1402               0 :   PRUint32 GetSelectionEnd(void) const
        1403                 :   {
        1404               0 :     NS_ASSERTION(message == NS_QUERY_SELECTED_TEXT,
        1405                 :                  "not querying selection");
        1406               0 :     return mReply.mOffset + (mReply.mReversed ? 0 : mReply.mString.Length());
        1407                 :   }
        1408                 :
        1409                 :   bool mSucceeded;
        1410                 :   bool mWasAsync;
        1411                 :   struct {
        1412                 :     PRUint32 mOffset;
        1413                 :     PRUint32 mLength;
        1414                 :     // used by NS_QUERY_SCROLL_TARGET_INFO
        1415                 :     nsMouseScrollEvent* mMouseScrollEvent;
        1416                 :   } mInput;
        1417               0 :   struct {
        1418                 :     void* mContentsRoot;
        1419                 :     PRUint32 mOffset;
        1420                 :     nsString mString;
        1421                 :     nsIntRect mRect; // Finally, the coordinates is system coordinates.
        1422                 :     // The return widget has the caret. This is set at all query events.
        1423                 :     nsIWidget* mFocusedWidget;
        1424                 :     bool mReversed; // true if selection is reversed (end < start)
        1425                 :     bool mHasSelection; // true if the selection exists
        1426                 :     bool mWidgetIsHit; // true if DOM element under mouse belongs to widget
        1427                 :     // used by NS_QUERY_SELECTION_AS_TRANSFERABLE
        1428                 :     nsCOMPtr<nsITransferable> mTransferable;
        1429                 :     // used by NS_QUERY_SCROLL_TARGET_INFO
        1430                 :     PRInt32 mLineHeight;
        1431                 :     PRInt32 mPageWidth;
        1432                 :     PRInt32 mPageHeight;
        1433                 :     // used by NS_QUERY_SCROLL_TARGET_INFO
        1434                 :     // the mouse wheel scrolling amount may be overridden by prefs or
        1435                 :     // overriding system scrolling speed mechanism.
        1436                 :     // If mMouseScrollEvent is a line scroll event, the unit of this value is
        1437                 :     // line.  If mMouseScrollEvent is a page scroll event, the unit of this
        1438                 :     // value is page.
        1439                 :     PRInt32 mComputedScrollAmount;
        1440                 :     PRInt32 mComputedScrollAction;
        1441                 :   } mReply;
        1442                 :
        1443                 :   enum {
        1444                 :     NOT_FOUND = PR_UINT32_MAX
        1445                 :   };
        1446                 :
        1447                 :   // values of mComputedScrollAction
        1448                 :   enum {
        1449                 :     SCROLL_ACTION_NONE,
        1450                 :     SCROLL_ACTION_LINE,
        1451                 :     SCROLL_ACTION_PAGE
        1452                 :   };
        1453                 : };
        1454                 :
        1455                 : class nsFocusEvent : public nsEvent
        1456               0 : {
        1457                 : public:
        1458               0 :   nsFocusEvent(bool isTrusted, PRUint32 msg)
        1459                 :     : nsEvent(isTrusted, msg, NS_FOCUS_EVENT),
        1460                 :       fromRaise(false),
        1461               0 :       isRefocus(false)
        1462                 :   {
        1463               0 :   }
        1464                 :
        1465                 :   bool fromRaise;
        1466                 :   bool isRefocus;
        1467                 : };
        1468                 :
        1469                 : class nsSelectionEvent : public nsGUIEvent
        1470               0 : {
        1471                 : private:
        1472                 :   friend class mozilla::dom::PBrowserParent;
        1473                 :   friend class mozilla::dom::PBrowserChild;
        1474                 :
        1475               0 :   nsSelectionEvent()
        1476               0 :   {
        1477               0 :   }
        1478                 :
        1479                 : public:
        1480                 :   PRUint32 seqno;
        1481                 :
        1482                 : public:
        1483               0 :   nsSelectionEvent(bool aIsTrusted, PRUint32 aMsg, nsIWidget *aWidget) :
        1484                 :     nsGUIEvent(aIsTrusted, aMsg, aWidget, NS_SELECTION_EVENT),
        1485               0 :     mExpandToClusterBoundary(true), mSucceeded(false)
        1486                 :   {
        1487               0 :   }
        1488                 :
        1489                 :   PRUint32 mOffset; // start offset of selection
        1490                 :   PRUint32 mLength; // length of selection
        1491                 :   bool mReversed; // selection "anchor" should be in front
        1492                 :   bool mExpandToClusterBoundary; // cluster-based or character-based
        1493                 :   bool mSucceeded;
        1494                 : };
        1495                 :
        1496                 : class nsContentCommandEvent : public nsGUIEvent
        1497               0 : {
        1498                 : public:
        1499               0 :   nsContentCommandEvent(bool aIsTrusted, PRUint32 aMsg, nsIWidget *aWidget,
        1500                 :                         bool aOnlyEnabledCheck = false) :
        1501                 :     nsGUIEvent(aIsTrusted, aMsg, aWidget, NS_CONTENT_COMMAND_EVENT),
        1502                 :     mOnlyEnabledCheck(bool(aOnlyEnabledCheck)),
        1503               0 :     mSucceeded(false), mIsEnabled(false)
        1504                 :   {
        1505               0 :   }
        1506                 :
        1507                 :   // NS_CONTENT_COMMAND_PASTE_TRANSFERABLE
        1508                 :   nsCOMPtr<nsITransferable> mTransferable;                 // [in]
        1509                 :
        1510                 :   // NS_CONTENT_COMMAND_SCROLL
        1511                 :   // for mScroll.mUnit
        1512                 :   enum {
        1513                 :     eCmdScrollUnit_Line,
        1514                 :     eCmdScrollUnit_Page,
        1515                 :     eCmdScrollUnit_Whole
        1516                 :   };
        1517                 :
        1518                 :   struct ScrollInfo {
        1519               0 :     ScrollInfo() :
        1520               0 :       mAmount(0), mUnit(eCmdScrollUnit_Line), mIsHorizontal(false)
        1521                 :     {
        1522               0 :     }
        1523                 :
        1524                 :     PRInt32      mAmount;                                  // [in]
        1525                 :     PRUint8      mUnit;                                    // [in]
        1526                 :     bool mIsHorizontal;                            // [in]
        1527                 :   } mScroll;
        1528                 :
        1529                 :   bool mOnlyEnabledCheck;                          // [in]
        1530                 :
        1531                 :   bool mSucceeded;                                 // [out]
        1532                 :   bool mIsEnabled;                                 // [out]
        1533                 : };
        1534                 :
        1535                 : class nsMozTouchEvent : public nsMouseEvent_base
        1536               0 : {
        1537                 : public:
        1538               0 :   nsMozTouchEvent(bool isTrusted, PRUint32 msg, nsIWidget* w,
        1539                 :                   PRUint32 streamIdArg)
        1540                 :     : nsMouseEvent_base(isTrusted, msg, w, NS_MOZTOUCH_EVENT),
        1541               0 :       streamId(streamIdArg)
        1542                 :   {
        1543               0 :   }
        1544                 :
        1545                 :   PRUint32 streamId;
        1546                 : };
        1547                 :
        1548                 : class nsTouchEvent : public nsInputEvent
        1549                 : {
        1550                 : public:
        1551               0 :   nsTouchEvent(nsTouchEvent *aEvent)
        1552                 :     :nsInputEvent(aEvent->flags & NS_EVENT_FLAG_TRUSTED ? true : false,
        1553                 :                  aEvent->message,
        1554                 :                  aEvent->widget,
        1555               0 :                  NS_TOUCH_EVENT)
        1556                 :   {
        1557               0 :     touches.AppendElements(aEvent->touches);
        1558               0 :     MOZ_COUNT_CTOR(nsTouchEvent);
        1559               0 :   }
        1560               0 :   nsTouchEvent(bool isTrusted, PRUint32 msg, nsIWidget* w)
        1561               0 :     : nsInputEvent(isTrusted, msg, w, NS_TOUCH_EVENT)
        1562                 :   {
        1563               0 :     MOZ_COUNT_CTOR(nsTouchEvent);
        1564               0 :   }
        1565               0 :   ~nsTouchEvent()
        1566               0 :   {
        1567               0 :     MOZ_COUNT_DTOR(nsTouchEvent);
        1568               0 :   }
        1569                 :
        1570                 :   nsTArray<nsCOMPtr<nsIDOMTouch> > touches;
        1571                 : };
        1572                 :
        1573                 : /**
        1574                 :  * Form event
        1575                 :  *
        1576                 :  * We hold the originating form control for form submit and reset events.
        1577                 :  * originator is a weak pointer (does not hold a strong reference).
        1578                 :  */
        1579                 :
        1580                 : class nsFormEvent : public nsEvent
        1581               0 : {
        1582                 : public:
        1583               0 :   nsFormEvent(bool isTrusted, PRUint32 msg)
        1584                 :     : nsEvent(isTrusted, msg, NS_FORM_EVENT),
        1585               0 :       originator(nsnull)
        1586                 :   {
        1587               0 :   }
        1588                 :
        1589                 :   nsIContent *originator;
        1590                 : };
        1591                 :
        1592                 : /**
        1593                 :  * Command event
        1594                 :  *
        1595                 :  * Custom commands for example from the operating system.
        1596                 :  */
        1597                 :
        1598                 : class nsCommandEvent : public nsGUIEvent
        1599               0 : {
        1600                 : public:
        1601               0 :   nsCommandEvent(bool isTrusted, nsIAtom* aEventType,
        1602                 :                  nsIAtom* aCommand, nsIWidget* w)
        1603               0 :     : nsGUIEvent(isTrusted, NS_USER_DEFINED_EVENT, w, NS_COMMAND_EVENT)
        1604                 :   {
        1605               0 :     userType = aEventType;
        1606               0 :     command = aCommand;
        1607               0 :   }
        1608                 :
        1609                 :   nsCOMPtr<nsIAtom> command;
        1610                 : };
        1611                 :
        1612                 : /**
        1613                 :  * DOM UIEvent
        1614                 :  */
        1615                 : class nsUIEvent : public nsEvent
        1616               0 : {
        1617                 : public:
        1618               0 :   nsUIEvent(bool isTrusted, PRUint32 msg, PRInt32 d)
        1619                 :     : nsEvent(isTrusted, msg, NS_UI_EVENT),
        1620               0 :       detail(d)
        1621                 :   {
        1622               0 :   }
        1623                 :
        1624                 :   PRInt32 detail;
        1625                 : };
        1626                 :
        1627                 : /**
        1628                 :  * Simple gesture event
        1629                 :  */
        1630                 : class nsSimpleGestureEvent : public nsMouseEvent_base
        1631               0 : {
        1632                 : public:
        1633               0 :   nsSimpleGestureEvent(bool isTrusted, PRUint32 msg, nsIWidget* w,
        1634                 :                          PRUint32 directionArg, PRFloat64 deltaArg)
        1635                 :     : nsMouseEvent_base(isTrusted, msg, w, NS_SIMPLE_GESTURE_EVENT),
        1636               0 :       direction(directionArg), delta(deltaArg)
        1637                 :   {
        1638               0 :   }
        1639                 :
        1640                 :   nsSimpleGestureEvent(const nsSimpleGestureEvent& other)
        1641                 :     : nsMouseEvent_base((other.flags & NS_EVENT_FLAG_TRUSTED) != 0,
        1642                 :                         other.message, other.widget, NS_SIMPLE_GESTURE_EVENT),
        1643                 :       direction(other.direction), delta(other.delta)
        1644                 :   {
        1645                 :   }
        1646                 :
        1647                 :   PRUint32 direction;   // See nsIDOMSimpleGestureEvent for values
        1648                 :   PRFloat64 delta;      // Delta for magnify and rotate events
        1649                 : };
        1650                 :
        1651                 : class nsTransitionEvent : public nsEvent
        1652               0 : {
        1653                 : public:
        1654               0 :   nsTransitionEvent(bool isTrusted, PRUint32 msg,
        1655                 :                     const nsString &propertyNameArg, float elapsedTimeArg)
        1656                 :     : nsEvent(isTrusted, msg, NS_TRANSITION_EVENT),
        1657               0 :       propertyName(propertyNameArg), elapsedTime(elapsedTimeArg)
        1658                 :   {
        1659               0 :   }
        1660                 :
        1661                 :   nsString propertyName;
        1662                 :   float elapsedTime;
        1663                 : };
        1664                 :
        1665                 : class nsAnimationEvent : public nsEvent
        1666               0 : {
        1667                 : public:
        1668               0 :   nsAnimationEvent(bool isTrusted, PRUint32 msg,
        1669                 :                    const nsString &animationNameArg, float elapsedTimeArg)
        1670                 :     : nsEvent(isTrusted, msg, NS_ANIMATION_EVENT),
        1671               0 :       animationName(animationNameArg), elapsedTime(elapsedTimeArg)
        1672                 :   {
        1673               0 :   }
        1674                 :
        1675                 :   nsString animationName;
        1676                 :   float elapsedTime;
        1677                 : };
        1678                 :
        1679                 : class nsUIStateChangeEvent : public nsGUIEvent
        1680                 : {
        1681                 : public:
        1682                 :   nsUIStateChangeEvent(bool isTrusted, PRUint32 msg, nsIWidget* w)
        1683                 :     : nsGUIEvent(isTrusted, msg, w, NS_UISTATECHANGE_EVENT),
        1684                 :       showAccelerators(UIStateChangeType_NoChange),
        1685                 :       showFocusRings(UIStateChangeType_NoChange)
        1686                 :   {
        1687                 :   }
        1688                 :
        1689                 :   UIStateChangeType showAccelerators;
        1690                 :   UIStateChangeType showFocusRings;
        1691                 : };
        1692                 :
        1693                 : /**
        1694                 :  * Native event pluginEvent for plugins.
        1695                 :  */
        1696                 :
        1697                 : class nsPluginEvent : public nsGUIEvent
        1698                 : {
        1699                 : public:
        1700                 :   nsPluginEvent(bool isTrusted, PRUint32 msg, nsIWidget *w)
        1701                 :     : nsGUIEvent(isTrusted, msg, w, NS_PLUGIN_EVENT),
        1702                 :       retargetToFocusedDocument(false)
        1703                 :   {
        1704                 :   }
        1705                 :
        1706                 :   // If TRUE, this event needs to be retargeted to focused document.
        1707                 :   // Otherwise, never retargeted.
        1708                 :   // Defaults to false.
        1709                 :   bool retargetToFocusedDocument;
        1710                 : };
        1711                 :
        1712                 : /**
        1713                 :  * Event status for D&D Event
        1714                 :  */
        1715                 : enum nsDragDropEventStatus {
        1716                 :   /// The event is a enter
        1717                 :   nsDragDropEventStatus_eDragEntered,
        1718                 :   /// The event is exit
        1719                 :   nsDragDropEventStatus_eDragExited,
        1720                 :   /// The event is drop
        1721                 :   nsDragDropEventStatus_eDrop
        1722                 : };
        1723                 :
        1724                 :
        1725                 : #define NS_IS_MOUSE_EVENT(evnt) \
        1726                 :        (((evnt)->message == NS_MOUSE_BUTTON_DOWN) || \
        1727                 :         ((evnt)->message == NS_MOUSE_BUTTON_UP) || \
        1728                 :         ((evnt)->message == NS_MOUSE_CLICK) || \
        1729                 :         ((evnt)->message == NS_MOUSE_DOUBLECLICK) || \
        1730                 :         ((evnt)->message == NS_MOUSE_ENTER) || \
        1731                 :         ((evnt)->message == NS_MOUSE_EXIT) || \
        1732                 :         ((evnt)->message == NS_MOUSE_ACTIVATE) || \
        1733                 :         ((evnt)->message == NS_MOUSE_ENTER_SYNTH) || \
        1734                 :         ((evnt)->message == NS_MOUSE_EXIT_SYNTH) || \
        1735                 :         ((evnt)->message == NS_MOUSE_MOZHITTEST) || \
        1736                 :         ((evnt)->message == NS_MOUSE_MOVE))
        1737                 :
        1738                 : #define NS_IS_MOUSE_EVENT_STRUCT(evnt) \
        1739                 :        ((evnt)->eventStructType == NS_MOUSE_EVENT || \
        1740                 :         (evnt)->eventStructType == NS_DRAG_EVENT)
        1741                 :
        1742                 : #define NS_IS_MOUSE_LEFT_CLICK(evnt) \
        1743                 :        ((evnt)->eventStructType == NS_MOUSE_EVENT && \
        1744                 :         (evnt)->message == NS_MOUSE_CLICK && \
        1745                 :         static_cast<nsMouseEvent*>((evnt))->button == nsMouseEvent::eLeftButton)
        1746                 :
        1747                 : #define NS_IS_CONTEXT_MENU_KEY(evnt) \
        1748                 :        ((evnt)->eventStructType == NS_MOUSE_EVENT && \
        1749                 :         (evnt)->message == NS_CONTEXTMENU && \
        1750                 :         static_cast<nsMouseEvent*>((evnt))->context == nsMouseEvent::eContextMenuKey)
        1751                 :
        1752                 : #define NS_IS_DRAG_EVENT(evnt) \
        1753                 :        (((evnt)->message == NS_DRAGDROP_ENTER) || \
        1754                 :         ((evnt)->message == NS_DRAGDROP_OVER) || \
        1755                 :         ((evnt)->message == NS_DRAGDROP_EXIT) || \
        1756                 :         ((evnt)->message == NS_DRAGDROP_DRAGDROP) || \
        1757                 :         ((evnt)->message == NS_DRAGDROP_GESTURE) || \
        1758                 :         ((evnt)->message == NS_DRAGDROP_DRAG) || \
        1759                 :         ((evnt)->message == NS_DRAGDROP_END) || \
        1760                 :         ((evnt)->message == NS_DRAGDROP_START) || \
        1761                 :         ((evnt)->message == NS_DRAGDROP_DROP) || \
        1762                 :         ((evnt)->message == NS_DRAGDROP_LEAVE_SYNTH))
        1763                 :
        1764                 : #define NS_IS_KEY_EVENT(evnt) \
        1765                 :        (((evnt)->message == NS_KEY_DOWN) ||  \
        1766                 :         ((evnt)->message == NS_KEY_PRESS) || \
        1767                 :         ((evnt)->message == NS_KEY_UP))
        1768                 :
        1769                 : #define NS_IS_IME_EVENT(evnt) \
        1770                 :        (((evnt)->message == NS_TEXT_TEXT) ||  \
        1771                 :         ((evnt)->message == NS_COMPOSITION_START) ||  \
        1772                 :         ((evnt)->message == NS_COMPOSITION_END) || \
        1773                 :         ((evnt)->message == NS_COMPOSITION_UPDATE))
        1774                 :
        1775                 : #define NS_IS_ACTIVATION_EVENT(evnt) \
        1776                 :        (((evnt)->message == NS_ACTIVATE) || \
        1777                 :         ((evnt)->message == NS_DEACTIVATE) || \
        1778                 :         ((evnt)->message == NS_PLUGIN_ACTIVATE) || \
        1779                 :         ((evnt)->message == NS_PLUGIN_FOCUS))
        1780                 :
        1781                 : #define NS_IS_QUERY_CONTENT_EVENT(evnt) \
        1782                 :        ((evnt)->eventStructType == NS_QUERY_CONTENT_EVENT)
        1783                 :
        1784                 : #define NS_IS_SELECTION_EVENT(evnt) \
        1785                 :        (((evnt)->message == NS_SELECTION_SET))
        1786                 :
        1787                 : #define NS_IS_CONTENT_COMMAND_EVENT(evnt) \
        1788                 :        ((evnt)->eventStructType == NS_CONTENT_COMMAND_EVENT)
        1789                 :
        1790                 : #define NS_IS_PLUGIN_EVENT(evnt) \
        1791                 :        (((evnt)->message == NS_PLUGIN_INPUT_EVENT) || \
        1792                 :         ((evnt)->message == NS_PLUGIN_FOCUS_EVENT))
        1793                 :
        1794                 : #define NS_IS_RETARGETED_PLUGIN_EVENT(evnt) \
        1795                 :        (NS_IS_PLUGIN_EVENT(evnt) && \
        1796                 :         (static_cast<nsPluginEvent*>(evnt)->retargetToFocusedDocument))
        1797                 :
        1798                 : #define NS_IS_NON_RETARGETED_PLUGIN_EVENT(evnt) \
        1799                 :        (NS_IS_PLUGIN_EVENT(evnt) && \
        1800                 :         !(static_cast<nsPluginEvent*>(evnt)->retargetToFocusedDocument))
        1801                 :
        1802                 : #define NS_IS_TRUSTED_EVENT(event) \
        1803                 :   (((event)->flags & NS_EVENT_FLAG_TRUSTED) != 0)
        1804                 :
        1805                 : // Mark an event as being dispatching.
        1806                 : #define NS_MARK_EVENT_DISPATCH_STARTED(event) \
        1807                 :   (event)->flags |= NS_EVENT_FLAG_DISPATCHING;
        1808                 :
        1809                 : #define NS_IS_EVENT_IN_DISPATCH(event) \
        1810                 :   (((event)->flags & NS_EVENT_FLAG_DISPATCHING) != 0)
        1811                 :
        1812                 : // Mark an event as being done dispatching.
        1813                 : #define NS_MARK_EVENT_DISPATCH_DONE(event) \
        1814                 :   NS_ASSERTION(NS_IS_EVENT_IN_DISPATCH(event), \
        1815                 :                "Event never got marked for dispatch!"); \
        1816                 :   (event)->flags &= ~NS_EVENT_FLAG_DISPATCHING; \
        1817                 :   (event)->flags |= NS_EVENT_DISPATCHED;
        1818                 :
        1819                 : // Be aware the query content events and the selection events are a part of IME
        1820                 : // processing.  So, you shouldn't use NS_IS_IME_EVENT macro directly in most
        1821                 : // cases, you should use NS_IS_IME_RELATED_EVENT instead.
        1822                 : #define NS_IS_IME_RELATED_EVENT(evnt) \
        1823                 :   (NS_IS_IME_EVENT(evnt) || \
        1824                 :    (NS_IS_QUERY_CONTENT_EVENT(evnt) && \
        1825                 :     evnt->message != NS_QUERY_SCROLL_TARGET_INFO) || \
        1826                 :    NS_IS_SELECTION_EVENT(evnt))
        1827                 :
        1828                 : /*
        1829                 :  * Virtual key bindings for keyboard events.
        1830                 :  * These come from nsIDOMKeyEvent.h, which is generated from MouseKeyEvent.idl.
        1831                 :  * Really, it would be better if we phased out the NS_VK symbols altogether
        1832                 :  * in favor of the DOM ones, but at least this way they'll be in sync.
        1833                 :  */
        1834                 :
        1835                 : #define NS_VK_CANCEL         nsIDOMKeyEvent::DOM_VK_CANCEL
        1836                 : #define NS_VK_HELP           nsIDOMKeyEvent::DOM_VK_HELP
        1837                 : #define NS_VK_BACK           nsIDOMKeyEvent::DOM_VK_BACK_SPACE
        1838                 : #define NS_VK_TAB            nsIDOMKeyEvent::DOM_VK_TAB
        1839                 : #define NS_VK_CLEAR          nsIDOMKeyEvent::DOM_VK_CLEAR
        1840                 : #define NS_VK_RETURN         nsIDOMKeyEvent::DOM_VK_RETURN
        1841                 : #define NS_VK_ENTER          nsIDOMKeyEvent::DOM_VK_ENTER
        1842                 : #define NS_VK_SHIFT          nsIDOMKeyEvent::DOM_VK_SHIFT
        1843                 : #define NS_VK_CONTROL        nsIDOMKeyEvent::DOM_VK_CONTROL
        1844                 : #define NS_VK_ALT            nsIDOMKeyEvent::DOM_VK_ALT
        1845                 : #define NS_VK_PAUSE          nsIDOMKeyEvent::DOM_VK_PAUSE
        1846                 : #define NS_VK_CAPS_LOCK      nsIDOMKeyEvent::DOM_VK_CAPS_LOCK
        1847                 : #define NS_VK_KANA           nsIDOMKeyEvent::DOM_VK_KANA
        1848                 : #define NS_VK_HANGUL         nsIDOMKeyEvent::DOM_VK_HANGUL
        1849                 : #define NS_VK_JUNJA          nsIDOMKeyEvent::DOM_VK_JUNJA
        1850                 : #define NS_VK_FINAL          nsIDOMKeyEvent::DOM_VK_FINAL
        1851                 : #define NS_VK_HANJA          nsIDOMKeyEvent::DOM_VK_HANJA
        1852                 : #define NS_VK_KANJI          nsIDOMKeyEvent::DOM_VK_KANJI
        1853                 : #define NS_VK_ESCAPE         nsIDOMKeyEvent::DOM_VK_ESCAPE
        1854                 : #define NS_VK_CONVERT        nsIDOMKeyEvent::DOM_VK_CONVERT
        1855                 : #define NS_VK_NONCONVERT     nsIDOMKeyEvent::DOM_VK_NONCONVERT
        1856                 : #define NS_VK_ACCEPT         nsIDOMKeyEvent::DOM_VK_ACCEPT
        1857                 : #define NS_VK_MODECHANGE     nsIDOMKeyEvent::DOM_VK_MODECHANGE
        1858                 : #define NS_VK_SPACE          nsIDOMKeyEvent::DOM_VK_SPACE
        1859                 : #define NS_VK_PAGE_UP        nsIDOMKeyEvent::DOM_VK_PAGE_UP
        1860                 : #define NS_VK_PAGE_DOWN      nsIDOMKeyEvent::DOM_VK_PAGE_DOWN
        1861                 : #define NS_VK_END            nsIDOMKeyEvent::DOM_VK_END
        1862                 : #define NS_VK_HOME           nsIDOMKeyEvent::DOM_VK_HOME
        1863                 : #define NS_VK_LEFT           nsIDOMKeyEvent::DOM_VK_LEFT
        1864                 : #define NS_VK_UP             nsIDOMKeyEvent::DOM_VK_UP
        1865                 : #define NS_VK_RIGHT          nsIDOMKeyEvent::DOM_VK_RIGHT
        1866                 : #define NS_VK_DOWN           nsIDOMKeyEvent::DOM_VK_DOWN
        1867                 : #define NS_VK_SELECT         nsIDOMKeyEvent::DOM_VK_SELECT
        1868                 : #define NS_VK_PRINT          nsIDOMKeyEvent::DOM_VK_PRINT
        1869                 : #define NS_VK_EXECUTE        nsIDOMKeyEvent::DOM_VK_EXECUTE
        1870                 : #define NS_VK_PRINTSCREEN    nsIDOMKeyEvent::DOM_VK_PRINTSCREEN
        1871                 : #define NS_VK_INSERT         nsIDOMKeyEvent::DOM_VK_INSERT
        1872                 : #define NS_VK_DELETE         nsIDOMKeyEvent::DOM_VK_DELETE
        1873                 :
        1874                 : // NS_VK_0 - NS_VK_9 match their ascii values
        1875                 : #define NS_VK_0              nsIDOMKeyEvent::DOM_VK_0
        1876                 : #define NS_VK_1              nsIDOMKeyEvent::DOM_VK_1
        1877                 : #define NS_VK_2              nsIDOMKeyEvent::DOM_VK_2
        1878                 : #define NS_VK_3              nsIDOMKeyEvent::DOM_VK_3
        1879                 : #define NS_VK_4              nsIDOMKeyEvent::DOM_VK_4
        1880                 : #define NS_VK_5              nsIDOMKeyEvent::DOM_VK_5
        1881                 : #define NS_VK_6              nsIDOMKeyEvent::DOM_VK_6
        1882                 : #define NS_VK_7              nsIDOMKeyEvent::DOM_VK_7
        1883                 : #define NS_VK_8              nsIDOMKeyEvent::DOM_VK_8
        1884                 : #define NS_VK_9              nsIDOMKeyEvent::DOM_VK_9
        1885                 :
        1886                 : #define NS_VK_SEMICOLON      nsIDOMKeyEvent::DOM_VK_SEMICOLON
        1887                 : #define NS_VK_EQUALS         nsIDOMKeyEvent::DOM_VK_EQUALS
        1888                 :
        1889                 : // NS_VK_A - NS_VK_Z match their ascii values
        1890                 : #define NS_VK_A              nsIDOMKeyEvent::DOM_VK_A
        1891                 : #define NS_VK_B              nsIDOMKeyEvent::DOM_VK_B
        1892                 : #define NS_VK_C              nsIDOMKeyEvent::DOM_VK_C
        1893                 : #define NS_VK_D              nsIDOMKeyEvent::DOM_VK_D
        1894                 : #define NS_VK_E              nsIDOMKeyEvent::DOM_VK_E
        1895                 : #define NS_VK_F              nsIDOMKeyEvent::DOM_VK_F
        1896                 : #define NS_VK_G              nsIDOMKeyEvent::DOM_VK_G
        1897                 : #define NS_VK_H              nsIDOMKeyEvent::DOM_VK_H
        1898                 : #define NS_VK_I              nsIDOMKeyEvent::DOM_VK_I
        1899                 : #define NS_VK_J              nsIDOMKeyEvent::DOM_VK_J
        1900                 : #define NS_VK_K              nsIDOMKeyEvent::DOM_VK_K
        1901                 : #define NS_VK_L              nsIDOMKeyEvent::DOM_VK_L
        1902                 : #define NS_VK_M              nsIDOMKeyEvent::DOM_VK_M
        1903                 : #define NS_VK_N              nsIDOMKeyEvent::DOM_VK_N
        1904                 : #define NS_VK_O              nsIDOMKeyEvent::DOM_VK_O
        1905                 : #define NS_VK_P              nsIDOMKeyEvent::DOM_VK_P
        1906                 : #define NS_VK_Q              nsIDOMKeyEvent::DOM_VK_Q
        1907                 : #define NS_VK_R              nsIDOMKeyEvent::DOM_VK_R
        1908                 : #define NS_VK_S              nsIDOMKeyEvent::DOM_VK_S
        1909                 : #define NS_VK_T              nsIDOMKeyEvent::DOM_VK_T
        1910                 : #define NS_VK_U              nsIDOMKeyEvent::DOM_VK_U
        1911                 : #define NS_VK_V              nsIDOMKeyEvent::DOM_VK_V
        1912                 : #define NS_VK_W              nsIDOMKeyEvent::DOM_VK_W
        1913                 : #define NS_VK_X              nsIDOMKeyEvent::DOM_VK_X
        1914                 : #define NS_VK_Y              nsIDOMKeyEvent::DOM_VK_Y
        1915                 : #define NS_VK_Z              nsIDOMKeyEvent::DOM_VK_Z
        1916                 :
        1917                 : #define NS_VK_CONTEXT_MENU   nsIDOMKeyEvent::DOM_VK_CONTEXT_MENU
        1918                 : #define NS_VK_SLEEP          nsIDOMKeyEvent::DOM_VK_SLEEP
        1919                 :
        1920                 : #define NS_VK_NUMPAD0        nsIDOMKeyEvent::DOM_VK_NUMPAD0
        1921                 : #define NS_VK_NUMPAD1        nsIDOMKeyEvent::DOM_VK_NUMPAD1
        1922                 : #define NS_VK_NUMPAD2        nsIDOMKeyEvent::DOM_VK_NUMPAD2
        1923                 : #define NS_VK_NUMPAD3        nsIDOMKeyEvent::DOM_VK_NUMPAD3
        1924                 : #define NS_VK_NUMPAD4        nsIDOMKeyEvent::DOM_VK_NUMPAD4
        1925                 : #define NS_VK_NUMPAD5        nsIDOMKeyEvent::DOM_VK_NUMPAD5
        1926                 : #define NS_VK_NUMPAD6        nsIDOMKeyEvent::DOM_VK_NUMPAD6
        1927                 : #define NS_VK_NUMPAD7        nsIDOMKeyEvent::DOM_VK_NUMPAD7
        1928                 : #define NS_VK_NUMPAD8        nsIDOMKeyEvent::DOM_VK_NUMPAD8
        1929                 : #define NS_VK_NUMPAD9        nsIDOMKeyEvent::DOM_VK_NUMPAD9
        1930                 : #define NS_VK_MULTIPLY       nsIDOMKeyEvent::DOM_VK_MULTIPLY
        1931                 : #define NS_VK_ADD            nsIDOMKeyEvent::DOM_VK_ADD
        1932                 : #define NS_VK_SEPARATOR      nsIDOMKeyEvent::DOM_VK_SEPARATOR
        1933                 : #define NS_VK_SUBTRACT       nsIDOMKeyEvent::DOM_VK_SUBTRACT
        1934                 : #define NS_VK_DECIMAL        nsIDOMKeyEvent::DOM_VK_DECIMAL
        1935                 : #define NS_VK_DIVIDE         nsIDOMKeyEvent::DOM_VK_DIVIDE
        1936                 : #define NS_VK_F1             nsIDOMKeyEvent::DOM_VK_F1
        1937                 : #define NS_VK_F2             nsIDOMKeyEvent::DOM_VK_F2
        1938                 : #define NS_VK_F3             nsIDOMKeyEvent::DOM_VK_F3
        1939                 : #define NS_VK_F4             nsIDOMKeyEvent::DOM_VK_F4
        1940                 : #define NS_VK_F5             nsIDOMKeyEvent::DOM_VK_F5
        1941                 : #define NS_VK_F6             nsIDOMKeyEvent::DOM_VK_F6
        1942                 : #define NS_VK_F7             nsIDOMKeyEvent::DOM_VK_F7
        1943                 : #define NS_VK_F8             nsIDOMKeyEvent::DOM_VK_F8
        1944                 : #define NS_VK_F9             nsIDOMKeyEvent::DOM_VK_F9
        1945                 : #define NS_VK_F10            nsIDOMKeyEvent::DOM_VK_F10
        1946                 : #define NS_VK_F11            nsIDOMKeyEvent::DOM_VK_F11
        1947                 : #define NS_VK_F12            nsIDOMKeyEvent::DOM_VK_F12
        1948                 : #define NS_VK_F13            nsIDOMKeyEvent::DOM_VK_F13
        1949                 : #define NS_VK_F14            nsIDOMKeyEvent::DOM_VK_F14
        1950                 : #define NS_VK_F15            nsIDOMKeyEvent::DOM_VK_F15
        1951                 : #define NS_VK_F16            nsIDOMKeyEvent::DOM_VK_F16
        1952                 : #define NS_VK_F17            nsIDOMKeyEvent::DOM_VK_F17
        1953                 : #define NS_VK_F18            nsIDOMKeyEvent::DOM_VK_F18
        1954                 : #define NS_VK_F19            nsIDOMKeyEvent::DOM_VK_F19
        1955                 : #define NS_VK_F20            nsIDOMKeyEvent::DOM_VK_F20
        1956                 : #define NS_VK_F21            nsIDOMKeyEvent::DOM_VK_F21
        1957                 : #define NS_VK_F22            nsIDOMKeyEvent::DOM_VK_F22
        1958                 : #define NS_VK_F23            nsIDOMKeyEvent::DOM_VK_F23
        1959                 : #define NS_VK_F24            nsIDOMKeyEvent::DOM_VK_F24
        1960                 :
        1961                 : #define NS_VK_NUM_LOCK       nsIDOMKeyEvent::DOM_VK_NUM_LOCK
        1962                 : #define NS_VK_SCROLL_LOCK    nsIDOMKeyEvent::DOM_VK_SCROLL_LOCK
        1963                 :
        1964                 : #define NS_VK_COMMA          nsIDOMKeyEvent::DOM_VK_COMMA
        1965                 : #define NS_VK_PERIOD         nsIDOMKeyEvent::DOM_VK_PERIOD
        1966                 : #define NS_VK_SLASH          nsIDOMKeyEvent::DOM_VK_SLASH
        1967                 : #define NS_VK_BACK_QUOTE     nsIDOMKeyEvent::DOM_VK_BACK_QUOTE
        1968                 : #define NS_VK_OPEN_BRACKET   nsIDOMKeyEvent::DOM_VK_OPEN_BRACKET
        1969                 : #define NS_VK_BACK_SLASH     nsIDOMKeyEvent::DOM_VK_BACK_SLASH
        1970                 : #define NS_VK_CLOSE_BRACKET  nsIDOMKeyEvent::DOM_VK_CLOSE_BRACKET
        1971                 : #define NS_VK_QUOTE          nsIDOMKeyEvent::DOM_VK_QUOTE
        1972                 :
        1973                 : #define NS_VK_META           nsIDOMKeyEvent::DOM_VK_META
        1974                 :
        1975                 : // IME Constants  -- keep in synch with nsIPrivateTextRange.h
        1976                 : #define NS_TEXTRANGE_CARETPOSITION         0x01
        1977                 : #define NS_TEXTRANGE_RAWINPUT              0x02
        1978                 : #define NS_TEXTRANGE_SELECTEDRAWTEXT       0x03
        1979                 : #define NS_TEXTRANGE_CONVERTEDTEXT         0x04
        1980                 : #define NS_TEXTRANGE_SELECTEDCONVERTEDTEXT 0x05
        1981                 :
        1982                 : /**
        1983                 :  * Whether the event should be handled by the frame of the mouse cursor
        1984                 :  * position or not.  When it should be handled there (e.g., the mouse events),
        1985                 :  * this returns TRUE.
        1986                 :  */
        1987               0 : inline bool NS_IsEventUsingCoordinates(nsEvent* aEvent)
        1988                 : {
        1989               0 :   return !NS_IS_KEY_EVENT(aEvent) && !NS_IS_IME_RELATED_EVENT(aEvent) &&
        1990               0 :          !NS_IS_CONTEXT_MENU_KEY(aEvent) && !NS_IS_ACTIVATION_EVENT(aEvent) &&
        1991               0 :          !NS_IS_PLUGIN_EVENT(aEvent) &&
        1992               0 :          !NS_IS_CONTENT_COMMAND_EVENT(aEvent) &&
        1993               0 :          aEvent->eventStructType != NS_ACCESSIBLE_EVENT;
        1994                 : }
        1995                 :
        1996                 : /**
        1997                 :  * Whether the event should be handled by the focused DOM window in the
        1998                 :  * same top level window's or not.  E.g., key events, IME related events
        1999                 :  * (including the query content events, they are used in IME transaction)
        2000                 :  * should be handled by the (last) focused window rather than the dispatched
        2001                 :  * window.
        2002                 :  *
        2003                 :  * NOTE: Even if this returns TRUE, the event isn't going to be handled by the
        2004                 :  * application level active DOM window which is on another top level window.
        2005                 :  * So, when the event is fired on a deactive window, the event is going to be
        2006                 :  * handled by the last focused DOM window in the last focused window.
        2007                 :  */
        2008               0 : inline bool NS_IsEventTargetedAtFocusedWindow(nsEvent* aEvent)
        2009                 : {
        2010                 :   return NS_IS_KEY_EVENT(aEvent) || NS_IS_IME_RELATED_EVENT(aEvent) ||
        2011                 :          NS_IS_CONTEXT_MENU_KEY(aEvent) ||
        2012                 :          NS_IS_CONTENT_COMMAND_EVENT(aEvent) ||
        2013               0 :          NS_IS_RETARGETED_PLUGIN_EVENT(aEvent);
        2014                 : }
        2015                 :
        2016                 : /**
        2017                 :  * Whether the event should be handled by the focused content or not.  E.g.,
        2018                 :  * key events, IME related events and other input events which are not handled
        2019                 :  * by the frame of the mouse cursor position.
        2020                 :  *
        2021                 :  * NOTE: Even if this returns TRUE, the event isn't going to be handled by the
        2022                 :  * application level active DOM window which is on another top level window.
        2023                 :  * So, when the event is fired on a deactive window, the event is going to be
        2024                 :  * handled by the last focused DOM element of the last focused DOM window in
        2025                 :  * the last focused window.
        2026                 :  */
        2027               0 : inline bool NS_IsEventTargetedAtFocusedContent(nsEvent* aEvent)
        2028                 : {
        2029                 :   return NS_IS_KEY_EVENT(aEvent) || NS_IS_IME_RELATED_EVENT(aEvent) ||
        2030                 :          NS_IS_CONTEXT_MENU_KEY(aEvent) ||
        2031               0 :          NS_IS_RETARGETED_PLUGIN_EVENT(aEvent);
        2032                 : }
        2033                 :
        2034                 : #endif // nsGUIEvent_h__

Generated by: LCOV version 1.7