tAdd closeview() for JavaScript window closing - surf - customized build of surf, the suckless webkit browser
 (HTM) git clone git://src.adamsgaard.dk/surf
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 2e1fb873613b3917b97c954f0c085ea05016bdce
 (DIR) parent 04d46d1791f1ff3b82a665fbc5b574f4e2a70c97
 (HTM) Author: Quentin Rameau <quinq@fifth.space>
       Date:   Thu, 19 Nov 2015 14:25:29 +0100
       
       Add closeview() for JavaScript window closing
       
       Simply call gtk_widget_destroy() on the window. Then GtkWindow closing
       process will take care of the rest.
       
       Diffstat:
         M surf.c                              |      18 +++++++++++++-----
       
       1 file changed, 13 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/surf.c b/surf.c
       t@@ -120,6 +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 void closeview(WebKitWebView *v, Client *c);
        static void destroyclient(Client *c);
        static void destroywin(GtkWidget* w, Client *c);
        static void die(const char *errstr, ...);
       t@@ -551,10 +552,9 @@ 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)
                        ;
       t@@ -563,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
       t@@ -998,6 +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), "close",
       +                        G_CALLBACK(closeview), c);
        
                return v;
        }