iMajor styles update. - surf - Surf web browser. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 1Log /scm/surf//log.gph gopher.r-36.net 70 1Files /scm/surf//files.gph gopher.r-36.net 70 1Refs /scm/surf//refs.gph gopher.r-36.net 70 1README /scm/surf//file/README.gph gopher.r-36.net 70 1LICENSE /scm/surf//file/LICENSE.gph gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1commit c2da2bae5dbca73f26fe77bb8080e2a90d3cbb1d /scm/surf//commit/c2da2bae5dbca73f26fe77bb8080e2a90d3cbb1d.gph gopher.r-36.net 70 1parent c467e5a3b3f3e1d69b64d31a166aa9d69336ef53 /scm/surf//commit/c467e5a3b3f3e1d69b64d31a166aa9d69336ef53.gph gopher.r-36.net 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net gopher.r-36.net 70 iDate: Sat, 17 Jan 2015 07:19:48 +0100 Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iMajor styles update. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iIn config.h there is now some styles array to apply site-specific styles. Err gopher.r-36.net 70 iThis can be toggled using the -mM flags. If a stylefile is manually specified, Err gopher.r-36.net 70 ithen this will overwrite everything. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iDiffstat: Err gopher.r-36.net 70 i config.def.h | 9 ++++++++- Err gopher.r-36.net 70 i surf.1 | 9 ++++++++- Err gopher.r-36.net 70 i surf.c | 77 +++++++++++++++++++++++++++---- Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i3 files changed, 84 insertions(+), 11 deletions(-) Err gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1diff --git a/config.def.h b/config.def.h /scm/surf//file/config.def.h.gph gopher.r-36.net 70 i@@ -2,8 +2,8 @@ Err gopher.r-36.net 70 i static char *useragent = "Mozilla/5.0 (X11; U; Unix; en-US) " Err gopher.r-36.net 70 i "AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 " Err gopher.r-36.net 70 i "Safari/537.15 Surf/"VERSION; Err gopher.r-36.net 70 i-static char *stylefile = "~/.surf/style.css"; Err gopher.r-36.net 70 i static char *scriptfile = "~/.surf/script.js"; Err gopher.r-36.net 70 i+static char *styledir = "~/.surf/styles/"; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i static Bool kioskmode = FALSE; /* Ignore shortcuts */ Err gopher.r-36.net 70 i static Bool showindicators = TRUE; /* Show indicators in window title */ Err gopher.r-36.net 70 i@@ -27,6 +27,7 @@ static Bool enablespatialbrowsing = TRUE; Err gopher.r-36.net 70 i static Bool enableplugins = TRUE; Err gopher.r-36.net 70 i static Bool enablescripts = TRUE; Err gopher.r-36.net 70 i static Bool enableinspector = TRUE; Err gopher.r-36.net 70 i+static Bool enablestyles = TRUE; Err gopher.r-36.net 70 i static Bool loadimages = TRUE; Err gopher.r-36.net 70 i static Bool hidebackground = FALSE; Err gopher.r-36.net 70 i static Bool allowgeolocation = TRUE; Err gopher.r-36.net 70 i@@ -49,6 +50,12 @@ static Bool allowgeolocation = TRUE; Err gopher.r-36.net 70 i } \ Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+/* styles */ Err gopher.r-36.net 70 i+static SiteStyle styles[] = { Err gopher.r-36.net 70 i+ /* regexp file in $styledir */ Err gopher.r-36.net 70 i+ { ".*", "default.css" }, Err gopher.r-36.net 70 i+}; Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i #define MODKEY GDK_CONTROL_MASK Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i /* hotkeys */ Err gopher.r-36.net 70 1diff --git a/surf.1 b/surf.1 /scm/surf//file/surf.1.gph gopher.r-36.net 70 i@@ -3,7 +3,7 @@ Err gopher.r-36.net 70 i surf \- simple webkit-based browser Err gopher.r-36.net 70 i .SH SYNOPSIS Err gopher.r-36.net 70 i .B surf Err gopher.r-36.net 70 i-.RB [-bBfFgGiIkKnNpPsSvx] Err gopher.r-36.net 70 i+.RB [-bBfFgGiIkKmMnNpPsSvx] Err gopher.r-36.net 70 i .RB [-a\ cookiepolicies] Err gopher.r-36.net 70 i .RB [-c\ cookiefile] Err gopher.r-36.net 70 i .RB [-e\ xid] Err gopher.r-36.net 70 i@@ -68,6 +68,12 @@ Disable kiosk mode (disable key strokes and right click) Err gopher.r-36.net 70 i .B \-K Err gopher.r-36.net 70 i Enable kiosk mode (disable key strokes and right click) Err gopher.r-36.net 70 i .TP Err gopher.r-36.net 70 i+.B \-m Err gopher.r-36.net 70 i+Disable the site-specific styles. Err gopher.r-36.net 70 i+.TP Err gopher.r-36.net 70 i+.B \-M Err gopher.r-36.net 70 i+Enable the site-specific styles. Err gopher.r-36.net 70 i+.TP Err gopher.r-36.net 70 i .B \-n Err gopher.r-36.net 70 i Disable the Web Inspector (Developer Tools). Err gopher.r-36.net 70 i .TP Err gopher.r-36.net 70 i@@ -93,6 +99,7 @@ Enable Javascript Err gopher.r-36.net 70 i .B \-t stylefile Err gopher.r-36.net 70 i Specify the user Err gopher.r-36.net 70 i .I stylefile. Err gopher.r-36.net 70 i+This does disable the site-specific styles. Err gopher.r-36.net 70 i .TP Err gopher.r-36.net 70 i .B \-u useragent Err gopher.r-36.net 70 i Specify the Err gopher.r-36.net 70 1diff --git a/surf.c b/surf.c /scm/surf//file/surf.c.gph gopher.r-36.net 70 i@@ -23,6 +23,7 @@ Err gopher.r-36.net 70 i #include Err gopher.r-36.net 70 i #include Err gopher.r-36.net 70 i #include Err gopher.r-36.net 70 i+#include Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i #include "arg.h" Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i@@ -71,6 +72,12 @@ typedef struct { Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i G_DEFINE_TYPE(CookieJar, cookiejar, SOUP_TYPE_COOKIE_JAR_TEXT) Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+ttypedef struct { Err gopher.r-36.net 70 i+ char *regex; Err gopher.r-36.net 70 i+ char *style; Err gopher.r-36.net 70 i+ regex_t re; Err gopher.r-36.net 70 i+} SiteStyle; Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i static Display *dpy; Err gopher.r-36.net 70 i static Atom atoms[AtomLast]; Err gopher.r-36.net 70 i static Client *clients = NULL; Err gopher.r-36.net 70 i@@ -82,6 +89,7 @@ static char togglestat[8]; Err gopher.r-36.net 70 i static char pagestat[3]; Err gopher.r-36.net 70 i static GTlsDatabase *tlsdb; Err gopher.r-36.net 70 i static int policysel = 0; Err gopher.r-36.net 70 i+static char *stylefile = NULL; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i static void addaccelgroup(Client *c); Err gopher.r-36.net 70 i static void beforerequest(WebKitWebView *w, WebKitWebFrame *f, Err gopher.r-36.net 70 i@@ -127,6 +135,8 @@ static const char *getatom(Client *c, int a); Err gopher.r-36.net 70 i static void gettogglestat(Client *c); Err gopher.r-36.net 70 i static void getpagestat(Client *c); Err gopher.r-36.net 70 i static char *geturi(Client *c); Err gopher.r-36.net 70 i+static gchar *getstyle(const char *uri); Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c); Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i static void inspector(Client *c, const Arg *arg); Err gopher.r-36.net 70 i@@ -533,6 +543,19 @@ geturi(Client *c) { Err gopher.r-36.net 70 i return uri; Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+static gchar * Err gopher.r-36.net 70 i+getstyle(const char *uri) { Err gopher.r-36.net 70 i+ int i; Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ for(i = 0; i < LENGTH(styles); i++) { Err gopher.r-36.net 70 i+ if(styles[i].regex && !regexec(&(styles[i].re), uri, 0, Err gopher.r-36.net 70 i+ NULL, 0)) { Err gopher.r-36.net 70 i+ return g_strconcat("file://", styles[i].style, NULL); Err gopher.r-36.net 70 i+ } Err gopher.r-36.net 70 i+ } Err gopher.r-36.net 70 i+ return g_strdup(""); Err gopher.r-36.net 70 i+} Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i static gboolean Err gopher.r-36.net 70 i initdownload(WebKitWebView *view, WebKitDownload *o, Client *c) { Err gopher.r-36.net 70 i Arg arg; Err gopher.r-36.net 70 i@@ -629,6 +652,7 @@ loadstatuschange(WebKitWebView *view, GParamSpec *pspec, Client *c) { Err gopher.r-36.net 70 i WebKitWebFrame *frame; Err gopher.r-36.net 70 i WebKitWebDataSource *src; Err gopher.r-36.net 70 i WebKitNetworkRequest *request; Err gopher.r-36.net 70 i+ WebKitWebSettings *set = webkit_web_view_get_settings(c->view); Err gopher.r-36.net 70 i SoupMessage *msg; Err gopher.r-36.net 70 i char *uri; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i@@ -644,6 +668,11 @@ loadstatuschange(WebKitWebView *view, GParamSpec *pspec, Client *c) { Err gopher.r-36.net 70 i & SOUP_MESSAGE_CERTIFICATE_TRUSTED); Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i setatom(c, AtomUri, uri); Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ if(stylefile == NULL && enablestyles) { Err gopher.r-36.net 70 i+ g_object_set(G_OBJECT(set), "user-stylesheet-uri", Err gopher.r-36.net 70 i+ getstyle(uri), NULL); Err gopher.r-36.net 70 i+ } Err gopher.r-36.net 70 i break; Err gopher.r-36.net 70 i case WEBKIT_LOAD_FINISHED: Err gopher.r-36.net 70 i c->progress = 100; Err gopher.r-36.net 70 i@@ -702,7 +731,7 @@ newclient(void) { Err gopher.r-36.net 70 i GdkGeometry hints = { 1, 1 }; Err gopher.r-36.net 70 i GdkScreen *screen; Err gopher.r-36.net 70 i gdouble dpi; Err gopher.r-36.net 70 i- char *uri, *ua; Err gopher.r-36.net 70 i+ char *uri = NULL, *ua; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i if(!(c = calloc(1, sizeof(Client)))) Err gopher.r-36.net 70 i die("Cannot malloc!\n"); Err gopher.r-36.net 70 i@@ -832,8 +861,10 @@ newclient(void) { Err gopher.r-36.net 70 i if(!(ua = getenv("SURF_USERAGENT"))) Err gopher.r-36.net 70 i ua = useragent; Err gopher.r-36.net 70 i g_object_set(G_OBJECT(settings), "user-agent", ua, NULL); Err gopher.r-36.net 70 i- uri = g_strconcat("file://", stylefile, NULL); Err gopher.r-36.net 70 i- g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL); Err gopher.r-36.net 70 i+ if (stylefile != NULL) { Err gopher.r-36.net 70 i+ uri = g_strconcat("file://", stylefile, NULL); Err gopher.r-36.net 70 i+ g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL); Err gopher.r-36.net 70 i+ } Err gopher.r-36.net 70 i g_object_set(G_OBJECT(settings), "auto-load-images", loadimages, Err gopher.r-36.net 70 i NULL); Err gopher.r-36.net 70 i g_object_set(G_OBJECT(settings), "enable-plugins", enableplugins, Err gopher.r-36.net 70 i@@ -888,7 +919,8 @@ newclient(void) { Err gopher.r-36.net 70 i fullscreen(c, NULL); Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i- g_free(uri); Err gopher.r-36.net 70 i+ if(stylefile != NULL) Err gopher.r-36.net 70 i+ g_free(uri); Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i setatom(c, AtomFind, ""); Err gopher.r-36.net 70 i setatom(c, AtomUri, "about:blank"); Err gopher.r-36.net 70 i@@ -1094,6 +1126,7 @@ setatom(Client *c, int a, const char *v) { Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i static void Err gopher.r-36.net 70 i setup(void) { Err gopher.r-36.net 70 i+ int i; Err gopher.r-36.net 70 i char *proxy; Err gopher.r-36.net 70 i char *new_proxy; Err gopher.r-36.net 70 i SoupURI *puri; Err gopher.r-36.net 70 i@@ -1114,7 +1147,23 @@ setup(void) { Err gopher.r-36.net 70 i /* dirs and files */ Err gopher.r-36.net 70 i cookiefile = buildpath(cookiefile); Err gopher.r-36.net 70 i scriptfile = buildpath(scriptfile); Err gopher.r-36.net 70 i- stylefile = buildpath(stylefile); Err gopher.r-36.net 70 i+ styledir = buildpath(styledir); Err gopher.r-36.net 70 i+ if(stylefile == NULL && enablestyles) { Err gopher.r-36.net 70 i+ for(i = 0; i < LENGTH(styles); i++) { Err gopher.r-36.net 70 i+ if(regcomp(&(styles[i].re), styles[i].regex, Err gopher.r-36.net 70 i+ REG_EXTENDED)) { Err gopher.r-36.net 70 i+ fprintf(stderr, Err gopher.r-36.net 70 i+ "Could not compile regex: %s\n", Err gopher.r-36.net 70 i+ styles[i].regex); Err gopher.r-36.net 70 i+ styles[i].regex = NULL; Err gopher.r-36.net 70 i+ } Err gopher.r-36.net 70 i+ styles[i].style = buildpath( Err gopher.r-36.net 70 i+ g_strconcat(styledir, Err gopher.r-36.net 70 i+ styles[i].style, NULL)); Err gopher.r-36.net 70 i+ } Err gopher.r-36.net 70 i+ } else { Err gopher.r-36.net 70 i+ stylefile = buildpath(stylefile); Err gopher.r-36.net 70 i+ } Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i /* request handler */ Err gopher.r-36.net 70 i s = webkit_get_default_session(); Err gopher.r-36.net 70 i@@ -1282,12 +1331,16 @@ togglescrollbars(Client *c, const Arg *arg) { Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i static void Err gopher.r-36.net 70 i ttogglestyle(Client *c, const Arg *arg) { Err gopher.r-36.net 70 i- WebKitWebSettings *settings; Err gopher.r-36.net 70 i+ WebKitWebSettings *settings = webkit_web_view_get_settings(c->view); Err gopher.r-36.net 70 i char *uri; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i- settings = webkit_web_view_get_settings(c->view); Err gopher.r-36.net 70 i g_object_get(G_OBJECT(settings), "user-stylesheet-uri", &uri, NULL); Err gopher.r-36.net 70 i- uri = uri[0] ? g_strdup("") : g_strconcat("file://", stylefile, NULL); Err gopher.r-36.net 70 i+ if(stylefile == NULL && enablestyles) { Err gopher.r-36.net 70 i+ uri = (uri && uri[0])? g_strdup("") : getstyle(geturi(c)); Err gopher.r-36.net 70 i+ } else { Err gopher.r-36.net 70 i+ uri = uri[0]? g_strdup("") : g_strconcat("file://", Err gopher.r-36.net 70 i+ stylefile, NULL); Err gopher.r-36.net 70 i+ } Err gopher.r-36.net 70 i g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL); Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i updatetitle(c); Err gopher.r-36.net 70 i@@ -1318,7 +1371,7 @@ gettogglestat(Client *c){ Err gopher.r-36.net 70 i togglestat[p++] = value? 'V': 'v'; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i g_object_get(G_OBJECT(settings), "user-stylesheet-uri", &uri, NULL); Err gopher.r-36.net 70 i- togglestat[p++] = uri[0] ? 'M': 'm'; Err gopher.r-36.net 70 i+ togglestat[p++] = (uri && uri[0]) ? 'M': 'm'; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i togglestat[p] = '\0'; Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i@@ -1451,6 +1504,12 @@ main(int argc, char *argv[]) { Err gopher.r-36.net 70 i case 'K': Err gopher.r-36.net 70 i kioskmode = 1; Err gopher.r-36.net 70 i break; Err gopher.r-36.net 70 i+ case 'm': Err gopher.r-36.net 70 i+ enablestyles = 0; Err gopher.r-36.net 70 i+ break; Err gopher.r-36.net 70 i+ case 'M': Err gopher.r-36.net 70 i+ enablestyles = 1; Err gopher.r-36.net 70 i+ break; Err gopher.r-36.net 70 i case 'n': Err gopher.r-36.net 70 i enableinspector = 0; Err gopher.r-36.net 70 i break; Err gopher.r-36.net 70 .