Fix target uri handling when leaving window
authorQuentin Rameau <quinq@fifth.space>
Sun, 22 Nov 2015 15:45:22 +0000 (16:45 +0100)
committerQuentin Rameau <quinq@fifth.space>
Sun, 22 Nov 2015 15:45:22 +0000 (16:45 +0100)
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.

surf.c

diff --git a/surf.c b/surf.c
index 30464d5..05c22ec 100644 (file)
--- 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);
 }