X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=surf.c;h=05c22ecdbe996076b46adbacd8ee1710b96f031a;hb=971856a579889de5ee6d427c3f7374969b872cbc;hp=1f3b7db857ca1e7c4e1bcaebfe77d4485caf5b36;hpb=b70a966aa6b5c9669029ad0464d467a412f6e266;p=surf.git diff --git a/surf.c b/surf.c index 1f3b7db..05c22ec 100644 --- a/surf.c +++ b/surf.c @@ -70,7 +70,7 @@ typedef struct Client { GTlsCertificateFlags tlsflags; Window xid; int progress, fullscreen; - const char *title, *targeturi; + const char *title, *overtitle, *targeturi; const char *needle; struct Client *next; } Client; @@ -433,7 +433,7 @@ void updatetitle(Client *c) { char *title; - const char *name = c->targeturi ? c->targeturi : + const char *name = c->overtitle ? c->overtitle : c->title ? c->title : ""; if (showindicators) { @@ -879,22 +879,25 @@ gboolean winevent(GtkWidget *w, GdkEvent *e, Client *c) { switch (e->type) { + case GDK_ENTER_NOTIFY: + c->overtitle = c->targeturi; + updatetitle(c); + break; case GDK_LEAVE_NOTIFY: - c->targeturi = NULL; + c->overtitle = NULL; updatetitle(c); break; - case GDK_WINDOW_STATE: /* fallthrough */ + case GDK_WINDOW_STATE: if (e->window_state.changed_mask == - GDK_WINDOW_STATE_FULLSCREEN) { + GDK_WINDOW_STATE_FULLSCREEN) c->fullscreen = e->window_state.new_window_state & GDK_WINDOW_STATE_FULLSCREEN; - break; - } + break; default: - return FALSE; + break; } - return TRUE; + return FALSE; } void @@ -965,6 +968,8 @@ createwindow(Client *c) g_signal_connect(G_OBJECT(w), "destroy", G_CALLBACK(destroywin), c); + g_signal_connect(G_OBJECT(w), "enter-notify-event", + G_CALLBACK(winevent), c); g_signal_connect(G_OBJECT(w), "leave-notify-event", G_CALLBACK(winevent), c); g_signal_connect(G_OBJECT(w), "window-state-event", @@ -1037,6 +1042,8 @@ mousetargetchanged(WebKitWebView *v, WebKitHitTestResult *h, guint modifiers, c->targeturi = webkit_hit_test_result_get_media_uri(h); else c->targeturi = NULL; + + c->overtitle = c->targeturi; updatetitle(c); } @@ -1143,10 +1150,10 @@ decideresource(WebKitPolicyDecision *d, Client *c) webkit_response_policy_decision_get_response(r); const gchar *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_suffix(uri, "/favicon.ico")) { + webkit_policy_decision_ignore(d); + return; + } if (!g_str_has_prefix(uri, "http://") && !g_str_has_prefix(uri, "https://") @@ -1164,6 +1171,7 @@ decideresource(WebKitPolicyDecision *d, Client *c) if (isascii) { handleplumb(c, uri); webkit_policy_decision_ignore(d); + return; } } @@ -1367,7 +1375,12 @@ void togglestyle(Client *c, const Arg *a) { enablestyle = !enablestyle; - setstyle(c, enablestyle ? getstyle(geturi(c)) : ""); + + if (enablestyle) + setstyle(c, getstyle(geturi(c))); + else + webkit_user_content_manager_remove_all_style_sheets( + webkit_web_view_get_user_content_manager(c->view)); updatetitle(c); }