summaryrefslogtreecommitdiff
path: root/src/lib/elm_web2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/elm_web2.c')
-rw-r--r--src/lib/elm_web2.c1505
1 files changed, 119 insertions, 1386 deletions
diff --git a/src/lib/elm_web2.c b/src/lib/elm_web2.c
index f78c47d5e..37d1d757f 100644
--- a/src/lib/elm_web2.c
+++ b/src/lib/elm_web2.c
@@ -9,19 +9,43 @@
#include "elm_priv.h"
#include "elm_widget_web.h"
-#if defined(HAVE_ELEMENTARY_WEB)
-#include <EWebKit2.h>
-#endif
-
#define MY_CLASS ELM_WEB_CLASS
#define MY_CLASS_NAME "Elm_Web"
#define MY_CLASS_NAME_LEGACY "elm_web"
-#if defined(HAVE_ELEMENTARY_WEB)
-static Ewk_View_Smart_Class _ewk_view_parent_sc =
- EWK_VIEW_SMART_CLASS_INIT_NULL;
-#endif
+typedef struct _Elm_Web_Module Elm_Web_Module;
+struct _Elm_Web_Module
+{
+ void (*unneed_web)(void);
+ Eina_Bool (*need_web)(void);
+
+ void (*window_features_ref)(Elm_Web_Window_Features *wf);
+ void (*window_features_unref)(Elm_Web_Window_Features *wf);
+ Eina_Bool (*window_features_property_get)(const Elm_Web_Window_Features *wf,
+ Elm_Web_Window_Feature_Flag flag);
+ void (*window_features_region_get)(const Elm_Web_Window_Features *wf,
+ Evas_Coord *x,
+ Evas_Coord *y,
+ Evas_Coord *w,
+ Evas_Coord *h);
+
+ const Eo_Class *(*class_get)(void);
+
+ Eina_Module *m;
+};
+
+static Elm_Web_Module ewm = {
+ NULL,
+ NULL,
+
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+
+ NULL
+};
static const char SIG_URI_CHANGED[] = "uri,changed"; // deprecated, use "url,changed" instead.
static const char SIG_URL_CHANGED[] = "url,changed";
@@ -34,707 +58,29 @@ static const Evas_Smart_Cb_Description _elm_web_smart_callbacks[] = {
{ NULL, NULL }
};
-#ifdef HAVE_ELEMENTARY_WEB
-static void
-_view_smart_add(Evas_Object *obj)
-{
- View_Smart_Data *sd;
-
- sd = calloc(1, sizeof(View_Smart_Data));
- evas_object_smart_data_set(obj, sd);
-
- _ewk_view_parent_sc.sc.add(obj);
-}
-
-static void
-_view_smart_del(Evas_Object *obj)
-{
- _ewk_view_parent_sc.sc.del(obj);
-}
-
-static Evas_Object *
-_view_smart_window_create(Ewk_View_Smart_Data *vsd,
- const Ewk_Window_Features *window_features)
-{
- Evas_Object *new;
- Evas_Object *obj = evas_object_smart_parent_get(vsd->self);
-
- ELM_WEB_DATA_GET_OR_RETURN_VAL(obj, sd, NULL);
-
- if (!sd->hook.window_create) return NULL;
-
- new = sd->hook.window_create
- (sd->hook.window_create_data, obj, EINA_TRUE,
- (const Elm_Web_Window_Features *)window_features);
- if (new) return elm_web_webkit_view_get(new);
-
- return NULL;
-}
-
-static void
-_view_smart_window_close(Ewk_View_Smart_Data *sd)
-{
- Evas_Object *obj = evas_object_smart_parent_get(sd->self);
-
- ELM_WEB_CHECK(obj);
-
- eo_event_callback_call(obj, ELM_WEB_EVENT_WINDOWS_CLOSE_REQUEST, NULL);
-}
-
-static void
-_popup_item_selected(void *data,
- Evas_Object *obj,
- void *event_info EINA_UNUSED)
-{
- Elm_Object_Item *list_it = elm_list_selected_item_get(obj);
- const Eina_List *itr, *list = elm_list_items_get(obj);
- Ewk_Popup_Menu *menu = data;
- int i = 0;
- void *d;
-
- EINA_LIST_FOREACH(list, itr, d)
- {
- if (d == list_it)
- break;
-
- i++;
- }
-
- ewk_popup_menu_selected_index_set(menu, i);
- ewk_popup_menu_close(menu);
-
- evas_object_del(evas_object_data_get(obj, "_notify"));
-}
-
-static Eina_Bool
-_popup_dismiss_cb(void *data,
- Eo *obj,
- const Eo_Event_Description *desc EINA_UNUSED,
- void *event_info EINA_UNUSED)
-{
- ewk_popup_menu_close(data);
- evas_object_del(obj);
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_view_smart_popup_menu_show(Ewk_View_Smart_Data *sd,
- Eina_Rectangle r,
- Ewk_Text_Direction dir EINA_UNUSED,
- double scale EINA_UNUSED,
- Ewk_Popup_Menu *menu)
-{
- Evas_Object *notify, *list, *grid, *win;
- const Eina_List* items = ewk_popup_menu_items_get(menu);
- Evas_Object *obj = evas_object_smart_parent_get(sd->self);
- int h, ww, wh;
-
- Elm_Object_Item *lit;
- Eina_Bool disabled;
- const char *txt;
- Ewk_Popup_Menu_Item *it;
- const Eina_List *itr;
-
- Evas_Object *popup = evas_object_data_get(sd->self, "_select_popup");
- if (popup) evas_object_del(popup);
-
- win = elm_widget_top_get(obj);
-
- notify = elm_notify_add(win);
- elm_notify_allow_events_set(notify, EINA_FALSE);
- elm_notify_align_set(notify, 0.5, 1.0);
-
- list = elm_list_add(notify);
- evas_object_data_set(list, "_notify", notify);
- elm_list_select_mode_set(list, ELM_OBJECT_SELECT_MODE_ALWAYS);
- elm_scroller_bounce_set(list, EINA_FALSE, EINA_FALSE);
- elm_list_mode_set(list, ELM_LIST_EXPAND);
- evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(list);
-
- EINA_LIST_FOREACH(items, itr, it)
- {
- switch (ewk_popup_menu_item_type_get(it))
- {
- case EWK_POPUP_MENU_SEPARATOR:
- // TODO:
- break;
- case EWK_POPUP_MENU_ITEM:
- txt = ewk_popup_menu_item_text_get(it);
- if (ewk_popup_menu_item_is_label_get(it))
- {
- lit = elm_list_item_append(list, txt, NULL, NULL, NULL, NULL);
- disabled = EINA_TRUE;
- }
- else
- {
- lit = elm_list_item_append(list, txt, NULL, NULL, _popup_item_selected, menu);
- disabled = !ewk_popup_menu_item_enabled_get(it);
- }
-
- elm_object_item_disabled_set(lit, disabled);
- break;
- default:
- break;
- }
- }
- elm_list_go(list);
-
- grid = elm_grid_add(win);
- elm_grid_size_set(grid, 1, 1);
- elm_grid_pack(grid, list, 0, 0, 1, 1);
- evas_object_geometry_get(win, NULL, NULL, &ww, &wh);
-
- //FIXME: it should be the real height of items in the list.
- h = r.h * eina_list_count(items);
- evas_object_size_hint_min_set(grid, ww, h < wh / 2 ? h : wh / 2);
- elm_object_content_set(notify, grid);
- evas_object_show(grid);
-
- evas_object_show(notify);
-
- evas_object_data_set(sd->self, "_select_popup", notify);
-
- eo_event_callback_add
- (notify, ELM_NOTIFY_EVENT_BLOCK_CLICKED, _popup_dismiss_cb, menu);
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_view_smart_popup_menu_hide(Ewk_View_Smart_Data *sd)
-{
- Evas_Object *popup = evas_object_data_get(sd->self, "_select_popup");
- if (!popup) return EINA_FALSE;
-
- evas_object_del(popup);
- evas_object_data_del(sd->self, "_select_popup");
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_fullscreen_accept(void *data,
- Eo *obj EINA_UNUSED, const Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Evas_Object *ewk = data;
- evas_object_del(evas_object_data_get(ewk, "_fullscreen_permission_popup"));
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_fullscreen_deny(void *data,
- Eo *obj EINA_UNUSED, const Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Evas_Object *ewk = data;
- ewk_view_fullscreen_exit(ewk);
- evas_object_del(evas_object_data_get(ewk, "_fullscreen_permission_popup"));
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_view_smart_fullscreen_enter(Ewk_View_Smart_Data *sd, Ewk_Security_Origin *origin)
-{
- Evas_Object *btn, *popup, *top;
- const char *host;
- char buffer[2048];
-
- Evas_Object *obj = evas_object_smart_parent_get(sd->self);
-
- ELM_WEB_CHECK(obj) EINA_FALSE;
-
- top = elm_widget_top_get(obj);
- elm_win_fullscreen_set(top, EINA_TRUE);
-
- popup = elm_popup_add(top);
- elm_popup_orient_set(popup, ELM_POPUP_ORIENT_TOP);
- evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
- host = ewk_security_origin_host_get(origin);
- snprintf(buffer, sizeof(buffer), "%s is now fullscreen.<br>Press ESC at any time to exit fullscreen,<br>Allow fullscreen?<br>", host);
- elm_object_text_set(popup, buffer);
-
- btn = elm_button_add(popup);
- elm_object_text_set(btn, "Accept");
- elm_object_part_content_set(popup, "button1", btn);
- eo_event_callback_add
- (btn, EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED, _fullscreen_accept, sd->self);
-
- btn = elm_button_add(popup);
- elm_object_text_set(btn, "Deny");
- elm_object_part_content_set(popup, "button2", btn);
- eo_event_callback_add
- (btn, EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED, _fullscreen_deny, sd->self);
-
- evas_object_data_set(sd->self, "_fullscreen_permission_popup", popup);
- evas_object_show(popup);
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_view_smart_fullscreen_exit(Ewk_View_Smart_Data *sd)
-{
- Evas_Object *obj = evas_object_smart_parent_get(sd->self);
-
- ELM_WEB_CHECK(obj) EINA_FALSE;
-
- Evas_Object *top = elm_widget_top_get(obj);
- elm_win_fullscreen_set(top, EINA_FALSE);
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_bt_close(void *data,
- Eo *obj, const Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Dialog_Data *d = data;
-
- if (d->type == DIALOG_ALERT) goto end;
-
- *d->response = (obj == d->bt_ok);
- if (d->type == DIALOG_CONFIRM) goto end;
-
- if (d->type == DIALOG_PROMPT)
- *d->entry_value = strdup(elm_entry_entry_get(d->entry));
-
-end:
- evas_object_del(d->dialog);
- free(d);
-
- return EINA_TRUE;
-}
-
-static Dialog_Data *
-_dialog_new(Evas_Object *web, Eina_Bool inwin_mode)
-{
- Dialog_Data *d;
-
- d = calloc(1, sizeof(Dialog_Data));
- if (!d) return NULL;
-
- if (!web || inwin_mode)
- {
- Evas_Object *bg;
-
- d->dialog = elm_win_add(NULL, "elm-web-popup", ELM_WIN_DIALOG_BASIC);
- eo_event_callback_add
- (d->dialog, ELM_WIN_EVENT_DELETE_REQUEST, _bt_close, d);
-
- bg = elm_bg_add(d->dialog);
- evas_object_size_hint_weight_set
- (bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_win_resize_object_add(d->dialog, bg);
- evas_object_show(bg);
-
- d->box = elm_box_add(d->dialog);
- evas_object_size_hint_weight_set
- (d->box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_win_resize_object_add(d->dialog, d->box);
- evas_object_show(d->box);
- }
- else
- {
- Evas_Object *win = elm_widget_top_get(web);
-
- d->dialog = elm_win_inwin_add(win);
- elm_object_style_set(d->dialog, "minimal");
- evas_object_size_hint_weight_set
- (d->dialog, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
- d->box = elm_box_add(win);
- evas_object_size_hint_weight_set
- (d->box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_win_inwin_content_set(d->dialog, d->box);
- evas_object_show(d->box);
- }
-
- return d;
-}
-
-static void
-_dialog_ok_cancel_buttons_add(Dialog_Data *dialog_data)
-{
- Evas_Object *bx, *bt;
- bx = elm_box_add(dialog_data->box);
- elm_box_horizontal_set(bx, EINA_TRUE);
- elm_box_pack_end(dialog_data->box, bx);
- evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(bx);
-
- dialog_data->bt_cancel = bt = elm_button_add(bx);
- elm_object_text_set(bt, "Cancel");
- elm_box_pack_end(bx, bt);
- evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
- eo_event_callback_add
- (bt, EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED, _bt_close, dialog_data);
- evas_object_show(bt);
-
- dialog_data->bt_ok = bt = elm_button_add(bx);
- elm_object_text_set(bt, "Ok");
- elm_box_pack_end(bx, bt);
- evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
- eo_event_callback_add
- (bt, EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED, _bt_close, dialog_data);
- evas_object_show(bt);
-}
-
-static void
-_dialog_del_cb(void *data EINA_UNUSED,
- Evas *e EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_exec_dialog(Evas_Object *dialog)
-{
- evas_object_event_callback_add
- (dialog, EVAS_CALLBACK_DEL, _dialog_del_cb, NULL);
- ecore_main_loop_begin();
-}
-
-static void
-_view_smart_run_javascript_alert(Ewk_View_Smart_Data *vsd, const char *message)
-{
- Evas_Object *obj = evas_object_smart_parent_get(vsd->self);
- Evas_Object *dialog = NULL;
-
- ELM_WEB_DATA_GET_OR_RETURN(obj, sd);
-
- if (sd->hook.alert)
- dialog = sd->hook.alert(sd->hook.alert_data, obj, message);
- else
- {
- Evas_Object *lb;
- Dialog_Data *dialog_data = _dialog_new(obj, sd->inwin_mode);
- dialog_data->type = DIALOG_ALERT;
- dialog = dialog_data->dialog;
-
- lb = elm_label_add(dialog_data->box);
- elm_object_text_set(lb, message);
- elm_box_pack_end(dialog_data->box, lb);
- evas_object_show(lb);
-
- dialog_data->bt_ok = elm_button_add(dialog_data->box);
- elm_object_text_set(dialog_data->bt_ok, "Close");
- elm_box_pack_end(dialog_data->box, dialog_data->bt_ok);
- evas_object_size_hint_align_set
- (dialog_data->bt_ok, EVAS_HINT_FILL, EVAS_HINT_FILL);
- eo_event_callback_add
- (dialog_data->bt_ok, EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED, _bt_close, dialog_data);
- evas_object_show(dialog_data->bt_ok);
-
- evas_object_show(dialog);
- }
-
- if (dialog) _exec_dialog(dialog);
-}
-
-static Eina_Bool
-_view_smart_run_javascript_confirm(Ewk_View_Smart_Data *vsd, const char *message)
-{
- Evas_Object *obj = evas_object_smart_parent_get(vsd->self);
- Eina_Bool response = EINA_FALSE;
- Evas_Object *dialog = NULL;
-
- ELM_WEB_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
-
- if (sd->hook.confirm)
- dialog = sd->hook.confirm(sd->hook.confirm_data, obj, message, &response);
- else
- {
- Evas_Object *lb;
- Dialog_Data *dialog_data = _dialog_new(obj, sd->inwin_mode);
- dialog_data->type = DIALOG_CONFIRM;
- dialog_data->response = &response;
- dialog = dialog_data->dialog;
-
- lb = elm_label_add(dialog_data->box);
- elm_object_text_set(lb, message);
- elm_box_pack_end(dialog_data->box, lb);
- evas_object_show(lb);
-
- _dialog_ok_cancel_buttons_add(dialog_data);
-
- evas_object_show(dialog);
- }
-
- if (dialog) _exec_dialog(dialog);
-
- return response;
-}
-
-static const char *
-_view_smart_run_javascript_prompt(Ewk_View_Smart_Data *vsd, const char *message, const char *default_value)
-{
- Evas_Object *obj = evas_object_smart_parent_get(vsd->self);
- Eina_Bool response = EINA_FALSE;
- Evas_Object *dialog = NULL;
- char *value = NULL;
- const char *ret;
-
- ELM_WEB_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
-
- if (sd->hook.prompt)
- dialog = sd->hook.prompt(sd->hook.prompt_data, obj, message, default_value, (const char**)&value, &response);
- else
- {
- Evas_Object *lb, *entry;
- Dialog_Data *dialog_data = _dialog_new(obj, sd->inwin_mode);
- dialog_data->type = DIALOG_PROMPT;
- dialog_data->response = &response;
- dialog_data->entry_value = (const char**)&value;
- dialog = dialog_data->dialog;
-
- lb = elm_label_add(dialog_data->box);
- elm_object_text_set(lb, message);
- elm_box_pack_end(dialog_data->box, lb);
- evas_object_show(lb);
-
- dialog_data->entry = entry = elm_entry_add(dialog_data->box);
- elm_entry_single_line_set(entry, EINA_TRUE);
- elm_entry_scrollable_set(entry, EINA_TRUE);
- elm_entry_entry_set(entry, default_value);
- evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_box_pack_end(dialog_data->box, entry);
- evas_object_show(entry);
-
- _dialog_ok_cancel_buttons_add(dialog_data);
-
- evas_object_show(dialog);
- }
-
- if (dialog) _exec_dialog(dialog);
-
- if (!value) return NULL;
-
- ret = eina_stringshare_add(value);
- free(value);
- return ret;
-}
-
-/**
- * Creates a new view object given the parent.
- *
- * @param parent object to use as parent.
- *
- * @return newly added Evas_Object or @c NULL on errors.
- */
-Evas_Object *
-_view_add(Evas_Object *parent)
-{
- Evas *canvas = evas_object_evas_get(parent);
- static Evas_Smart *smart = NULL;
- Evas_Object *view;
-
- if (!smart)
- {
- static Ewk_View_Smart_Class api =
- EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION("EWK_View_Elementary");
-
- ewk_view_smart_class_set(&api);
- ewk_view_smart_class_set(&_ewk_view_parent_sc);
-
- // TODO: check every api method and provide overrides with hooks!
- // TODO: hooks should provide extension points
- // TODO: extension should have some kind of "default implementation",
- // TODO: that can be replaced or controlled by hooks.
- // TODO: ie: run_javascript_alert() should present an elm_win
- // TODO: by default, but user could override it to show as inwin.
- api.sc.add = _view_smart_add;
- api.sc.del = _view_smart_del;
- api.window_create = _view_smart_window_create;
- api.window_close = _view_smart_window_close;
- api.popup_menu_show = _view_smart_popup_menu_show;
- api.popup_menu_hide = _view_smart_popup_menu_hide;
- api.fullscreen_enter = _view_smart_fullscreen_enter;
- api.fullscreen_exit = _view_smart_fullscreen_exit;
- api.run_javascript_alert = _view_smart_run_javascript_alert;
- api.run_javascript_confirm = _view_smart_run_javascript_confirm;
- api.run_javascript_prompt = _view_smart_run_javascript_prompt;
-
- smart = evas_smart_class_new(&api.sc);
- if (!smart)
- {
- CRI("Could not create smart class");
- return NULL;
- }
- }
-
- view = ewk_view_smart_add(canvas, smart, ewk_context_default_get(), ewk_page_group_create(0));
- if (!view)
- {
- ERR("Could not create smart object object for view");
- return NULL;
- }
-
- return view;
-}
-
-static Eina_Bool
-_view_smart_url_changed_cb(void *data,
- Eo *obj EINA_UNUSED, const Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- eo_event_callback_call(data, ELM_WEB_EVENT_URI_CHANGED, event_info);
- eo_event_callback_call(data, ELM_WEB_EVENT_URL_CHANGED, event_info);
-
- return EINA_TRUE;
-}
-
-static void
-_view_smart_callback_proxy(Evas_Object *view, Evas_Object *parent)
-{
- eo_event_callback_add
- (view, ELM_WEB_EVENT_URL_CHANGED, _view_smart_url_changed_cb, parent);
-}
-
-static Eina_Bool _elm_need_web = EINA_FALSE;
-#endif
-
+// FIXME: init/shutdown module below
void
_elm_unneed_web(void)
{
-#ifdef HAVE_ELEMENTARY_WEB
- if (!_elm_need_web) return;
- _elm_need_web = EINA_FALSE;
- ewk_shutdown();
-#endif
+ if (!ewm.unneed_web) return ;
+ ewm.unneed_web();
}
EAPI Eina_Bool
elm_need_web(void)
{
-#ifdef HAVE_ELEMENTARY_WEB
- if (_elm_need_web) return EINA_TRUE;
- _elm_need_web = EINA_TRUE;
- ewk_init();
- return EINA_TRUE;
-#else
- return EINA_FALSE;
-#endif
-}
-
-EOLIAN static Eina_Bool
-_elm_web_elm_widget_theme_apply(Eo *obj, Elm_Web_Data *sd EINA_UNUSED)
-{
- (void)obj;
- return EINA_TRUE;
-}
-
-EOLIAN static Eina_Bool
-_elm_web_elm_widget_on_focus(Eo *obj, Elm_Web_Data *sd, Elm_Object_Item *item EINA_UNUSED)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- Evas_Object *top;
-
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_TRUE);
- Eina_Bool int_ret = EINA_FALSE;
-
- int_ret = elm_obj_widget_on_focus(eo_super(obj, MY_CLASS), NULL);
- if (!int_ret) return EINA_TRUE;
-
- top = elm_widget_top_get(obj);
-
- if (elm_object_focus_get(obj))
- {
- evas_object_focus_set(wd->resize_obj, EINA_TRUE);
- if (top) elm_win_keyboard_mode_set(top, sd->input_method);
- }
- else
- {
- evas_object_focus_set(wd->resize_obj, EINA_FALSE);
- if (top) elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_OFF);
- }
-#else
- (void)obj;
- (void)sd;
-#endif
- return EINA_TRUE;
-}
-
-EOLIAN static Eina_Bool
-_elm_web_elm_widget_event(Eo *obj, Elm_Web_Data *sd, Evas_Object *src, Evas_Callback_Type type, void *event_info)
-{
- (void)obj;
- (void)sd;
- (void)src;
- (void)type;
- (void)event_info;
- return EINA_FALSE;
-}
-
-EOLIAN static Eina_Bool
-_elm_web_tab_propagate_get(Eo *obj EINA_UNUSED, Elm_Web_Data *sd)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- return sd->tab_propagate;
-#else
- (void)sd;
- return EINA_FALSE;
-#endif
-}
-
-EOLIAN static void
-_elm_web_tab_propagate_set(Eo *obj EINA_UNUSED, Elm_Web_Data *sd, Eina_Bool propagate)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- sd->tab_propagate = propagate;
-#else
- (void)propagate;
- (void)sd;
-#endif
-}
-
-EOLIAN static void
-_elm_web_evas_object_smart_add(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
- Evas_Object *resize_obj;
-
-#ifdef HAVE_ELEMENTARY_WEB
- resize_obj = _view_add(obj);
- elm_widget_resize_object_set(obj, resize_obj, EINA_TRUE);
-
- evas_obj_smart_add(eo_super(obj, MY_CLASS));
- elm_widget_sub_object_parent_add(obj);
-
- //TODO: need a way to change theme
- ewk_view_theme_set(resize_obj, WEBKIT_DATADIR "/themes/default.edj");
-
- _view_smart_callback_proxy(resize_obj, obj);
- elm_widget_can_focus_set(obj, EINA_TRUE);
-#else
- resize_obj = elm_label_add(obj);
- elm_object_text_set(resize_obj, "WebKit not supported!");
- elm_widget_resize_object_set(obj, resize_obj, EINA_TRUE);
-
- evas_obj_smart_add(eo_super(obj, MY_CLASS));
- elm_widget_sub_object_parent_add(obj);
-#endif
-}
-
-EOLIAN static void
-_elm_web_evas_object_smart_del(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
- evas_obj_smart_del(eo_super(obj, MY_CLASS));
+ if (!ewm.need_web) return EINA_FALSE;
+ return ewm.need_web();
}
EAPI Evas_Object *
elm_web_add(Evas_Object *parent)
{
- EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
- Evas_Object *obj = NULL;
- eo_add(&obj, MY_CLASS, parent);
+ Evas_Object *obj;
+
+ if (!parent || !ewm.class_get) return NULL;
+
+ eo_add(&obj, ewm.class_get(), parent);
return obj;
}
@@ -750,737 +96,124 @@ _elm_web_eo_base_constructor(Eo *obj, Elm_Web_Data *sd)
return obj;
}
-EOLIAN static Evas_Object*
-_elm_web_webkit_view_get(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
- return wd->resize_obj;
-#else
- (void)obj;
- ERR("Elementary not compiled with EWebKit support.");
- return NULL;
-#endif
-}
-
-EOLIAN static void
-_elm_web_window_create_hook_set(Eo *obj EINA_UNUSED, Elm_Web_Data *sd, Elm_Web_Window_Open func, void *data)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- sd->hook.window_create = func;
- sd->hook.window_create_data = data;
-#else
- (void)sd;
- (void)func;
- (void)data;
-#endif
-}
-
-EOLIAN static void
-_elm_web_dialog_alert_hook_set(Eo *obj EINA_UNUSED, Elm_Web_Data *sd, Elm_Web_Dialog_Alert func, void *data)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- sd->hook.alert = func;
- sd->hook.alert_data = data;
-#else
- (void)func;
- (void)data;
- (void)sd;
-#endif
-}
-
-EOLIAN static void
-_elm_web_dialog_confirm_hook_set(Eo *obj EINA_UNUSED, Elm_Web_Data *sd, Elm_Web_Dialog_Confirm func, void *data)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- sd->hook.confirm = func;
- sd->hook.confirm_data = data;
-#else
- (void)func;
- (void)data;
- (void)sd;
-#endif
-}
-
-EOLIAN static void
-_elm_web_dialog_prompt_hook_set(Eo *obj EINA_UNUSED, Elm_Web_Data *sd, Elm_Web_Dialog_Prompt func, void *data)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- sd->hook.prompt = func;
- sd->hook.prompt_data = data;
-#else
- (void)func;
- (void)data;
- (void)sd;
-#endif
-}
-
-EOLIAN static void
-_elm_web_dialog_file_selector_hook_set(Eo *obj EINA_UNUSED, Elm_Web_Data *_pd EINA_UNUSED, Elm_Web_Dialog_File_Selector func, void *data)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- (void)func;
- (void)data;
- (void)_pd;
-#else
- (void)func;
- (void)data;
- (void)_pd;
-#endif
-}
-
-EOLIAN static void
-_elm_web_console_message_hook_set(Eo *obj EINA_UNUSED, Elm_Web_Data *_pd EINA_UNUSED, Elm_Web_Console_Message func, void *data)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- (void)func;
- (void)data;
- (void)_pd;
-#else
- (void)func;
- (void)data;
- (void)_pd;
-#endif
-}
-
-EOLIAN static void
-_elm_web_useragent_set(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, const char *user_agent)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
-
- ewk_view_user_agent_set(wd->resize_obj, user_agent);
-#else
- (void)user_agent;
- (void)obj;
-#endif
-}
-
-EOLIAN static const char*
-_elm_web_useragent_get(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
-
- return ewk_view_user_agent_get(wd->resize_obj);
-#else
- (void)obj;
- return NULL;
-#endif
-}
-
EAPI Eina_Bool
elm_web_uri_set(Evas_Object *obj, const char *url)
{
ELM_WEB_CHECK(obj) EINA_FALSE;
- Eina_Bool ret = EINA_FALSE;
- ret = elm_obj_web_url_set(obj, url);
- return ret;
+
+ return elm_obj_web_url_set(obj, url);
}
EAPI const char *
elm_web_uri_get(const Evas_Object *obj)
{
- const char *ret = NULL;
- ret = elm_obj_web_url_get((Eo *) obj);
- return ret;
-}
-
-EOLIAN static Eina_Bool
-_elm_web_url_set(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, const char *url)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
- return ewk_view_url_set(wd->resize_obj, url);
-#else
- (void)url;
- (void)obj;
- return EINA_FALSE;
-#endif
-}
-
-EOLIAN static const char*
-_elm_web_url_get(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
- return ewk_view_url_get(wd->resize_obj);
-#else
- (void)obj;
- return NULL;
-#endif
-}
-
-EOLIAN static Eina_Bool
-_elm_web_html_string_load(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, const char *html, const char *base_url, const char *unreachable_url)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
-
- return ewk_view_html_string_load(wd->resize_obj,
- html, base_url, unreachable_url);
-#else
- (void)obj;
- (void)html;
- (void)base_url;
- (void)unreachable_url;
- return EINA_FALSE;
-#endif
-}
-
-EOLIAN static const char*
-_elm_web_title_get(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
- return ewk_view_title_get(wd->resize_obj);
-#else
- (void)obj;
- return NULL;
-#endif
-}
-
-EOLIAN static void
-_elm_web_bg_color_set(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, int r, int g, int b, int a)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
-
- ewk_view_bg_color_set(wd->resize_obj, r, g, b, a);
-#else
- (void)obj;
- (void)r;
- (void)g;
- (void)b;
- (void)a;
-#endif
-}
-
-EOLIAN static void
-_elm_web_bg_color_get(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, int *r, int *g, int *b, int *a)
-{
- if (r) *r = 0;
- if (g) *g = 0;
- if (b) *b = 0;
- if (a) *a = 0;
-
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
-
- ewk_view_bg_color_get(wd->resize_obj, r, g, b, a);
-#else
- (void)obj;
-#endif
-}
-
-EOLIAN static const char*
-_elm_web_selection_get(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- (void)obj;
- return NULL;
-#else
- (void)obj;
- return NULL;
-#endif
-}
-
-EOLIAN static void
-_elm_web_popup_selected_set(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, int idx)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- (void)idx;
- (void)obj;
-#else
- (void)idx;
- (void)obj;
-#endif
-}
-
-EOLIAN static Eina_Bool
-_elm_web_popup_destroy(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- (void)obj;
-#else
- (void)obj;
-#endif
-
- return EINA_FALSE;
-}
-
-EOLIAN static Eina_Bool
-_elm_web_text_search(const Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, const char *string, Eina_Bool case_sensitive, Eina_Bool forward, Eina_Bool wrap)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- (void)string;
- (void)case_sensitive;
- (void)forward;
- (void)wrap;
- (void)obj;
-#else
- (void)string;
- (void)case_sensitive;
- (void)forward;
- (void)wrap;
- (void)obj;
-#endif
-
- return EINA_FALSE;
-}
-
-EOLIAN static unsigned int
-_elm_web_text_matches_mark(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, const char *string, Eina_Bool case_sensitive, Eina_Bool highlight, unsigned int limit)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- (void)string;
- (void)case_sensitive;
- (void)highlight;
- (void)limit;
- (void)obj;
-#else
- (void)string;
- (void)case_sensitive;
- (void)highlight;
- (void)limit;
- (void)obj;
-#endif
-
- return 0;
-}
-
-EOLIAN static Eina_Bool
-_elm_web_text_matches_unmark_all(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- (void)obj;
-#else
- (void)obj;
-#endif
-
- return EINA_FALSE;
-}
-
-EOLIAN static Eina_Bool
-_elm_web_text_matches_highlight_set(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, Eina_Bool highlight)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- (void)obj;
- (void)highlight;
-#else
- (void)obj;
- (void)highlight;
-#endif
-
- return EINA_FALSE;
-}
-
-EOLIAN static Eina_Bool
-_elm_web_text_matches_highlight_get(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- (void)obj;
-#else
- (void)obj;
-#endif
-
- return EINA_FALSE;
+ return elm_obj_web_url_get((Eo *) obj);
}
-EOLIAN static double
-_elm_web_load_progress_get(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
+// FIXME: override with module function
+EAPI void
+elm_web_window_features_ref(Elm_Web_Window_Features *wf)
{
- double ret;
- ret = -1.0;
-
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, ret);
-
- ret = ewk_view_load_progress_get(wd->resize_obj);
-#else
- (void)obj;
-#endif
-
- return ret;
+ if (!ewm.window_features_ref) return ;
+ ewm.window_features_ref(wf);
}
-EOLIAN static Eina_Bool
-_elm_web_stop(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
+EAPI void
+elm_web_window_features_unref(Elm_Web_Window_Features *wf)
{
- Eina_Bool ret = EINA_FALSE;
-
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, ret);
-
- ret = ewk_view_stop(wd->resize_obj);
-#else
- (void)obj;
-#endif
-
- return ret;
+ if (!ewm.window_features_unref) return ;
+ ewm.window_features_unref(wf);
}
-EOLIAN static Eina_Bool
-_elm_web_reload(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
+EAPI Eina_Bool
+elm_web_window_features_property_get(const Elm_Web_Window_Features *wf,
+ Elm_Web_Window_Feature_Flag flag)
{
- Eina_Bool ret = EINA_FALSE;
-
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, ret);
-
- ret = ewk_view_reload(wd->resize_obj);
-#else
- (void)obj;
-#endif
-
- return ret;
+ if (!ewm.window_features_property_get) return EINA_FALSE;
+ return ewm.window_features_property_get(wf, flag);
}
-EOLIAN static Eina_Bool
-_elm_web_reload_full(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
+EAPI void
+elm_web_window_features_region_get(const Elm_Web_Window_Features *wf,
+ Evas_Coord *x,
+ Evas_Coord *y,
+ Evas_Coord *w,
+ Evas_Coord *h)
{
- Eina_Bool ret = EINA_FALSE;
-
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, ret);
-
- ret = ewk_view_reload_bypass_cache(wd->resize_obj);
-#else
- (void)obj;
-#endif
+ if (x) *x = 0;
+ if (y) *y = 0;
+ if (w) *w = 0;
+ if (h) *h = 0;
- return ret;
+ if (!ewm.window_features_region_get) return;
+ ewm.window_features_region_get(wf, x, y, w, h);
}
-EOLIAN static Eina_Bool
-_elm_web_back(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
+static void
+_elm_web_class_constructor(Eo_Class *klass)
{
- Eina_Bool ret = EINA_FALSE;
-
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, ret);
-
- ret = ewk_view_back(wd->resize_obj);
-#else
- (void)obj;
-#endif
-
- return ret;
+ evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
}
-EOLIAN static Eina_Bool
-_elm_web_forward(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
- Eina_Bool ret = EINA_FALSE;
-
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
-
- ret = ewk_view_forward(wd->resize_obj);
+#if defined(_WIN32) || defined(__CYGWIN__)
+# define EFL_SHARED_EXTENSION ".dll"
#else
- (void)obj;
+# define EFL_SHARED_EXTENSION ".so"
#endif
- return ret;
-}
-
-EOLIAN static Eina_Bool
-_elm_web_navigate(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, int steps)
+Eina_Bool
+_elm_web_init(const char *engine)
{
- Eina_Bool ret = EINA_FALSE;
+ char buf[PATH_MAX];
-#ifdef HAVE_ELEMENTARY_WEB
- Ewk_Back_Forward_List *history;
- Ewk_Back_Forward_List_Item *item = NULL;
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, ret);
+ if (getenv("ELM_RUN_IN_TREE"))
+ snprintf(buf, sizeof(buf),
+ ELM_TOP_BUILD_DIR"/src/modules/web/%s/.libs/module"EFL_SHARED_EXTENSION,
+ engine);
+ else
+ snprintf(buf, sizeof(buf),
+ "%s/elementary/modules/web/%s/%s/module"EFL_SHARED_EXTENSION,
+ _elm_lib_dir, engine, MODULE_ARCH);
- history = ewk_view_back_forward_list_get(wd->resize_obj);
- if (history)
+ if (ewm.m)
{
- item = ewk_back_forward_list_item_at_index_get(history, steps);
- if (item) ret = ewk_view_navigate_to(wd->resize_obj, item);
+ // Check if the module is already open
+ if (!strcmp(buf, eina_module_file_get(ewm.m)))
+ return EINA_TRUE;
+
+ // We are leaking reference on purpose here, as we can't be sure that
+ // the web engine is not leaking state around preventing a clean exit.
+ // Only future elm_web object created from now will use the new engine.
+ ewm.unneed_web = NULL;
+ ewm.need_web = NULL;
+ ewm.window_features_ref = NULL;
+ ewm.window_features_unref = NULL;
+ ewm.window_features_property_get = NULL;
+ ewm.window_features_region_get = NULL;
+ ewm.class_get = NULL;
}
-#else
- (void)steps;
- (void)obj;
-#endif
-
- return ret;
-}
-
-EOLIAN static Eina_Bool
-_elm_web_back_possible_get(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
- Eina_Bool ret;
- ret = EINA_FALSE;
-
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, ret);
-
- ret = ewk_view_back_possible(wd->resize_obj);
-#else
- (void)obj;
-#endif
-
- return ret;
-}
-
-EOLIAN static Eina_Bool
-_elm_web_forward_possible_get(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
- Eina_Bool ret;
- ret = EINA_FALSE;
-
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, ret);
-
- ret = ewk_view_forward_possible(wd->resize_obj);
-#else
- (void)obj;
-#endif
-
- return ret;
-}
-
-EOLIAN static Eina_Bool
-_elm_web_navigate_possible_get(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, int steps)
-{
- Eina_Bool ret;
- ret = EINA_FALSE;
-
-#ifdef HAVE_ELEMENTARY_WEB
- Ewk_Back_Forward_List *history;
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, ret);
-
- history = ewk_view_back_forward_list_get(wd->resize_obj);
- if (history && ewk_back_forward_list_item_at_index_get(history, steps))
- ret = EINA_TRUE;
-#else
- (void)steps;
- (void)obj;
-#endif
-
- return ret;
-}
-
-EOLIAN static Eina_Bool
-_elm_web_history_enabled_get(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
- Eina_Bool ret;
- ret = EINA_FALSE;
-
-#ifdef HAVE_ELEMENTARY_WEB
- (void)obj;
-#else
- (void)obj;
-#endif
-
- return ret;
-}
-
-EOLIAN static void
-_elm_web_history_enabled_set(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, Eina_Bool enable)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- (void)enable;
- (void)obj;
-#else
- (void)enable;
- (void)obj;
-#endif
-}
-
-EOLIAN static void
-_elm_web_zoom_set(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, double zoom)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
-
- ewk_view_page_zoom_set(wd->resize_obj, zoom);
-#else
- (void)obj;
- (void)zoom;
-#endif
-}
-
-EOLIAN static double
-_elm_web_zoom_get(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, -1);
-
- return ewk_view_page_zoom_get(wd->resize_obj);
-#else
- (void)obj;
- return -1;
-#endif
-}
-
-EOLIAN static void
-_elm_web_zoom_mode_set(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, Elm_Web_Zoom_Mode mode)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- (void)obj;
- (void)_pd;
- (void)mode;
-#else
- (void)obj;
- (void)_pd;
- (void)mode;
-#endif
-}
-
-EOLIAN static Elm_Web_Zoom_Mode
-_elm_web_zoom_mode_get(Eo *obj EINA_UNUSED, Elm_Web_Data *_pd EINA_UNUSED)
-{
- Elm_Web_Zoom_Mode ret;
- ret = ELM_WEB_ZOOM_MODE_LAST;
-#ifdef HAVE_ELEMENTARY_WEB
- (void)_pd;
-#else
- (void)_pd;
-#endif
-
- return ret;
-}
-
-EOLIAN static void
-_elm_web_region_show(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, int x, int y, int w, int h)
-{
- (void)w;
- (void)h;
-
-#ifdef HAVE_ELEMENTARY_WEB
- (void)obj;
- (void)_pd;
- (void)x;
- (void)y;
-#else
- (void)obj;
- (void)_pd;
- (void)x;
- (void)y;
-#endif
-}
-
-EOLIAN static void
-_elm_web_region_bring_in(Eo *obj, Elm_Web_Data *_pd EINA_UNUSED, int x, int y, int w, int h)
-{
- (void)w;
- (void)h;
-
-#ifdef HAVE_ELEMENTARY_WEB
- (void)obj;
- (void)_pd;
- (void)x;
- (void)y;
-#else
- (void)obj;
- (void)_pd;
- (void)x;
- (void)y;
-#endif
-}
-
-EOLIAN static void
-_elm_web_inwin_mode_set(Eo *obj EINA_UNUSED, Elm_Web_Data *sd, Eina_Bool value)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- sd->inwin_mode = value;
-#else
- (void)sd;
- (void)value;
-#endif
-}
-
-EOLIAN static Eina_Bool
-_elm_web_inwin_mode_get(Eo *obj EINA_UNUSED, Elm_Web_Data *sd)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- return sd->inwin_mode;
-#else
- (void)sd;
- return EINA_FALSE;
-#endif
-}
-
-EAPI void
-elm_web_window_features_ref(Elm_Web_Window_Features *wf)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- ewk_object_ref((Ewk_Object *)wf);
-#else
- (void)wf;
-#endif
-}
-EAPI void
-elm_web_window_features_unref(Elm_Web_Window_Features *wf)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- ewk_object_unref((Ewk_Object *)wf);
-#else
- (void)wf;
-#endif
-}
+ ewm.m = eina_module_new(buf);
+ if (!ewm.m) return EINA_FALSE;
-EAPI Eina_Bool
-elm_web_window_features_property_get(const Elm_Web_Window_Features *wf,
- Elm_Web_Window_Feature_Flag flag)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- const Ewk_Window_Features *ewf = (const Ewk_Window_Features *)wf;
- switch (flag)
+ if (!eina_module_load(ewm.m))
{
- case ELM_WEB_WINDOW_FEATURE_TOOLBAR:
- return ewk_window_features_toolbar_visible_get(ewf);
-
- case ELM_WEB_WINDOW_FEATURE_STATUSBAR:
- return ewk_window_features_statusbar_visible_get(ewf);
-
- case ELM_WEB_WINDOW_FEATURE_SCROLLBARS:
- return ewk_window_features_scrollbars_visible_get(ewf);
-
- case ELM_WEB_WINDOW_FEATURE_MENUBAR:
- return ewk_window_features_menubar_visible_get(ewf);
-
- case ELM_WEB_WINDOW_FEATURE_LOCATIONBAR:
- return ewk_window_features_locationbar_visible_get(ewf);
-
- case ELM_WEB_WINDOW_FEATURE_FULLSCREEN:
- return ewk_window_features_fullscreen_get(ewf);
+ eina_module_free(ewm.m);
+ ewm.m = NULL;
+ return EINA_FALSE;
}
-#else
- (void)wf;
- (void)flag;
-#endif
- return EINA_FALSE;
-}
+ ewm.unneed_web = eina_module_symbol_get(ewm.m, "ewm_unneed_web");
+ ewm.need_web = eina_module_symbol_get(ewm.m, "ewm_need_web");
+ ewm.window_features_ref = eina_module_symbol_get(ewm.m, "ewm_window_features_ref");
+ ewm.window_features_unref = eina_module_symbol_get(ewm.m, "ewm_window_features_unref");
+ ewm.window_features_property_get = eina_module_symbol_get(ewm.m, "ewm_window_features_property_get");
+ ewm.window_features_region_get = eina_module_symbol_get(ewm.m, "ewm_window_features_region_get");
+ ewm.class_get = eina_module_symbol_get(ewm.m, "ewm_class_get");
-EAPI void
-elm_web_window_features_region_get(const Elm_Web_Window_Features *wf,
- Evas_Coord *x,
- Evas_Coord *y,
- Evas_Coord *w,
- Evas_Coord *h)
-{
-#ifdef HAVE_ELEMENTARY_WEB
- ewk_window_features_geometry_get
- ((const Ewk_Window_Features *)wf, x, y, w, h);
-#else
- (void)wf;
- (void)x;
- (void)y;
- (void)w;
- (void)h;
-#endif
-}
-
-static void
-_elm_web_class_constructor(Eo_Class *klass)
-{
- evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
+ // Only the class_get is mandatory
+ if (!ewm.class_get) return EINA_FALSE;
+ return EINA_TRUE;
}
#include "elm_web.eo.c"