changeset 2005:a17cc1958369

GTK: Added WebKit2 support for GTK3. Remove dead code from GTK2. Use linker to pull in webkit libraries instead of dlopen() etc.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Wed, 06 Nov 2019 08:48:49 +0000
parents ebbdb2120659
children 6f1adc77de02
files config.h.in configure configure.in dw.h gtk/dw.c gtk3/dw.c
diffstat 6 files changed, 225 insertions(+), 622 deletions(-) [+]
line wrap: on
line diff
--- a/config.h.in	Tue Nov 05 21:06:23 2019 +0000
+++ b/config.h.in	Wed Nov 06 08:48:49 2019 +0000
@@ -42,9 +42,6 @@
 /* Define if webkit2 is available */
 #undef USE_WEBKIT2
 
-/* Define for name of webkit library */
-#undef WEBKIT_LIB
-
 /* Define if IMLIB is available. */
 #undef USE_IMLIB
 
--- a/configure	Tue Nov 05 21:06:23 2019 +0000
+++ b/configure	Wed Nov 06 08:48:49 2019 +0000
@@ -4685,7 +4685,7 @@
          GTK_PACKAGES="gtk+-2.0 gthread-2.0"
          GTK_LIBS=`$PKG_CFG --silence-errors --libs $GTK_PACKAGES`
       fi
-      WEBKIT_PKG="webkitgtk-3.0"
+      WEBKIT_PKG="webkit2gtk-4.0"
       if test x"$GTK_LIBS" = x; then
          GTK_PACKAGES="gtk+-3.0"
          GTK_LIBS=`$PKG_CFG --silence-errors --libs $GTK_PACKAGES`
@@ -4695,28 +4695,41 @@
       fi
       # test for webkit2gtk or webkitgtk packages
       WEBKIT_CFLAGS=`$PKG_CFG --silence-errors --cflags $WEBKIT_PKG`
-      RPATH=`$PKG_CFG --silence-errors --libs-only-L $WEBKIT_PKG | cut -b 3-`
       if test x"$WEBKIT_CFLAGS" = x; then
-         # no webkit-1.1 or webkitgtk-3.0, look for webkit-1.0
-         WEBKIT_PKG="webkit-1.0"
-         WEBKIT_CFLAGS=`$PKG_CFG --silence-errors --cflags $WEBKIT_PKG`
-         RPATH=`$PKG_CFG --silence-errors --libs-only-L $WEBKIT_PKG | cut -b 3-`
-         if test x"$WEBKIT_CFLAGS" = x; then
-            WEBKIT_PKG="WebKitGtk"
-            WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
+         # no webkit2gtk-4.0 or webkitgtk-1.1
+         if test $DW_DIR = "gtk"; then
+            WEBKIT_PKG="webkit-1.0"
             WEBKIT_CFLAGS=`$PKG_CFG --silence-errors --cflags $WEBKIT_PKG`
-            RPATH=`$PKG_CFG --silence-errors --libs-only-L $WEBKIT_PKG | cut -b 3-`
+            if test x"$WEBKIT_CFLAGS" = x; then
+               WEBKIT_PKG="WebKitGtk"
+               WEBKIT_CFLAGS=`$PKG_CFG --silence-errors --cflags $WEBKIT_PKG`
+               if test x"$WEBKIT_CFLAGS" = x; then
+                  WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
+               fi
+            else
+               $as_echo "#define USE_WEBKIT10 1" >>confdefs.h
+
+               WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
+            fi
          else
-            $as_echo "#define USE_WEBKIT10 1" >>confdefs.h
-
-            WEBKIT_LIB=$WEBKIT_PKG
-            WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
-            RESULT=`echo $WEBKIT_LIBS | grep lwebkitgtk-1.0`
-            if test x"$RESULT" != x; then
-                WEBKIT_LIB=webkitgtk-1.0
+            WEBKIT_PKG="webkitgtk-3.0"
+            WEBKIT_CFLAGS=`$PKG_CFG --silence-errors --cflags $WEBKIT_PKG`
+            if test x"$WEBKIT_CFLAGS" = x; then
+               WEBKIT_PKG="webkitgtk-1.0"
+               WEBKIT_CFLAGS=`$PKG_CFG --silence-errors --cflags $WEBKIT_PKG`
+               if test x"$WEBKIT_CFLAGS" = x; then
+                  $as_echo "#define USE_WEBKIT10 1" >>confdefs.h
+
+                  WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
+               fi
+            else
+               $as_echo "#define USE_WEBKIT11 1" >>confdefs.h
+
+               WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
             fi
          fi
       else
+         WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
          if test $with_gtk2 = "yes"; then
             $as_echo "#define USE_WEBKIT11 1" >>confdefs.h
 
@@ -4724,12 +4737,7 @@
             $as_echo "#define USE_WEBKIT2 1" >>confdefs.h
 
          fi
-         WEBKIT_LIB=$WEBKIT_PKG
       fi
-      cat >>confdefs.h <<_ACEOF
-#define WEBKIT_LIB "$WEBKIT_LIB"
-_ACEOF
-
       if test x"$RPATH" != x; then
          RPATH="-Wl,-R$RPATH"
       fi
@@ -5680,9 +5688,8 @@
 if test $with_deprecated = yes; then
    CFLAGS="$CFLAGS -DDW_INCLUDE_DEPRECATED"
 fi
