use status bar widget
[prss.git] / src / webbrowser.c
index 13de067..4f77fed 100644 (file)
 #include "webbrowser.h"
 
 static WebKitWebView *view;
 #include "webbrowser.h"
 
 static WebKitWebView *view;
+static GtkStatusbar *w_status;
+
+static gboolean new_window_requested_cbk(WebKitWebView *view,
+                                        WebKitWebFrame *frame,
+                                        WebKitNetworkRequest *rq,
+                                        WebKitWebNavigationAction *action,
+                                        WebKitWebPolicyDecision *decision)
+{
+       webkit_web_view_load_uri(view, webkit_network_request_get_uri(rq));
+
+       webkit_web_policy_decision_ignore(decision);
+
+       return TRUE;
+}
+
+static void hovering_over_link_cbk(WebKitWebView *web_view,
+                                  gchar *title,
+                                  gchar *uri,
+                                  gpointer user_data)
+{
+       guint id;
+
+       id = gtk_statusbar_get_context_id(w_status, "info");
+
+       if (uri)
+               gtk_statusbar_push(w_status, id, uri);
+       else
+               gtk_statusbar_pop(w_status, id);
+}
 
 GtkWidget *web_get_widget()
 {
 
 GtkWidget *web_get_widget()
 {
-       if (!view)
+       if (!view) {
                view = WEBKIT_WEB_VIEW(webkit_web_view_new());
                view = WEBKIT_WEB_VIEW(webkit_web_view_new());
+               g_signal_connect(view,
+                                "new-window-policy-decision-requested",
+                                G_CALLBACK(new_window_requested_cbk),
+                                view);
+               g_signal_connect(view,
+                                "hovering-over-link",
+                                G_CALLBACK(hovering_over_link_cbk),
+                                NULL);
+       }
 
        return GTK_WIDGET(view);
 }
 
        return GTK_WIDGET(view);
 }
@@ -35,3 +73,8 @@ void web_load(const char *str)
 {
        webkit_web_view_load_string(view, str, NULL, "UTF-8", "file://");
 }
 {
        webkit_web_view_load_string(view, str, NULL, "UTF-8", "file://");
 }
+
+void webbrowser_init(GtkStatusbar *status)
+{
+       w_status = status;
+}