summaryrefslogtreecommitdiff
path: root/surf.c
diff options
context:
space:
mode:
authorQuentin Rameau <quinq@fifth.space>2015-11-19 14:25:29 +0100
committerQuentin Rameau <quinq@fifth.space>2015-11-20 00:34:21 +0100
commit2e1fb873613b3917b97c954f0c085ea05016bdce (patch)
tree665bfb5fa5b3eed953178ee53b38e34a577b1d7b /surf.c
parent04d46d1791f1ff3b82a665fbc5b574f4e2a70c97 (diff)
downloadsurf-2e1fb873613b3917b97c954f0c085ea05016bdce.tar.gz
surf-2e1fb873613b3917b97c954f0c085ea05016bdce.tar.bz2
surf-2e1fb873613b3917b97c954f0c085ea05016bdce.zip
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 (limited to 'surf.c')
-rw-r--r--surf.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/surf.c b/surf.c
index 7f859f9..6bf7989 100644
--- 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;
}