fix build break
[apps/core/preloaded/email.git] / composer / src / email-composer-contents.c
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *    http://www.tizenopensource.org/license
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <string.h>
18 #include <Ecore_X.h>
19
20 #include "email-composer.h"
21 #include "email-composer-recipient.h"
22 #include "email-composer-util.h"
23 #include "email-composer-contents.h"
24 #include "email-composer-callback.h"
25 #include "email-composer-attachment.h"
26 #include "email-composer-predictive-search.h"
27 #include "email-composer-js.h"
28
29 void _composer_webview_reach_top_cb(void *data, Evas_Object *obj, void *event_info);
30 void _composer_webview_reach_bottom_cb(void *data, Evas_Object *obj, void *event_info);
31 void _composer_webview_mouse_down_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info);
32
33 void _composer_webview_mouse_move_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info);
34 void _composer_webview_mouse_up_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info);
35 void _composer_webkit_loadFinished_cb(void *data, Evas_Object *obj, void *event_info);
36
37 static void _composer_webkit_focused_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
38 static void _composer_webkit_unfocused_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
39 static void _composer_get_html_content_cb(Evas_Object *o, const char *result, void *data);
40
41 static void _composer_webkit_scroll_up_cb(void *data, Evas_Object *obj, void *event_info);
42 static void _composer_webkit_scroll_down_cb(void *data, Evas_Object *obj, void *event_info);
43
44 static void _composer_webkit_ime_closed_cb(void *data, Evas_Object *obj, void *event_info);
45 static void _composer_webkit_ime_opened_cb(void *data, Evas_Object *obj, void *event_info);
46 static void _composer_webkit_resized_cb(void *data, Evas_Object *obj, void *event_info);
47 static void _composer_webview_policy_navigation_decide_cb(void *data, Evas_Object *obj, void *event_info);
48 static void _composer_webview_contextmenu_customize_cb(void *data, Evas_Object *webview, void *event_info);
49
50 static void _changed_cb(void *data, Evas_Object *obj, void *event_info) // This callback is for showing(hiding) X marked button.
51 {
52         debug_log("");
53
54         if (elm_object_focus_get(data)) {
55                 if (elm_entry_is_empty(obj))
56                         elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
57                 else
58                         elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
59         }
60 }
61
62 static void _focused_cb(void *data, Evas_Object *obj, void *event_info) // Focused callback will show X marked button and hide guidetext.
63 {
64         debug_log("");
65
66         EmailComposerUGD *ugd = (EmailComposerUGD *)data;
67
68         debug_log("ugd->focus_status = %d", ugd->focus_status);
69
70         if (COMPOSER_FOCUS_STATUS_NONE == ugd->focus_status) {
71                 if (!elm_entry_is_empty(obj))
72                         elm_object_signal_emit(ugd->subject_editfield, "elm,state,eraser,show", "elm");
73                 elm_object_signal_emit(ugd->subject_editfield, "elm,state,guidetext,hide", "elm");
74
75                 _composer_attachment_contract_items(ugd);
76
77                 elm_entry_input_panel_show(obj);
78
79                 ugd->selected_entry = ugd->subject_entry;
80 //              ugd->bringin_timer = ecore_timer_add(0.5f, _composer_bringin_cb, ugd);
81         } else {
82                 if (ugd->selected_entry == ugd->body_ewkview) {
83                         elm_object_focus_set(ugd->subject_entry, EINA_FALSE);
84                 }
85         }
86 }
87
88 static void _unfocused_cb(void *data, Evas_Object *obj, void *event_info) // Unfocused callback will show guidetext and hide X marked button.
89 {
90         debug_log("");
91
92         if (elm_entry_is_empty(obj))
93                 elm_object_signal_emit(data, "elm,state,guidetext,show", "elm");
94         elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
95
96         elm_entry_input_panel_hide(obj);
97 }
98
99 static void _eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) // When X marked button clicked, make string as empty.
100 {
101         debug_log("");
102
103         elm_entry_entry_set(data, "");
104 }
105
106 void _composer_content_create_content_field(Evas_Object *parent, EmailComposerUGD *ugd)
107 {
108         debug_log("");
109
110         /* Create Subject field */
111         _composer_create_subject_field(parent, ugd);
112
113         /* Create Body field */
114         _composer_create_body_field(parent, ugd);
115 }
116
117 void _composer_create_subject_field(Evas_Object *parent, EmailComposerUGD *ugd)
118 {
119         debug_log("");
120
121         Evas_Object *ly;
122
123         ly = _composer_create_subject_editfield(parent, dgettext("sys_string", "IDS_COM_BODY_SUBJECT"), ugd);
124
125         _composer_register_editfield_entry_callback(ugd->subject_entry, ugd);
126
127         evas_object_smart_callback_add(ugd->subject_entry, "changed", _changed_cb, ugd->subject_editfield);
128         evas_object_smart_callback_add(ugd->subject_entry, "focused", _focused_cb, ugd);
129         evas_object_smart_callback_add(ugd->subject_entry, "unfocused", _unfocused_cb, ugd->subject_editfield);
130         elm_object_signal_callback_add(ugd->subject_editfield, "elm,eraser,clicked", "elm", _eraser_clicked_cb, ugd->subject_entry);
131
132         elm_object_part_content_set(parent, "subject_field", ly);
133
134         ugd->subject_ly = ly;
135 }
136
137 Evas_Object *_composer_create_subject_editfield(Evas_Object *parent, char *title, EmailComposerUGD *ugd)
138 {
139         debug_log("");
140
141         Evas_Object *ly;
142         Evas_Object *ef;
143         Evas_Object *entry = NULL;
144
145         ly = elm_layout_add(parent);
146
147         elm_layout_file_set(ly, COMPOSER_EDJ_NAME, "layout.subject");
148         evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
149         evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
150         evas_object_show(ly);
151
152         ef = elm_layout_add(parent);
153         elm_layout_theme_set(ef, "layout", "editfield", "default");
154         evas_object_size_hint_weight_set(ef, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
155         evas_object_size_hint_align_set(ef, EVAS_HINT_FILL, EVAS_HINT_FILL);
156         evas_object_show(ef);
157
158         elm_object_part_text_set(ef, "elm.guidetext", title);
159         elm_object_part_content_set(ly, "subject.editfield", ef);
160         ugd->subject_editfield = ef;
161
162         entry = elm_entry_add(ef);
163         elm_entry_scrollable_set(entry, EINA_TRUE);
164         elm_entry_single_line_set(entry, EINA_TRUE);
165         elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
166         elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
167         elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
168         evas_object_show(entry);
169         elm_entry_text_style_user_push(entry, "DEFAULT='font_size=32 color=#000000'");
170
171         elm_object_part_content_set(ef, "elm.swallow.content", entry);
172         ugd->subject_entry = entry;
173
174         /* add filter for removing markups*/
175 //      elm_entry_text_filter_append(entry, _composer_entry_filter_remove_markup, ugd);
176
177         return ly;
178 }
179
180 void _composer_create_body_field(Evas_Object *parent, EmailComposerUGD *ugd)
181 {
182         debug_log("");
183
184         Evas_Object *body_ly;
185
186         body_ly = _composer_create_body_webview(parent, NULL, ugd);
187
188         elm_object_part_content_set(parent, "content_field", body_ly);
189
190         ugd->webkit_ly = body_ly;
191 }
192
193 Evas_Object *_composer_create_body_webview(Evas_Object *parent, char *title, EmailComposerUGD *ugd)
194 {
195         debug_log("");
196
197         Evas_Object *ly;
198
199         ly = elm_layout_add(parent);
200
201         elm_layout_file_set(ly, COMPOSER_EDJ_NAME, "layout.webkit");
202         evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
203         evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
204         evas_object_show(ly);
205
206         ugd->body_ewkview = ewk_view_add(evas_object_evas_get(parent));
207
208         evas_object_size_hint_align_set(ugd->body_ewkview, EVAS_HINT_FILL, EVAS_HINT_FILL);
209         ewk_view_vertical_panning_hold_set(ugd->body_ewkview, EINA_TRUE);
210         //elm_webview_input_field_zoom_set(ugd->body_webview, EINA_TRUE); //reviewing
211
212         elm_object_part_content_set(ly, "webkit.swallow", ugd->body_ewkview);
213
214         evas_object_smart_callback_add(ugd->body_ewkview, "edge,top", _composer_webview_reach_top_cb, ugd);
215         evas_object_smart_callback_add(ugd->body_ewkview, "edge,bottom", _composer_webview_reach_bottom_cb, ugd);
216
217         evas_object_event_callback_add(ugd->body_ewkview, EVAS_CALLBACK_MOUSE_DOWN, _composer_webview_mouse_down_cb, ugd);
218         //evas_object_event_callback_add(ugd->body_webview, EVAS_CALLBACK_MOUSE_MOVE, _composer_webview_mouse_move_cb, ugd);
219         //evas_object_event_callback_add(ugd->body_webview, EVAS_CALLBACK_MOUSE_UP, _composer_webview_mouse_up_cb, ugd);
220
221         Ewk_Setting *ewkSetting = NULL;
222         ewkSetting = ewk_view_setting_get(ugd->body_ewkview);
223
224         if (NULL == ewkSetting)
225                 debug_log("ewkSetting is NULL.");
226
227         ewk_setting_uses_encoding_detector_set(ewkSetting, EINA_TRUE);
228
229         //ewk_view_show_ime_on_autofocus_set(ugd->body_ewkview, EINA_TRUE); // jcpark reviewing
230         evas_object_smart_callback_add(ugd->body_ewkview, "load,finished", _composer_webkit_loadFinished_cb, ugd);
231         evas_object_smart_callback_add(ugd->body_ewkview, "policy,navigation,decide", _composer_webview_policy_navigation_decide_cb, ugd);
232         evas_object_smart_callback_add(ugd->body_ewkview, "scroll,up", _composer_webkit_scroll_up_cb, ugd);
233         evas_object_smart_callback_add(ugd->body_ewkview, "scroll,down", _composer_webkit_scroll_down_cb, ugd);
234         evas_object_smart_callback_add(ugd->body_ewkview, "contextmenu,customize", _composer_webview_contextmenu_customize_cb, ugd);
235         evas_object_smart_callback_add(ugd->body_ewkview, "editorclient,ime,closed", _composer_webkit_ime_closed_cb, ugd);
236         evas_object_smart_callback_add(ugd->body_ewkview, "editorclient,ime,opened", _composer_webkit_ime_opened_cb, ugd);
237
238         evas_object_event_callback_add(ugd->body_ewkview, EVAS_CALLBACK_FOCUS_IN, _composer_webkit_focused_cb, ugd);
239         evas_object_event_callback_add(ugd->body_ewkview, EVAS_CALLBACK_FOCUS_OUT, _composer_webkit_unfocused_cb, ugd);
240
241         return ly;
242 }
243
244 void _composer_register_editfield_entry_callback(Evas_Object *obj, EmailComposerUGD *ugd)
245 {
246         debug_log("");
247
248         evas_object_smart_callback_add(obj, "changed", _composer_edit_field_changed_cb, ugd);
249         evas_object_smart_callback_add(obj, "preedit,changed", _composer_edit_field_changed_cb, ugd);
250
251 //      Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(obj);
252 //      ecore_imf_context_input_panel_event_callback_add(imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, _composer_input_panel_state_changed_cb, ugd);
253 }
254
255 static Eina_Bool _composer_webkit_field_clicked_cb_hit_test_hash_fn(const Eina_Hash *hash, const void *key, void *data, void *fdata)
256 {
257         debug_log("Func data: %s, Hash entry: %s / %s\n", fdata, (const char *)key, data);
258
259         bool *val = (bool *)fdata;
260
261         if (strcmp(key, "isselected") == 0) {
262                 debug_log("OK!");
263                 *val = true;
264         }
265
266         return EINA_TRUE;
267 }
268
269 void _composer_webview_mouse_down_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info)
270 {
271         debug_log("");
272
273         /*EmailComposerUGD *ugd = (EmailComposerUGD *)data;
274
275         Evas_Event_Mouse_Down *mouse_info = (Evas_Event_Mouse_Down *)event_info;
276         debug_log("output position: [%d, %d]", mouse_info->output.x, mouse_info->output.y);*/
277 }
278
279 void _composer_webview_mouse_move_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info)
280 {
281         debug_log("");
282
283         /*EmailComposerUGD *ugd = (EmailComposerUGD *)data;
284         Evas_Event_Mouse_Move *mouse_info = (Evas_Event_Mouse_Move *) event_info;
285
286         debug_log("prev: output position: [%d, %d]", mouse_info->prev.output.x, mouse_info->prev.output.y);
287         debug_log("prev: canvas position: [%d, %d]", mouse_info->prev.canvas.x, mouse_info->prev.canvas.y);
288
289         debug_log("cur:  output position: [%d, %d]", mouse_info->cur.output.x, mouse_info->cur.output.y);
290         debug_log("cur:  canvas position: [%d, %d]", mouse_info->cur.canvas.x, mouse_info->cur.canvas.y);*/
291 }
292
293 void _composer_webview_mouse_up_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info)
294 {
295         debug_log("");
296
297         /*EmailComposerUGD *ugd = (EmailComposerUGD *)data;
298         Evas_Event_Mouse_Up *mouse_info = (Evas_Event_Mouse_Up *)event_info;
299
300         debug_log("output position: [%d, %d]", mouse_info->output.x, mouse_info->output.y);*/
301 }
302
303 void _composer_webkit_loadFinished_cb(void *data, Evas_Object *obj, void *event_info)
304 {
305         debug_log("");
306
307         EmailComposerUGD *ugd = (EmailComposerUGD *)data;
308
309         if (ewk_view_script_execute(ugd->body_ewkview, COMPOSER_JS_ENABLE_EDITABLE, _composer_script_executed_cb, 0) == EINA_FALSE)
310                 debug_log("COMPOSER_JS_ENABLE_EDITABLE failed.");
311
312         if (ewk_view_script_execute(ugd->body_ewkview, COMPOSER_JS_GET_HTML_CONTENT, _composer_get_html_content_cb, (void *)ugd) == EINA_FALSE)
313                 debug_log("COMPOSER_JS_GET_HTML_CONTENT failed.");
314
315         Ewk_Setting *ewkSetting = NULL;
316         ewkSetting = ewk_view_setting_get(ugd->body_ewkview);
317
318         if (ewkSetting == NULL)
319                 debug_log("ewkSetting is NULL.");
320
321         ewk_setting_auto_fitting_set(ewkSetting, EINA_TRUE);
322         //ewk_setting_auto_load_images_set(ewkSetting, EINA_TRUE);
323         ewk_setting_editable_link_behavior_set(ewkSetting, EWK_EDITABLE_LINK_BEHAVIOR_NEVER_LIVE);
324
325         if (ugd->isRotated == true) {
326                 _composer_resize_body_webview(ugd, 316);
327         } else {
328                 _composer_resize_body_webview(ugd, ugd->ime_height);
329         }
330
331         if (ugd->selected_entry == ugd->body_ewkview) {
332                 // focus to the body field when reply the email.
333                 evas_object_focus_set(ugd->body_ewkview, EINA_TRUE);
334         }
335
336         elm_object_disabled_set(ugd->cancel_btn, EINA_FALSE);
337         ugd->b_load_finished = EINA_TRUE;
338 }
339
340 static void _composer_webkit_focused_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
341 {
342         debug_log("Enter");
343
344         EmailComposerUGD *ugd = (EmailComposerUGD *)data;
345
346         debug_log("Webkit focused");
347
348         // recipients
349         if (ugd->ps_list) {
350                 _composer_ps_stop(ugd);
351                 ugd->sc_timer = ecore_timer_add(0.5, _composer_ps_scroll_pop, ugd);
352         }
353
354         debug_log("selected_entry = %x, to_mbe_entry = %x, cc_mbe_entry = %x, bcc_mbe_entry = %x, subject_entry = %x, body_ewkview = %x",
355                 ugd->selected_entry, ugd->to_mbe_entry, ugd->cc_mbe_entry, ugd->bcc_mbe_entry, ugd->subject_entry, ugd->body_ewkview);
356
357         debug_log("obj = %x, to_mbe = %x, cc_mbe = %x, bcc_mbe = %x, subject_editfield = %x", obj, ugd->to_mbe, ugd->cc_mbe, ugd->bcc_mbe, ugd->subject_editfield);
358
359 #if 1
360         if (EINA_TRUE == elm_object_focus_get(ugd->to_mbe)) {
361                 debug_log("to_mbe");
362                 elm_object_focus_set(ugd->to_mbe, EINA_FALSE);
363         }
364         else if (EINA_TRUE == elm_object_focus_get(ugd->cc_mbe)) {
365                 debug_log("cc_mbe");
366                 elm_object_focus_set(ugd->cc_mbe, EINA_FALSE);
367         }
368         else if (EINA_TRUE == elm_object_focus_get(ugd->bcc_mbe)) {
369                 debug_log("bcc_mbe");
370                 elm_object_focus_set(ugd->bcc_mbe, EINA_FALSE);
371         }
372         else if (EINA_TRUE == elm_object_focus_get(ugd->subject_entry)) {
373                 debug_log("subject_entry");
374                 elm_object_focus_set(ugd->subject_entry, EINA_FALSE);
375         }
376 #else
377         if (ugd->selected_entry == ugd->to_mbe_entry) {
378                 elm_object_focus_set(ugd->to_mbe, EINA_FALSE);
379         }
380         else if (ugd->selected_entry == ugd->cc_mbe_entry) {
381                 elm_object_focus_set(ugd->cc_mbe, EINA_FALSE);
382         }
383         else if (ugd->selected_entry == ugd->bcc_mbe_entry) {
384                 elm_object_focus_set(ugd->bcc_mbe, EINA_FALSE);
385         }
386         else if (ugd->selected_entry == ugd->subject_entry) {
387                 elm_object_focus_set(ugd->subject_entry, EINA_FALSE);
388         }
389 #endif
390         ugd->selected_entry = ugd->body_ewkview;
391         evas_object_focus_set(ugd->body_ewkview, EINA_TRUE);
392
393         ugd->focus_status = COMPOSER_FOCUS_STATUS_NONE; // focus handling when rte is clicked
394         _composer_attachment_contract_items(ugd);
395
396 //      ugd->bringin_timer = ecore_timer_add(0.7f, _composer_bringin_cb, ugd);
397
398         if (ewk_view_script_execute(ugd->body_ewkview, COMPOSER_JS_SET_FOCUS, _composer_script_executed_cb, 0) == EINA_FALSE)
399                 debug_log("COMPOSER_JS_SET_FOCUS failed.");
400 }
401
402 static void _composer_webkit_unfocused_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
403 {
404         debug_log("Enter");
405
406         EmailComposerUGD *ugd = (EmailComposerUGD *)data;
407
408         debug_log("selected_entry = %x, to_mbe_entry = %x, cc_mbe_entry = %x, bcc_mbe_entry = %x, subject_entry = %x, body_ewkview = %x",
409                 ugd->selected_entry, ugd->to_mbe_entry, ugd->cc_mbe_entry, ugd->bcc_mbe_entry, ugd->subject_entry, ugd->body_ewkview);
410
411         if (ugd->selected_entry == ugd->body_ewkview) {
412                 debug_log("Webkit unfocused");
413                 evas_object_focus_set(ugd->body_ewkview, EINA_FALSE);
414 #if 0 
415                 if (ewk_view_script_execute(ugd->body_ewkview, COMPOSER_JS_SET_UNFOCUS, _composer_script_executed_cb, 0) == EINA_FALSE)
416                         debug_log("COMPOSER_JS_SET_UNFOCUS failed.");
417 #endif
418         }
419 }
420
421 void _composer_webview_reach_top_cb(void *data, Evas_Object *obj, void *event_info)
422 {
423         debug_log("");
424
425         EmailComposerUGD *ugd = (EmailComposerUGD *)data;
426
427         if (ugd->is_webview_scrolling) {
428                 debug_log("main scroller start");
429                 ewk_view_vertical_panning_hold_set(ugd->body_ewkview, EINA_TRUE);
430
431                 if (elm_widget_scroll_freeze_get(ugd->main_scroller) > 0)
432                         elm_object_scroll_freeze_pop(ugd->main_scroller);
433
434                 /* WORKAROUND. To fix scrolling problem when screen is on the bottom of webview. (Do panning to top fast) */
435                 int x, y, w, h;
436                 elm_scroller_region_get(ugd->main_scroller, &x, &y, &w, &h);
437                 debug_log("main_scroller(x:%d, y:%d, w:%d, h:%d)", x, y, w, h);
438                 elm_scroller_region_bring_in(ugd->main_scroller, x, 0, w, h);
439
440                 ugd->is_main_scroller_scrolling = EINA_TRUE;
441                 ugd->is_webview_scrolling = EINA_FALSE;
442         }
443
444 #ifdef _TEMPORARY_FIX_FOR_ROTATION_
445         if (ugd->temporary_fix_for_rotation)
446                 ugd->temporary_fix_for_rotation = false;
447 #endif
448 }
449
450 void _composer_webview_reach_bottom_cb(void *data, Evas_Object *obj, void *event_info)
451 {
452         debug_log("");
453
454 #ifdef _TEMPORARY_FIX_FOR_ROTATION_
455         EmailComposerUGD *ugd = (EmailComposerUGD *)data;
456
457         if (ugd->temporary_fix_for_rotation) {
458                 if (elm_widget_scroll_freeze_get(ugd->main_scroller) > 0)
459                         elm_object_scroll_freeze_pop(ugd->main_scroller);
460                 ugd->temporary_fix_for_rotation = false;
461         }
462 #endif
463 }
464
465 static void _composer_get_html_content_cb(Evas_Object *o, const char *result, void *data)
466 {
467         debug_log("");
468
469         EmailComposerUGD *ugd = (EmailComposerUGD *)data;
470
471         if (result != NULL) {
472                 ugd->saved_html_content = g_strdup(result);
473                 debug_log("ugd->saved_html_content => %s", ugd->saved_html_content);
474         }
475 }
476
477 static void _composer_webkit_scroll_up_cb(void *data, Evas_Object *obj, void *event_info)
478 {
479         //debug_log("");
480 }
481
482 static void _composer_webkit_scroll_down_cb(void *data, Evas_Object *obj, void *event_info)
483 {
484         //debug_log("");
485 }
486
487 static void _composer_webkit_ime_closed_cb(void *data, Evas_Object *obj, void *event_info)
488 {
489         debug_log("");
490
491         EmailComposerUGD *ugd = (EmailComposerUGD *)data;
492         _composer_resize_body_webview(ugd, 0);
493 }
494
495 static void _composer_webkit_ime_opened_cb(void *data, Evas_Object *obj, void *event_info)
496 {
497         debug_log("");
498
499         EmailComposerUGD *ugd = (EmailComposerUGD *)data;
500         if (ugd->isRotated == true) {
501                 _composer_resize_body_webview(ugd, 316);
502         } else {
503                 _composer_resize_body_webview(ugd, ugd->ime_height);
504         }
505 }
506
507 static void _composer_webkit_resized_cb(void *data, Evas_Object *obj, void *event_info)
508 {
509         debug_log("");
510
511         //EmailComposerUGD *ugd = (EmailComposerUGD *)data;
512         //_composer_region_show_cb(ugd);
513         //ugd->bringin_timer = ecore_timer_add(0.7f, _composer_bringin_cb, ugd);
514         //ugd->idler_bringin = ecore_idler_add(_composer_bringin_cb, ugd);
515 }
516
517 static void _composer_webview_policy_navigation_decide_cb(void *data, Evas_Object *obj, void *event_info)
518 {
519         debug_log("");
520
521         EmailComposerUGD *ugd = (EmailComposerUGD *)data;
522
523         const char *uri = NULL;
524         uri = ewk_view_uri_get(ugd->body_ewkview);
525         debug_log("ewk_view_uri_get(%s)", uri);
526
527         if (ugd->b_load_finished == EINA_TRUE) {
528                 Ewk_Policy_Decision *policy_decision = (Ewk_Policy_Decision *)event_info;
529                 ewk_policy_decision_ignore(policy_decision);
530
531                 debug_log("url:%s", ewk_policy_decision_url_get(policy_decision));
532                 debug_log("scheme:%s", ewk_policy_decision_scheme_get(policy_decision));
533                 debug_log("cookie:%s", ewk_policy_decision_cookie_get(policy_decision));
534                 debug_log("host:%s", ewk_policy_decision_host_get(policy_decision));
535                 debug_log("response_mime:%s", ewk_policy_decision_response_mime_get(policy_decision));
536
537                 char *url = (char *)ewk_policy_decision_url_get(policy_decision);
538
539                 if ((strncmp(url, "http://", 7) == 0) ||
540                         (strncmp(url, "https://", 8) == 0) ||
541                         (strncmp(url, "ftp://", 6) == 0) ||
542                         (strncmp(url, "mms://", 6) == 0) ||
543                         (strncmp(url, "file://", 7) == 0) ||
544                         (strncmp(url, "rtsp://", 7) == 0) ||
545                         (strncmp(url, "wap://", 6) == 0)) {
546                         int ret;
547                         service_h service = NULL;
548                         ret = service_create(&service);
549                         debug_log("service_create: %d", ret);
550                         if (!service) {
551                                 debug_log("service create failed");
552                                 return;
553                         }
554                         ret = service_set_operation(service, SERVICE_OPERATION_VIEW);
555                         debug_log("service_set_operation: %d", ret);
556                         ret = service_set_uri(service, url);
557                         debug_log("service_set_uri: %d", ret);
558                         ret = service_send_launch_request(service, NULL, NULL);
559                         debug_log("service_send_launch_request: %d", ret);
560                         ret = service_destroy(service);
561                         debug_log("service_destroy: %d", ret);
562                 }
563         }
564 }
565
566 static void _composer_webview_contextmenu_customize_cb(void *data, Evas_Object *webview, void *event_info)
567 {
568         debug_log("");
569         int i = 0, count = 0;
570         Ewk_Context_Menu* contextmenu = (Ewk_Context_Menu*)event_info;
571         Ewk_Context_Menu_Item* menu_item = NULL;
572
573         count = ewk_context_menu_item_count(contextmenu);
574
575         for (i = 0; i < count; i++) {
576                 Ewk_Context_Menu_Item_Tag menu_item_tag = EWK_CONTEXT_MENU_ITEM_TAG_NO_ACTION;
577                 menu_item = ewk_context_menu_nth_item_get(contextmenu, i);
578                 if (EWK_CONTEXT_MENU_ITEM_TYPE_ACTION != ewk_context_menu_item_type_get(menu_item))
579                         continue;
580
581                 menu_item_tag = ewk_context_menu_item_tag_get(menu_item);
582                 debug_log("menu_item_tag : %d", menu_item_tag);
583
584                 if (menu_item_tag == EWK_CONTEXT_MENU_ITEM_TAG_SEARCH_WEB) {
585                         ewk_context_menu_item_remove(contextmenu, menu_item);
586                 }
587                 //if (ewk_context_menu_item_append_as_action(contextmenu, 10001/*CUSTOM_CONTEXT_MENU_ITEM_TEST_TAG*/, "test", EINA_TRUE) == EINA_FALSE)
588                 //      debug_log("failed");
589         }
590 }
591