+
+ c->title = NULL;
+ c->progress = 100;
+
+ c->next = clients;
+ clients = c;
+
+ c->view = newview(c, rc ? rc->view : NULL);
+
+ return c;
+}
+
+WebKitWebView *
+newview(Client *c, WebKitWebView *rv)
+{
+ WebKitWebView *v;
+ WebKitSettings *settings;
+ char *ua;
+
+ /* Webview */
+ if (rv) {
+ v = WEBKIT_WEB_VIEW(
+ webkit_web_view_new_with_related_view(rv));
+ } else {
+ v = WEBKIT_WEB_VIEW(webkit_web_view_new());
+
+ settings = webkit_web_view_get_settings(v);
+ if (!(ua = getenv("SURF_USERAGENT")))
+ ua = useragent;
+ g_object_set(G_OBJECT(settings), "user-agent", ua, NULL);
+ g_object_set(G_OBJECT(settings),
+ "auto-load-images", loadimages, NULL);
+ g_object_set(G_OBJECT(settings),
+ "enable-plugins", enableplugins, NULL);
+ g_object_set(G_OBJECT(settings),
+ "enable-scripts", enablescripts, NULL);
+ g_object_set(G_OBJECT(settings),
+ "enable-spatial-navigation", enablespatialbrowsing, NULL);
+ g_object_set(G_OBJECT(settings),
+ "enable-developer-extras", enableinspector, NULL);
+ g_object_set(G_OBJECT(settings),
+ "enable-default-context-menu", kioskmode ^ 1, NULL);
+ g_object_set(G_OBJECT(settings),
+ "default-font-size", defaultfontsize, NULL);
+ g_object_set(G_OBJECT(settings),
+ "resizable-text-areas", 1, NULL);
+ if (enablestyle)
+ setstyle(c, getstyle("about:blank"));
+
+ if (enableinspector) {
+ c->inspector = webkit_web_view_get_inspector(v);
+ g_signal_connect(G_OBJECT(c->inspector), "inspect-web-view",
+ G_CALLBACK(inspector_new), c);
+ g_signal_connect(G_OBJECT(c->inspector), "show-window",
+ G_CALLBACK(inspector_show), c);
+ g_signal_connect(G_OBJECT(c->inspector), "close-window",
+ G_CALLBACK(inspector_close), c);
+ g_signal_connect(G_OBJECT(c->inspector), "finished",
+ G_CALLBACK(inspector_finished), c);
+ c->isinspecting = false;
+ }
+ }
+
+ g_signal_connect(G_OBJECT(v),
+ "notify::title",
+ G_CALLBACK(titlechange), c);
+ g_signal_connect(G_OBJECT(v),
+ "hovering-over-link",
+ G_CALLBACK(linkhover), c);
+ g_signal_connect(G_OBJECT(v),
+ "geolocation-policy-decision-requested",
+ G_CALLBACK(geopolicyrequested), c);
+ g_signal_connect(G_OBJECT(v),
+ "create-web-view",
+ G_CALLBACK(createwindow), c);
+ g_signal_connect(G_OBJECT(v), "ready-to-show",
+ G_CALLBACK(showview), c);
+ g_signal_connect(G_OBJECT(v),
+ "new-window-policy-decision-requested",
+ G_CALLBACK(decidewindow), c);
+ g_signal_connect(G_OBJECT(v),
+ "mime-type-policy-decision-requested",
+ G_CALLBACK(decidedownload), c);
+ g_signal_connect(G_OBJECT(v),
+ "window-object-cleared",
+ G_CALLBACK(windowobjectcleared), c);
+ g_signal_connect(G_OBJECT(v),
+ "notify::load-status",
+ G_CALLBACK(loadstatuschange), c);
+ g_signal_connect(G_OBJECT(v),
+ "notify::progress",
+ G_CALLBACK(progresschange), c);
+ g_signal_connect(G_OBJECT(v),
+ "download-requested",
+ G_CALLBACK(initdownload), c);
+ g_signal_connect(G_OBJECT(v),
+ "button-release-event",
+ G_CALLBACK(buttonrelease), c);
+ g_signal_connect(G_OBJECT(v),
+ "context-menu",
+ G_CALLBACK(contextmenu), c);
+ g_signal_connect(G_OBJECT(v),
+ "resource-request-starting",
+ G_CALLBACK(beforerequest), c);
+ g_signal_connect(G_OBJECT(v),
+ "should-show-delete-interface-for-element",
+ G_CALLBACK(deletion_interface), c);
+
+ return v;
+}
+
+void
+showview(WebKitWebView *v, Client *c)
+{
+ GdkGeometry hints = { 1, 1 };
+ GdkRGBA bgcolor = { 0 };
+ GdkWindow *gwin;
+