[libgepub/wip/cosimoc/api-rework: 1/13] widget: make it a WebKitWebView
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgepub/wip/cosimoc/api-rework: 1/13] widget: make it a WebKitWebView
- Date: Sat, 18 Jun 2016 21:12:46 +0000 (UTC)
commit 8a613db9c9ca8968f3ebea5688dd27e84a2b6d53
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Sat Jun 18 11:52:54 2016 -0700
widget: make it a WebKitWebView
There's no reason to make this a box with a single child. Derive
directly from WebKitWebView.
libgepub/gepub-widget.c | 73 ++++++++++++++++++-----------------------------
libgepub/gepub-widget.h | 1 -
2 files changed, 28 insertions(+), 46 deletions(-)
---
diff --git a/libgepub/gepub-widget.c b/libgepub/gepub-widget.c
index 25cd15c..729ffa6 100644
--- a/libgepub/gepub-widget.c
+++ b/libgepub/gepub-widget.c
@@ -23,17 +23,16 @@
#include "gepub-widget.h"
struct _GepubWidget {
- GtkBox parent;
+ WebKitWebView parent;
GepubDoc *doc;
- WebKitWebView *view;
};
struct _GepubWidgetClass {
- GtkBoxClass parent_class;
+ WebKitWebViewClass parent_class;
};
-G_DEFINE_TYPE (GepubWidget, gepub_widget, GTK_TYPE_BOX)
+G_DEFINE_TYPE (GepubWidget, gepub_widget, WEBKIT_TYPE_WEB_VIEW)
static void
resource_callback (WebKitURISchemeRequest *request, gpointer user_data)
@@ -44,9 +43,11 @@ resource_callback (WebKitURISchemeRequest *request, gpointer user_data)
gchar *uri;
guchar *contents;
gchar *mime;
- GepubWidget *widget;
+ GepubWidget *widget = user_data;
+
+ if (!widget->doc)
+ return;
- widget = GEPUB_WIDGET (user_data);
uri = g_strdup (webkit_uri_scheme_request_get_uri (request));
// removing "epub://"
path = uri + 7;
@@ -75,17 +76,25 @@ gepub_widget_finalize (GObject *object)
g_object_unref (widget->doc);
widget->doc = NULL;
}
- if (widget->view) {
- gtk_widget_destroy (GTK_WIDGET (widget->view));
- widget->view = NULL;
- }
G_OBJECT_CLASS (gepub_widget_parent_class)->finalize (object);
}
static void
-gepub_widget_init (GepubWidget *doc)
+gepub_widget_init (GepubWidget *widget)
+{
+}
+
+static void
+gepub_widget_constructed (GObject *object)
{
+ WebKitWebContext *ctx;
+ GepubWidget *widget = GEPUB_WIDGET (object);
+
+ G_OBJECT_CLASS (gepub_widget_parent_class)->constructed (object);
+
+ ctx = webkit_web_view_get_context (WEBKIT_WEB_VIEW (widget));
+ webkit_web_context_register_uri_scheme (ctx, "epub", resource_callback, widget, NULL);
}
static void
@@ -93,6 +102,7 @@ gepub_widget_class_init (GepubWidgetClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->constructed = gepub_widget_constructed;
object_class->finalize = gepub_widget_finalize;
}
@@ -107,12 +117,9 @@ GtkWidget *
gepub_widget_new (const gchar *path)
{
GepubWidget *widget = g_object_new (GEPUB_TYPE_WIDGET,
- "orientation", GTK_ORIENTATION_HORIZONTAL,
- "spacing", 0,
NULL);
widget->doc = NULL;
- widget->view = NULL;
return GTK_WIDGET (widget);
}
@@ -130,18 +137,6 @@ gepub_widget_get_doc (GepubWidget *widget)
}
/**
- * gepub_widget_get_wkview:
- * @widget: a #GepubWidget
- *
- * Returns: (transfer none): the #WebKitWebView related with the widget
- */
-WebKitWebView *
-gepub_widget_get_wkview (GepubWidget *widget)
-{
- return widget->view;
-}
-
-/**
* gepub_widget_load_epub:
* @widget: a #GepubWidget
* @path: The epub doc path
@@ -151,27 +146,13 @@ gepub_widget_get_wkview (GepubWidget *widget)
void
gepub_widget_load_epub (GepubWidget *widget, const gchar *path)
{
- GtkBox *box = GTK_BOX (widget);
- WebKitWebContext *ctx = NULL;
-
if (widget->doc) {
g_object_unref (widget->doc);
widget->doc = NULL;
}
- if (widget->view) {
- gtk_widget_destroy (GTK_WIDGET (widget->view));
- widget->view = NULL;
- }
widget->doc = gepub_doc_new (path);
- widget->view = WEBKIT_WEB_VIEW (webkit_web_view_new ());
-
- ctx = webkit_web_view_get_context (WEBKIT_WEB_VIEW (widget->view));
- webkit_web_context_register_uri_scheme (ctx, "epub", resource_callback, widget, NULL);
-
gepub_widget_reload (widget);
-
- gtk_box_pack_start (box, GTK_WIDGET (widget->view), TRUE, TRUE, 0);
}
/**
@@ -186,11 +167,13 @@ gepub_widget_reload (GepubWidget *widget)
gsize bufsize = 0;
guchar *buffer = NULL;
+ if (!widget->doc)
+ return;
+
buffer = gepub_doc_get_current_with_epub_uris (widget->doc, &bufsize);
- webkit_web_view_load_bytes (
- widget->view,
- g_bytes_new_take (buffer, bufsize),
- gepub_doc_get_current_mime (widget->doc),
- "UTF-8", NULL);
+ webkit_web_view_load_bytes (WEBKIT_WEB_VIEW (widget),
+ g_bytes_new_take (buffer, bufsize),
+ gepub_doc_get_current_mime (widget->doc),
+ "UTF-8", NULL);
}
diff --git a/libgepub/gepub-widget.h b/libgepub/gepub-widget.h
index 15968b8..dc1bf0d 100644
--- a/libgepub/gepub-widget.h
+++ b/libgepub/gepub-widget.h
@@ -42,7 +42,6 @@ GType gepub_widget_get_type (void) G_GNUC_CON
GtkWidget *gepub_widget_new ();
GepubDoc *gepub_widget_get_doc (GepubWidget *widget);
-WebKitWebView *gepub_widget_get_wkview (GepubWidget *widget);
void gepub_widget_load_epub (GepubWidget *widget, const gchar *path);
void gepub_widget_reload (GepubWidget *widget);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]