From f9d8bbb51e93525d76e542701646af9dd162c05b Mon Sep 17 00:00:00 2001 From: Ryuan Choi Date: Fri, 23 Jul 2010 11:18:45 +0900 Subject: [PATCH] [elm_webview] add EWEBKIT_SUPPORT for glib and implement els_webview_add (1) --- configure.ac | 16 ++++++++--- src/bin/Makefile.am | 6 ++-- src/bin/test_webview.c | 3 -- src/lib/Makefile.am | 5 ++-- src/lib/elm_webview.c | 7 ++++- src/lib/els_webview.c | 77 ++++++++++++++++++++++++++++++++++++++++++-------- 6 files changed, 89 insertions(+), 25 deletions(-) diff --git a/configure.ac b/configure.ac index 7913f53..482a2a7 100755 --- a/configure.ac +++ b/configure.ac @@ -402,9 +402,7 @@ AC_ARG_ENABLE([ewebkit], if test "x$want_elementary_ewebkit" != "xno"; then PKG_CHECK_MODULES([ELEMENTARY_EWEBKIT], [ - glib-2.0 - gobject-2.0 - gthread-2.0 + ewebkit ], [ AC_DEFINE(HAVE_ELEMENTARY_EWEBKIT, 1, [EWebKit support for Elementary]) @@ -414,7 +412,16 @@ if test "x$want_elementary_ewebkit" != "xno"; then ], [have_elementary_ewebkit="no"] ) -#ewebkit + PKG_CHECK_MODULES([ELEMENTARY_EWEBKIT_SUPPORT], + [ + glib-2.0 + gobject-2.0 + gthread-2.0 + ], + [], + [have_elementary_ewebkit="no"] + ) + else have_elementary_ewebkit="no" fi @@ -527,6 +534,7 @@ echo " EDBus..............: ${have_elementary_edbus}" echo " EFreet.............: ${have_elementary_efreet}" echo " EWeather...........: ${have_elementary_eweather}" echo " Ethumb.............: ${have_elementary_ethumb}" +echo " EWebKit............: ${have_elementary_ewebkit}" echo echo " edje_cc..............: ${edje_cc}" echo diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 624ffaf..644e21e 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -81,18 +81,18 @@ test_launcher.c \ test_anim.c \ test_webview.c -elementary_test_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@ @ELEMENTARY_EWEBKIT_LIBS@ +elementary_test_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@ elementary_test_LDFLAGS = elementary_config_SOURCES = \ config.c -elementary_config_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@ @ELEMENTARY_EWEBKIT_LIBS@ +elementary_config_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@ elementary_config_LDFLAGS = if BUILD_QUICKLAUNCH elementary_quicklaunch_SOURCES = quicklaunch.c -elementary_quicklaunch_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@ @ELEMENTARY_EWEBKIT_LIBS@ +elementary_quicklaunch_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@ elementary_quicklaunch_LDFLAGS = if BUILD_RUN diff --git a/src/bin/test_webview.c b/src/bin/test_webview.c index 96ba777..a6a48b5 100644 --- a/src/bin/test_webview.c +++ b/src/bin/test_webview.c @@ -7,9 +7,6 @@ test_webkit(void *data, Evas_Object *obj, void *event_info) #ifdef ELM_EWEBKIT Evas_Object *win, *bg, *wv, *ic; - g_type_init(); - g_thread_init(0); - printf("#### test_webkit\n"); win = elm_win_add(NULL, "box-horiz", ELM_WIN_BASIC); elm_win_title_set(win, "Box Horiz"); diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index af2418c..04755f7 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -18,7 +18,8 @@ AM_CPPFLAGS = \ @ELEMENTARY_EDBUS_CFLAGS@ \ @ELEMENTARY_EFREET_CFLAGS@ \ @ELEMENTARY_ETHUMB_CFLAGS@ \ -@ELEMENTARY_EWEBKIT_CFLAGS@ +@ELEMENTARY_EWEBKIT_CFLAGS@ \ +@ELEMENTARY_EWEBKIT_SUPPORT_CFLAGS@ if ELEMENTARY_WINDOWS_BUILD AM_CPPFLAGS += -DELEMENTARY_BUILD @@ -149,5 +150,5 @@ els_webview.c libelementary_la_CFLAGS = -libelementary_la_LIBADD = @my_libs@ @dlopen_libs@ @ELEMENTARY_LIBS@ @ELEMENTARY_X_LIBS@ @ELEMENTARY_FB_LIBS@ @ELEMENTARY_SDL_LIBS@ @ELEMENTARY_WIN32_LIBS@ @ELEMENTARY_WINCE_LIBS@ @ELEMENTARY_EDBUS_LIBS@ @ELEMENTARY_EFREET_LIBS@ @ELEMENTARY_ETHUMB_LIBS@ +libelementary_la_LIBADD = @my_libs@ @dlopen_libs@ @ELEMENTARY_LIBS@ @ELEMENTARY_X_LIBS@ @ELEMENTARY_FB_LIBS@ @ELEMENTARY_SDL_LIBS@ @ELEMENTARY_WIN32_LIBS@ @ELEMENTARY_WINCE_LIBS@ @ELEMENTARY_EDBUS_LIBS@ @ELEMENTARY_EFREET_LIBS@ @ELEMENTARY_ETHUMB_LIBS@ @ELEMENTARY_EWEBKIT_SUPPORT_LIBS@ libelementary_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ diff --git a/src/lib/elm_webview.c b/src/lib/elm_webview.c index bb495be..e84862a 100644 --- a/src/lib/elm_webview.c +++ b/src/lib/elm_webview.c @@ -1,3 +1,7 @@ +/* + * + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ #include #include "elm_priv.h" @@ -12,6 +16,7 @@ typedef struct _Widget_Data Widget_Data; struct _Widget_Data { Evas_Object *webkit; + Eina_Bool auto_fitting:1; }; static const char *widtype = NULL; @@ -93,7 +98,7 @@ elm_webview_add(Evas_Object *parent) elm_widget_data_set(obj, wd); elm_widget_del_hook_set(obj, _del_hook); - wd->webkit = _els_webview_add(obj, EINA_TRUE); + wd->webkit = _els_webview_add(obj, EINA_FALSE); //TODO:evas_object_box_layout_set(wd->box, _layout, wd, NULL); evas_object_event_callback_add(wd->webkit, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); diff --git a/src/lib/els_webview.c b/src/lib/els_webview.c index 9e2cbbc..f9fb515 100644 --- a/src/lib/els_webview.c +++ b/src/lib/els_webview.c @@ -1,27 +1,80 @@ +/* + * + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ #include #include "elm_priv.h" +#ifdef ELM_EWEBKIT +#include +#include + +static Ewk_View_Smart_Class _parent_sc = EWK_VIEW_SMART_CLASS_INIT_NULL; +#endif + Evas_Object* _els_webview_add(Evas_Object *parent, Eina_Bool tiled) { #ifdef ELM_EWEBKIT + static Evas_Smart* smart = NULL; Evas_Object *obj; Evas *e; int (*ewk_init)(void); - Evas_Object *(*ewk_view_add)(Evas *); - Eina_Bool (*ewk_view_uri_set)(Evas_Object *, const char *); + Eina_Bool (*ewk_view_single_smart_set)(Ewk_View_Smart_Class *); + Eina_Bool (*ewk_view_tiled_smart_set)(Ewk_View_Smart_Class *); - /* - ewk_init = (int (*)())dlsym(ewk_handle, "ewk_init"); - ewk_view_add = (Evas_Object *(*)(Evas *))dlsym(ewk_handle, "ewk_view_tiled_add"); - ewk_view_uri_set = (Eina_Bool (*)(Evas_Object *, const char *))dlsym(ewk_handle, "ewk_view_uri_set"); - - e = evas_object_evas_get(parent); - ewk_init(); - obj = ewk_view_add(e); - ewk_view_uri_set(obj, "file:///a.html"); - evas_object_show(obj); + if (!smart) + { + g_type_init(); + if (!g_thread_get_initialized()) + g_thread_init(NULL); + + void *ewk_handle = dlopen("/usr/lib/libewebkit.so", RTLD_LAZY);//FIXME + ewk_init = (int (*)())dlsym(ewk_handle, "ewk_init"); + ewk_init(); + static Ewk_View_Smart_Class api = EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION("ELM_WEBVIEW"); + + if (tiled) + { + ewk_view_tiled_smart_set = (Eina_Bool (*)(Ewk_View_Smart_Class *))dlsym(ewk_handle, "ewk_view_tiled_smart_set"); + ewk_view_tiled_smart_set(&api); + if (EINA_UNLIKELY(!_parent_sc.sc.add)) + ewk_view_tiled_smart_set(&_parent_sc); + } + else + { + ewk_view_single_smart_set = (Eina_Bool (*)(Ewk_View_Smart_Class *))dlsym(ewk_handle, "ewk_view_single_smart_set"); + ewk_view_single_smart_set(&api); + if (EINA_UNLIKELY(!_parent_sc.sc.add)) + ewk_view_single_smart_set(&_parent_sc); + } + //TODO: add apis + dlclose(ewk_handle); + } + + if (!smart) + return NULL; + + obj = evas_object_smart_add(e, smart); + if (!obj) + return NULL; + + /*TODO: + View_Smart_Data *sd = evas_object_smart_data_get(obj); + if (sd) + sd->tiled = tiled; */ + /* + ewk_init = (int (*)())dlsym(ewk_handle, "ewk_init"); + ewk_view_add = (Evas_Object *(*)(Evas *))dlsym(ewk_handle, "ewk_view_tiled_add"); + ewk_view_uri_set = (Eina_Bool (*)(Evas_Object *, const char *))dlsym(ewk_handle, "ewk_view_uri_set"); + + e = evas_object_evas_get(parent); + ewk_init(); + obj = ewk_view_add(e); + ewk_view_uri_set(obj, "file:///a.html"); + evas_object_show(obj); + */ return obj; #else return NULL; -- 2.7.4