Adapt newwindow()
[surf.git] / surf.c
diff --git a/surf.c b/surf.c
index 16bde9c..7ba892e 100644 (file)
--- a/surf.c
+++ b/surf.c
@@ -112,6 +112,7 @@ static char pagestats[2];
 static GTlsDatabase *tlsdb;
 static int cookiepolicy;
 static char *stylefile = NULL;
+static const char *useragent;
 
 static void addaccelgroup(Client *c);
 static char *buildfile(const char *path);
@@ -899,7 +900,6 @@ newview(Client *c, WebKitWebView *rv)
        WebKitSettings *settings;
        WebKitUserContentManager *contentmanager;
        WebKitWebContext *context;
-       char *ua;
 
        /* Webview */
        if (rv) {
@@ -918,12 +918,17 @@ newview(Client *c, WebKitWebView *rv)
                    "enable-javascript", enablescripts,
                    "enable-plugins", enableplugins,
                    NULL);
-               if (!(ua = getenv("SURF_USERAGENT")))
-                       ua = useragent;
-               webkit_settings_set_user_agent(settings, ua);
                /* Have a look at http://webkitgtk.org/reference/webkit2gtk/stable/WebKitSettings.html
                 * for more interesting settings */
 
+               if (strcmp(fulluseragent, "")) {
+                       webkit_settings_set_user_agent(settings, fulluseragent);
+               } else if (surfuseragent) {
+                       webkit_settings_set_user_agent_with_application_details(
+                           settings, "Surf", VERSION);
+               }
+               useragent = webkit_settings_get_user_agent(settings);
+
                contentmanager = webkit_user_content_manager_new();
 
                context = webkit_web_context_new_with_website_data_manager(
@@ -1047,45 +1052,56 @@ showview(WebKitWebView *v, Client *c)
 }
 
 void
-newwindow(Client *c, const Arg *arg, gboolean noembed)
+newwindow(Client *c, const Arg *a, int noembed)
 {
-       guint i = 0;
-       const char *cmd[18], *uri;
-       const Arg a = { .v = (void *)cmd };
+       int i = 0;
        char tmp[64];
+       const char *cmd[26], *uri;
+       const Arg arg = { .v = cmd };
 
        cmd[i++] = argv0;
        cmd[i++] = "-a";
        cmd[i++] = cookiepolicies;
-       if (!enablescrollbars)
-               cmd[i++] = "-b";
+       cmd[i++] = enablescrollbars ? "-B" : "-b";
+       if (cookiefile && g_strcmp0(cookiefile, "")) {
+               cmd[i++] = "-c";
+               cmd[i++] = cookiefile;
+       }
+       cmd[i++] = enablecache ? "-D" : "-d";
        if (embed && !noembed) {
                cmd[i++] = "-e";
-               snprintf(tmp, LENGTH(tmp), "%u", (int)embed);
+               snprintf(tmp, LENGTH(tmp), "%lu", embed);
                cmd[i++] = tmp;
        }
-       if (!allowgeolocation)
-               cmd[i++] = "-g";
-       if (!loadimages)
-               cmd[i++] = "-i";
-       if (kioskmode)
-               cmd[i++] = "-k";
-       if (!enableplugins)
-               cmd[i++] = "-p";
-       if (!enablescripts)
-               cmd[i++] = "-s";
+       cmd[i++] = runinfullscreen ? "-F" : "-f";
+       cmd[i++] = allowgeolocation ? "-G" : "-g";
+       cmd[i++] = loadimages ? "-I" : "-i";
+       cmd[i++] = kioskmode ? "-K" : "-k";
+       cmd[i++] = enablestyle ? "-M" : "-m";
+       cmd[i++] = enableinspector ? "-N" : "-n";
+       cmd[i++] = enableplugins ? "-P" : "-p";
+       if (scriptfile && g_strcmp0(scriptfile, "")) {
+               cmd[i++] = "-r";
+               cmd[i++] = scriptfile;
+       }
+       cmd[i++] = enablescripts ? "-S" : "-s";
+       if (stylefile && g_strcmp0(stylefile, "")) {
+               cmd[i++] = "-t";
+               cmd[i++] = stylefile;
+       }
+       if (fulluseragent && g_strcmp0(fulluseragent, "")) {
+               cmd[i++] = "-u";
+               cmd[i++] = fulluseragent;
+       }
        if (showxid)
                cmd[i++] = "-x";
-       if (enablecache)
-               cmd[i++] = "-D";
-       cmd[i++] = "-c";
-       cmd[i++] = cookiefile;
+       /* do not keep zoom level */
        cmd[i++] = "--";
-       uri = arg->v ? (char *)arg->v : c->linkhover;
-       if (uri)
+       if ((uri = a->v))
                cmd[i++] = uri;
-       cmd[i++] = NULL;
-       spawn(NULL, &a);
+       cmd[i] = NULL;
+
+       spawn(c, &arg);
 }
 
 GtkWidget *
@@ -1414,29 +1430,27 @@ getpagestats(Client *c)
 void
 updatetitle(Client *c)
 {
-       char *t;
+       char *title;
 
        if (showindicators) {
                gettogglestats(c);
                getpagestats(c);
 
-               if (c->linkhover) {
-                       t = g_strdup_printf("%s:%s | %s", togglestats, pagestats,
-                                           c->linkhover);
-               } else if (c->progress != 100) {
-                       t = g_strdup_printf("[%i%%] %s:%s | %s", c->progress,
-                                           togglestats, pagestats,
-                                           c->title == NULL ? "" : c->title);
+               if (c->progress != 100) {
+                       title = g_strdup_printf("[%i%%] %s:%s | %s",
+                           c->progress, togglestats, pagestats,
+                           c->targeturi ? c->targeturi : c->title);
                } else {
-                       t = g_strdup_printf("%s:%s | %s", togglestats, pagestats,
-                                           c->title == NULL ? "" : c->title);
+                       title = g_strdup_printf("%s:%s | %s",
+                           togglestats, pagestats,
+                           c->targeturi ? c->targeturi : c->title);
                }
 
-               gtk_window_set_title(GTK_WINDOW(c->win), t);
-               g_free(t);
+               gtk_window_set_title(GTK_WINDOW(c->win), title);
+               g_free(title);
        } else {
-               gtk_window_set_title(GTK_WINDOW(c->win), (c->title == NULL) ?
-                                    "" : c->title);
+               gtk_window_set_title(GTK_WINDOW(c->win), c->title ?
+                   c->title : "");
        }
 }