*
* To understand surf, start reading main().
*/
+
#include <signal.h>
#include <X11/X.h>
#include <X11/Xatom.h>
WebKitWebView *view;
WebKitWebInspector *inspector;
char *title, *linkhover;
- const char *uri, *needle;
+ const char *needle;
gint progress;
struct Client *next;
gboolean zoomed, fullscreen, isinspecting, sslfailed;
g_object_get(result, "context", &context, NULL);
if(context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) {
- if(e->button == 2) {
+ if(e->button == 2 ||
+ (e->button == 1 && CLEANMASK(e->state) == CLEANMASK(MODKEY))) {
g_object_get(result, "link-uri", &arg.v, NULL);
newwindow(NULL, &arg, e->state & GDK_CONTROL_MASK);
return true;
: g_strdup_printf("http://%s", uri);
}
+ setatom(c, AtomUri, uri);
+
/* prevents endless loop */
- if(c->uri && strcmp(u, c->uri) == 0) {
+ if(strcmp(u, geturi(c)) == 0) {
reload(c, &a);
} else {
webkit_web_view_load_uri(c->view, u);
WebKitWebSettings *settings;
WebKitWebFrame *frame;
GdkGeometry hints = { 1, 1 };
+ GdkScreen *screen;
+ gdouble dpi;
char *uri, *ua;
if(!(c = calloc(1, sizeof(Client))))
g_object_set(G_OBJECT(settings), "default-font-size",
defaultfontsize, NULL);
+ /*
+ * While stupid, CSS specifies that a pixel represents 1/96 of an inch.
+ * This ensures websites are not unusably small with a high DPI screen.
+ * It is equivalent to firefox's "layout.css.devPixelsPerPx" setting.
+ */
+ if(zoomto96dpi) {
+ screen = gdk_window_get_screen(GTK_WIDGET(c->win)->window);
+ dpi = gdk_screen_get_resolution(screen);
+ if(dpi != -1) {
+ g_object_set(G_OBJECT(settings), "enforce-96-dpi", true,
+ NULL);
+ webkit_web_view_set_zoom_level(c->view, dpi/96);
+ }
+ }
+ /* This might conflict with _zoomto96dpi_. */
+ if(zoomlevel != 1.0)
+ webkit_web_view_set_zoom_level(c->view, zoomlevel);
+
if(enableinspector) {
c->inspector = WEBKIT_WEB_INSPECTOR(
webkit_web_view_get_inspector(c->view));
c->isinspecting = false;
}
+ if(runinfullscreen) {
+ c->fullscreen = 0;
+ fullscreen(c, NULL);
+ }
+
g_free(uri);
setatom(c, AtomFind, "");
static void
newwindow(Client *c, const Arg *arg, gboolean noembed) {
guint i = 0;
- const char *cmd[12], *uri;
+ const char *cmd[14], *uri;
const Arg a = { .v = (void *)cmd };
char tmp[64];
cmd[i++] = "-s";
if(showxid)
cmd[i++] = "-x";
+ cmd[i++] = "-c";
+ cmd[i++] = cookiefile;
cmd[i++] = "--";
uri = arg->v ? (char *)arg->v : c->linkhover;
if(uri)
static void
usage(void) {
- die("usage: %s [-biknpsvx] [-c cookiefile] [-e xid] [-r scriptfile]"
- " [-t stylefile] [-u useragent] [uri]\n", basename(argv0));
+ die("usage: %s [-bBfFgGiIkKnNpPsSvx]"
+ " [-c cookiefile] [-e xid] [-r scriptfile]"
+ " [-t stylefile] [-u useragent] [-z zoomlevel]"
+ " [uri]\n", basename(argv0));
}
static void
case 'b':
enablescrollbars = 0;
break;
+ case 'B':
+ enablescrollbars = 1;
+ break;
case 'c':
cookiefile = EARGF(usage());
break;
case 'e':
embed = strtol(EARGF(usage()), NULL, 0);
break;
+ case 'f':
+ runinfullscreen = 1;
+ break;
+ case 'F':
+ runinfullscreen = 0;
+ break;
case 'g':
allowgeolocation = 0;
break;
+ case 'G':
+ allowgeolocation = 1;
+ break;
case 'i':
loadimages = 0;
break;
+ case 'I':
+ loadimages = 1;
+ break;
case 'k':
+ kioskmode = 0;
+ break;
+ case 'K':
kioskmode = 1;
break;
case 'n':
enableinspector = 0;
break;
+ case 'N':
+ enableinspector = 1;
+ break;
case 'p':
enableplugins = 0;
break;
+ case 'P':
+ enableplugins = 1;
+ break;
case 'r':
scriptfile = EARGF(usage());
break;
case 's':
enablescripts = 0;
break;
+ case 'S':
+ enablescripts = 1;
+ break;
case 't':
stylefile = EARGF(usage());
break;
case 'x':
showxid = TRUE;
break;
+ case 'z':
+ zoomlevel = strtof(EARGF(usage()), NULL);
+ break;
default:
usage();
} ARGEND;