+void
+print(Client *c, const Arg *arg) {
+ webkit_web_frame_print(webkit_web_view_get_main_frame(c->view));
+}
+
+void
+progresschange(WebKitWebView *v, gint p, Client *c) {
+ c->progress = p;
+ update(c);
+}
+
+void
+reload(Client *c, const Arg *arg) {
+ gboolean nocache = *(gboolean *)arg;
+ if(nocache)
+ webkit_web_view_reload_bypass_cache(c->view);
+ else
+ webkit_web_view_reload(c->view);
+}
+
+void
+scroll(Client *c, const Arg *arg) {
+ gdouble v;
+ GtkAdjustment *a;
+
+ a = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(c->scroll));
+ v = gtk_adjustment_get_value(a);
+ v += gtk_adjustment_get_step_increment(a) * arg->i;
+ v = MAX(v, 0.0);
+ v = MIN(v, gtk_adjustment_get_upper(a) - gtk_adjustment_get_page_size(a));
+ gtk_adjustment_set_value(a, v);
+}
+
+void
+request(SoupSession *s, SoupMessage *m, gpointer p) {
+ SoupCookieJar *cookies;
+ SoupMessageHeaders *h;
+ char *cookiestr;
+ soup_message_add_header_handler(m, "got-headers", "Set-Cookie",
+ G_CALLBACK(setcookie), NULL);
+
+ h = m->request_headers;
+ cookies = soup_cookie_jar_text_new(cookiefile, TRUE);
+ cookiestr = soup_cookie_jar_get_cookies(cookies, soup_message_get_uri(m), FALSE);
+ if(cookiestr)
+ soup_message_headers_append(h, "Cookie", cookiestr);
+ g_object_unref(cookies);
+}
+
+void
+setcookie(SoupMessage *m, gpointer p) {
+ SoupCookieJar *cookies;
+ SoupCookie *c;
+ SoupDate *e;
+ GSList *l;
+
+ cookies = soup_cookie_jar_text_new(cookiefile, FALSE);
+ for (l = soup_cookies_from_response(m); l; l = l->next){
+ c = (SoupCookie *)l->data;
+ if(c && c->expires == NULL) {
+ e = soup_date_new_from_time_t(time(NULL) + sessiontime);
+ c = soup_cookie_copy(c);
+ soup_cookie_set_expires(c, e);
+ }
+ soup_cookie_jar_add_cookie(cookies, c);
+ }
+ g_slist_free(l);
+ g_object_unref(cookies);
+}
+void
+sigchld(int unused) {
+ if(signal(SIGCHLD, sigchld) == SIG_ERR)
+ die("Can't install SIGCHLD handler");
+ while(0 < waitpid(-1, NULL, WNOHANG));
+}
+
+void
+setup(void) {
+ SoupSession *s;
+
+ /* clean up any zombies immediately */
+ sigchld(0);
+ gtk_init(NULL, NULL);
+ if (!g_thread_supported())
+ g_thread_init(NULL);
+