Name all the GLib timeout sources
[WebKit-https.git] / Source / WebCore / platform / PlatformKeyboardEvent.h
1 /*
2  * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.  All rights reserved.
3  * Copyright (C) 2008 Collabora, Ltd.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
25  */
26
27 #ifndef PlatformKeyboardEvent_h
28 #define PlatformKeyboardEvent_h
29
30 #include "PlatformEvent.h"
31 #include <wtf/WindowsExtras.h>
32 #include <wtf/text/WTFString.h>
33
34 #if PLATFORM(MAC)
35 #include <wtf/RetainPtr.h>
36 OBJC_CLASS NSEvent;
37 #endif
38
39 #if PLATFORM(GTK)
40 typedef struct _GdkEventKey GdkEventKey;
41 #include "CompositionResults.h"
42 #endif
43
44 #if PLATFORM(BLACKBERRY)
45 namespace BlackBerry {
46 namespace Platform {
47 class KeyboardEvent;
48 }
49 }
50 #endif
51
52 #if PLATFORM(EFL)
53 typedef struct _Evas_Event_Key_Down Evas_Event_Key_Down;
54 typedef struct _Evas_Event_Key_Up Evas_Event_Key_Up;
55 #endif
56
57 namespace WebCore {
58
59     class PlatformKeyboardEvent : public PlatformEvent {
60         WTF_MAKE_FAST_ALLOCATED;
61     public:
62         PlatformKeyboardEvent()
63             : PlatformEvent(PlatformEvent::KeyDown)
64             , m_windowsVirtualKeyCode(0)
65             , m_nativeVirtualKeyCode(0)
66             , m_macCharCode(0)
67             , m_autoRepeat(false)
68             , m_isKeypad(false)
69             , m_isSystemKey(false)
70 #if PLATFORM(BLACKBERRY)
71             , m_unmodifiedCharacter(0)
72 #endif
73 #if PLATFORM(GTK)
74             , m_gdkEventKey(0)
75 #endif
76         {
77         }
78
79         PlatformKeyboardEvent(Type type, const String& text, const String& unmodifiedText, const String& keyIdentifier, int windowsVirtualKeyCode, int nativeVirtualKeyCode, int macCharCode, bool isAutoRepeat, bool isKeypad, bool isSystemKey, Modifiers modifiers, double timestamp)
80             : PlatformEvent(type, modifiers, timestamp)
81             , m_text(text)
82             , m_unmodifiedText(unmodifiedText)
83             , m_keyIdentifier(keyIdentifier)
84             , m_windowsVirtualKeyCode(windowsVirtualKeyCode)
85             , m_nativeVirtualKeyCode(nativeVirtualKeyCode)
86             , m_macCharCode(macCharCode)
87             , m_autoRepeat(isAutoRepeat)
88             , m_isKeypad(isKeypad)
89             , m_isSystemKey(isSystemKey)
90         {
91         }
92
93         void disambiguateKeyDownEvent(Type, bool backwardCompatibilityMode = false); // Only used on platforms that need it, i.e. those that generate KeyDown events.
94
95         // Text as as generated by processing a virtual key code with a keyboard layout
96         // (in most cases, just a character code, but the layout can emit several
97         // characters in a single keypress event on some platforms).
98         // This may bear no resemblance to the ultimately inserted text if an input method
99         // processes the input.
100         // Will be null for KeyUp and RawKeyDown events.
101         String text() const { return m_text; }
102
103         // Text that would have been generated by the keyboard if no modifiers were pressed
104         // (except for Shift); useful for shortcut (accelerator) key handling.
105         // Otherwise, same as text().
106         String unmodifiedText() const { return m_unmodifiedText; }
107
108         String keyIdentifier() const { return m_keyIdentifier; }
109
110         // Most compatible Windows virtual key code associated with the event.
111         // Zero for Char events.
112         int windowsVirtualKeyCode() const { return m_windowsVirtualKeyCode; }
113         void setWindowsVirtualKeyCode(int code) { m_windowsVirtualKeyCode = code; }
114
115         int nativeVirtualKeyCode() const { return m_nativeVirtualKeyCode; }
116         int macCharCode() const { return m_macCharCode; }
117
118         bool isAutoRepeat() const { return m_autoRepeat; }
119         bool isKeypad() const { return m_isKeypad; }
120         bool isSystemKey() const { return m_isSystemKey; }
121
122         static bool currentCapsLockState();
123         static void getCurrentModifierState(bool& shiftKey, bool& ctrlKey, bool& altKey, bool& metaKey);
124
125 #if PLATFORM(BLACKBERRY)
126         unsigned unmodifiedCharacter() const { return m_unmodifiedCharacter; }
127 #endif
128
129 #if PLATFORM(MAC)
130         NSEvent* macEvent() const { return m_macEvent.get(); }
131 #endif
132
133 #if PLATFORM(WIN)
134         PlatformKeyboardEvent(HWND, WPARAM, LPARAM, Type, bool);
135 #endif
136
137 #if PLATFORM(GTK)
138         PlatformKeyboardEvent(GdkEventKey*, const CompositionResults&);
139         GdkEventKey* gdkEventKey() const { return m_gdkEventKey; }
140         const CompositionResults& compositionResults() const { return m_compositionResults; }
141
142         // Used by WebKit2
143         static String keyIdentifierForGdkKeyCode(unsigned);
144         static int windowsKeyCodeForGdkKeyCode(unsigned);
145         static String singleCharacterString(unsigned);
146 #endif
147
148 #if PLATFORM(BLACKBERRY)
149         PlatformKeyboardEvent(const BlackBerry::Platform::KeyboardEvent&);
150 #endif
151
152 #if PLATFORM(EFL)
153         explicit PlatformKeyboardEvent(const Evas_Event_Key_Down*);
154         explicit PlatformKeyboardEvent(const Evas_Event_Key_Up*);
155 #endif
156
157     protected:
158         String m_text;
159         String m_unmodifiedText;
160         String m_keyIdentifier;
161         int m_windowsVirtualKeyCode;
162         int m_nativeVirtualKeyCode;
163         int m_macCharCode;
164         bool m_autoRepeat;
165         bool m_isKeypad;
166         bool m_isSystemKey;
167
168 #if PLATFORM(BLACKBERRY)
169         unsigned m_unmodifiedCharacter;
170 #endif
171
172 #if PLATFORM(MAC)
173         RetainPtr<NSEvent> m_macEvent;
174 #endif
175 #if PLATFORM(GTK)
176         GdkEventKey* m_gdkEventKey;
177         CompositionResults m_compositionResults;
178 #endif
179     };
180     
181 } // namespace WebCore
182
183 #endif // PlatformKeyboardEvent_h