Skip to content

Commit 63f21d5

Browse files
authored
epub: Disable support for sidebar thumbnails. (#671)
A recent update to libwebkitgtk2gtk-4.1 breaks using WebKitWebView in a GtkOffscreenWindow. Disable the thumbnail sidebar with epub documents, and disable updating the GtkWindow thumbnail. ref: WebKit/WebKit@8d7385f Fixes #670.
1 parent 39b19ce commit 63f21d5

File tree

3 files changed

+18
-126
lines changed

3 files changed

+18
-126
lines changed

libview/ev-jobs.c

Lines changed: 13 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,6 @@
4141
#include "ev-debug.h"
4242

4343
#include <gtk/gtk.h>
44-
#if ENABLE_EPUB
45-
#include <webkit2/webkit2.h>
46-
#endif
4744
#include <errno.h>
4845
#include <glib/gstdio.h>
4946
#include <glib/gi18n-lib.h>
@@ -821,80 +818,6 @@ ev_job_thumbnail_dispose (GObject *object)
821818
(* G_OBJECT_CLASS (ev_job_thumbnail_parent_class)->dispose) (object);
822819
}
823820

824-
#if ENABLE_EPUB
825-
826-
static void
827-
snapshot_callback(WebKitWebView *webview,
828-
GAsyncResult *results,
829-
EvJobThumbnail *job_thumb)
830-
{
831-
GError *error = NULL;
832-
833-
ev_document_doc_mutex_lock ();
834-
835-
EvPage *page = ev_document_get_page (EV_JOB(job_thumb)->document, job_thumb->page);
836-
job_thumb->surface = webkit_web_view_get_snapshot_finish (webview,
837-
results,
838-
&error);
839-
840-
if (error) {
841-
g_warning ("Error retrieving a snapshot: %s", error->message);
842-
}
843-
844-
EvRenderContext *rc = ev_render_context_new (page, job_thumb->rotation, job_thumb->scale);
845-
EvPage *screenshotpage;
846-
screenshotpage = ev_page_new(job_thumb->page);
847-
screenshotpage->backend_page = (EvBackendPage)job_thumb->surface;
848-
screenshotpage->backend_destroy_func = (EvBackendPageDestroyFunc)cairo_surface_destroy;
849-
ev_render_context_set_page(rc,screenshotpage);
850-
851-
job_thumb->thumbnail = ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (EV_JOB(job_thumb)->document),
852-
rc, TRUE);
853-
g_object_unref(screenshotpage);
854-
g_object_unref(rc);
855-
856-
ev_document_doc_mutex_unlock ();
857-
ev_job_succeeded (EV_JOB(job_thumb));
858-
859-
gtk_widget_destroy (gtk_widget_get_toplevel (GTK_WIDGET (webview)));
860-
}
861-
862-
863-
static void
864-
web_thumbnail_get_screenshot_cb (WebKitWebView *webview,
865-
WebKitLoadEvent event,
866-
EvJobThumbnail *job_thumb)
867-
{
868-
if (event != WEBKIT_LOAD_FINISHED || ev_job_is_failed (EV_JOB(job_thumb))) {
869-
return;
870-
}
871-
872-
webkit_web_view_get_snapshot (webview,
873-
WEBKIT_SNAPSHOT_REGION_VISIBLE,
874-
WEBKIT_SNAPSHOT_OPTIONS_NONE,
875-
NULL,
876-
(GAsyncReadyCallback)snapshot_callback,
877-
g_object_ref (job_thumb));
878-
}
879-
880-
static gboolean
881-
webview_load_failed_cb (WebKitWebView *webview,
882-
WebKitLoadEvent event,
883-
gchar *failing_uri,
884-
gpointer error,
885-
EvJobThumbnail *job_thumb)
886-
{
887-
GError *e = (GError *) error;
888-
g_warning ("Error loading data from %s: %s", failing_uri, e->message);
889-
ev_job_failed_from_error (EV_JOB(job_thumb), e);
890-
891-
gtk_widget_destroy (gtk_widget_get_toplevel (GTK_WIDGET (webview)));
892-
893-
return TRUE;
894-
}
895-
896-
#endif /* ENABLE_EPUB */
897-
898821
static gboolean
899822
ev_job_thumbnail_run (EvJob *job)
900823
{
@@ -904,57 +827,22 @@ ev_job_thumbnail_run (EvJob *job)
904827
ev_debug_message (DEBUG_JOBS, "%d (%p)", job_thumb->page, job);
905828
ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
906829

907-
if (job->document->iswebdocument) {
908-
/* Do not block the main loop */
909-
if (!ev_document_doc_mutex_trylock ())
910-
return TRUE;
911-
} else {
912-
ev_document_doc_mutex_lock ();
913-
}
830+
ev_document_doc_mutex_lock ();
914831

915-
page = ev_document_get_page (job->document, job_thumb->page);
916-
ev_document_doc_mutex_unlock ();
832+
page = ev_document_get_page (job->document, job_thumb->page);
833+
ev_document_doc_mutex_unlock ();
917834

918-
if (job->document->iswebdocument == TRUE ) {
919-
rc = ev_render_context_new (page, 0, job_thumb->scale);
920-
} else {
921-
rc = ev_render_context_new (page, job_thumb->rotation, job_thumb->scale);
922-
}
923-
g_object_unref (page);
835+
rc = ev_render_context_new (page, job_thumb->rotation, job_thumb->scale);
836+
g_object_unref (page);
924837

925-
#if ENABLE_EPUB
926-
if (job->document->iswebdocument == TRUE) {
927-
928-
GtkWidget *webview;
929-
GtkWidget *offscreenwindow;
930-
931-
webview = webkit_web_view_new ();
932-
offscreenwindow = gtk_offscreen_window_new ();
933-
934-
gtk_container_add (GTK_CONTAINER(offscreenwindow), GTK_WIDGET (webview));
935-
gtk_window_set_default_size (GTK_WINDOW(offscreenwindow), 800, 1080);
936-
gtk_widget_show_all (offscreenwindow);
937-
938-
g_signal_connect (WEBKIT_WEB_VIEW (webview), "load-changed",
939-
G_CALLBACK (web_thumbnail_get_screenshot_cb),
940-
g_object_ref (job_thumb));
941-
g_signal_connect (WEBKIT_WEB_VIEW(webview), "load-failed",
942-
G_CALLBACK(webview_load_failed_cb),
943-
g_object_ref (job_thumb));
944-
webkit_web_view_load_uri (WEBKIT_WEB_VIEW(webview), (gchar*) rc->page->backend_page);
945-
}
946-
else
947-
#endif /* ENABLE_EPUB */
948-
{
949-
ev_document_doc_mutex_lock ();
950-
job_thumb->thumbnail = ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (job->document),
951-
rc, TRUE);
952-
ev_document_doc_mutex_unlock ();
953-
ev_job_succeeded (job);
954-
}
955-
g_object_unref (rc);
956-
957-
return FALSE;
838+
ev_document_doc_mutex_lock ();
839+
job_thumb->thumbnail = ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (job->document),
840+
rc, TRUE);
841+
ev_document_doc_mutex_unlock ();
842+
ev_job_succeeded (job);
843+
g_object_unref (rc);
844+
845+
return FALSE;
958846
}
959847

960848
static void

shell/ev-sidebar-thumbnails.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1222,7 +1222,7 @@ static gboolean
12221222
ev_sidebar_thumbnails_support_document (EvSidebarPage *sidebar_page,
12231223
EvDocument *document)
12241224
{
1225-
return (EV_IS_DOCUMENT_THUMBNAILS (document));
1225+
return (EV_IS_DOCUMENT_THUMBNAILS (document) && !document->iswebdocument);
12261226
}
12271227

12281228
static const gchar*

shell/ev-window.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,6 +1390,10 @@ ev_window_refresh_window_thumbnail (EvWindow *ev_window)
13901390
gint rotation;
13911391
EvDocument *document = ev_window->priv->document;
13921392

1393+
if (document->iswebdocument) {
1394+
return;
1395+
}
1396+
13931397
if (!document || ev_document_get_n_pages (document) <= 0 ||
13941398
ev_document_get_n_pages (document) <= 0 ||
13951399
!ev_document_check_dimensions (document)) {

0 commit comments

Comments
 (0)