summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garcia Campos <cgarcia@igalia.com>2015-04-09 14:28:53 +0200
committerCarlos Garcia Campos <carlosgc@gnome.org>2015-04-10 12:47:28 +0200
commit3234f9db7fe2f368f95d101cea2cd56c272da454 (patch)
tree1a59f27078e3eea425d0240758610b71ed3f5b16
parent0a83a6adc85c752d204e883a59d26a82d76312f1 (diff)
downloadyelp-3234f9db7fe2f368f95d101cea2cd56c272da454.tar.gz
yelp-view: Do not block/unlock policy decision callback
Use a boolean variable to decide whether we need to resolve the uri or not in policy decision callback.
-rw-r--r--libyelp/yelp-view.c34
1 files changed, 14 insertions, 20 deletions
diff --git a/libyelp/yelp-view.c b/libyelp/yelp-view.c
index e10d1d94..d9994f45 100644
--- a/libyelp/yelp-view.c
+++ b/libyelp/yelp-view.c
@@ -255,7 +255,7 @@ struct _YelpViewPrivate {
GSList *link_actions;
- gint navigation_requested;
+ gboolean resolve_uri_on_policy_decision;
};
#define TARGET_TYPE_URI_LIST "text/uri-list"
@@ -325,9 +325,9 @@ yelp_view_init (YelpView *view)
priv->prevstate = priv->state = YELP_VIEW_STATE_BLANK;
- priv->navigation_requested =
- g_signal_connect (view, "decide-policy",
- G_CALLBACK (view_policy_decision_requested), NULL);
+ priv->resolve_uri_on_policy_decision = TRUE;
+ g_signal_connect (view, "decide-policy",
+ G_CALLBACK (view_policy_decision_requested), NULL);
g_signal_connect (view, "load-changed",
G_CALLBACK (view_load_status_changed), NULL);
g_signal_connect (view, "load-failed",
@@ -1650,16 +1650,20 @@ view_policy_decision_requested (YelpView *view,
gpointer user_data)
{
YelpViewPrivate *priv = GET_PRIV (view);
- WebKitNavigationPolicyDecision *navigation_decision = WEBKIT_NAVIGATION_POLICY_DECISION (decision);
- WebKitURIRequest *request = webkit_navigation_policy_decision_get_request (navigation_decision);
- const gchar *requri = webkit_uri_request_get_uri (request);
+ WebKitURIRequest *request;
gchar *fixed_uri;
YelpUri *uri;
if (type != WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION)
return FALSE;
- fixed_uri = build_yelp_uri (requri);
+ if (!priv->resolve_uri_on_policy_decision) {
+ priv->resolve_uri_on_policy_decision = TRUE;
+ return FALSE;
+ }
+
+ request = webkit_navigation_policy_decision_get_request (WEBKIT_NAVIGATION_POLICY_DECISION (decision));
+ fixed_uri = build_yelp_uri (webkit_uri_request_get_uri (request));
webkit_policy_decision_ignore (decision);
@@ -1736,9 +1740,6 @@ view_load_status_changed (WebKitWebView *view,
break;
}
case WEBKIT_LOAD_FINISHED:
-
- g_signal_handler_unblock (view, priv->navigation_requested);
-
g_object_set (view, "state", YELP_VIEW_STATE_LOADED, NULL);
/* Setting adjustments only work after the page is loaded. These
@@ -1787,9 +1788,6 @@ view_load_failed (WebKitWebView *view,
GError *error,
gpointer user_data)
{
- YelpViewPrivate *priv = GET_PRIV (view);
-
- g_signal_handler_unblock (view, priv->navigation_requested);
view_show_error_page (YELP_VIEW (view), error);
}
@@ -1825,8 +1823,6 @@ view_history_action (GAction *action,
GList *newcur;
YelpViewPrivate *priv = GET_PRIV (view);
- g_signal_handler_unblock (view, priv->navigation_requested);
-
if (priv->back_cur == NULL)
return;
@@ -1858,8 +1854,6 @@ view_navigation_action (GAction *action,
gchar *page_id, *new_id, *xref;
YelpUri *new_uri;
- g_signal_handler_unblock (view, priv->navigation_requested);
-
page_id = yelp_uri_get_page_id (priv->uri);
if (g_str_equal (g_action_get_name (action), "yelp-view-go-previous"))
@@ -1980,7 +1974,7 @@ view_load_page (YelpView *view)
uri_str = build_network_uri (uri_str);
g_free (tmp_uri);
- g_signal_handler_block (view, priv->navigation_requested);
+ priv->resolve_uri_on_policy_decision = FALSE;
webkit_web_view_load_uri (WEBKIT_WEB_VIEW (view), uri_str);
g_free (uri_str);
@@ -2132,7 +2126,7 @@ view_show_error_page (YelpView *view,
g_signal_emit (view, signals[LOADED], 0);
- g_signal_handler_block (view, priv->navigation_requested);
+ priv->resolve_uri_on_policy_decision = FALSE;
webkit_web_view_load_html (WEBKIT_WEB_VIEW (view),
page,
"file:///error/");