2 * ISF(Input Service Framework)
4 * ISF is based on SCIM 1.4.7 and extended for supporting more mobile fitable.
5 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
7 * Contact: Shuo Liu <shuo0805.liu@samsung.com>, Jihoon Kim <jihoon48.kim@samsung.com>
9 * This library is free software; you can redistribute it and/or modify it under
10 * the terms of the GNU Lesser General Public License as published by the
11 * Free Software Foundation; either version 2.1 of the License, or (at your option)
14 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
15 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17 * License for more details.
19 * You should have received a copy of the GNU Lesser General Public License
20 * along with this library; if not, write to the Free Software Foundation, Inc., 51
21 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 #include "isf_demo_efl.h"
28 static Ecore_IMF_Context* _imf_context[2];
29 static Evas_Object *_label1 = NULL;
30 static Evas_Object *_label2 = NULL;
31 static Evas_Object *_key_event_label = NULL;
32 static Evas_Object *_preedit_event_label = NULL;
33 static Evas_Object *_commit_event_label = NULL;
34 static Evas_Object *_set_focus_button1 = NULL;
35 static Evas_Object *_set_focus_button2 = NULL;
36 static Evas_Object *_ise_show_button = NULL;
37 static Ecore_Event_Handler *_preedit_handler = NULL;
38 static Ecore_Event_Handler *_commit_handler = NULL;
39 static int focus_label_idx = 1;
42 void isf_entry_event_demo_bt (void *data, Evas_Object *obj, void *event_info);
45 static void _set_focus_button_bt (void *data, Evas_Object *obj, void *event_info)
51 ecore_imf_context_focus_in (_imf_context[i-1]);
54 static void _button_bt (void *data, Evas_Object *obj, void *event_info)
56 if (_imf_context[focus_label_idx-1] != NULL)
57 ecore_imf_context_input_panel_show (_imf_context[focus_label_idx-1]);
60 static void _key_up_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
62 static char str [100];
63 Evas_Event_Key_Up *ev = (Evas_Event_Key_Up *) event_info;
66 snprintf (str, sizeof(str),"label 1 get key up event: %s", (char *)(ev->keyname));
67 elm_object_text_set (_key_event_label, str);
68 } else if (obj == _label2) {
69 snprintf (str,sizeof(str), "label 2 get key up event: %s", (char *)(ev->keyname));
70 elm_object_text_set (_key_event_label, str);
74 static void _key_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
76 static char str [100];
77 Evas_Event_Key_Up *ev = (Evas_Event_Key_Up *) event_info;
80 snprintf (str, sizeof(str), "label 1 get key down event: %s", (char *)(ev->keyname));
81 elm_object_text_set (_key_event_label, str);
82 } else if (obj == _label2) {
83 snprintf (str, sizeof(str),"label 2 get key down event: %s", (char *)(ev->keyname));
84 elm_object_text_set (_key_event_label, str);
88 static Eina_Bool _ecore_imf_event_changed_cb (void *data, int type, void *event)
90 static char str [100];
92 char *preedit_string = NULL;
93 preedit_string = (char *)malloc (sizeof (char)*70);
96 ecore_imf_context_preedit_string_get (_imf_context[focus_label_idx-1], &preedit_string, &cursor_pos);
98 if (preedit_string == NULL)
99 return ECORE_CALLBACK_CANCEL;
101 snprintf (str,sizeof(str), "label %d get preedit string: %s", focus_label_idx, preedit_string);
103 free (preedit_string);
104 elm_object_text_set (_preedit_event_label, str);
106 return ECORE_CALLBACK_CANCEL;
109 static Eina_Bool _ecore_imf_event_commit_cb (void *data, int type, void *event)
111 static char str [100];
112 Ecore_IMF_Event_Commit *ev = (Ecore_IMF_Event_Commit *) event;
114 snprintf (str,sizeof(str), "label %d get commit string: %s", focus_label_idx, (char *)(ev->str));
115 elm_object_text_set (_commit_event_label, str);
116 return ECORE_CALLBACK_CANCEL;
119 static void nf_back_event_cb (void *data, Evas_Object *obj, void *event_info)
121 evas_object_event_callback_del (_label1, EVAS_CALLBACK_KEY_UP, NULL);
122 evas_object_event_callback_del (_label2, EVAS_CALLBACK_KEY_UP, NULL);
124 for(int i = 0; i < 2; i++)
126 if (_imf_context[i]) {
127 ecore_imf_context_del(_imf_context[i]);
128 _imf_context[i] = NULL;
132 if (_preedit_handler != NULL) {
133 ecore_event_handler_del (_preedit_handler);
134 _preedit_handler = NULL;
137 if (_commit_handler != NULL) {
138 ecore_event_handler_del (_commit_handler);
139 _commit_handler = NULL;
143 static void isf_label_event_demo_bt (void *data, Evas_Object *obj, void *event_info)
145 struct appdata *ad = (struct appdata *)data;
146 Evas_Object *layout = NULL;
148 Ecore_Window ecore_win;
150 layout = elm_layout_add (ad->naviframe);
151 evas_object_size_hint_weight_set (layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
152 evas_object_show (layout);
154 evas = evas_object_evas_get(ad->win_main);
155 ecore_win = ecore_evas_window_get(ecore_evas_ecore_evas_get(evas));
157 const char *ctx_id = ecore_imf_context_default_id_get ();
159 /* register preedit (composing) event handler */
160 _preedit_handler = ecore_event_handler_add (ECORE_IMF_EVENT_PREEDIT_CHANGED, _ecore_imf_event_changed_cb, NULL);
161 /* register commit event handler */
162 _commit_handler = ecore_event_handler_add (ECORE_IMF_EVENT_COMMIT, _ecore_imf_event_commit_cb, NULL);
165 _label1 = elm_label_add (layout);
166 elm_object_text_set (_label1, "LABEL 1");
167 evas_object_move (_label1, 0, 100);
168 evas_object_resize (_label1, ad->root_w, 50);
169 evas_object_show (_label1);
170 evas_object_event_callback_add (_label1, EVAS_CALLBACK_KEY_UP, _key_up_cb, (void *)NULL);
171 evas_object_event_callback_add (_label1, EVAS_CALLBACK_KEY_DOWN, _key_down_cb, (void *)NULL);
173 /* create input context for label1 */
174 _imf_context[0] = ecore_imf_context_add (ctx_id);
175 ecore_imf_context_client_window_set (_imf_context[0], (void *)ecore_win);
176 ecore_imf_context_client_canvas_set (_imf_context[0], evas_object_evas_get(_label1));
177 ecore_imf_context_focus_in (_imf_context[0]);
180 _label2 = elm_label_add (layout);
181 elm_object_text_set (_label2, "LABEL 2");
182 evas_object_move (_label2, 0, 150);
183 evas_object_resize (_label2, ad->root_w, 50);
184 evas_object_show (_label2);
185 evas_object_event_callback_add (_label2, EVAS_CALLBACK_KEY_UP, _key_up_cb, (void *)NULL);
186 evas_object_event_callback_add (_label2, EVAS_CALLBACK_KEY_DOWN, _key_down_cb, (void *)NULL);
188 /* create input context for label2 */
189 _imf_context[1] = ecore_imf_context_add (ctx_id);
190 ecore_imf_context_client_window_set (_imf_context[1], (void *)ecore_win);
191 ecore_imf_context_client_canvas_set (_imf_context[1], evas_object_evas_get (_label2));
193 _key_event_label = elm_button_add (layout);
194 elm_object_text_set (_key_event_label, "KEY EVENT");
195 evas_object_move (_key_event_label, 0, 200);
196 evas_object_resize (_key_event_label, ad->root_w, 50);
197 evas_object_show (_key_event_label);
199 _preedit_event_label = elm_button_add (layout);
200 elm_object_text_set (_preedit_event_label, "PREEDIT EVENT");
201 evas_object_move (_preedit_event_label, 0, 250);
202 evas_object_resize (_preedit_event_label, ad->root_w, 50);
203 evas_object_show (_preedit_event_label);
205 _commit_event_label = elm_button_add (layout);
206 elm_object_text_set (_commit_event_label, "COMMIT EVENT");
207 evas_object_move (_commit_event_label, 0, 300);
208 evas_object_resize (_commit_event_label, ad->root_w, 50);
209 evas_object_show (_commit_event_label);
211 _set_focus_button1 = elm_button_add (layout);
212 elm_object_text_set (_set_focus_button1, "SET FOCUS TO LABEL 1");
213 evas_object_move (_set_focus_button1, 0, 350);
214 evas_object_resize (_set_focus_button1, ad->root_w, 50);
215 evas_object_show (_set_focus_button1);
216 evas_object_smart_callback_add (_set_focus_button1, "clicked", _set_focus_button_bt, (void *)1);
218 _set_focus_button2 = elm_button_add (layout);
219 elm_object_text_set (_set_focus_button2, "SET FOCUS TO LABEL 2");
220 evas_object_move (_set_focus_button2, 0, 400);
221 evas_object_resize (_set_focus_button2, ad->root_w, 50);
222 evas_object_show (_set_focus_button2);
223 evas_object_smart_callback_add (_set_focus_button2, "clicked", _set_focus_button_bt, (void *)2);
225 _ise_show_button = elm_button_add (layout);
226 elm_object_text_set (_ise_show_button, "ISE SHOW");
227 evas_object_move (_ise_show_button, 0, 450);
228 evas_object_resize (_ise_show_button, ad->root_w, 50);
229 evas_object_show (_ise_show_button);
230 evas_object_smart_callback_add (_ise_show_button, "clicked", _button_bt, NULL);
232 Elm_Object_Item *it = elm_naviframe_item_push (ad->naviframe, _("label event demo"), NULL, NULL, layout, NULL);
233 Evas_Object *back_btn = elm_object_item_part_content_get (it, ELM_NAVIFRAME_ITEM_PREV_BTN);
234 evas_object_smart_callback_add (back_btn, "clicked", nf_back_event_cb, ad );
237 static void _list_click (void *data, Evas_Object *obj, void *event_info)
239 struct appdata *ad = (struct appdata *)data;
240 if (ad == NULL) return;
242 Evas_Object *li = ad->ev_li;
243 if (li == NULL) return;
245 Elm_Object_Item *it = (Elm_Object_Item *)elm_list_selected_item_get (li);
248 elm_list_item_selected_set (it, EINA_FALSE);
251 void isf_event_demo_bt (void *data, Evas_Object *obj, void *event_info)
253 struct appdata *ad = (struct appdata *)data;
255 ad->ev_li = elm_list_add (ad->naviframe);
256 elm_list_mode_set (ad->ev_li, ELM_LIST_COMPRESS);
257 evas_object_smart_callback_add (ad->ev_li, "selected", _list_click, ad);
258 elm_list_item_append (ad->ev_li, "Label event", NULL, NULL, isf_label_event_demo_bt, ad);
259 elm_list_item_append (ad->ev_li, "Entry event", NULL, NULL, isf_entry_event_demo_bt, ad);
260 elm_list_go (ad->ev_li);
262 elm_naviframe_item_push (ad->naviframe, _("ise event demo"), NULL, NULL, ad->ev_li, NULL);
266 vi:ts=4:ai:nowrap:expandtab