# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1573030129 0 # Node ID a17cc19583690af2ccb665f531fa7211e42e2377 # Parent ebbdb2120659c04e85105b5ea5defa233ee3e6bc GTK: Added WebKit2 support for GTK3. Remove dead code from GTK2. Use linker to pull in webkit libraries instead of dlopen() etc. diff -r ebbdb2120659 -r a17cc1958369 config.h.in --- 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 diff -r ebbdb2120659 -r a17cc1958369 configure --- 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" diff -r ebbdb2120659 -r a17cc1958369 configure.in --- 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" diff -r ebbdb2120659 -r a17cc1958369 dw.h --- 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 diff -r ebbdb2120659 -r a17cc1958369 gtk/dw.c --- 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 + * (C) 2000-2019 Brian Smith * (C) 2003-2011 Mark Hessling * (C) 2002 Nickolay V. Shmyrev */ @@ -34,16 +34,6 @@ #include #endif -#ifdef USE_GTKMOZEMBED -# include -# undef GTK_TYPE_MOZ_EMBED -# define GTK_TYPE_MOZ_EMBED (_dw_moz_embed_get_type()) -#endif - -#ifdef USE_LIBGTKHTML2 -# include -#endif - #ifdef USE_WEBKIT # if defined(USE_WEBKIT10) || defined(USE_WEBKIT11) # include @@ -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 - -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 - -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; } diff -r ebbdb2120659 -r a17cc1958369 gtk3/dw.c --- 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 #include -#ifdef USE_WEBKIT + +#ifdef USE_WEBKIT2 +#include +#else #include #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; }