Switch to WebKit 4.0 API

This commit is contained in:
Gergely Polonkai 2014-08-20 20:23:14 +02:00
parent 8575fec162
commit 8aeec229f3
4 changed files with 34 additions and 21 deletions

View File

@ -35,7 +35,7 @@ PKG_CHECK_MODULES([GOBJECT], [gobject-2.0])
PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.12]) PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.12])
PKG_CHECK_MODULES([LIBXML], [libxml-2.0]) PKG_CHECK_MODULES([LIBXML], [libxml-2.0])
PKG_CHECK_MODULES([LIBXSLT], [libexslt]) PKG_CHECK_MODULES([LIBXSLT], [libexslt])
PKG_CHECK_MODULES([WEBKIT], [webkit2gtk-3.0]) PKG_CHECK_MODULES([WEBKIT], [webkit2gtk-4.0])
PKG_CHECK_MODULES([GDA], [libgda-5.0 libgda-sqlite-5.0]) PKG_CHECK_MODULES([GDA], [libgda-5.0 libgda-sqlite-5.0])
PKG_CHECK_MODULES([SWE_GLIB], [swe-glib >= 2.1.0]) PKG_CHECK_MODULES([SWE_GLIB], [swe-glib >= 2.1.0])

View File

@ -9,7 +9,7 @@
#include "astrognome.h" #include "astrognome.h"
typedef struct _AgAppPrivate { typedef struct _AgAppPrivate {
WebKitWebViewGroup *web_view_group; WebKitUserContentManager *manager;
} AgAppPrivate; } AgAppPrivate;
G_DEFINE_TYPE_WITH_PRIVATE(AgApp, ag_app, GTK_TYPE_APPLICATION); G_DEFINE_TYPE_WITH_PRIVATE(AgApp, ag_app, GTK_TYPE_APPLICATION);
@ -58,7 +58,7 @@ ag_app_create_window(AgApp *app)
GtkWidget *window; GtkWidget *window;
AgAppPrivate *priv = ag_app_get_instance_private(app); AgAppPrivate *priv = ag_app_get_instance_private(app);
window = ag_window_new(app, priv->web_view_group); window = ag_window_new(app, priv->manager);
gtk_application_add_window(GTK_APPLICATION(app), GTK_WINDOW(window)); gtk_application_add_window(GTK_APPLICATION(app), GTK_WINDOW(window));
gtk_widget_show_all(window); gtk_widget_show_all(window);
@ -424,13 +424,14 @@ ag_app_new(void)
static void static void
ag_app_init(AgApp *app) ag_app_init(AgApp *app)
{ {
AgAppPrivate *priv; AgAppPrivate *priv;
GBytes *css_data; GBytes *css_data;
const gchar *css_source; const gchar *css_source;
gsize css_length; gsize css_length;
WebKitUserStyleSheet *stylesheet;
priv = ag_app_get_instance_private(app); priv = ag_app_get_instance_private(app);
priv->web_view_group = webkit_web_view_group_new(NULL); priv->manager = webkit_user_content_manager_new();
css_data = g_resources_lookup_data( css_data = g_resources_lookup_data(
"/eu/polonkai/gergely/Astrognome/ui/chart-default.css", "/eu/polonkai/gergely/Astrognome/ui/chart-default.css",
@ -439,14 +440,14 @@ ag_app_init(AgApp *app)
); );
if ((css_source = g_bytes_get_data(css_data, &css_length)) != NULL) { if ((css_source = g_bytes_get_data(css_data, &css_length)) != NULL) {
webkit_web_view_group_add_user_style_sheet( stylesheet = webkit_user_style_sheet_new(
priv->web_view_group,
css_source, css_source,
NULL, WEBKIT_USER_CONTENT_INJECT_TOP_FRAME,
NULL, WEBKIT_USER_STYLE_LEVEL_USER,
NULL, NULL, NULL
WEBKIT_INJECTED_CONTENT_FRAMES_TOP_ONLY
); );
webkit_user_content_manager_add_style_sheet(priv->manager, stylesheet);
webkit_user_style_sheet_unref(stylesheet);
} }
g_bytes_unref(css_data); g_bytes_unref(css_data);

View File

@ -393,9 +393,14 @@ ag_window_redraw_aspect_table(AgWindow *window)
void void
ag_window_redraw_chart(AgWindow *window) ag_window_redraw_chart(AgWindow *window)
{ {
gsize length;
GError *err = NULL; GError *err = NULL;
AgWindowPrivate *priv = ag_window_get_instance_private(window); AgWindowPrivate *priv = ag_window_get_instance_private(window);
gchar *svg_content = ag_chart_create_svg(priv->chart, NULL, &err); gchar *svg_content = ag_chart_create_svg(
priv->chart,
&length,
&err
);
if (svg_content == NULL) { if (svg_content == NULL) {
ag_app_message_dialog( ag_app_message_dialog(
@ -405,11 +410,16 @@ ag_window_redraw_chart(AgWindow *window)
err->message err->message
); );
} else { } else {
webkit_web_view_load_html( GBytes *content;
content = g_bytes_new_take(svg_content, length);
webkit_web_view_load_bytes(
WEBKIT_WEB_VIEW(priv->chart_web_view), WEBKIT_WEB_VIEW(priv->chart_web_view),
svg_content, NULL content, "image/svg+xml",
"UTF-8", NULL
); );
g_free(svg_content); g_bytes_unref(content);
} }
ag_window_redraw_aspect_table(window); ag_window_redraw_aspect_table(window);
@ -1671,12 +1681,14 @@ ag_window_configure_event_cb(GtkWidget *widget,
} }
GtkWidget * GtkWidget *
ag_window_new(AgApp *app, WebKitWebViewGroup *web_view_group) ag_window_new(AgApp *app, WebKitUserContentManager *manager)
{ {
AgWindow *window = g_object_new(AG_TYPE_WINDOW, NULL); AgWindow *window = g_object_new(AG_TYPE_WINDOW, NULL);
AgWindowPrivate *priv = ag_window_get_instance_private(window); AgWindowPrivate *priv = ag_window_get_instance_private(window);
priv->chart_web_view = webkit_web_view_new_with_group(web_view_group); priv->chart_web_view = webkit_web_view_new_with_user_content_manager(
manager
);
gtk_container_add(GTK_CONTAINER(priv->tab_chart), priv->chart_web_view); gtk_container_add(GTK_CONTAINER(priv->tab_chart), priv->chart_web_view);
// TODO: translate this error message! // TODO: translate this error message!

View File

@ -41,7 +41,7 @@ struct _AgWindowClass {
GType ag_window_get_type(void) G_GNUC_CONST; GType ag_window_get_type(void) G_GNUC_CONST;
GtkWidget *ag_window_new(AgApp *app, WebKitWebViewGroup *web_view_group); GtkWidget *ag_window_new(AgApp *app, WebKitUserContentManager *manager);
void ag_window_set_chart(AgWindow *window, void ag_window_set_chart(AgWindow *window,
AgChart *chart); AgChart *chart);