1 #include <Elementary.h>
3 # include "elementary_config.h"
5 #ifndef ELM_LIB_QUICKLAUNCH
10 Evas_Object *btn_back;
12 Evas_Object *url_entry;
14 const char* user_agent;
15 Eina_Bool js_hooks : 1;
19 _btn_back_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
21 Evas_Object *web = data;
27 _btn_fwd_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
29 Evas_Object *web = data;
35 _btn_reload_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
37 Evas_Object *web = data;
43 _url_change_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
45 Evas_Object *web = data;
46 const char *uri = elm_object_text_get(obj);
48 elm_web_uri_set(web, uri);
52 _toggle_inwin_mode_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
54 elm_web_inwin_mode_set(data, !elm_web_inwin_mode_get(data));
58 _title_changed_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info)
61 snprintf(buf, sizeof(buf), "Web - %s", (const char *)event_info);
62 elm_win_title_set(data, buf);
66 _uri_changed_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info)
70 elm_object_text_set(wt->url_entry, event_info);
73 elm_object_disabled_set(wt->btn_back, !elm_web_back_possible(wt->web));
74 elm_object_disabled_set(wt->btn_fwd, !elm_web_forward_possible(wt->web));
76 elm_object_disabled_set(wt->btn_back, !elm_web_back_possible_get(wt->web));
77 elm_object_disabled_set(wt->btn_fwd, !elm_web_forward_possible_get(wt->web));
78 >>>>>>> remotes/origin/upstream
82 _new_win_del_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
85 wt->sub_wins = eina_list_remove(wt->sub_wins, obj);
89 _web_win_close_request_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
91 evas_object_del(data);
95 _new_window_hook(void *data, Evas_Object *obj __UNUSED__, Eina_Bool js __UNUSED__, const Elm_Web_Window_Features *wf __UNUSED__)
98 Evas_Object *new_win, *new_web, *bg;
100 new_win = elm_win_add(NULL, "elm-web-test-popup", ELM_WIN_BASIC);
101 elm_win_autodel_set(new_win, EINA_TRUE);
102 evas_object_resize(new_win, 300, 300);
103 evas_object_show(new_win);
105 bg = elm_bg_add(new_win);
106 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
107 elm_win_resize_object_add(new_win, bg);
108 evas_object_show(bg);
110 new_web = elm_web_add(new_win);
111 elm_web_useragent_set(new_web, wt->user_agent);
112 evas_object_size_hint_weight_set(new_web, EVAS_HINT_EXPAND,
114 elm_win_resize_object_add(new_win, new_web);
115 evas_object_show(new_web);
117 evas_object_smart_callback_add(new_win, "delete,request", _new_win_del_cb,
119 evas_object_smart_callback_add(new_web, "windows,close,request",
120 _web_win_close_request_cb, new_win);
121 wt->sub_wins = eina_list_append(wt->sub_wins, new_win);
127 _alert_del(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
129 evas_object_del(obj);
133 _alert_hook(void *data __UNUSED__, Evas_Object *obj, const char *message)
135 Evas_Object *popup, *label;
137 popup = elm_notify_add(obj);
138 elm_notify_orient_set(popup, ELM_NOTIFY_ORIENT_CENTER);
139 // Using the timeout doesn't seem to go well with the second main loop
140 //elm_notify_timeout_set(popup, 2.0);
142 elm_notify_repeat_events_set(popup, EINA_FALSE);
144 elm_notify_allow_events_set(popup, EINA_FALSE);
145 >>>>>>> remotes/origin/upstream
146 evas_object_show(popup);
148 evas_object_smart_callback_add(popup, "block,clicked", _alert_del, NULL);
150 label = elm_label_add(obj);
151 elm_object_text_set(label, message);
152 elm_object_content_set(popup, label);
153 evas_object_show(label);
159 _confirm_ok_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
161 Eina_Bool *response = data;
162 *response = EINA_TRUE;
166 _confirm_cancel_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
168 Eina_Bool *response = data;
169 *response = EINA_FALSE;
173 _confirm_dismiss_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
175 evas_object_del(data);
179 _confirm_hook(void *data __UNUSED__, Evas_Object *obj, const char *message, Eina_Bool *response)
181 Evas_Object *popup, *box, *box2, *label, *btn_ok, *btn_cancel;
183 popup = elm_notify_add(obj);
184 elm_notify_orient_set(popup, ELM_NOTIFY_ORIENT_CENTER);
186 elm_notify_repeat_events_set(popup, EINA_FALSE);
188 elm_notify_allow_events_set(popup, EINA_FALSE);
189 >>>>>>> remotes/origin/upstream
190 evas_object_show(popup);
192 box = elm_box_add(obj);
193 elm_object_content_set(popup, box);
194 evas_object_show(box);
196 label = elm_label_add(obj);
197 elm_object_text_set(label, message);
198 elm_box_pack_end(box, label);
199 evas_object_show(label);
201 box2 = elm_box_add(obj);
202 elm_box_horizontal_set(box2, EINA_TRUE);
203 elm_box_pack_end(box, box2);
204 evas_object_show(box2);
206 btn_ok = elm_button_add(obj);
207 elm_object_text_set(btn_ok, "Ok");
208 elm_box_pack_end(box2, btn_ok);
209 evas_object_show(btn_ok);
211 btn_cancel = elm_button_add(obj);
212 elm_object_text_set(btn_cancel, "Cancel");
213 elm_box_pack_end(box2, btn_cancel);
214 evas_object_show(btn_cancel);
216 evas_object_smart_callback_add(btn_ok, "clicked", _confirm_dismiss_cb,
218 evas_object_smart_callback_add(btn_cancel, "clicked", _confirm_dismiss_cb,
220 evas_object_smart_callback_add(btn_ok, "clicked", _confirm_ok_cb, response);
221 evas_object_smart_callback_add(btn_cancel, "clicked", _confirm_cancel_cb,
228 _prompt_hook(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *message __UNUSED__, const char *default_value, char **value, Eina_Bool *response)
230 *response = EINA_TRUE;
231 *value = default_value ? strdup(default_value) : "No default!";
236 _file_selector_hook(void *data __UNUSED__, Evas_Object *obj __UNUSED__, Eina_Bool allow_multiple __UNUSED__, Eina_List *accept_types __UNUSED__, Eina_List **selected_files, Eina_Bool *response)
238 *selected_files = eina_list_append(NULL,
239 strdup("/path/to/non_existing_file"));
240 *response = EINA_TRUE;
245 _console_message_hook(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *message, unsigned int line_number, const char *source_id)
247 printf("CONSOLE: %s:%d:%s\n", source_id, line_number, message);
251 _js_popup_hooks_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
255 wt->js_hooks = !wt->js_hooks;
258 elm_web_dialog_alert_hook_set(wt->web, _alert_hook, NULL);
259 elm_web_dialog_confirm_hook_set(wt->web, _confirm_hook, NULL);
260 elm_web_dialog_prompt_hook_set(wt->web, _prompt_hook, NULL);
261 elm_web_dialog_file_selector_hook_set(wt->web, _file_selector_hook,
263 elm_web_console_message_hook_set(wt->web, _console_message_hook, NULL);
267 elm_web_dialog_alert_hook_set(wt->web, NULL, NULL);
268 elm_web_dialog_confirm_hook_set(wt->web, NULL, NULL);
269 elm_web_dialog_prompt_hook_set(wt->web, NULL, NULL);
270 elm_web_dialog_file_selector_hook_set(wt->web, NULL, NULL);
271 elm_web_console_message_hook_set(wt->web, NULL, NULL);
276 _zoom_out_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
281 zoom = elm_web_zoom_get(wt->web);
288 elm_web_zoom_set(wt->web, zoom);
292 _zoom_in_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
297 zoom = elm_web_zoom_get(wt->web);
305 elm_web_zoom_set(wt->web, zoom);
309 _zoom_mode_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info)
312 Elm_Object_Item *hoversel_it = event_info;
313 const char *lbl = elm_object_item_text_get(hoversel_it);
315 if (!strcmp(lbl, "Manual"))
316 elm_web_zoom_mode_set(wt->web, ELM_WEB_ZOOM_MODE_MANUAL);
317 else if (!strcmp(lbl, "Fit"))
318 elm_web_zoom_mode_set(wt->web, ELM_WEB_ZOOM_MODE_AUTO_FIT);
320 elm_web_zoom_mode_set(wt->web, ELM_WEB_ZOOM_MODE_AUTO_FILL);
324 _show_region_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
327 elm_web_region_show(wt->web, 300, 300, 1, 1);
331 _bring_in_region_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
334 elm_web_region_bring_in(wt->web, 50, 0, 1, 1);
338 _main_web_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
341 Evas_Object *sub_win;
343 EINA_LIST_FREE(wt->sub_wins, sub_win)
344 evas_object_del(sub_win);
350 test_web(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__, Eina_Bool mobile)
352 const char user_agent_firefox[] = "Mozilla/5.0 (X11; Linux x86_64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1";
353 const char user_agent_mobile[] = "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3";
354 Evas_Object *win, *bg, *bx, *bx2, *bt, *web, *url;
359 wt = calloc(1, sizeof(*wt));
361 win = elm_win_add(NULL, "web", ELM_WIN_BASIC);
363 if (mobile == EINA_TRUE)
365 wt->user_agent = user_agent_mobile;
366 elm_win_title_set(win, "Web-mobile");
370 wt->user_agent = user_agent_firefox;
371 elm_win_title_set(win, "Web");
374 elm_win_autodel_set(win, EINA_TRUE);
376 bg = elm_bg_add(win);
377 elm_win_resize_object_add(win, bg);
378 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
379 evas_object_show(bg);
381 bx = elm_box_add(win);
382 elm_win_resize_object_add(win, bx);
383 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
384 evas_object_show(bx);
386 bx2 = elm_box_add(win);
387 elm_box_horizontal_set(bx2, EINA_TRUE);
388 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0);
389 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, 0.0);
390 elm_box_pack_end(bx, bx2);
391 evas_object_show(bx2);
393 web = elm_web_add(win);
394 elm_web_useragent_set(web, wt->user_agent);
395 printf("elm_web useragent: %s\n", elm_web_useragent_get(web));
396 evas_object_size_hint_weight_set(web, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
397 evas_object_size_hint_align_set(web, EVAS_HINT_FILL, EVAS_HINT_FILL);
398 elm_box_pack_end(bx, web);
399 evas_object_show(web);
401 bt = elm_button_add(win);
402 elm_object_text_set(bt, "<");
403 elm_box_pack_end(bx2, bt);
404 evas_object_show(bt);
406 evas_object_smart_callback_add(bt, "clicked", _btn_back_cb, web);
409 bt = elm_button_add(win);
410 elm_object_text_set(bt, "R");
411 elm_box_pack_end(bx2, bt);
412 evas_object_show(bt);
414 evas_object_smart_callback_add(bt, "clicked", _btn_reload_cb, web);
416 bt = elm_button_add(win);
417 elm_object_text_set(bt, ">");
418 elm_box_pack_end(bx2, bt);
419 evas_object_show(bt);
421 evas_object_smart_callback_add(bt, "clicked", _btn_fwd_cb, web);
424 url = elm_entry_add(win);
425 elm_entry_single_line_set(url, EINA_TRUE);
426 elm_entry_scrollable_set(url, EINA_TRUE);
427 evas_object_size_hint_weight_set(url, EVAS_HINT_EXPAND, 0);
428 evas_object_size_hint_align_set(url, EVAS_HINT_FILL, EVAS_HINT_FILL);
429 elm_box_pack_end(bx2, url);
430 evas_object_show(url);
432 evas_object_smart_callback_add(url, "activated", _url_change_cb, web);
435 bx2 = elm_box_add(win);
436 elm_box_horizontal_set(bx2, EINA_TRUE);
437 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0);
438 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, 0);
439 elm_box_pack_end(bx, bx2);
440 evas_object_show(bx2);
442 bt = elm_button_add(win);
443 elm_object_text_set(bt, "Inwin Mode");
444 elm_box_pack_end(bx2, bt);
445 evas_object_show(bt);
447 evas_object_smart_callback_add(bt, "clicked", _toggle_inwin_mode_cb, web);
449 bt = elm_button_add(win);
450 elm_object_text_set(bt, "Custom Hooks");
451 elm_box_pack_end(bx2, bt);
452 evas_object_show(bt);
454 evas_object_smart_callback_add(bt, "clicked", _js_popup_hooks_set, wt);
456 bt = elm_button_add(win);
457 elm_object_text_set(bt, "-");
458 elm_box_pack_end(bx2, bt);
459 evas_object_show(bt);
461 evas_object_smart_callback_add(bt, "clicked", _zoom_out_cb, wt);
463 bt = elm_button_add(win);
464 elm_object_text_set(bt, "+");
465 elm_box_pack_end(bx2, bt);
466 evas_object_show(bt);
468 evas_object_smart_callback_add(bt, "clicked", _zoom_in_cb, wt);
470 bt = elm_hoversel_add(win);
471 elm_object_text_set(bt, "Zoom Mode");
472 elm_box_pack_end(bx2, bt);
473 evas_object_show(bt);
475 elm_hoversel_item_add(bt, "Manual", NULL, ELM_ICON_NONE, _zoom_mode_cb, wt);
476 elm_hoversel_item_add(bt, "Fit", NULL, ELM_ICON_NONE, _zoom_mode_cb, wt);
477 elm_hoversel_item_add(bt, "Fill", NULL, ELM_ICON_NONE, _zoom_mode_cb, wt);
479 bx2 = elm_box_add(win);
480 elm_box_horizontal_set(bx2, EINA_TRUE);
481 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0);
482 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, 0);
483 elm_box_pack_end(bx, bx2);
484 evas_object_show(bx2);
486 bt = elm_button_add(win);
487 elm_object_text_set(bt, "Show 300, 300");
488 elm_box_pack_end(bx2, bt);
489 evas_object_show(bt);
491 evas_object_smart_callback_add(bt, "clicked", _show_region_cb, wt);
493 bt = elm_button_add(win);
494 elm_object_text_set(bt, "Bring in 50, 0");
495 elm_box_pack_end(bx2, bt);
496 evas_object_show(bt);
498 evas_object_smart_callback_add(bt, "clicked", _bring_in_region_cb, wt);
500 evas_object_smart_callback_add(web, "title,changed", _title_changed_cb, win);
501 evas_object_smart_callback_add(web, "uri,changed", _uri_changed_cb, wt);
503 evas_object_event_callback_add(web, EVAS_CALLBACK_DEL, _main_web_del_cb, wt);
507 elm_web_uri_set(web, "http://www.enlightenment.org");
509 elm_web_window_create_hook_set(web, _new_window_hook, wt);
511 evas_object_resize(win, 320, 480);
512 evas_object_show(win);
516 test_web_normal(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
518 test_web(data, obj, event_info, EINA_FALSE);
522 test_web_mobile(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
524 test_web(data, obj, event_info, EINA_TRUE);