1/*
2 * Copyright (C) 2010 Apple Inc. All rights reserved.
3 * Portions Copyright (c) 2010 Motorola Mobility, Inc.  All rights reserved.
4 * Copyright (C) 2011, 2012 Igalia S.L
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
17 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
19 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
25 * THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#ifndef NativeWebKeyboardEvent_h
29#define NativeWebKeyboardEvent_h
30
31#include "WebEvent.h"
32
33#if USE(APPKIT)
34#include <wtf/RetainPtr.h>
35OBJC_CLASS NSView;
36
37namespace WebCore {
38struct KeypressCommand;
39}
40#endif
41
42#if PLATFORM(EFL)
43#include <Evas.h>
44#endif
45
46#if PLATFORM(GTK)
47#include <WebCore/CompositionResults.h>
48#include <WebCore/GUniquePtrGtk.h>
49#include <WebCore/GtkInputMethodFilter.h>
50typedef union _GdkEvent GdkEvent;
51#endif
52
53#if PLATFORM(IOS)
54#include <wtf/RetainPtr.h>
55OBJC_CLASS WebIOSEvent;
56#endif
57
58namespace WebKit {
59
60class NativeWebKeyboardEvent : public WebKeyboardEvent {
61public:
62#if USE(APPKIT)
63    NativeWebKeyboardEvent(NSEvent *, bool handledByInputMethod, const Vector<WebCore::KeypressCommand>&);
64#elif PLATFORM(GTK)
65    NativeWebKeyboardEvent(const NativeWebKeyboardEvent&);
66    NativeWebKeyboardEvent(GdkEvent*, const WebCore::CompositionResults&, WebCore::GtkInputMethodFilter::EventFakedForComposition);
67#elif PLATFORM(EFL)
68    NativeWebKeyboardEvent(const Evas_Event_Key_Down*, bool);
69    NativeWebKeyboardEvent(const Evas_Event_Key_Up*);
70#elif PLATFORM(IOS)
71    NativeWebKeyboardEvent(WebIOSEvent *);
72#endif
73
74#if USE(APPKIT)
75    NSEvent *nativeEvent() const { return m_nativeEvent.get(); }
76#elif PLATFORM(GTK)
77    GdkEvent* nativeEvent() const { return m_nativeEvent.get(); }
78    const WebCore::CompositionResults& compositionResults() const  { return m_compositionResults; }
79    bool isFakeEventForComposition() const { return m_fakeEventForComposition; }
80#elif PLATFORM(EFL)
81    const void* nativeEvent() const { return m_nativeEvent; }
82    bool isFiltered() const { return m_isFiltered; }
83#elif PLATFORM(IOS)
84    WebIOSEvent* nativeEvent() const { return m_nativeEvent.get(); }
85#endif
86
87private:
88#if USE(APPKIT)
89    RetainPtr<NSEvent> m_nativeEvent;
90#elif PLATFORM(GTK)
91    GUniquePtr<GdkEvent> m_nativeEvent;
92    WebCore::CompositionResults m_compositionResults;
93    bool m_fakeEventForComposition;
94#elif PLATFORM(EFL)
95    const void* m_nativeEvent;
96    bool m_isFiltered;
97#elif PLATFORM(IOS)
98    RetainPtr<WebIOSEvent> m_nativeEvent;
99#endif
100};
101
102} // namespace WebKit
103
104#endif // NativeWebKeyboardEvent_h
105