diff -r 69e3e0f8d59c surf.c --- a/surf.c Tue Oct 16 21:54:37 2012 +0200 +++ b/surf.c Fri Oct 19 12:58:26 2012 -0300 @@ -103,8 +103,7 @@ static void loadstatuschange(WebKitWebView *view, GParamSpec *pspec, Client *c); static void loaduri(Client *c, const Arg *arg); static void navigate(Client *c, const Arg *arg); -static Client *newclient(void); -static void newwindow(Client *c, const Arg *arg, gboolean noembed); +static Client *newclient(const char *uri, gboolean noembed); static void pasteuri(GtkClipboard *clipboard, const char *text, gpointer d); static void populatepopup(WebKitWebView *web, GtkMenu *menu, Client *c); static void popupactivate(GtkMenuItem *menu, Client *); @@ -160,13 +159,14 @@ buttonrelease(WebKitWebView *web, GdkEventButton *e, GList *gl) { WebKitHitTestResultContext context; WebKitHitTestResult *result = webkit_web_view_get_hit_test_result(web, e); - Arg arg; + char *uri = NULL; g_object_get(result, "context", &context, NULL); if(context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) { if(e->button == 2) { - g_object_get(result, "link-uri", &arg.v, NULL); - newwindow(NULL, &arg, e->state & GDK_CONTROL_MASK); + g_object_get(result, "link-uri", &uri, NULL); + newclient(uri, e->state & GDK_CONTROL_MASK); + g_free(uri); return true; } } @@ -271,7 +271,7 @@ WebKitWebView * createwindow(WebKitWebView *v, WebKitWebFrame *f, Client *c) { - Client *n = newclient(); + Client *n = newclient(NULL, False); return n->view; } @@ -286,12 +286,12 @@ gboolean decidewindow(WebKitWebView *view, WebKitWebFrame *f, WebKitNetworkRequest *r, WebKitWebNavigationAction *n, WebKitWebPolicyDecision *p, Client *c) { - Arg arg; + char *uri; if(webkit_web_navigation_action_get_reason(n) == WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED) { webkit_web_policy_decision_ignore(p); - arg.v = (void *)webkit_network_request_get_uri(r); - newwindow(NULL, &arg, 0); + uri = (void *)webkit_network_request_get_uri(r); + newclient(uri, False); return TRUE; } return FALSE; @@ -497,17 +497,18 @@ } Client * -newclient(void) { +newclient(const char *uri, gboolean noembed) { Client *c; WebKitWebSettings *settings; WebKitWebFrame *frame; GdkGeometry hints = { 1, 1 }; - char *uri, *ua; + char *ssuri, *ua; + Arg arg = { .v = uri }; if(!(c = calloc(1, sizeof(Client)))) die("Cannot malloc!\n"); /* Window */ - if(embed) { + if(embed && !noembed) { c->win = gtk_plug_new(embed); } else { @@ -583,14 +584,14 @@ if(!(ua = getenv("SURF_USERAGENT"))) ua = useragent; g_object_set(G_OBJECT(settings), "user-agent", ua, NULL); - uri = g_strconcat("file://", stylefile, NULL); - g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL); + ssuri = g_strconcat("file://", stylefile, NULL); + g_object_set(G_OBJECT(settings), "user-stylesheet-uri", ssuri, NULL); g_object_set(G_OBJECT(settings), "auto-load-images", loadimage, NULL); g_object_set(G_OBJECT(settings), "enable-plugins", plugin, NULL); g_object_set(G_OBJECT(settings), "enable-scripts", script, NULL); g_object_set(G_OBJECT(settings), "enable-spatial-navigation", SPATIAL_BROWSING, NULL); - g_free(uri); + g_free(ssuri); setatom(c, AtomFind, ""); setatom(c, AtomUri, "about:blank"); @@ -600,6 +601,8 @@ c->title = NULL; c->next = clients; clients = c; + if(uri) + loaduri(c, &arg); if(showxid) { gdk_display_sync(gtk_widget_get_display(c->win)); printf("%u\n", (guint)GDK_WINDOW_XID(GTK_WIDGET(c->win)->window)); @@ -611,35 +614,6 @@ return c; } -void -newwindow(Client *c, const Arg *arg, gboolean noembed) { - guint i = 0; - const char *cmd[10], *uri; - const Arg a = { .v = (void *)cmd }; - char tmp[64]; - - cmd[i++] = progname; - if(embed && !noembed) { - cmd[i++] = "-e"; - snprintf(tmp, LENGTH(tmp), "%u\n", (int)embed); - cmd[i++] = tmp; - } - if(!script) - cmd[i++] = "-s"; - if(!plugin) - cmd[i++] = "-p"; - if(!loadimage) - cmd[i++] = "-i"; - if(showxid) - cmd[i++] = "-x"; - cmd[i++] = "--"; - uri = arg->v ? (char *)arg->v : c->linkhover; - if(uri) - cmd[i++] = uri; - cmd[i++] = NULL; - spawn(NULL, &a); -} - static void populatepopup(WebKitWebView *web, GtkMenu *menu, Client *c) { GList *items = gtk_container_get_children(GTK_CONTAINER(menu)); @@ -915,11 +889,10 @@ int main(int argc, char *argv[]) { int i; - Arg arg; progname = argv[0]; /* command line args */ - for(i = 1, arg.v = NULL; i < argc && argv[i][0] == '-' && + for(i = 1; i < argc && argv[i][0] == '-' && argv[i][1] != '\0' && argv[i][2] == '\0'; i++) { if(!strcmp(argv[i], "--")) { i++; @@ -950,12 +923,8 @@ usage(); } } - if(i < argc) - arg.v = argv[i]; setup(); - newclient(); - if(arg.v) - loaduri(clients, &arg); + newclient(i < argc ? argv[i] : NULL, False); gtk_main(); cleanup(); return EXIT_SUCCESS;