- if (g_str_has_suffix(uri, "/favicon.ico"))
- webkit_uri_request_set_uri(
- webkit_response_policy_decision_get_request(r),
- "about:blank");
-
- if (!g_str_has_prefix(uri, "http://")
- && !g_str_has_prefix(uri, "https://")
- && !g_str_has_prefix(uri, "about:")
- && !g_str_has_prefix(uri, "file://")
- && !g_str_has_prefix(uri, "data:")
- && !g_str_has_prefix(uri, "blob:")
- && strlen(uri) > 0) {
- for (i = 0; i < strlen(uri); i++) {
- if (!g_ascii_isprint(uri[i])) {
- isascii = 0;
- break;
- }
- }
- if (isascii) {
- handleplumb(c, uri);
- webkit_policy_decision_ignore(d);
- }
- }
-
- if (webkit_response_policy_decision_is_mime_type_supported(r)) {
- webkit_policy_decision_use(d);
- } else {
- webkit_policy_decision_ignore(d);
- download(c, res);
- }
-}
-
-void
-destroyclient(Client *c)
-{
- Client *p;
-
- webkit_web_view_stop_loading(c->view);
- /* Not needed, has already been called
- gtk_widget_destroy(c->win);
- */
-
- for (p = clients; p && p->next != c; p = p->next)
- ;
- if (p)
- p->next = c->next;
- else
- clients = c->next;
- free(c);
-}
-
-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
-die(const char *errstr, ...)
-{
- va_list ap;
-
- va_start(ap, errstr);
- vfprintf(stderr, errstr, ap);
- va_end(ap);
- exit(EXIT_FAILURE);
-}
-
-void
-find(Client *c, const Arg *a)
-{
- const char *s, *f;
-
- if (a && a->i) {
- if (a->i > 0)
- webkit_find_controller_search_next(c->finder);
- else
- webkit_find_controller_search_previous(c->finder);
- } else {
- s = getatom(c, AtomFind);
- f = webkit_find_controller_get_search_text(c->finder);
-
- if (g_strcmp0(f, s) == 0) /* reset search */
- webkit_find_controller_search(c->finder, "", findopts, G_MAXUINT);
-
- webkit_find_controller_search(c->finder, s, findopts, G_MAXUINT);
-
- if (strcmp(s, "") == 0)
- webkit_find_controller_search_finish(c->finder);
- }
-}
-
-void
-togglefullscreen(Client *c, const Arg *a)
-{
- /* toggling value is handled in winevent() */
- if (c->fullscreen)
- gtk_window_unfullscreen(GTK_WINDOW(c->win));
- else
- gtk_window_fullscreen(GTK_WINDOW(c->win));
-}
-
-gboolean
-permissionrequested(WebKitWebView *v, WebKitPermissionRequest *r, Client *c)
-{
- if (WEBKIT_IS_GEOLOCATION_PERMISSION_REQUEST(r)) {
- if (allowgeolocation)
- webkit_permission_request_allow(r);
- else
- webkit_permission_request_deny(r);
- return TRUE;
- }
-
- return FALSE;
-}
-
-const char *
-getatom(Client *c, int a)
-{
- static char buf[BUFSIZ];
- Atom adummy;
- int idummy;
- unsigned long ldummy;
- unsigned char *p = NULL;
-
- XGetWindowProperty(dpy, c->xid,
- atoms[a], 0L, BUFSIZ, False, XA_STRING,
- &adummy, &idummy, &ldummy, &ldummy, &p);
- if (p)
- strncpy(buf, (char *)p, LENGTH(buf)-1);
- else
- buf[0] = '\0';
- XFree(p);
-
- return buf;
-}
-
-char *
-geturi(Client *c)
-{
- char *uri;
-
- if (!(uri = (char *)webkit_web_view_get_uri(c->view)))
- uri = "about:blank";
- return uri;
-}
-
-const gchar *
-getstyle(const char *uri)
-{
- int i;
-
- if (stylefile != NULL)
- return stylefile;
-
- for (i = 0; i < LENGTH(styles); i++) {
- if (styles[i].regex && !regexec(&(styles[i].re), uri, 0,
- NULL, 0))
- return styles[i].style;
- }