Add closeview() for JavaScript window closing
authorQuentin Rameau <quinq@fifth.space>
Thu, 19 Nov 2015 13:25:29 +0000 (14:25 +0100)
committerQuentin Rameau <quinq@fifth.space>
Thu, 19 Nov 2015 23:34:21 +0000 (00:34 +0100)
Simply call gtk_widget_destroy() on the window. Then GtkWindow closing
process will take care of the rest.

surf.c

diff --git a/surf.c b/surf.c
index 7f859f9..6bf7989 100644 (file)
--- a/surf.c
+++ b/surf.c
@@ -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, ...);
@@ -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)
                ;
@@ -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
@@ -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;
 }