commit 6f77d2245a254618c4453a5bb40a289d8afaa2e2
parent d022232ca453f8a3546a41f77da184c796c9750f
Author: Kyle Milz <kmilz@ucalgary.ca>
Date: Mon, 12 Nov 2012 15:57:13 -0700
buffer: switch to using a smart class, light MiniBrowser
Diffstat:
3 files changed, 198 insertions(+), 0 deletions(-)
diff --git a/src/buffer.c b/src/buffer.c
@@ -18,6 +18,184 @@ typedef struct {
Evas_Object *password_entry;
} AuthData;
+Ewk_View_Smart_Class* miniBrowserViewSmartClass(void)
+{
+ static Ewk_View_Smart_Class ewkViewClass = EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION("MiniBrowser_View");
+ return &ewkViewClass;
+}
+
+ static void
+quit_event_loop(void *user_data, Evas_Object *obj, void *event_info)
+{
+ ecore_main_loop_quit();
+}
+
+ static void
+on_ok_clicked(void *user_data, Evas_Object *obj, void *event_info)
+{
+ Eina_Bool *confirmed = (Eina_Bool *)user_data;
+ *confirmed = EINA_TRUE;
+
+ ecore_main_loop_quit();
+}
+
+/*
+static Browser_Window *browser_view_find(Evas_Object *view)
+{
+ Eina_List *l;
+ void *data;
+
+ if (!view)
+ return NULL;
+
+ EINA_LIST_FOREACH(windows, l, data) {
+ Browser_Window *browser_window = (Browser_Window *)data;
+ if (browser_window->webview == view)
+ return browser_window;
+ }
+ return NULL;
+}
+*/
+
+static void
+on_javascript_alert(Ewk_View_Smart_Data *smartData, const char *message)
+{
+ // Browser_Window *window = browser_view_find(smartData->self);
+ Evas_Object *win = smartData->self;
+
+ Evas_Object *alert_popup = elm_popup_add(win);
+ evas_object_size_hint_weight_set(alert_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_text_set(alert_popup, message);
+ elm_object_part_text_set(alert_popup, "title,text", "Alert");
+
+ /* Popup buttons */
+ Evas_Object *button = elm_button_add(alert_popup);
+ elm_object_text_set(button, "OK");
+ elm_object_part_content_set(alert_popup, "button1", button);
+ evas_object_smart_callback_add(button, "clicked", quit_event_loop, NULL);
+ elm_object_focus_set(button, EINA_TRUE);
+ evas_object_show(alert_popup);
+
+ /* Make modal */
+ ecore_main_loop_begin();
+
+ evas_object_del(alert_popup);
+}
+
+static Eina_Bool
+on_javascript_confirm(Ewk_View_Smart_Data *smartData, const char *message)
+{
+ // Browser_Window *window = browser_view_find(smartData->self);
+ Evas_Object *win = smartData->self;
+
+ Eina_Bool ok = EINA_FALSE;
+
+ Evas_Object *confirm_popup = elm_popup_add(win);
+ evas_object_size_hint_weight_set(confirm_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_text_set(confirm_popup, message);
+ elm_object_part_text_set(confirm_popup, "title,text", "Confirmation");
+
+ /* Popup buttons */
+ Evas_Object *cancel_button = elm_button_add(confirm_popup);
+ elm_object_text_set(cancel_button, "Cancel");
+ elm_object_part_content_set(confirm_popup, "button1", cancel_button);
+ evas_object_smart_callback_add(cancel_button, "clicked", quit_event_loop, NULL);
+ Evas_Object *ok_button = elm_button_add(confirm_popup);
+ elm_object_text_set(ok_button, "OK");
+ elm_object_part_content_set(confirm_popup, "button2", ok_button);
+ evas_object_smart_callback_add(ok_button, "clicked", on_ok_clicked, &ok);
+ elm_object_focus_set(ok_button, EINA_TRUE);
+ evas_object_show(confirm_popup);
+
+ /* Make modal */
+ ecore_main_loop_begin();
+
+ evas_object_del(confirm_popup);
+
+ return ok;
+}
+
+static const char *
+on_javascript_prompt(Ewk_View_Smart_Data *smartData, const char *message, const char *default_value)
+{
+ // Browser_Window *window = browser_view_find(smartData->self);
+ Evas_Object *win = smartData->self;
+
+ Eina_Bool ok = EINA_FALSE;
+
+ Evas_Object *prompt_popup = elm_popup_add(win);
+ evas_object_size_hint_weight_set(prompt_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_part_text_set(prompt_popup, "title,text", "Prompt");
+
+ /* Popup Content */
+ Evas_Object *box = elm_box_add(win);
+ elm_box_padding_set(box, 0, 4);
+ evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(box);
+
+ Evas_Object *prompt = elm_label_add(win);
+ elm_object_text_set(prompt, message);
+ evas_object_size_hint_weight_set(prompt, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(prompt, EVAS_HINT_FILL, 0.5);
+ elm_box_pack_end(box, prompt);
+ evas_object_show(prompt);
+
+ Evas_Object *entry = elm_entry_add(win);
+ elm_entry_scrollable_set(entry, EINA_TRUE);
+ elm_entry_single_line_set(entry, EINA_TRUE);
+ elm_entry_text_style_user_push(entry, "DEFAULT='font_size=18'");
+ elm_entry_entry_set(entry, default_value ? default_value : "");
+ elm_entry_select_all(entry);
+ evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, 0.5);
+ elm_box_pack_end(box, entry);
+ elm_object_focus_set(entry, EINA_TRUE);
+ evas_object_show(entry);
+
+ elm_object_content_set(prompt_popup, box);
+
+ /* Popup buttons */
+ Evas_Object *cancel_button = elm_button_add(prompt_popup);
+ elm_object_text_set(cancel_button, "Cancel");
+ elm_object_part_content_set(prompt_popup, "button1", cancel_button);
+ evas_object_smart_callback_add(cancel_button, "clicked", quit_event_loop, NULL);
+ Evas_Object *ok_button = elm_button_add(prompt_popup);
+ elm_object_text_set(ok_button, "OK");
+ elm_object_part_content_set(prompt_popup, "button2", ok_button);
+ evas_object_smart_callback_add(ok_button, "clicked", on_ok_clicked, &ok);
+ evas_object_show(prompt_popup);
+
+ /* Make modal */
+ ecore_main_loop_begin();
+
+ /* The return string need to be stringshared */
+ const char *prompt_text = ok ? eina_stringshare_add(elm_entry_entry_get(entry)) : NULL;
+ evas_object_del(prompt_popup);
+
+ return prompt_text;
+}
+
+static Eina_Bool on_window_geometry_get(Ewk_View_Smart_Data *sd, Evas_Coord *x, Evas_Coord *y, Evas_Coord *width, Evas_Coord *height)
+{
+ // Browser_Window *window = browser_view_find(sd->self);
+ Evas_Object *win = sd->self;
+
+ evas_object_geometry_get(win, x, y, width, height);
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool on_window_geometry_set(Ewk_View_Smart_Data *sd, Evas_Coord x, Evas_Coord y, Evas_Coord width, Evas_Coord height)
+{
+ // Browser_Window *window = browser_view_find(sd->self);
+ Evas_Object *win = sd->self;
+
+ evas_object_move(win, x, y);
+ evas_object_resize(win, width, height);
+
+ return EINA_TRUE;
+}
static void
webprocess_crashed_cb(void *data, Evas_Object *obj, void *event_info)
@@ -899,8 +1077,24 @@ buffer_add(const unsigned char flags, Window_Data *wd, const char *url, Session_
bd->window = wd;
bd->buf_number = wd->buf_total;
bd->inspector_enabled = EINA_FALSE;
+
+#if 1
+ Ewk_View_Smart_Class *ewkViewClass = miniBrowserViewSmartClass();
+ ewkViewClass->run_javascript_alert = on_javascript_alert;
+ ewkViewClass->run_javascript_confirm = on_javascript_confirm;
+ ewkViewClass->run_javascript_prompt = on_javascript_prompt;
+ ewkViewClass->window_geometry_get = on_window_geometry_get;
+ ewkViewClass->window_geometry_set = on_window_geometry_set;
+
+ Evas *evas = evas_object_evas_get(wd->win);
+ Evas_Smart *smart = evas_smart_class_new(&ewkViewClass->sc);
+ bd->view = ewk_view_smart_add(evas, smart, ewk_context_default_get());
+ // ewk_view_theme_set(bd->view, THEME_DIR "/default.edj");
+ ewk_view_theme_set(bd->view, "/usr/share/ewebkit-0/themes/default.edj");
+#else
bd->view = ewk_view_add(evas_object_evas_get(wd->win));
ewk_view_theme_set(bd->view, "/usr/share/ewebkit-0/themes/default.edj");
+#endif
settings = ewk_view_settings_get(bd->view);
ewk_settings_dns_prefetching_enabled_set(settings, EINA_TRUE);
diff --git a/src/buffer.h b/src/buffer.h
@@ -1,4 +1,5 @@
Buffer_Data* buffer_add(const unsigned char, Window_Data *, const char *, Session_Item *);
void icon_changed_cb(void *data, Evas_Object *obj, void *event_info);
+Ewk_View_Smart_Class* miniBrowserViewSmartClass(void);
diff --git a/src/main.c b/src/main.c
@@ -367,6 +367,9 @@ elm_main(int argc, char *argv[])
}
ewk_init();
+
+ ewk_view_smart_class_set(miniBrowserViewSmartClass());
+
eet_init();
viking_state_init();