From: Quentin Rameau Date: Sun, 22 Nov 2015 15:45:22 +0000 (+0100) Subject: Fix target uri handling when leaving window X-Git-Url: https://git.danieliu.xyz/?p=surf.git;a=commitdiff_plain;h=971856a579889de5ee6d427c3f7374969b872cbc Fix target uri handling when leaving window Introduce a new string pointer overtitle in Client to be able to keep the targeturi intact while modifying the former for overriding or not the window title. Connect to GDK_ENTER_NOTIFY to restore overtitle when refocusing on window. --- diff --git a/surf.c b/surf.c index 30464d5..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); }