diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2012-09-24 13:09:44 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2012-09-24 13:09:44 +0200 |
commit | dc6262b587c71c14e30d93e57ed812e36a79a33e (patch) | |
tree | 03ff986e7aa38bba0c0ef374f44fda52aff93f01 /Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp | |
parent | 02e1fbbefd49229b102ef107bd70ce974a2d85fb (diff) | |
download | qtwebkit-dc6262b587c71c14e30d93e57ed812e36a79a33e.tar.gz |
Imported WebKit commit 6339232fec7f5d9984a33388aecfd2cbc7832053 (http://svn.webkit.org/repository/webkit/trunk@129343)
New snapshot with build fixes for latest qtbase
Diffstat (limited to 'Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp | 108 |
1 files changed, 85 insertions, 23 deletions
diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp index 1e6aa7fac..45c3821b0 100644 --- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp @@ -103,7 +103,8 @@ enum { PROP_TITLE, PROP_ESTIMATED_LOAD_PROGRESS, PROP_URI, - PROP_ZOOM_LEVEL + PROP_ZOOM_LEVEL, + PROP_IS_LOADING }; typedef HashMap<uint64_t, GRefPtr<WebKitWebResource> > LoadingResourcesMap; @@ -115,6 +116,7 @@ struct _WebKitWebViewPrivate { CString customTextEncoding; double estimatedLoadProgress; CString activeURI; + bool isLoading; bool waitingForMainResource; gulong mainResourceResponseHandlerID; @@ -386,6 +388,9 @@ static void webkitWebViewGetProperty(GObject* object, guint propId, GValue* valu case PROP_ZOOM_LEVEL: g_value_set_double(value, webkit_web_view_get_zoom_level(webView)); break; + case PROP_IS_LOADING: + g_value_set_boolean(value, webkit_web_view_is_loading(webView)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec); } @@ -506,6 +511,38 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass) WEBKIT_PARAM_READABLE)); /** + * WebKitWebView:zoom-level: + * + * The zoom level of the #WebKitWebView content. + * See webkit_web_view_set_zoom_level() for more details. + */ + g_object_class_install_property(gObjectClass, + PROP_ZOOM_LEVEL, + g_param_spec_double("zoom-level", + "Zoom level", + _("The zoom level of the view content"), + 0, G_MAXDOUBLE, 1, + WEBKIT_PARAM_READWRITE)); + + /** + * WebKitWebView:is-loading: + * + * Whether the #WebKitWebView is currently loading a page. This property becomes + * %TRUE as soon as a new load operation is requested and before the + * #WebKitWebView::load-changed signal is emitted with %WEBKIT_LOAD_STARTED and + * at that point the active URI is the requested one. + * When the load operation finishes the property is set to %FALSE before + * #WebKitWebView::load-changed is emitted with %WEBKIT_LOAD_FINISHED. + */ + g_object_class_install_property(gObjectClass, + PROP_IS_LOADING, + g_param_spec_boolean("is-loading", + "Is Loading", + _("Whether the view is loading a page"), + FALSE, + WEBKIT_PARAM_READABLE)); + + /** * WebKitWebView::load-changed: * @web_view: the #WebKitWebView on which the signal is emitted * @load_event: the #WebKitLoadEvent @@ -599,20 +636,6 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass) G_TYPE_POINTER); /** - * WebKitWebView:zoom-level: - * - * The zoom level of the #WebKitWebView content. - * See webkit_web_view_set_zoom_level() for more details. - */ - g_object_class_install_property(gObjectClass, - PROP_ZOOM_LEVEL, - g_param_spec_double("zoom-level", - "Zoom level", - "The zoom level of the view content", - 0, G_MAXDOUBLE, 1, - WEBKIT_PARAM_READWRITE)); - - /** * WebKitWebView::create: * @web_view: the #WebKitWebView on which the signal is emitted * @@ -1106,6 +1129,21 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass) WEBKIT_TYPE_FORM_SUBMISSION_REQUEST); } +static void webkitWebViewSetIsLoading(WebKitWebView* webView, bool isLoading) +{ + if (webView->priv->isLoading == isLoading) + return; + + webView->priv->isLoading = isLoading; + g_object_freeze_notify(G_OBJECT(webView)); + g_object_notify(G_OBJECT(webView), "is-loading"); + + // Update the URI if a new load has started. + if (webView->priv->isLoading) + webkitWebViewUpdateURI(webView); + g_object_thaw_notify(G_OBJECT(webView)); +} + static void setCertificateToMainResource(WebKitWebView* webView) { WebKitWebViewPrivate* priv = webView->priv; @@ -1118,6 +1156,7 @@ static void setCertificateToMainResource(WebKitWebView* webView) static void webkitWebViewEmitLoadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent) { if (loadEvent == WEBKIT_LOAD_FINISHED) { + webkitWebViewSetIsLoading(webView, false); webView->priv->waitingForMainResource = false; webkitWebViewDisconnectMainResourceResponseChangedSignalHandler(webView); } else @@ -1167,6 +1206,7 @@ void webkitWebViewLoadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent) void webkitWebViewLoadFailed(WebKitWebView* webView, WebKitLoadEvent loadEvent, const char* failingURI, GError *error) { + webkitWebViewSetIsLoading(webView, false); gboolean returnValue; g_signal_emit(webView, signals[LOAD_FAILED], 0, loadEvent, failingURI, error, &returnValue); g_signal_emit(webView, signals[LOAD_CHANGED], 0, WEBKIT_LOAD_FINISHED); @@ -1521,7 +1561,7 @@ void webkit_web_view_load_uri(WebKitWebView* webView, const gchar* uri) WKRetainPtr<WKURLRef> url(AdoptWK, WKURLCreateWithUTF8CString(uri)); WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)); WKPageLoadURL(toAPI(page), url.get()); - webkitWebViewUpdateURI(webView); + webkitWebViewSetIsLoading(webView, true); } /** @@ -1549,6 +1589,7 @@ void webkit_web_view_load_html(WebKitWebView* webView, const gchar* content, con WKRetainPtr<WKStringRef> contentRef(AdoptWK, WKStringCreateWithUTF8CString(content)); WKRetainPtr<WKURLRef> baseURIRef = baseURI ? adoptWK(WKURLCreateWithUTF8CString(baseURI)) : 0; WKPageLoadHTMLString(toAPI(page), contentRef.get(), baseURIRef.get()); + webkitWebViewSetIsLoading(webView, true); } /** @@ -1575,7 +1616,7 @@ void webkit_web_view_load_alternate_html(WebKitWebView* webView, const gchar* co WKRetainPtr<WKURLRef> baseURL = baseURI ? adoptWK(WKURLCreateWithUTF8CString(baseURI)) : 0; WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)); WKPageLoadAlternateHTMLString(toAPI(page), htmlString.get(), baseURL.get(), contentURL.get()); - webkitWebViewUpdateURI(webView); + webkitWebViewSetIsLoading(webView, true); } /** @@ -1595,6 +1636,7 @@ void webkit_web_view_load_plain_text(WebKitWebView* webView, const gchar* plainT WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)); WKRetainPtr<WKStringRef> plainTextRef(AdoptWK, WKStringCreateWithUTF8CString(plainText)); WKPageLoadPlainTextString(toAPI(page), plainTextRef.get()); + webkitWebViewSetIsLoading(webView, true); } /** @@ -1615,7 +1657,7 @@ void webkit_web_view_load_request(WebKitWebView* webView, WebKitURIRequest* requ WKRetainPtr<WKURLRequestRef> wkRequest(AdoptWK, WKURLRequestCreateWithWKURL(wkURL.get())); WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)); WKPageLoadURLRequest(toAPI(page), wkRequest.get()); - webkitWebViewUpdateURI(webView); + webkitWebViewSetIsLoading(webView, true); } /** @@ -1647,7 +1689,7 @@ void webkit_web_view_reload(WebKitWebView* webView) g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView)); WKPageReload(toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)))); - webkitWebViewUpdateURI(webView); + webkitWebViewSetIsLoading(webView, true); } /** @@ -1662,7 +1704,7 @@ void webkit_web_view_reload_bypass_cache(WebKitWebView* webView) g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView)); WKPageReloadFromOrigin(toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)))); - webkitWebViewUpdateURI(webView); + webkitWebViewSetIsLoading(webView, true); } /** @@ -1683,6 +1725,26 @@ void webkit_web_view_stop_loading(WebKitWebView* webView) } /** + * webkit_web_view_is_loading: + * @web_view: a #WebKitWebView + * + * Gets the value of the #WebKitWebView:is-loading property. + * You can monitor when a #WebKitWebView is loading a page by connecting to + * notify::is-loading signal of @web_view. This is useful when you are + * interesting in knowing when the view is loding something but not in the + * details about the status of the load operation, for example to start a spinner + * when the view is loading a page and stop it when it finishes. + * + * Returns: %TRUE if @web_view is loading a page or %FALSE otherwise. + */ +gboolean webkit_web_view_is_loading(WebKitWebView* webView) +{ + g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), FALSE); + + return webView->priv->isLoading; +} + +/** * webkit_web_view_go_back: * @web_view: a #WebKitWebView * @@ -1695,7 +1757,7 @@ void webkit_web_view_go_back(WebKitWebView* webView) g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView)); WKPageGoBack(toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)))); - webkitWebViewUpdateURI(webView); + webkitWebViewSetIsLoading(webView, true); } /** @@ -1726,7 +1788,7 @@ void webkit_web_view_go_forward(WebKitWebView* webView) g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView)); WKPageGoForward(toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)))); - webkitWebViewUpdateURI(webView); + webkitWebViewSetIsLoading(webView, true); } /** @@ -1900,7 +1962,7 @@ void webkit_web_view_go_to_back_forward_list_item(WebKitWebView* webView, WebKit WKPageGoToBackForwardListItem(toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView))), webkitBackForwardListItemGetWKItem(listItem)); - webkitWebViewUpdateURI(webView); + webkitWebViewSetIsLoading(webView, true); } /** |