X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=surf.c;h=6bf7989349e74bea03f203fc67b36b9b4d28d69e;hb=2e1fb873613b3917b97c954f0c085ea05016bdce;hp=74851ee9d9691d6811a265d72d16e9061633c9ef;hpb=d542773e7527758060c188f734bd6b612bbaa529;p=surf.git diff --git a/surf.c b/surf.c index 74851ee..6bf7989 100644 --- a/surf.c +++ b/surf.c @@ -103,9 +103,6 @@ static int cookiepolicy; static char *stylefile = NULL; static void addaccelgroup(Client *c); -static void beforerequest(WebKitWebView *w, WebKitWebFrame *f, - WebKitWebResource *r, WebKitNetworkRequest *req, - WebKitNetworkResponse *resp, Client *c); static char *buildfile(const char *path); static char *buildpath(const char *path); static gboolean buttonreleased(GtkWidget *w, GdkEventKey *e, Client *c); @@ -123,8 +120,7 @@ static gboolean decidepolicy(WebKitWebView *v, WebKitPolicyDecision *d, static void decidenavigation(WebKitPolicyDecision *d, Client *c); static void decidenewwindow(WebKitPolicyDecision *d, Client *c); static void decideresource(WebKitPolicyDecision *d, Client *c); -static gboolean deletion_interface(WebKitWebView *view, - WebKitDOMHTMLElement *arg1, Client *c); +static void closeview(WebKitWebView *v, Client *c); static void destroyclient(Client *c); static void destroywin(GtkWidget* w, Client *c); static void die(const char *errstr, ...); @@ -140,7 +136,7 @@ static char *geturi(Client *c); static const gchar *getstyle(const char *uri); static void setstyle(Client *c, const char *style); -static void handleplumb(Client *c, WebKitWebView *w, const gchar *uri); +static void handleplumb(Client *c, const gchar *uri); static void downloadstarted(WebKitWebContext *wc, WebKitDownload *d, Client *c); @@ -213,35 +209,6 @@ addaccelgroup(Client *c) gtk_window_add_accel_group(GTK_WINDOW(c->win), group); } -void -beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r, - WebKitNetworkRequest *req, WebKitNetworkResponse *resp, - Client *c) -{ - const gchar *uri = webkit_network_request_get_uri(req); - int i, isascii = 1; - - if (g_str_has_suffix(uri, "/favicon.ico")) - webkit_network_request_set_uri(req, "about:blank"); - - if (!g_str_has_prefix(uri, "http://") - && !g_str_has_prefix(uri, "https://") - && !g_str_has_prefix(uri, "about:") - && !g_str_has_prefix(uri, "file://") - && !g_str_has_prefix(uri, "data:") - && !g_str_has_prefix(uri, "blob:") - && strlen(uri) > 0) { - for (i = 0; i < strlen(uri); i++) { - if (!g_ascii_isprint(uri[i])) { - isascii = 0; - break; - } - } - if (isascii) - handleplumb(c, w, uri); - } -} - char * buildfile(const char *path) { @@ -539,34 +506,55 @@ decidenewwindow(WebKitPolicyDecision *d, Client *c) void decideresource(WebKitPolicyDecision *d, Client *c) { + const gchar *uri; + int i, isascii = 1; WebKitResponsePolicyDecision *r = WEBKIT_RESPONSE_POLICY_DECISION(d); WebKitURIResponse *res; + res = webkit_response_policy_decision_get_response(r); + uri = webkit_uri_response_get_uri(res); + + if (g_str_has_suffix(uri, "/favicon.ico")) + webkit_uri_request_set_uri( + webkit_response_policy_decision_get_request(r), + "about:blank"); + + if (!g_str_has_prefix(uri, "http://") + && !g_str_has_prefix(uri, "https://") + && !g_str_has_prefix(uri, "about:") + && !g_str_has_prefix(uri, "file://") + && !g_str_has_prefix(uri, "data:") + && !g_str_has_prefix(uri, "blob:") + && strlen(uri) > 0) { + for (i = 0; i < strlen(uri); i++) { + if (!g_ascii_isprint(uri[i])) { + isascii = 0; + break; + } + } + if (isascii) { + handleplumb(c, uri); + webkit_policy_decision_ignore(d); + } + } + if (webkit_response_policy_decision_is_mime_type_supported(r)) { webkit_policy_decision_use(d); } else { -res = webkit_response_policy_decision_get_response(r); webkit_policy_decision_ignore(d); download(c, res); } } -gboolean -deletion_interface(WebKitWebView *view, WebKitDOMHTMLElement *arg1, Client *c) -{ - return FALSE; -} - void destroyclient(Client *c) { Client *p; webkit_web_view_stop_loading(c->view); - gtk_widget_destroy(GTK_WIDGET(c->view)); - gtk_widget_destroy(c->scroll); - gtk_widget_destroy(c->vbox); + /* Not needed, has already been called gtk_widget_destroy(c->win); + */ for (p = clients; p && p->next != c; p = p->next) ; @@ -575,14 +563,20 @@ destroyclient(Client *c) else clients = c->next; free(c); - if (clients == NULL) - gtk_main_quit(); +} + +void +closeview(WebKitWebView *v, Client *c) +{ + gtk_widget_destroy(c->win); } void destroywin(GtkWidget* w, Client *c) { destroyclient(c); + if (clients == NULL) + gtk_main_quit(); } void @@ -687,12 +681,11 @@ setstyle(Client *c, const char *style) } void -handleplumb(Client *c, WebKitWebView *w, const gchar *uri) +handleplumb(Client *c, const gchar *uri) { Arg arg; - webkit_web_view_stop_loading(w); - arg = (Arg)PLUMB((char *)uri); + arg = (Arg)PLUMB(uri); spawn(c, &arg); } @@ -1011,12 +1004,8 @@ newview(Client *c, WebKitWebView *rv) g_signal_connect(G_OBJECT(v), "button-release-event", G_CALLBACK(buttonreleased), c); - g_signal_connect(G_OBJECT(v), - "resource-request-starting", - G_CALLBACK(beforerequest), c); - g_signal_connect(G_OBJECT(v), - "should-show-delete-interface-for-element", - G_CALLBACK(deletion_interface), c); + g_signal_connect(G_OBJECT(v), "close", + G_CALLBACK(closeview), c); return v; }