diff options
author | Quentin Rameau <quinq@fifth.space> | 2015-11-22 16:45:22 +0100 |
---|---|---|
committer | Quentin Rameau <quinq@fifth.space> | 2015-11-22 16:45:22 +0100 |
commit | 971856a579889de5ee6d427c3f7374969b872cbc (patch) | |
tree | 1527ca3c2af81261f42ff9edb7fc32e010f3c8e5 /surf.c | |
parent | d0020bad4fc40f3a84e828936c2588232bb687bf (diff) | |
download | surf-971856a579889de5ee6d427c3f7374969b872cbc.tar.gz surf-971856a579889de5ee6d427c3f7374969b872cbc.tar.bz2 surf-971856a579889de5ee6d427c3f7374969b872cbc.zip |
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.
Diffstat (limited to 'surf.c')
-rw-r--r-- | surf.c | 25 |
1 files changed, 16 insertions, 9 deletions
@@ -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); } |