diff options
Diffstat (limited to 'libyelp/yelp-view.c')
-rw-r--r-- | libyelp/yelp-view.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/libyelp/yelp-view.c b/libyelp/yelp-view.c index d4810fa5..32ae131e 100644 --- a/libyelp/yelp-view.c +++ b/libyelp/yelp-view.c @@ -176,6 +176,7 @@ struct _RequestAsyncData { WebKitURISchemeRequest *request; GFile *resource_file; gchar *page_id; + gboolean finished; }; static RequestAsyncData * @@ -186,6 +187,7 @@ request_async_data_new (WebKitURISchemeRequest *request, gchar *page_id) data = g_slice_new0 (RequestAsyncData); data->request = g_object_ref (request); data->page_id = g_strdup (page_id); + data->finished = FALSE; return data; } @@ -771,7 +773,19 @@ document_callback (YelpDocument *document, if (signal == YELP_DOCUMENT_SIGNAL_INFO) return; + if (data->finished) { + /* If this is set, this callback is because YelpDocument refreshed + the page, such as when a file changes. WebKit doesn't like us + to reuse the request object, so we do a fresh load. + */ + YelpView *view = YELP_VIEW (webkit_uri_scheme_request_get_web_view (data->request)); + YelpViewPrivate *priv = yelp_view_get_instance_private (view); + yelp_view_load_uri (view, priv->uri); + return; + } + if (signal == YELP_DOCUMENT_SIGNAL_ERROR) { + data->finished = TRUE; webkit_uri_scheme_request_finish_error (data->request, error); return; } @@ -786,6 +800,7 @@ document_callback (YelpDocument *document, stream = g_memory_input_stream_new_from_data (g_strdup (contents), content_length, g_free); yelp_document_finish_read (document, contents); + data->finished = TRUE; webkit_uri_scheme_request_finish (data->request, stream, content_length, |