about summary refs log tree commit diff
path: root/surf.c
diff options
context:
space:
mode:
authorQuentin Rameau <quinq@fifth.space>2017-05-09 14:45:24 +0200
committerQuentin Rameau <quinq@fifth.space>2017-05-11 09:22:43 +0200
commit745a319bafd6ff0702c37d0333142ca18e801a4a (patch)
treebf5434990a3b10d9bf3e49dde88de3c60914c39e /surf.c
parentChange PROMPT_GO from "URL:" to "Go:" (diff)
downloadsurf-745a319bafd6ff0702c37d0333142ca18e801a4a.tar.gz
surf-745a319bafd6ff0702c37d0333142ca18e801a4a.tar.bz2
surf-745a319bafd6ff0702c37d0333142ca18e801a4a.zip
Improve parameters handling
There's no need to reload all parameters each time a new url is loaded,
instead set only custom parameters and restore those to defaults when
needed.
Diffstat (limited to 'surf.c')
-rw-r--r--surf.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/surf.c b/surf.c
index 0fcf22e..57c4c22 100644
--- a/surf.c
+++ b/surf.c
@@ -636,18 +636,32 @@ cookiepolicy_set(const WebKitCookieAcceptPolicy p)
 void
 seturiparameters(Client *c, const char *uri)
 {
+	Parameter *newconfig = NULL;
 	int i;
 
 	for (i = 0; i < LENGTH(uriparams); ++i) {
 		if (uriparams[i].uri &&
 		    !regexec(&(uriparams[i].re), uri, 0, NULL, 0)) {
-			curconfig = uriparams[i].config;
+			newconfig = uriparams[i].config;
 			break;
 		}
 	}
 
-	for (i = 0; i < ParameterLast; ++i)
-		setparameter(c, 0, i, &curconfig[i].val);
+	if (!newconfig)
+		newconfig = defconfig;
+	if (newconfig == curconfig)
+		return;
+
+	for (i = 0; i < ParameterLast; ++i) {
+		if (defconfig[i].force)
+			continue;
+		if (newconfig[i].force)
+			setparameter(c, 0, i, &newconfig[i].val);
+		else if (curconfig[i].force)
+			setparameter(c, 0, i, &defconfig[i].val);
+	}
+
+	curconfig = newconfig;
 }
 
 void
@@ -1350,7 +1364,6 @@ loadchanged(WebKitWebView *v, WebKitLoadEvent e, Client *c)
 
 	switch (e) {
 	case WEBKIT_LOAD_STARTED:
-		curconfig = defconfig;
 		setatom(c, AtomUri, title);
 		c->title = title;
 		c->https = c->insecure = 0;