[devhelp] Initial WebKit2 port
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [devhelp] Initial WebKit2 port
- Date: Mon, 5 Mar 2012 16:00:18 +0000 (UTC)
commit 7f8994e1617ef752e5feabbbd2848b6bd06ebfe4
Author: Carlos Garcia Campos <cgarcia igalia com>
Date: Thu Jan 19 15:21:22 2012 +0100
Initial WebKit2 port
It builds and works, but some features haven't been ported yet so they
just don't work.
configure.ac | 19 ++++++++-
src/Makefile.am | 4 ++
src/dh-assistant-view.c | 17 +++++++-
src/dh-assistant-view.h | 4 ++
src/dh-assistant.c | 9 ++++-
src/dh-util.c | 4 ++
src/dh-util.h | 4 ++
src/dh-window.c | 96 ++++++++++++++++++++++++++++++++++++----------
8 files changed, 131 insertions(+), 26 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 8967493..ff78579 100644
--- a/configure.ac
+++ b/configure.ac
@@ -57,10 +57,24 @@ else
fi
AM_CONDITIONAL(GCONF_SCHEMAS_INSTALL, test "x$IGE_PLATFORM" = xx11)
+AC_ARG_WITH(webkit2,
+ [AC_HELP_STRING([--with-webkit2], [build with WebKit2 [default=no]])],
+ [],[with_webkit2=no])
+
+if test "x$with_webkit2" != xno; then
+ WEBKITGTK_PC_NAME=webkit2gtk-3.0
+ WEBKITGTK_REQUIRED_VERSION=1.7.91
+ AC_DEFINE([HAVE_WEBKIT2],[1],[Define if building with WebKit2])
+else
+ WEBKITGTK_PC_NAME=webkitgtk-3.0
+ WEBKITGTK_REQUIRED_VERSION=1.6.0
+fi
+AM_CONDITIONAL(WITH_WEBKIT2, test "x$with_webkit2" != xno)
+
PKG_CHECK_MODULES(DEVHELP, [
gthread-2.0 >= 2.10.0
gtk+-3.0 >= 3.0.2
- webkitgtk-3.0
+ $WEBKITGTK_PC_NAME >= $WEBKITGTK_REQUIRED_VERSION
glib-2.0 >= 2.25.11
])
@@ -68,7 +82,7 @@ PKG_CHECK_MODULES(LIBDEVHELP, [
gtk+-3.0 >= 3.0.2
$gconf_pkgconfig
$gtkmacintegration_pkgconfig
- webkitgtk-3.0
+ $WEBKITGTK_PC_NAME >= $WEBKITGTK_REQUIRED_VERSION
])
AC_ARG_WITH(zlib, [ --with-zlib=DIR use zlib in DIR], zlibdir=$with_zlib)
@@ -124,4 +138,5 @@ AC_OUTPUT
echo
echo "Prefix: $prefix"
echo "Platform: $IGE_PLATFORM_NAME"
+echo "WebKit2: $with_webkit2"
echo
diff --git a/src/Makefile.am b/src/Makefile.am
index 436d267..355f254 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -28,6 +28,10 @@ AM_CPPFLAGS = \
-DGTK_DISABLE_SINGLE_INCLUDES \
$(WARN_CFLAGS)
+if WITH_WEBKIT2
+AM_CPPFLAGS += -DHAVE_WEBKIT2
+endif
+
bin_PROGRAMS = devhelp
devhelp_SOURCES = \
diff --git a/src/dh-assistant-view.c b/src/dh-assistant-view.c
index 037b7a8..9ceb5db 100644
--- a/src/dh-assistant-view.c
+++ b/src/dh-assistant-view.c
@@ -22,7 +22,6 @@
#include "config.h"
#include <string.h>
#include <glib/gi18n-lib.h>
-#include <webkit/webkit.h>
#include "dh-assistant-view.h"
#include "dh-link.h"
#include "dh-util.h"
@@ -60,6 +59,9 @@ view_finalize (GObject *object)
G_OBJECT_CLASS (dh_assistant_view_parent_class)->finalize (object);
}
+#ifdef HAVE_WEBKIT2
+/* TODO: Policy Client */
+#else
static WebKitNavigationResponse
assistant_navigation_requested (WebKitWebView *web_view,
WebKitWebFrame *frame,
@@ -87,6 +89,7 @@ assistant_navigation_requested (WebKitWebView *web_view,
return WEBKIT_NAVIGATION_RESPONSE_IGNORE;
}
+#endif /* HAVE_WEBKIT2 */
static gboolean
assistant_button_press_event (GtkWidget *widget,
@@ -110,8 +113,11 @@ dh_assistant_view_class_init (DhAssistantViewClass* klass)
object_class->finalize = view_finalize;
widget_class->button_press_event = assistant_button_press_event;
-
+#ifdef HAVE_WEBKIT2
+/* TODO: Policy Client */
+#else
web_view_class->navigation_requested = assistant_navigation_requested;
+#endif
g_type_class_add_private (klass, sizeof (DhAssistantViewPriv));
}
@@ -362,12 +368,19 @@ dh_assistant_view_set_link (DhAssistantView *view,
g_free (javascript_html);
priv->snippet_loaded = FALSE;
+#ifdef HAVE_WEBKIT2
+ webkit_web_view_load_html (
+ WEBKIT_WEB_VIEW (view),
+ html,
+ filename);
+#else
webkit_web_view_load_string (
WEBKIT_WEB_VIEW (view),
html,
"text/html",
NULL,
filename);
+#endif
g_free (html);
} else {
diff --git a/src/dh-assistant-view.h b/src/dh-assistant-view.h
index 2d70eac..2ecfbce 100644
--- a/src/dh-assistant-view.h
+++ b/src/dh-assistant-view.h
@@ -21,7 +21,11 @@
#ifndef __DH_ASSISTANT_VIEW_H__
#define __DH_ASSISTANT_VIEW_H__
+#ifdef HAVE_WEBKIT2
+#include <webkit2/webkit2.h>
+#else
#include <webkit/webkit.h>
+#endif
#include "dh-base.h"
#include "dh-link.h"
diff --git a/src/dh-assistant.c b/src/dh-assistant.c
index c3e7f63..c614c59 100644
--- a/src/dh-assistant.c
+++ b/src/dh-assistant.c
@@ -64,7 +64,9 @@ static void
dh_assistant_init (DhAssistant *assistant)
{
DhAssistantPriv *priv = GET_PRIVATE (assistant);
+#ifndef HAVE_WEBKIT2
GtkWidget *scrolled_window;
+#endif
priv->main_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_widget_show (priv->main_box);
@@ -79,7 +81,11 @@ dh_assistant_init (DhAssistant *assistant)
g_signal_connect (assistant, "key-press-event",
G_CALLBACK (assistant_key_press_event_cb),
assistant);
-
+#ifdef HAVE_WEBKIT2
+ gtk_box_pack_start (GTK_BOX (priv->main_box),
+ priv->view, TRUE, TRUE, 0);
+ gtk_widget_show (priv->view);
+#else
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
@@ -90,6 +96,7 @@ dh_assistant_init (DhAssistant *assistant)
gtk_box_pack_start (GTK_BOX (priv->main_box),
scrolled_window, TRUE, TRUE, 0);
+#endif
dh_util_state_manage_window (GTK_WINDOW (assistant),
"assistant/window");
diff --git a/src/dh-util.c b/src/dh-util.c
index 27c029a..897ef9e 100644
--- a/src/dh-util.c
+++ b/src/dh-util.c
@@ -669,6 +669,9 @@ view_destroy_cb (GtkWidget *view,
static void
view_setup_fonts (WebKitWebView *view)
{
+#ifdef HAVE_WEBKIT2
+/* TODO: WebKit Settings */
+#else
IgeConf *conf;
WebKitWebSettings *settings;
gboolean use_system_fonts;
@@ -700,6 +703,7 @@ view_setup_fonts (WebKitWebView *view)
g_free (variable_name);
g_free (fixed_name);
+#endif /* HAVE_WEBKIT2 */
}
static void
diff --git a/src/dh-util.h b/src/dh-util.h
index ecb4b42..0ac9778 100644
--- a/src/dh-util.h
+++ b/src/dh-util.h
@@ -23,7 +23,11 @@
#define __DH_UTIL_H__
#include <gtk/gtk.h>
+#ifdef HAVE_WEBKIT2
+#include <webkit2/webkit2.h>
+#else
#include <webkit/webkit.h>
+#endif
#include "dh-link.h"
G_BEGIN_DECLS
diff --git a/src/dh-window.c b/src/dh-window.c
index f26895e..ea28aa2 100644
--- a/src/dh-window.c
+++ b/src/dh-window.c
@@ -31,7 +31,11 @@
#include <glib/gi18n-lib.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
+#ifdef HAVE_WEBKIT2
+#include <webkit2/webkit2.h>
+#else
#include <webkit/webkit.h>
+#endif
#ifdef GDK_WINDOWING_QUARTZ
#include <gtkosxapplication.h>
@@ -192,10 +196,14 @@ static void
window_activate_print (GtkAction *action,
DhWindow *window)
{
+#ifdef HAVE_WEBKIT2
+/* TODO: Printing API */
+#else
WebKitWebView *web_view;
web_view = window_get_active_web_view (window);
webkit_web_view_execute_script (web_view, "print();");
+#endif
}
static void
@@ -257,10 +265,14 @@ window_activate_copy (GtkAction *action,
gtk_clipboard_set_text (clipboard,
dh_link_get_name(priv->selected_search_link), -1);
} else {
+#ifdef HAVE_WEBKIT2
+/* TODO: Editor API */
+#else
WebKitWebView *web_view;
web_view = window_get_active_web_view (window);
webkit_web_view_copy_clipboard (web_view);
+#endif
}
}
@@ -268,6 +280,9 @@ static void
window_activate_find (GtkAction *action,
DhWindow *window)
{
+#ifdef HAVE_WEBKIT2
+/* TODO: Find API */
+#else
DhWindowPriv *priv;
WebKitWebView *web_view;
@@ -278,6 +293,7 @@ window_activate_find (GtkAction *action,
gtk_widget_grab_focus (priv->findbar);
webkit_web_view_set_highlight_text_matches (web_view, TRUE);
+#endif /* HAVE_WEBKIT2 */
}
static int
@@ -1021,14 +1037,12 @@ window_web_view_switch_page_cb (GtkNotebook *notebook,
new_page = gtk_notebook_get_nth_page (notebook, new_page_num);
if (new_page) {
WebKitWebView *new_web_view;
- WebKitWebFrame *web_frame;
const gchar *location;
new_web_view = g_object_get_data (G_OBJECT (new_page), "web_view");
/* Sync the book tree. */
- web_frame = webkit_web_view_get_main_frame (new_web_view);
- location = webkit_web_frame_get_uri (web_frame);
+ location = webkit_web_view_get_uri (new_web_view);
if (location) {
dh_book_tree_select_uri (DH_BOOK_TREE (priv->book_tree),
@@ -1276,7 +1290,9 @@ find_library_equivalent (DhWindow *window,
return local_uri;
}
-
+#ifdef HAVE_WEBKIT2
+/* TODO: Policy Client */
+#else
static gboolean
window_web_view_navigation_policy_decision_requested (WebKitWebView *web_view,
WebKitWebFrame *frame,
@@ -1328,14 +1344,23 @@ window_web_view_navigation_policy_decision_requested (WebKitWebView
return FALSE;
}
+#endif /* HAVE_WEBKIT2 */
-
+#ifdef HAVE_WEBKIT2
+static gboolean
+window_web_view_load_failed_cb (WebKitWebView *web_view,
+ WebKitLoadEvent load_event,
+ const gchar *uri,
+ GError *web_error,
+ DhWindow *window)
+#else
static gboolean
window_web_view_load_error_cb (WebKitWebView *web_view,
WebKitWebFrame *frame,
gchar *uri,
gpointer *web_error,
DhWindow *window)
+#endif
{
GtkWidget *info_bar;
GtkWidget *content_area;
@@ -1427,11 +1452,12 @@ window_check_history (DhWindow *window,
}
static void
-window_web_view_title_changed_cb (WebKitWebView *web_view,
- WebKitWebFrame *web_frame,
- const gchar *title,
- DhWindow *window)
+window_web_view_title_changed_cb (WebKitWebView *web_view,
+ GParamSpec *param_spec,
+ DhWindow *window)
{
+ const gchar *title = webkit_web_view_get_title (web_view);
+
if (web_view == window_get_active_web_view (window)) {
window_update_title (window, web_view, title);
}
@@ -1454,6 +1480,9 @@ window_web_view_button_press_event_cb (WebKitWebView *web_view,
static gboolean
do_search (DhWindow *window)
{
+#ifdef HAVE_WEBKIT2
+/* TODO: Find API */
+#else
DhWindowPriv *priv = window->priv;
WebKitWebView *web_view;
@@ -1472,6 +1501,7 @@ do_search (DhWindow *window)
web_view, egg_find_bar_get_search_string (EGG_FIND_BAR (priv->findbar)),
egg_find_bar_get_case_sensitive (EGG_FIND_BAR (priv->findbar)),
TRUE, TRUE);
+#endif /* HAVE_WEBKIT2 */
return FALSE;
}
@@ -1505,10 +1535,13 @@ window_find_case_changed_cb (GObject *object,
string = egg_find_bar_get_search_string (EGG_FIND_BAR (priv->findbar));
case_sensitive = egg_find_bar_get_case_sensitive (EGG_FIND_BAR (priv->findbar));
-
+#ifdef HAVE_WEBKIT2
+/* TODO: Find API */
+#else
webkit_web_view_unmark_text_matches (view);
webkit_web_view_mark_text_matches (view, string, case_sensitive, 0);
webkit_web_view_set_highlight_text_matches (view, TRUE);
+#endif
}
static void
@@ -1526,8 +1559,11 @@ window_find_next_cb (GtkEntry *entry,
string = egg_find_bar_get_search_string (EGG_FIND_BAR (priv->findbar));
case_sensitive = egg_find_bar_get_case_sensitive (EGG_FIND_BAR (priv->findbar));
-
+#ifdef HAVE_WEBKIT2
+/* TODO: Find API */
+#else
webkit_web_view_search_text (view, string, case_sensitive, TRUE, TRUE);
+#endif
}
static void
@@ -1545,8 +1581,11 @@ window_find_previous_cb (GtkEntry *entry,
string = egg_find_bar_get_search_string (EGG_FIND_BAR (priv->findbar));
case_sensitive = egg_find_bar_get_case_sensitive (EGG_FIND_BAR (priv->findbar));
-
+#ifdef HAVE_WEBKIT2
+/* TODO: Find API */
+#else
webkit_web_view_search_text (view, string, case_sensitive, FALSE, TRUE);
+#endif
}
static void
@@ -1559,8 +1598,11 @@ window_findbar_close_cb (GtkWidget *widget,
view = window_get_active_web_view (window);
gtk_widget_hide (priv->findbar);
-
+#ifdef HAVE_WEBKIT2
+/* TODO: Find API */
+#else
webkit_web_view_set_highlight_text_matches (view, FALSE);
+#endif
}
#if 0
@@ -1607,10 +1649,12 @@ window_open_new_tab (DhWindow *window,
DhWindowPriv *priv;
GtkWidget *view;
GtkWidget *vbox;
- GtkWidget *scrolled_window;
GtkWidget *label;
gint num;
GtkWidget *info_bar;
+#ifndef HAVE_WEBKIT2
+ GtkWidget *scrolled_window;
+#endif
priv = window->priv;
@@ -1650,6 +1694,9 @@ window_open_new_tab (DhWindow *window,
gtk_box_pack_start (GTK_BOX(vbox), info_bar, FALSE, TRUE, 0);
+#ifdef HAVE_WEBKIT2
+ gtk_box_pack_start (GTK_BOX(vbox), view, TRUE, TRUE, 0);
+#else
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC,
@@ -1657,22 +1704,33 @@ window_open_new_tab (DhWindow *window,
gtk_container_add (GTK_CONTAINER (scrolled_window), view);
gtk_widget_show (scrolled_window);
gtk_box_pack_start (GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 0);
+#endif
label = window_new_tab_label (window, _("Empty Page"), vbox);
gtk_widget_show_all (label);
- g_signal_connect (view, "title-changed",
+ g_signal_connect (view, "notify::title",
G_CALLBACK (window_web_view_title_changed_cb),
window);
g_signal_connect (view, "button-press-event",
G_CALLBACK (window_web_view_button_press_event_cb),
window);
+#ifdef HAVE_WEBKIT2
+/* TODO: Policy Client */
+#else
g_signal_connect (view, "navigation-policy-decision-requested",
G_CALLBACK (window_web_view_navigation_policy_decision_requested),
window);
+#endif
+#ifdef HAVE_WEBKIT2
+ g_signal_connect (view, "load-failed",
+ G_CALLBACK (window_web_view_load_failed_cb),
+ window);
+#else
g_signal_connect (view, "load-error",
G_CALLBACK (window_web_view_load_error_cb),
window);
+#endif
num = gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook),
vbox, NULL);
@@ -1848,12 +1906,8 @@ window_update_title (DhWindow *window,
priv = window->priv;
- if (!web_view_title) {
- WebKitWebFrame *web_frame;
-
- web_frame = webkit_web_view_get_main_frame (web_view);
- web_view_title = webkit_web_frame_get_title (web_frame);
- }
+ if (!web_view_title)
+ web_view_title = webkit_web_view_get_title (web_view);
if (web_view_title && *web_view_title == '\0') {
web_view_title = NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]