Fix IME issue in twitter application
[framework/web/webkit-efl.git] / Source / WebKit2 / UIProcess / efl / InputMethodContextEfl.h
1 /*
2    Copyright (C) 2011 Samsung Electronics
3    Copyright (C) 2012 Intel Corporation. All rights reserved.
4
5     This library is free software; you can redistribute it and/or
6     modify it under the terms of the GNU Library General Public
7     License as published by the Free Software Foundation; either
8     version 2 of the License, or (at your option) any later version.
9
10     This library is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13     Library General Public License for more details.
14
15     You should have received a copy of the GNU Library General Public License
16     along with this library; see the file COPYING.LIB.  If not, write to
17     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18     Boston, MA 02110-1301, USA.
19 */
20
21 #ifndef InputMethodContextEfl_h
22 #define InputMethodContextEfl_h
23
24 #include <Ecore_IMF.h>
25 #include <Evas.h>
26 #include <wtf/OwnPtr.h>
27 #include <wtf/PassOwnPtr.h>
28
29 class EwkViewImpl;
30
31 namespace WebKit {
32
33 class WebPageProxy;
34
35 class InputMethodContextEfl {
36 public:
37     static PassOwnPtr<InputMethodContextEfl> create(EwkViewImpl* viewImpl, Evas* canvas)
38     {
39         OwnPtr<Ecore_IMF_Context> context = createIMFContext(canvas);
40         if (!context)
41             return nullptr;
42
43         return adoptPtr(new InputMethodContextEfl(viewImpl, context.release()));
44     }
45     ~InputMethodContextEfl();
46
47     void handleMouseUpEvent(const Evas_Event_Mouse_Up* upEvent);
48     void handleKeyDownEvent(const Evas_Event_Key_Down* downEvent, bool* isFiltered);
49     void updateTextInputState();
50
51 #if ENABLE(TIZEN_ISF_PORT)
52     void setTryToShow(bool flag) { m_tryToShow = flag; }
53     void setType(const String&);
54     bool isShow();
55     Ecore_IMF_Autocapital_Type autoCapitalType();
56     void onFocusIn();
57     void onFocusOut();
58     void revertIMFContext();
59     void resetIMFContext();
60     void hideIMFContext();
61     void destroyIMFContextList();
62 #endif
63
64 private:
65     InputMethodContextEfl(EwkViewImpl*, PassOwnPtr<Ecore_IMF_Context>);
66
67     static PassOwnPtr<Ecore_IMF_Context> createIMFContext(Evas* canvas);
68     static void onIMFInputSequenceComplete(void* data, Ecore_IMF_Context*, void* eventInfo);
69     static void onIMFPreeditSequenceChanged(void* data, Ecore_IMF_Context*, void* eventInfo);
70
71 #if ENABLE(TIZEN_ISF_PORT)
72     void initializeIMFContext(Ecore_IMF_Context*, Ecore_IMF_Input_Panel_Layout);
73
74     static void onIMFInputPanelStateChanged(void*, Ecore_IMF_Context*, int);
75     static void onIMFInputPanelGeometryChanged(void*, Ecore_IMF_Context*, int);
76     static void onIMFCandidatePanelStateChanged(void*, Ecore_IMF_Context*, int);
77     static void onIMFCandidatePanelGeometryChanged(void*, Ecore_IMF_Context*, int);
78     static Eina_Bool onIMFRetrieveSurrounding(void*, Ecore_IMF_Context*, char**, int*);
79     static void onIMFDeleteSurrounding(void*, Ecore_IMF_Context*, void*);
80
81 #if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
82     void showInputPicker(Ewk_Input_Type, const EditorState&);
83 #endif
84
85     HashMap<int, OwnPtr<Ecore_IMF_Context> > m_contextList;
86     bool m_tryToShow;
87 #endif
88
89     EwkViewImpl* m_viewImpl;
90     OwnPtr<Ecore_IMF_Context> m_context;
91     bool m_focused;
92 };
93
94 } // namespace WebKit
95
96 #endif // InputMethodContextEfl_h