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 Eina_Bool js_hooks : 1;
18 _btn_back_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
20 Evas_Object *web = data;
26 _btn_fwd_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
28 Evas_Object *web = data;
34 _btn_reload_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
36 Evas_Object *web = data;
42 _url_change_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
44 Evas_Object *web = data;
45 const char *uri = elm_object_text_get(obj);
47 elm_web_uri_set(web, uri);
51 _toggle_inwin_mode_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
53 elm_web_inwin_mode_set(data, !elm_web_inwin_mode_get(data));
57 _title_changed_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info)
60 snprintf(buf, sizeof(buf), "Web - %s", (const char *)event_info);
61 elm_win_title_set(data, buf);
65 _uri_changed_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info)
69 elm_entry_entry_set(wt->url_entry, event_info);
71 elm_object_disabled_set(wt->btn_back, !elm_web_back_possible(wt->web));
72 elm_object_disabled_set(wt->btn_fwd, !elm_web_forward_possible(wt->web));
76 _new_win_del_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
79 wt->sub_wins = eina_list_remove(wt->sub_wins, obj);
83 _web_win_close_request_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
85 evas_object_del(data);
89 _new_window_hook(void *data, Evas_Object *obj __UNUSED__, Eina_Bool js __UNUSED__, const Elm_Web_Window_Features *wf __UNUSED__)
92 Evas_Object *new_win, *new_web, *bg;
94 new_win = elm_win_add(NULL, "elm-web-test-popup", ELM_WIN_BASIC);
95 elm_win_autodel_set(new_win, EINA_TRUE);
96 evas_object_resize(new_win, 300, 300);
97 evas_object_show(new_win);
99 bg = elm_bg_add(new_win);
100 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
101 elm_win_resize_object_add(new_win, bg);
102 evas_object_show(bg);
104 new_web = elm_web_add(new_win);
105 evas_object_size_hint_weight_set(new_web, EVAS_HINT_EXPAND,
107 elm_win_resize_object_add(new_win, new_web);
108 evas_object_show(new_web);
110 evas_object_smart_callback_add(new_win, "delete,request", _new_win_del_cb,
112 evas_object_smart_callback_add(new_web, "windows,close,request",
113 _web_win_close_request_cb, new_win);
114 wt->sub_wins = eina_list_append(wt->sub_wins, new_win);
120 _alert_del(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
122 evas_object_del(obj);
126 _alert_hook(void *data __UNUSED__, Evas_Object *obj, const char *message)
128 Evas_Object *popup, *label;
130 popup = elm_notify_add(obj);
131 elm_notify_orient_set(popup, ELM_NOTIFY_ORIENT_CENTER);
132 // Using the timeout doesn't seem to go well with the second main loop
133 //elm_notify_timeout_set(popup, 2.0);
134 elm_notify_repeat_events_set(popup, EINA_FALSE);
135 evas_object_show(popup);
137 evas_object_smart_callback_add(popup, "block,clicked", _alert_del, NULL);
139 label = elm_label_add(obj);
140 elm_object_text_set(label, message);
141 elm_notify_content_set(popup, label);
142 evas_object_show(label);
148 _confirm_ok_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
150 Eina_Bool *response = data;
151 *response = EINA_TRUE;
155 _confirm_cancel_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
157 Eina_Bool *response = data;
158 *response = EINA_FALSE;
162 _confirm_dismiss_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
164 evas_object_del(data);
168 _confirm_hook(void *data __UNUSED__, Evas_Object *obj, const char *message, Eina_Bool *response)
170 Evas_Object *popup, *box, *box2, *label, *btn_ok, *btn_cancel;
172 popup = elm_notify_add(obj);
173 elm_notify_orient_set(popup, ELM_NOTIFY_ORIENT_CENTER);
174 elm_notify_repeat_events_set(popup, EINA_FALSE);
175 evas_object_show(popup);
177 box = elm_box_add(obj);
178 elm_notify_content_set(popup, box);
179 evas_object_show(box);
181 label = elm_label_add(obj);
182 elm_object_text_set(label, message);
183 elm_box_pack_end(box, label);
184 evas_object_show(label);
186 box2 = elm_box_add(obj);
187 elm_box_horizontal_set(box2, EINA_TRUE);
188 elm_box_pack_end(box, box2);
189 evas_object_show(box2);
191 btn_ok = elm_button_add(obj);
192 elm_object_text_set(btn_ok, "Ok");
193 elm_box_pack_end(box2, btn_ok);
194 evas_object_show(btn_ok);
196 btn_cancel = elm_button_add(obj);
197 elm_object_text_set(btn_cancel, "Cancel");
198 elm_box_pack_end(box2, btn_cancel);
199 evas_object_show(btn_cancel);
201 evas_object_smart_callback_add(btn_ok, "clicked", _confirm_dismiss_cb,
203 evas_object_smart_callback_add(btn_cancel, "clicked", _confirm_dismiss_cb,
205 evas_object_smart_callback_add(btn_ok, "clicked", _confirm_ok_cb, response);
206 evas_object_smart_callback_add(btn_cancel, "clicked", _confirm_cancel_cb,
213 _prompt_hook(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *message __UNUSED__, const char *default_value, char **value, Eina_Bool *response)
215 *response = EINA_TRUE;
216 *value = default_value ? strdup(default_value) : "No default!";
221 _file_selector_hook(void *data __UNUSED__, Evas_Object *obj __UNUSED__, Eina_Bool allow_multiple __UNUSED__, const char *accept_types __UNUSED__, Eina_List **selected_files, Eina_Bool *response)
223 *selected_files = eina_list_append(NULL,
224 strdup("/path/to/non_existing_file"));
225 *response = EINA_TRUE;
230 _console_message_hook(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *message, unsigned int line_number, const char *source_id)
232 printf("CONSOLE: %s:%d:%s\n", source_id, line_number, message);
236 _js_popup_hooks_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
240 wt->js_hooks = !wt->js_hooks;
243 elm_web_dialog_alert_hook_set(wt->web, _alert_hook, NULL);
244 elm_web_dialog_confirm_hook_set(wt->web, _confirm_hook, NULL);
245 elm_web_dialog_prompt_hook_set(wt->web, _prompt_hook, NULL);
246 elm_web_dialog_file_selector_hook_set(wt->web, _file_selector_hook,
248 elm_web_console_message_hook_set(wt->web, _console_message_hook, NULL);
252 elm_web_dialog_alert_hook_set(wt->web, NULL, NULL);
253 elm_web_dialog_confirm_hook_set(wt->web, NULL, NULL);
254 elm_web_dialog_prompt_hook_set(wt->web, NULL, NULL);
255 elm_web_dialog_file_selector_hook_set(wt->web, NULL, NULL);
256 elm_web_console_message_hook_set(wt->web, NULL, NULL);
261 _main_web_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
264 Evas_Object *sub_win;
266 EINA_LIST_FREE(wt->sub_wins, sub_win)
267 evas_object_del(sub_win);
273 test_web(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
275 Evas_Object *win, *bg, *bx, *bx2, *bt, *web, *url;
280 wt = calloc(1, sizeof(*wt));
282 win = elm_win_add(NULL, "web", ELM_WIN_BASIC);
283 elm_win_title_set(win, "Web");
284 elm_win_autodel_set(win, EINA_TRUE);
286 bg = elm_bg_add(win);
287 elm_win_resize_object_add(win, bg);
288 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
289 evas_object_show(bg);
291 bx = elm_box_add(win);
292 elm_win_resize_object_add(win, bx);
293 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
294 evas_object_show(bx);
296 bx2 = elm_box_add(win);
297 elm_box_horizontal_set(bx2, EINA_TRUE);
298 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0);
299 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, 0.0);
300 elm_box_pack_end(bx, bx2);
301 evas_object_show(bx2);
303 web = elm_web_add(win);
304 evas_object_size_hint_weight_set(web, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
305 evas_object_size_hint_align_set(web, EVAS_HINT_FILL, EVAS_HINT_FILL);
306 elm_box_pack_end(bx, web);
307 evas_object_show(web);
309 bt = elm_button_add(win);
310 elm_object_text_set(bt, "<");
311 elm_box_pack_end(bx2, bt);
312 evas_object_show(bt);
314 evas_object_smart_callback_add(bt, "clicked", _btn_back_cb, web);
317 bt = elm_button_add(win);
318 elm_object_text_set(bt, "R");
319 elm_box_pack_end(bx2, bt);
320 evas_object_show(bt);
322 evas_object_smart_callback_add(bt, "clicked", _btn_reload_cb, web);
324 bt = elm_button_add(win);
325 elm_object_text_set(bt, ">");
326 elm_box_pack_end(bx2, bt);
327 evas_object_show(bt);
329 evas_object_smart_callback_add(bt, "clicked", _btn_fwd_cb, web);
332 url = elm_entry_add(win);
333 elm_entry_single_line_set(url, EINA_TRUE);
334 elm_entry_scrollable_set(url, EINA_TRUE);
335 evas_object_size_hint_weight_set(url, EVAS_HINT_EXPAND, 0);
336 evas_object_size_hint_align_set(url, EVAS_HINT_FILL, EVAS_HINT_FILL);
337 elm_box_pack_end(bx2, url);
338 evas_object_show(url);
340 evas_object_smart_callback_add(url, "activated", _url_change_cb, web);
343 bx2 = elm_box_add(win);
344 elm_box_horizontal_set(bx2, EINA_TRUE);
345 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0);
346 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, 0);
347 elm_box_pack_end(bx, bx2);
348 evas_object_show(bx2);
350 bt = elm_button_add(win);
351 elm_object_text_set(bt, "Inwin Mode");
352 elm_box_pack_end(bx2, bt);
353 evas_object_show(bt);
355 evas_object_smart_callback_add(bt, "clicked", _toggle_inwin_mode_cb, web);
357 bt = elm_button_add(win);
358 elm_object_text_set(bt, "Custom Hooks");
359 elm_box_pack_end(bx2, bt);
360 evas_object_show(bt);
362 evas_object_smart_callback_add(bt, "clicked", _js_popup_hooks_set, wt);
364 evas_object_smart_callback_add(web, "title,changed", _title_changed_cb, win);
365 evas_object_smart_callback_add(web, "uri,changed", _uri_changed_cb, wt);
367 evas_object_event_callback_add(web, EVAS_CALLBACK_DEL, _main_web_del_cb, wt);
371 elm_web_uri_set(web, "http://www.enlightenment.org");
373 elm_web_window_create_hook_set(web, _new_window_hook, wt);
375 evas_object_resize(win, 320, 480);
376 evas_object_show(win);