[elm_webview] add EWEBKIT_SUPPORT for glib and implement els_webview_add (1)
authorRyuan Choi <ryuan.choi@samsung.com>
Fri, 23 Jul 2010 02:18:45 +0000 (11:18 +0900)
committerRyuan Choi <ryuan.choi@samsung.com>
Fri, 23 Jul 2010 02:18:45 +0000 (11:18 +0900)
configure.ac
src/bin/Makefile.am
src/bin/test_webview.c
src/lib/Makefile.am
src/lib/elm_webview.c
src/lib/els_webview.c

index 7913f53..482a2a7 100755 (executable)
@@ -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
index 624ffaf..644e21e 100644 (file)
@@ -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
index 96ba777..a6a48b5 100644 (file)
@@ -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");
index af2418c..04755f7 100644 (file)
@@ -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@
index bb495be..e84862a 100644 (file)
@@ -1,3 +1,7 @@
+/*
+ *
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
 #include <Elementary.h>
 #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);
index 9e2cbbc..f9fb515 100644 (file)
@@ -1,27 +1,80 @@
+/*
+ *
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
 #include <Elementary.h>
 #include "elm_priv.h"
 
+#ifdef ELM_EWEBKIT
+#include <EWebKit.h>
+#include <glib-object.h>
+
+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;