-if test x"$WEBKIT_CFLAGS" != x; then
-   SAVE_LIBS="$LIBS"
-   LIBS="$RPATH $LIBS $GTK_LIBS $PTHREAD_LIBS $GDK_IMLIB_LIBS $WEBKIT_LIBS"
+if test x"$WEBKIT_LIBS" != x; then
+   WEBKIT_LIB=`echo $WEBKIT_LIBS | cut -b 3-`
    as_ac_Lib=`$as_echo "ac_cv_lib_$WEBKIT_LIB''_webkit_web_view_new" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for webkit_web_view_new in -l$WEBKIT_LIB" >&5
 $as_echo_n "checking for webkit_web_view_new in -l$WEBKIT_LIB... " >&6; }
@@ -5726,7 +5733,6 @@
 
 fi
 
-   LIBS="$SAVE_LIBS"
 fi
 
 LIBS="$RPATH $LIBS $GTK_LIBS $PTHREAD_LIBS $GDK_IMLIB_LIBS $WEBKIT_LIBS $PLATLIBS"
--- a/configure.in	Tue Nov 05 21:06:23 2019 +0000
+++ b/configure.in	Wed Nov 06 08:48:49 2019 +0000
@@ -189,7 +189,7 @@
          GTK_PACKAGES="gtk+-2.0 gthread-2.0"
          GTK_LIBS=`$PKG_CFG --silence-errors --libs $GTK_PACKAGES`
       fi
-      WEBKIT_PKG="webkitgtk-3.0"
+      WEBKIT_PKG="webkit2gtk-4.0"
       if test x"$GTK_LIBS" = x; then
          GTK_PACKAGES="gtk+-3.0"
          GTK_LIBS=`$PKG_CFG --silence-errors --libs $GTK_PACKAGES`
@@ -199,35 +199,44 @@
       fi
       # test for webkit2gtk or webkitgtk packages
       WEBKIT_CFLAGS=`$PKG_CFG --silence-errors --cflags $WEBKIT_PKG`
-      RPATH=`$PKG_CFG --silence-errors --libs-only-L $WEBKIT_PKG | cut -b 3-`
       if test x"$WEBKIT_CFLAGS" = x; then
-         # no webkit-1.1 or webkitgtk-3.0, look for webkit-1.0
-         WEBKIT_PKG="webkit-1.0"
-         WEBKIT_CFLAGS=`$PKG_CFG --silence-errors --cflags $WEBKIT_PKG`
-         RPATH=`$PKG_CFG --silence-errors --libs-only-L $WEBKIT_PKG | cut -b 3-`
-         if test x"$WEBKIT_CFLAGS" = x; then
-            WEBKIT_PKG="WebKitGtk"
-            WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
+         # no webkit2gtk-4.0 or webkitgtk-1.1
+         if test $DW_DIR = "gtk"; then
+            WEBKIT_PKG="webkit-1.0"
             WEBKIT_CFLAGS=`$PKG_CFG --silence-errors --cflags $WEBKIT_PKG`
-            RPATH=`$PKG_CFG --silence-errors --libs-only-L $WEBKIT_PKG | cut -b 3-`
+            if test x"$WEBKIT_CFLAGS" = x; then
+               WEBKIT_PKG="WebKitGtk"
+               WEBKIT_CFLAGS=`$PKG_CFG --silence-errors --cflags $WEBKIT_PKG`
+               if test x"$WEBKIT_CFLAGS" = x; then
+                  WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
+               fi
+            else
+               AC_DEFINE(USE_WEBKIT10)
+               WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
+            fi
          else
-            AC_DEFINE(USE_WEBKIT10)
-            WEBKIT_LIB=$WEBKIT_PKG
-            WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
-            RESULT=`echo $WEBKIT_LIBS | grep lwebkitgtk-1.0`
-            if test x"$RESULT" != x; then
-                WEBKIT_LIB=webkitgtk-1.0
+            WEBKIT_PKG="webkitgtk-3.0"
+            WEBKIT_CFLAGS=`$PKG_CFG --silence-errors --cflags $WEBKIT_PKG`
+            if test x"$WEBKIT_CFLAGS" = x; then
+               WEBKIT_PKG="webkitgtk-1.0"
+               WEBKIT_CFLAGS=`$PKG_CFG --silence-errors --cflags $WEBKIT_PKG`
+               if test x"$WEBKIT_CFLAGS" = x; then
+                  AC_DEFINE(USE_WEBKIT10)
+                  WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
+               fi
+            else
+               AC_DEFINE(USE_WEBKIT11)
+               WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
             fi
          fi
       else
+         WEBKIT_LIBS=`$PKG_CFG --silence-errors --libs $WEBKIT_PKG`
          if test $with_gtk2 = "yes"; then
             AC_DEFINE(USE_WEBKIT11)
          else            
             AC_DEFINE(USE_WEBKIT2)
          fi
-         WEBKIT_LIB=$WEBKIT_PKG
       fi
-      AC_DEFINE_UNQUOTED(WEBKIT_LIB, "$WEBKIT_LIB")
       if test x"$RPATH" != x; then
          RPATH="-Wl,-R$RPATH"
       fi
@@ -269,11 +278,9 @@
 if test $with_deprecated = yes; then
    CFLAGS="$CFLAGS -DDW_INCLUDE_DEPRECATED"
 fi
-if test x"$WEBKIT_CFLAGS" != x; then
-   SAVE_LIBS="$LIBS"
-   LIBS="$RPATH $LIBS $GTK_LIBS $PTHREAD_LIBS $GDK_IMLIB_LIBS $WEBKIT_LIBS"
+if test x"$WEBKIT_LIBS" != x; then
+   WEBKIT_LIB=`echo $WEBKIT_LIBS | cut -b 3-`
    AC_CHECK_LIB($WEBKIT_LIB,webkit_web_view_new,AC_DEFINE(USE_WEBKIT),)
-   LIBS="$SAVE_LIBS"
 fi
 
 LIBS="$RPATH $LIBS $GTK_LIBS $PTHREAD_LIBS $GDK_IMLIB_LIBS $WEBKIT_LIBS $PLATLIBS"
--- a/dw.h	Tue Nov 05 21:06:23 2019 +0000
+++ b/dw.h	Wed Nov 06 08:48:49 2019 +0000
@@ -12,6 +12,8 @@
 #define DW_MINOR_VERSION 0
 #define DW_SUB_VERSION 0
 
+#define DW_HOME_URL "http://dwindows.netlabs.org"
+
 #if !defined(__PHOTON__)
 /* These corespond to the entries in the color
  * arrays in the Win32 dw.c, they are also the
--- a/gtk/dw.c	Tue Nov 05 21:06:23 2019 +0000
+++ b/gtk/dw.c	Wed Nov 06 08:48:49 2019 +0000
@@ -3,7 +3,7 @@
  *          A GTK like cross-platform GUI
  *          GTK forwarder module for portabilty.
  *
- * (C) 2000-2017 Brian Smith <brian@dbsoft.org>
+ * (C) 2000-2019 Brian Smith <brian@dbsoft.org>
  * (C) 2003-2011 Mark Hessling <mark@rexx.org>
  * (C) 2002 Nickolay V. Shmyrev <shmyrev@yandex.ru>
  */
@@ -34,16 +34,6 @@
 #include <gdk_imlib.h>
 #endif
 
-#ifdef USE_GTKMOZEMBED
-# include <gtkmozembed.h>
-# undef GTK_TYPE_MOZ_EMBED
-# define GTK_TYPE_MOZ_EMBED             (_dw_moz_embed_get_type())
-#endif
-
-#ifdef USE_LIBGTKHTML2
-# include <libgtkhtml/gtkhtml.h>
-#endif
-
 #ifdef USE_WEBKIT
 # if defined(USE_WEBKIT10) || defined(USE_WEBKIT11)
 #  include <webkit/webkit.h>
@@ -69,11 +59,6 @@
 #include "gtk/messagebox_information.xpm"
 #include "gtk/messagebox_question.xpm"
 
-#ifdef USE_GTKMOZEMBED
-extern gint mozilla_get_mouse_event_button(gpointer event);
-extern gint mozilla_get_mouse_location( gpointer event, glong *x, glong *y);
-#endif
-
 /* These are used for resource management */
 #if defined(DW_RESOURCES) && !defined(BUILD_DLL)
 extern DWResources _resources;
@@ -179,29 +164,6 @@
 static gint _column_click_event(GtkWidget *widget, gint column_num, gpointer data);
 static void _dw_signal_disconnect(gpointer data, GClosure *closure);
 
-/* Embedable Mozilla functions*/
-#ifdef USE_GTKMOZEMBED
-void (*_gtk_moz_embed_go_back)(GtkMozEmbed *) = NULL;
-void (*_gtk_moz_embed_go_forward)(GtkMozEmbed *) = NULL;
-void (*_gtk_moz_embed_load_url)(GtkMozEmbed *, const char *) = NULL;
-void (*_gtk_moz_embed_reload)(GtkMozEmbed *, guint32) = NULL;
-void (*_gtk_moz_embed_stop_load)(GtkMozEmbed *) = NULL;
-void (*_gtk_moz_embed_render_data)(GtkMozEmbed *, const char *, guint32, const char *, const char *) = NULL;
-GtkWidget *(*_gtk_moz_embed_new)(void) = NULL;
-GtkType (*_dw_moz_embed_get_type)(void) = NULL;
-gboolean (*_gtk_moz_embed_can_go_back)(GtkMozEmbed *) = NULL;
-gboolean (*_gtk_moz_embed_can_go_forward)(GtkMozEmbed *) = NULL;
-void (*_gtk_moz_embed_set_comp_path)(const char *) = NULL;
-void (*_gtk_moz_embed_set_profile_path)(const char *, const char *) = NULL;
-void (*_gtk_moz_embed_push_startup)(void) = NULL;
-#endif
-
-#ifdef USE_LIBGTKHTML2
-GtkHtmlContext *(*_gtk_html_context_get)(void) = NULL;
-HtmlDocument *(*_html_document_new)(void) = NULL;
-GtkWidget *(*_html_view_new)(void) = NULL;
-#endif
-
 #ifdef USE_WEBKIT
 /*
  * we need to add these equivalents from webkitwebview.h so we can refer to
@@ -1983,98 +1945,6 @@
 }
 #endif
 
-/* Try to load the mozilla embed shared libary */
-#ifdef USE_GTKMOZEMBED
-#include <ctype.h>
-
-void init_mozembed(void)
-{
-   void *handle = NULL;
-   gchar *profile;
-   handle = dlopen( "libgtkembedmoz.so", RTLD_LAZY );
-
-   /* If we loaded it, grab the symbols we want */
-   if ( handle )
-   {
-      _gtk_moz_embed_go_back = dlsym(handle, "gtk_moz_embed_go_back");
-      _gtk_moz_embed_go_forward = dlsym(handle, "gtk_moz_embed_go_forward");
-      _gtk_moz_embed_load_url = dlsym(handle, "gtk_moz_embed_load_url");
-      _gtk_moz_embed_reload = dlsym(handle, "gtk_moz_embed_reload");
-      _gtk_moz_embed_stop_load = dlsym(handle, "gtk_moz_embed_stop_load");
-      _gtk_moz_embed_render_data = dlsym(handle, "gtk_moz_embed_render_data");
-      _dw_moz_embed_get_type = dlsym(handle, "gtk_moz_embed_get_type");
-      _gtk_moz_embed_new = dlsym(handle, "gtk_moz_embed_new");
-      _gtk_moz_embed_can_go_back = dlsym(handle, "gtk_moz_embed_can_go_back");
-      _gtk_moz_embed_can_go_forward = dlsym(handle, "gtk_moz_embed_can_go_forward");
-      _gtk_moz_embed_set_comp_path = dlsym(handle, "gtk_moz_embed_set_comp_path");
-      _gtk_moz_embed_set_profile_path = dlsym(handle, "gtk_moz_embed_set_profile_path");
-      _gtk_moz_embed_push_startup = dlsym(handle, "gtk_moz_embed_push_startup");
-      _gtk_moz_embed_set_comp_path( "/usr/lib/mozilla");
-      _gtk_moz_embed_set_comp_path( "/usr/lib/firefox");
-      profile = g_build_filename(g_get_home_dir(), ".dwindows/mozilla", NULL);
-
-      /* initialize profile */
-      _gtk_moz_embed_set_profile_path(profile, "dwindows");
-      g_free(profile);
-
-      /* startup done */
-      _gtk_moz_embed_push_startup();
-   }
-}
-#endif
-
-/* Try to load the libgtkhtml2 shared libary */
-#ifdef USE_LIBGTKHTML2
-#include <ctype.h>
-
-void init_libgtkhtml2 (void)
-{
-   void *handle = NULL;
-   handle = dlopen( "libgtkhtml-2.so", RTLD_LAZY );
-
-   /* If we loaded it, grab the symbols we want */
-   if ( handle )
-   {
-      _html_document_new = dlsym(handle, "html_document_new");
-      _html_view_new = dlsym(handle, "html_view_new");
-      //...
-      _gtk_html_context_get = dlsym(handle, "gtk_html_context_get" );
-      g_object_set( G_OBJECT(_gtk_html_context_get()), "debug_painting", FALSE, NULL );
-   }
-}
-#endif
-
-/* Try to load the WebKitGtk shared libary */
-#ifdef USE_WEBKIT
-void init_webkit(void)
-{
-   char libname[101] = {0};
-   void *handle = NULL;
-
-   snprintf( libname, 100, "lib%s.so", WEBKIT_LIB);
-   handle = dlopen( libname, RTLD_LAZY );
-
-   /* If we loaded it, grab the symbols we want */
-   if ( handle )
-   {
-      _webkit_web_view_get_type = dlsym( handle, "webkit_web_view_get_type" );
-      _webkit_web_view_load_html_string = dlsym( handle, "webkit_web_view_load_html_string" );
-      _webkit_web_view_open = dlsym( handle, "webkit_web_view_open" );
-      _webkit_web_view_new = dlsym( handle, "webkit_web_view_new" );
-      _webkit_web_view_go_back = dlsym( handle, "webkit_web_view_go_back" );
-      _webkit_web_view_go_forward = dlsym( handle, "webkit_web_view_go_forward" );
-      _webkit_web_view_reload = dlsym( handle, "webkit_web_view_reload" );
-      _webkit_web_view_stop_loading = dlsym( handle, "webkit_web_view_stop_loading" );
-# ifdef WEBKIT_CHECK_VERSION
-#  if WEBKIT_CHECK_VERSION(1,1,5)
-      _webkit_web_frame_print = dlsym( handle, "webkit_web_frame_print" );
-      _webkit_web_view_get_focused_frame = dlsym( handle, "webkit_web_view_get_focused_frame" );
-#  endif
-# endif
-   }
-}
-#endif
-
 #if GLIB_CHECK_VERSION(2,32,0)
 static GRecMutex _dw_gdk_lock;
 
@@ -2190,18 +2060,6 @@
 
    gtk_rc_parse_string("style \"gtk-tooltips-style\" { bg[NORMAL] = \"#eeee00\" } widget \"gtk-tooltips\" style \"gtk-tooltips-style\"");
 
-#ifdef USE_GTKMOZEMBED
-   init_mozembed();
-#endif
-
-#ifdef USE_LIBGTKHTML2
-   init_libgtkhtml2();
-#endif
-
-#ifdef USE_WEBKIT
-   init_webkit();
-#endif
-
    /* Create place holder pixmap/bitmap when one is needed by the API...
     * but we don't really want to display anything.
     */
@@ -6944,7 +6802,7 @@
 static int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra)
 {
    GtkWidget *clist;
-   char numbuf[11] = {0};
+   char numbuf[25] = {0};
    int z, multi;
    int _locked_by_me = FALSE;
    GtkJustification justification;
@@ -6978,7 +6836,7 @@
    {
       if(!extra || z > 1)
          gtk_clist_set_column_width(GTK_CLIST(clist), z, 50);
-      snprintf(numbuf, 10, "%d", z);
+      snprintf(numbuf, 24, "%d", z);
       gtk_object_set_data(GTK_OBJECT(clist), numbuf, GINT_TO_POINTER(flags[z]));
       if(flags[z]&DW_CFA_RIGHT)
          justification = GTK_JUSTIFY_RIGHT;
@@ -12953,66 +12811,38 @@
  */
 void dw_html_action(HWND handle, int action)
 {
-#ifdef USE_GTKMOZEMBED
-   int _locked_by_me = FALSE;
-
-   if(!_gtk_moz_embed_new)
-      return;
-
-   DW_MUTEX_LOCK;
-   switch(action)
-   {
-      case DW_HTML_GOBACK:
-         _gtk_moz_embed_go_back(GTK_MOZ_EMBED(handle));
-         break;
-      case DW_HTML_GOFORWARD:
-         _gtk_moz_embed_go_forward(GTK_MOZ_EMBED(handle));
-         break;
-      case DW_HTML_GOHOME:
-         _gtk_moz_embed_load_url(GTK_MOZ_EMBED(handle), "http://dwindows.netlabs.org");
-         break;
-      case DW_HTML_RELOAD:
-         _gtk_moz_embed_reload(GTK_MOZ_EMBED(handle), 0);
-         break;
-      case DW_HTML_STOP:
-         _gtk_moz_embed_stop_load(GTK_MOZ_EMBED(handle));
-         break;
-   }
-   DW_MUTEX_UNLOCK;
-#elif defined(USE_WEBKIT)
+#ifdef USE_WEBKIT
    int _locked_by_me = FALSE;
    WebKitWebView *web_view;
-   WebKitWebFrame *frame;
-
-   if (!_webkit_web_view_open)
-      return;
 
    DW_MUTEX_LOCK;
    web_view = (WebKitWebView *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_web_view");
-   if ( web_view )
-   {
-      switch( action )
+   if(web_view)
+   {
+      WebKitWebFrame *frame;
+      
+      switch(action)
       {
          case DW_HTML_GOBACK:
-            _webkit_web_view_go_back( web_view );
+            webkit_web_view_go_back(web_view);
             break;
          case DW_HTML_GOFORWARD:
-            _webkit_web_view_go_forward( web_view );
+            webkit_web_view_go_forward(web_view);
             break;
          case DW_HTML_GOHOME:
-            _webkit_web_view_open( web_view, "http://dwindows.netlabs.org" );
+            webkit_web_view_open(web_view, DW_HOME_URL);
             break;
          case DW_HTML_RELOAD:
-            _webkit_web_view_reload( web_view );
+            webkit_web_view_reload(web_view);
             break;
          case DW_HTML_STOP:
-            _webkit_web_view_stop_loading( web_view );
+            webkit_web_view_stop_loading(web_view);
             break;
 # ifdef WEBKIT_CHECK_VERSION
 #  if WEBKIT_CHECK_VERSION(1,1,5)
          case DW_HTML_PRINT:
-            frame = _webkit_web_view_get_focused_frame( web_view );
-            _webkit_web_frame_print( frame );
+            frame = webkit_web_view_get_focused_frame(web_view);
+            webkit_web_frame_print(frame);
             break;
 #  endif
 # endif
@@ -13022,25 +12852,6 @@
 #endif
 }
 
-#ifdef USE_LIBGTKHTML2
-void _dw_html_render_data( HWND handle, char *string, int i )
-{
-   HtmlDocument *document;
-
-   html_view_set_document (HTML_VIEW(handle), NULL);
-   document = (HtmlDocument *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_html_document" );
-/*   html_document_clear (document);*/
-   if ( document )
-   {
-      html_view_set_document (HTML_VIEW(handle), document);
-      if ( html_document_open_stream( document, "text/html" ) )
-      {
-         html_document_write_stream( document, string, i );
-      }
-      html_document_close_stream (document);
-   }
-}
-#endif
 /*
  * Render raw HTML code in the embedded HTML widget..
  * Parameters:
@@ -13052,46 +12863,21 @@
  */
 int dw_html_raw(HWND handle, char *string)
 {
-#ifdef USE_GTKMOZEMBED
-   int _locked_by_me = FALSE;
-
-   if (!_gtk_moz_embed_new)
-      return -1;
-
-   DW_MUTEX_LOCK;
-   _gtk_moz_embed_render_data(GTK_MOZ_EMBED(handle), string, strlen(string), "file:///", "text/html");
-   gtk_widget_show(GTK_WIDGET(handle));
-   DW_MUTEX_UNLOCK;
-   return 0;
-#elif defined(USE_LIBGTKHTML2)
-   int _locked_by_me = FALSE;
-
-   if ( !_html_document_new )
-      return -1;
-
-   DW_MUTEX_LOCK;
-   _dw_html_render_data( handle, string, strlen(string) );
-   gtk_widget_show( GTK_WIDGET(handle) );
-   DW_MUTEX_UNLOCK;
-   return 0;
-#elif defined(USE_WEBKIT)
+#ifdef USE_WEBKIT
    int _locked_by_me = FALSE;
    WebKitWebView *web_view;
 
-   if (!_webkit_web_view_open)
-      return -1;
-
    DW_MUTEX_LOCK;
    web_view = (WebKitWebView *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_web_view");
-   if ( web_view )
-   {
-      _webkit_web_view_load_html_string( web_view, string, "file:///");
+   if(web_view)
+   {
+      webkit_web_view_load_html_string( web_view, string, "file:///");
       gtk_widget_show( GTK_WIDGET(handle) );
    }
    DW_MUTEX_UNLOCK;
-   return 0;
-#endif
-   return -1;
+   return DW_ERROR_NONE;
+#endif
+   return DW_ERROR_UNKNOWN;
 }
 
 /*
@@ -13105,178 +12891,47 @@
  */
 int dw_html_url(HWND handle, char *url)
 {
-#ifdef USE_GTKMOZEMBED
-   int _locked_by_me = FALSE;
-
-   if (!_gtk_moz_embed_new)
-      return -1;
-
-   DW_MUTEX_LOCK;
-   _gtk_moz_embed_load_url( GTK_MOZ_EMBED(handle), url );
-   gtk_widget_show(GTK_WIDGET(handle));
-   DW_MUTEX_UNLOCK;
-   return 0;
-#elif defined( USE_WEBKIT )
+#ifdef USE_WEBKIT
    int _locked_by_me = FALSE;
    WebKitWebView *web_view;
 
-   if (!_webkit_web_view_open)
-      return -1;
-
    DW_MUTEX_LOCK;
    web_view = (WebKitWebView *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_web_view");
-   if ( web_view )
-   {
-      _webkit_web_view_open( web_view, url );
+   if(web_view)
+   {
+      webkit_web_view_open(web_view, url);
       gtk_widget_show(GTK_WIDGET(handle));
    }
    DW_MUTEX_UNLOCK;
-   return 0;
-#endif
-   return -1;
-}
-
-#ifdef USE_GTKMOZEMBED
-/*
- * Callback for a HTML widget when the "Forward" menu item is selected
- */
-static int _dw_html_forward_callback(HWND window, void *data)
-{
-   HWND handle=(HWND)data;
-   dw_html_action( handle, DW_HTML_GOFORWARD );
-   return TRUE;
-}
-
-/*
- * Callback for a HTML widget when the "Back" menu item is selected
- */
-static int _dw_html_backward_callback(HWND window, void *data)
-{
-   HWND handle=(HWND)data;
-   dw_html_action( handle, DW_HTML_GOBACK );
-   return TRUE;
-}
-
-/*
- * Callback for a HTML widget when the "Reload" menu item is selected
- */
-static int _dw_html_reload_callback(HWND window, void *data)
-{
-   HWND handle=(HWND)data;
-   dw_html_action( handle, DW_HTML_RELOAD );
-   return TRUE;
-}
-
-/*
- * Callback for a HTML widget when a page has completed loading
- * Once the page has finished loading, show the widget.
- */
-void _dw_html_net_stop_cb( GtkMozEmbed *embed, gpointer data )
-{
-   gtk_widget_show(GTK_WIDGET(data));
-}
-
-/*
- * Callback for a HTML widget when a mouse button is clicked inside the widget
- * If the right mouse button is clicked, popup a context menu
- */
-static gint _dw_dom_mouse_click_cb (GtkMozEmbed *dummy, gpointer dom_event, gpointer embed)
-{
-   gint  button,rc;
-   glong x,y;
-   int flags;
-
-   button = mozilla_get_mouse_event_button( dom_event );
-   if ( button == 2 )
-   {
-      HWND menuitem;
-      HMENUI popup;
-      /*
-       * Right mouse button; display context menu
-       */
-      rc = mozilla_get_mouse_location( dom_event, &x, &y);
-      popup = dw_menu_new( 0 );
-      if ( _gtk_moz_embed_can_go_forward(GTK_MOZ_EMBED(embed) ) )
-         flags = DW_MIS_ENABLED;
-      else
-         flags = DW_MIS_DISABLED;
-      menuitem = dw_menu_append_item( popup, "Forward", 1, flags, TRUE, FALSE, 0 );
-      dw_signal_connect( menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_html_forward_callback), embed );
-
-      if ( _gtk_moz_embed_can_go_back(GTK_MOZ_EMBED(embed) ) )
-         flags = DW_MIS_ENABLED;
-      else
-         flags = DW_MIS_DISABLED;
-      menuitem = dw_menu_append_item( popup, "Back", 2, flags, TRUE, FALSE, 0 );
-      dw_signal_connect( menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_html_backward_callback), embed );
-
-      dw_menu_append_item( popup, DW_MENU_SEPARATOR, 99, 0, TRUE, FALSE, 0 );
-
-      menuitem = dw_menu_append_item( popup, "Reload", 3, 0, TRUE, FALSE, 0 );
-      dw_signal_connect( menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_html_reload_callback), embed );
-
-      dw_menu_popup( &popup, embed, x, y );
-      rc = TRUE;
-   }
-   else
-   {
-      rc = FALSE;
-   }
-   return rc;
-}
-#endif
-
-#ifdef USE_LIBGTKHTML2
-static gboolean dom_mouse_down( HtmlDocument *doc, DomMouseEvent *event, gpointer data )
-{
-fprintf(stderr,"mouse down\n");
-return TRUE;
-}
-static gboolean dom_mouse_up( HtmlDocument *doc, DomMouseEvent *event, gpointer data )
-{
-fprintf(stderr,"mouse up\n");
-return TRUE;
-}
-static gboolean dom_mouse_click( HtmlDocument *doc, DomMouseEvent *event, gpointer data )
-{
-fprintf(stderr,"mouse click\n");
-return TRUE;
-}
-static gboolean url_requested (HtmlDocument *doc, const gchar *url, HtmlStream *stream)
-{
-fprintf(stderr,"URL IS REQUESTED: %s\n",url);
-return TRUE;
-}
-static void link_clicked (HtmlDocument *doc, const gchar *url)
-{
-fprintf(stderr,"link clicked: %s!\n", url);
-}
-#endif
+   return DW_ERROR_NONE;
+#endif
+   return DW_ERROR_UNKNOWN;
+}
 
 #ifdef USE_WEBKIT
 # ifdef WEBKIT_CHECK_VERSION
 #  if WEBKIT_CHECK_VERSION(1,1,5)
-static void _dw_html_print_cb( GtkWidget *widget, gpointer *data )
-{
-   WebKitWebView *web_view = DW_WEBKIT_WEB_VIEW(data);
+static void _dw_html_print_cb(GtkWidget *widget, gpointer *data)
+{
+   WebKitWebView *web_view = WEBKIT_WEB_VIEW(data);
    WebKitWebFrame *frame;
 
-   frame = _webkit_web_view_get_focused_frame( web_view );
-   _webkit_web_frame_print( frame );
+   frame = webkit_web_view_get_focused_frame(web_view);
+   webkit_web_frame_print(frame);
 }
 /*
  * Fired when the user right-clicks to get the popup-menu on the HTML widget
  * We add a "Print" menu item to enable printing
  * user_data is not used
  */
-static void _dw_html_populate_popup_cb( WebKitWebView *web_view, GtkMenu *menu, gpointer user_data )
+static void _dw_html_populate_popup_cb(WebKitWebView *web_view, GtkMenu *menu, gpointer user_data)
 {
    GtkWidget *image = gtk_image_new_from_stock( GTK_STOCK_PRINT, GTK_ICON_SIZE_MENU );
-   GtkWidget *item = gtk_image_menu_item_new_with_label( "Print" );
-
-   gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM(item), image );
+   GtkWidget *item = gtk_image_menu_item_new_with_label("Print");
+
+   gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
    gtk_menu_append( GTK_MENU(menu), item);
-   g_signal_connect( item, "activate", G_CALLBACK(_dw_html_print_cb), web_view );
+   g_signal_connect(item, "activate", G_CALLBACK(_dw_html_print_cb), web_view);
    gtk_widget_show(item);
 }
 #  endif
@@ -13292,67 +12947,27 @@
 HWND dw_html_new(unsigned long id)
 {
    GtkWidget *widget = NULL;
-   int _locked_by_me = FALSE;
-
-   DW_MUTEX_LOCK;
-#ifdef USE_GTKMOZEMBED
-   if (!_gtk_moz_embed_new)
-   {
-      dw_debug( "HTML widget not available; you do not have access to gtkmozembed.\n" );
-   }
-   else
-   {
-      widget = _gtk_moz_embed_new();
-      /*
-       * Connect some signals
-       */
-      gtk_signal_connect( GTK_OBJECT(widget), "net-stop", GTK_SIGNAL_FUNC(_dw_html_net_stop_cb), widget );
-      gtk_signal_connect( GTK_OBJECT(widget), "dom_mouse_click", GTK_SIGNAL_FUNC(_dw_dom_mouse_click_cb), widget );
-      gtk_widget_show(widget);
-   }
-#elif defined(USE_LIBGTKHTML2)
-   if ( !_html_document_new )
-   {
-      dw_debug( "HTML widget not available; you do not have access to libgtkhtml-2.\n" );
-   }
-   else
-   {
-      HtmlDocument *document;
-      document = html_document_new ();
-      g_signal_connect (G_OBJECT (document), "dom_mouse_down",  G_CALLBACK (dom_mouse_down), NULL);
-      g_signal_connect (G_OBJECT (document), "dom_mouse_up", G_CALLBACK (dom_mouse_up), NULL);
-      g_signal_connect (G_OBJECT (document), "dom_mouse_click", G_CALLBACK (dom_mouse_click), NULL);
-      g_signal_connect (G_OBJECT (document), "request_url",  G_CALLBACK (url_requested), NULL);
-      g_signal_connect (G_OBJECT (document), "link_clicked", G_CALLBACK (link_clicked), NULL);
-      widget = _html_view_new();
-      gtk_object_set_data(GTK_OBJECT(widget), "_dw_html_document", (gpointer)document);
-      gtk_widget_show(widget);
-   }
-#elif defined(USE_WEBKIT)
-   if (!_webkit_web_view_open)
-   {
-      dw_debug( "HTML widget not available; you do not have access to webkit.\n" );
-   }
-   else
-   {
-      WebKitWebView *web_view;
-      widget = gtk_scrolled_window_new (NULL, NULL);
-      gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
-      web_view = (WebKitWebView *)_webkit_web_view_new();
-      gtk_container_add( GTK_CONTAINER (widget), GTK_WIDGET(web_view) );
-      gtk_widget_show( GTK_WIDGET(web_view) );
-      gtk_object_set_data( GTK_OBJECT(widget), "_dw_web_view", (gpointer)web_view );
+#ifdef USE_WEBKIT
+   int _locked_by_me = FALSE;
+   WebKitWebView *web_view;
+
+   DW_MUTEX_LOCK;
+   widget = gtk_scrolled_window_new(NULL, NULL);
+   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+   web_view = (WebKitWebView *)_webkit_web_view_new();
+   gtk_container_add(GTK_CONTAINER (widget), GTK_WIDGET(web_view));
+   gtk_widget_show( GTK_WIDGET(web_view) );
+   gtk_object_set_data(GTK_OBJECT(widget), "_dw_web_view", (gpointer)web_view);
 # ifdef WEBKIT_CHECK_VERSION
 #  if WEBKIT_CHECK_VERSION(1,1,5)
-      g_signal_connect( web_view, "populate-popup", G_CALLBACK(_dw_html_populate_popup_cb), NULL );
+   g_signal_connect(web_view, "populate-popup", G_CALLBACK(_dw_html_populate_popup_cb), NULL);
 #  endif
 # endif
-      gtk_widget_show(widget);
-   }
-#else
-   dw_debug( "HTML widget not available; you do not have access to gtkmozembed, webkit nor libgtkhtml-2.\n" );
-#endif
-   DW_MUTEX_UNLOCK;
+   gtk_widget_show(widget);
+   DW_MUTEX_UNLOCK;
+#else
+   dw_debug( "HTML widget not available; you do not have access to webkit.\n" );
+#endif
    return widget;
 }
 
--- a/gtk3/dw.c	Tue Nov 05 21:06:23 2019 +0000
+++ b/gtk3/dw.c	Wed Nov 06 08:48:49 2019 +0000
@@ -32,7 +32,10 @@
 #include <math.h>
 #include <gdk/gdkkeysyms.h>
 
-#ifdef USE_WEBKIT
+
+#ifdef USE_WEBKIT2
+#include <webkit2/webkit2.h>
+#else
 #include <webkit/webkit.h>
 #endif
 
@@ -159,26 +162,6 @@
 static gint _column_click_event(GtkWidget *widget, gpointer data);
 static void _dw_signal_disconnect(gpointer data, GClosure *closure);
 
-
-#ifdef USE_WEBKIT
-/*
- * we need to add these equivalents from webkitwebview.h so we can refer to
- * our own pointers to functions (we don't link with the webkit libraries
- */
-# define DW_WEBKIT_TYPE_WEB_VIEW            (_webkit_web_view_get_type())
-# define DW_WEBKIT_WEB_VIEW(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), DW_WEBKIT_TYPE_WEB_VIEW, WebKitWebView))
-WEBKIT_API GType (*_webkit_web_view_get_type)(void) = NULL;
-WEBKIT_API void (*_webkit_web_view_load_html_string)(WebKitWebView *, const gchar *, const gchar *) = NULL;
-WEBKIT_API void (*_webkit_web_view_open)(WebKitWebView *, const gchar *) = NULL;
-WEBKIT_API GtkWidget *(*_webkit_web_view_new)(void) = NULL;
-WEBKIT_API void (*_webkit_web_view_go_back)(WebKitWebView *) = NULL;
-WEBKIT_API void (*_webkit_web_view_go_forward)(WebKitWebView *) = NULL;
-WEBKIT_API void (*_webkit_web_view_reload)(WebKitWebView *) = NULL;
-WEBKIT_API void (*_webkit_web_view_stop_loading)(WebKitWebView *) = NULL;
-WEBKIT_API void (*_webkit_web_frame_print)(WebKitWebFrame *) = NULL;
-WEBKIT_API WebKitWebFrame *(*_webkit_web_view_get_focused_frame)(WebKitWebView *) = NULL;
-#endif
-
 GObject *_DWObject = NULL;
 char *_DWDefaultFont = NULL;
 static char _dw_share_path[PATH_MAX+1] = { 0 };
@@ -1826,33 +1809,6 @@
    return NULL;
 }
 
-/* Try to load the WebKitGtk shared libary */
-#ifdef USE_WEBKIT
-void init_webkit(void)
-{
-   char libname[100];
-   void *handle = NULL;
-
-   sprintf( libname, "lib%s.so", WEBKIT_LIB);
-   handle = dlopen( libname, RTLD_LAZY );
-
-   /* If we loaded it, grab the symbols we want */
-   if ( handle )
-   {
-      _webkit_web_view_get_type = dlsym( handle, "webkit_web_view_get_type" );
-      _webkit_web_view_load_html_string = dlsym( handle, "webkit_web_view_load_html_string" );
-      _webkit_web_view_open = dlsym( handle, "webkit_web_view_open" );
-      _webkit_web_view_new = dlsym( handle, "webkit_web_view_new" );
-      _webkit_web_view_go_back = dlsym( handle, "webkit_web_view_go_back" );
-      _webkit_web_view_go_forward = dlsym( handle, "webkit_web_view_go_forward" );
-      _webkit_web_view_reload = dlsym( handle, "webkit_web_view_reload" );
-      _webkit_web_view_stop_loading = dlsym( handle, "webkit_web_view_stop_loading" );
-      _webkit_web_frame_print = dlsym( handle, "webkit_web_frame_print" );
-      _webkit_web_view_get_focused_frame = dlsym( handle, "webkit_web_view_get_focused_frame" );
-   }
-}
-#endif
-
 /*
  * Initializes the Dynamic Windows engine.
  * Parameters:
@@ -1923,11 +1879,7 @@
 
    /* Create a global object for glib activities */
    _DWObject = g_object_new(G_TYPE_OBJECT, NULL);
-
-#ifdef USE_WEBKIT
-   init_webkit();
-#endif
-
+   
    return TRUE;
 }
 
@@ -11290,6 +11242,24 @@
    }
 }
 
+#ifdef USE_WEBKIT
+/* Helper function to get the web view handle */
+WebKitWebView *_dw_html_web_view(GtkWidget *widget)
+{
+   if(widget)
+   {
+      WebKitWebView *web_view = (WebKitWebView *)widget;
+      if(WEBKIT_IS_WEB_VIEW(web_view))
+         return web_view;
+#ifndef USE_WEBKIT2         
+      web_view = (WebKitWebView *)g_object_get_data(G_OBJECT(widget), "_dw_web_view");
+      if(WEBKIT_IS_WEB_VIEW(web_view))
+         return web_view;
+#endif         
+   }
+   return NULL;
+}
+#endif
 /*
  * Causes the embedded HTML widget to take action.
  * Parameters:
@@ -11301,35 +11271,42 @@
 #ifdef USE_WEBKIT
    int _locked_by_me = FALSE;
    WebKitWebView *web_view;
-   WebKitWebFrame *frame;
-
-   if (!_webkit_web_view_open)
-      return;
-
-   DW_MUTEX_LOCK;
-   web_view = (WebKitWebView *)g_object_get_data(G_OBJECT(handle), "_dw_web_view");
-   if ( web_view )
-   {
-      switch( action )
+
+   DW_MUTEX_LOCK;
+   
+   if((web_view = _dw_html_web_view(handle)))
+   {
+      switch(action)
       {
          case DW_HTML_GOBACK:
-            _webkit_web_view_go_back( web_view );
+            webkit_web_view_go_back(web_view);
             break;
          case DW_HTML_GOFORWARD:
-            _webkit_web_view_go_forward( web_view );
+            webkit_web_view_go_forward(web_view);
             break;
          case DW_HTML_GOHOME:
-            _webkit_web_view_open( web_view, "http://dwindows.netlabs.org" );
+#ifdef USE_WEBKIT2
+            webkit_web_view_load_uri(web_view, DW_HOME_URL);
+#else
+            webkit_web_view_open(web_view, DW_HOME_URL);
+#endif            
             break;
          case DW_HTML_RELOAD:
-            _webkit_web_view_reload( web_view );
+            webkit_web_view_reload(web_view);
             break;
          case DW_HTML_STOP:
-            _webkit_web_view_stop_loading( web_view );
+            webkit_web_view_stop_loading(web_view);
             break;
          case DW_HTML_PRINT:
-            frame = _webkit_web_view_get_focused_frame( web_view );
-            _webkit_web_frame_print( frame );
+            {
+#ifdef USE_WEBKIT2
+               WebKitPrintOperation *operation = webkit_print_operation_new(web_view);
+               webkit_print_operation_run_dialog(operation, NULL);
+#else         
+               WebKitWebFrame *frame = webkit_web_view_get_focused_frame(web_view);
+               webkit_web_frame_print(frame);
+#endif               
+            }
             break;
       }
    }
@@ -11352,20 +11329,20 @@
    int _locked_by_me = FALSE;
    WebKitWebView *web_view;
 
-   if (!_webkit_web_view_open)
-      return -1;
-
-   DW_MUTEX_LOCK;
-   web_view = (WebKitWebView *)g_object_get_data(G_OBJECT(handle), "_dw_web_view");
-   if ( web_view )
-   {
-      _webkit_web_view_load_html_string( web_view, string, "file:///");
-      gtk_widget_show( GTK_WIDGET(handle) );
-   }
-   DW_MUTEX_UNLOCK;
-   return 0;
+   DW_MUTEX_LOCK;
+   if((web_view = _dw_html_web_view(handle)))
+   {
+#ifdef USE_WEBKIT2
+      webkit_web_view_load_html(web_view, string, "file:///");
+#else      
+      webkit_web_view_load_html_string(web_view, string, "file:///");
+#endif      
+      gtk_widget_show(GTK_WIDGET(handle));
+   }
+   DW_MUTEX_UNLOCK;
+   return DW_ERROR_NONE;
 #else
-   return -1;
+   return DW_ERROR_UNKNOWN;
 #endif
 }
 
@@ -11384,81 +11361,80 @@
    int _locked_by_me = FALSE;
    WebKitWebView *web_view;
 
-   if (!_webkit_web_view_open)
-      return -1;
-
-   DW_MUTEX_LOCK;
-   web_view = (WebKitWebView *)g_object_get_data(G_OBJECT(handle), "_dw_web_view");
-   if ( web_view )
-   {
-      _webkit_web_view_open( web_view, url );
+   DW_MUTEX_LOCK;
+   if((web_view = _dw_html_web_view(handle)))
+   {
+#ifdef USE_WEBKIT2
+      webkit_web_view_load_uri(web_view, url);
+#else
+      webkit_web_view_open(web_view, url);
+#endif      
       gtk_widget_show(GTK_WIDGET(handle));
    }
    DW_MUTEX_UNLOCK;
-   return 0;
+   return DW_ERROR_NONE;
 #else
-   return -1;
-#endif
-}
-
-#ifdef USE_WEBKIT
-static void _dw_html_print_cb( GtkWidget *widget, gpointer *data )
-{
-   WebKitWebView *web_view = DW_WEBKIT_WEB_VIEW(data);
+   return DW_ERROR_UNKNOWN;
+#endif
+}
+
+#if defined(USE_WEBKIT) && !defined(USE_WEBKIT2)
+static void _dw_html_print_cb(GtkWidget *widget, gpointer *data)
+{
+   WebKitWebView *web_view = WEBKIT_WEB_VIEW(data);
    WebKitWebFrame *frame;
 
-   frame = _webkit_web_view_get_focused_frame( web_view );
-   _webkit_web_frame_print( frame );
-}
+   frame = webkit_web_view_get_focused_frame(web_view);
+   webkit_web_frame_print(frame);
+}
+
 /*
  * Fired when the user right-clicks to get the popup-menu on the HTML widget
  * We add a "Print" menu item to enable printing
  * user_data is not used
  */
-static void _dw_html_populate_popup_cb( WebKitWebView *web_view, GtkMenu *menu, gpointer user_data )
+static void _dw_html_populate_popup_cb(WebKitWebView *web_view, GtkMenu *menu, gpointer user_data)
 {
    GtkWidget *item = gtk_menu_item_new_with_mnemonic( _("_Print") );
 
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
-   g_signal_connect( item, "activate", G_CALLBACK(_dw_html_print_cb), web_view );
+   g_signal_connect(item, "activate", G_CALLBACK(_dw_html_print_cb), web_view);
    gtk_widget_show(item);
 }
 #endif
 
 /*
- * Create a new Entryfield window (widget) to be packed.
- * Parameters:
- *       text: The default text to be in the entryfield widget.
+ * Create a new HTML window (widget) to be packed.
+ * Parameters:
  *       id: An ID to be used with dw_window_from_id() or 0L.
  */
 HWND dw_html_new(unsigned long id)
 {
    GtkWidget *widget = NULL;
-   int _locked_by_me = FALSE;
-
-   DW_MUTEX_LOCK;
 #ifdef USE_WEBKIT
-   if (!_webkit_web_view_open)
-   {
-      dw_debug( "HTML widget not available; you do not have access to webkit.\n" );
-   }
-   else
-   {
-      WebKitWebView *web_view;
-      widget = gtk_scrolled_window_new (NULL, NULL);
-      gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
-      web_view = (WebKitWebView *)_webkit_web_view_new();
-      /* web_view = WEBKIT_WEB_VIEW(_webkit_web_view_new() ); */
-      gtk_container_add( GTK_CONTAINER (widget), GTK_WIDGET(web_view) );
-      gtk_widget_show( GTK_WIDGET(web_view) );
-      g_object_set_data(G_OBJECT(widget), "_dw_web_view", (gpointer)web_view);
-      g_signal_connect( web_view, "populate-popup", G_CALLBACK(_dw_html_populate_popup_cb), NULL );
-   }
+   int _locked_by_me = FALSE;
+   WebKitWebView *web_view;
+
+   DW_MUTEX_LOCK;
+   web_view = (WebKitWebView *)webkit_web_view_new();
+   /* WebKit2 no longer requires a scrolled window...
+    * So only create a scrolled window and pack it in older versions.
+    */
+#ifndef USE_WEBKIT2
+   widget = gtk_scrolled_window_new(NULL, NULL);
+   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+   gtk_container_add(GTK_CONTAINER (widget), GTK_WIDGET(web_view));
+   gtk_widget_show(GTK_WIDGET(web_view));
+   g_object_set_data(G_OBJECT(widget), "_dw_web_view", (gpointer)web_view);
+   g_signal_connect(web_view, "populate-popup", G_CALLBACK(_dw_html_populate_popup_cb), NULL);
+#else 
+   widget = (GtkWidget *)web_view;
+#endif
    gtk_widget_show(widget);
+   DW_MUTEX_UNLOCK;
 #else
    dw_debug( "HTML widget not available; you do not have access to webkit.\n" );
 #endif
-   DW_MUTEX_UNLOCK;
    return widget;
 }