]> git.0d.be Git - empathy.git/commitdiff
Fix assumption about navigation-request not being called for HTML string load
authorGustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
Thu, 27 Aug 2009 18:39:42 +0000 (15:39 -0300)
committerGustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
Thu, 27 Aug 2009 18:39:42 +0000 (15:39 -0300)
This bug was exposed by the WebKitGTK+ bug that prevented
navigation-request from being emitted in various situations being
fixed.

libempathy-gtk/empathy-theme-adium.c

index 66d914607ac1a4aa322574e0d04b87956ec9473a..34c06adfd5788801d40fbf76e6ae48904f62969b 100644 (file)
@@ -24,7 +24,7 @@
 #include <string.h>
 #include <glib/gi18n.h>
 
-#include <webkit/webkitnetworkrequest.h>
+#include <webkit/webkit.h>
 #include <telepathy-glib/dbus.h>
 #include <telepathy-glib/util.h>
 
@@ -128,18 +128,28 @@ theme_adium_notify_enable_webkit_developer_tools_cb (EmpathyConf *conf,
        theme_adium_update_enable_webkit_developer_tools (theme);
 }
 
-static WebKitNavigationResponse
-theme_adium_navigation_requested_cb (WebKitWebView        *view,
-                                    WebKitWebFrame       *frame,
-                                    WebKitNetworkRequest *request,
-                                    gpointer              user_data)
+static gboolean
+theme_adium_navigation_policy_decision_requested_cb (WebKitWebView             *view,
+                                                    WebKitWebFrame            *web_frame,
+                                                    WebKitNetworkRequest      *request,
+                                                    WebKitWebNavigationAction *action,
+                                                    WebKitWebPolicyDecision   *decision,
+                                                    gpointer                   data)
 {
        const gchar *uri;
 
+       /* Only call url_show on clicks */
+       if (webkit_web_navigation_action_get_reason (action) !=
+           WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED) {
+               webkit_web_policy_decision_use (decision);
+               return TRUE;
+       }
+
        uri = webkit_network_request_get_uri (request);
        empathy_url_show (GTK_WIDGET (view), uri);
 
-       return WEBKIT_NAVIGATION_RESPONSE_IGNORE;
+       webkit_web_policy_decision_ignore (decision);
+       return TRUE;
 }
 
 static void
@@ -1072,8 +1082,8 @@ empathy_theme_adium_init (EmpathyThemeAdium *theme)
        g_signal_connect (theme, "load-finished",
                          G_CALLBACK (theme_adium_load_finished_cb),
                          NULL);
-       g_signal_connect (theme, "navigation-requested",
-                         G_CALLBACK (theme_adium_navigation_requested_cb),
+       g_signal_connect (theme, "navigation-policy-decision-requested",
+                         G_CALLBACK (theme_adium_navigation_policy_decision_requested_cb),
                          NULL);
        g_signal_connect (theme, "populate-popup",
                          G_CALLBACK (theme_adium_populate_popup_cb),