#include <sys/file.h>
#define LENGTH(x) (sizeof x / sizeof x[0])
+#define CLEANMASK(mask) (mask & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask))
enum { AtomFind, AtomGo, AtomUri, AtomLast };
static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event, gpointer d);
static void progresschange(WebKitWebView *view, GParamSpec *pspec, Client *c);
static void reload(Client *c, const Arg *arg);
-static void resize(GtkWidget *w, GtkAllocation *a, Client *c);
-static void scroll(Client *c, const Arg *arg);
+static void scroll_h(Client *c, const Arg *arg);
+static void scroll_v(Client *c, const Arg *arg);
+static void scroll(GtkAdjustment *a, const Arg *arg);
static void setatom(Client *c, int a, const char *v);
static void setcookie(SoupCookie *c);
static void setup(void);
apath = g_strconcat(g_get_home_dir(), "/", path, NULL);
if((p = strrchr(apath, '/'))) {
*p = '\0';
- g_mkdir_with_parents(apath, 0755);
+ g_mkdir_with_parents(apath, 0700);
+ g_chmod(apath, 0700); /* in case it existed */
*p = '/';
}
/* creating file (gives error when apath ends with "/") */
- if((f = fopen(apath, "a")))
+ if((f = fopen(apath, "a"))) {
+ g_chmod(apath, 0600); /* always */
fclose(f);
+ }
return apath;
}
}
void
-evalscript(WebKitWebFrame *frame, JSContextRef js, char *script, char* scriptname) {
+evalscript(JSContextRef js, char *script, char* scriptname) {
JSStringRef jsscript, jsscriptname;
JSValueRef exception = NULL;
}
void
-runscript(WebKitWebFrame *frame, JSContextRef js) {
+runscript(WebKitWebFrame *frame) {
char *script;
GError *error;
if(g_file_get_contents(scriptfile, &script, NULL, &error)) {
- evalscript(frame, webkit_web_frame_get_global_context(frame), script, scriptfile);
+ evalscript(webkit_web_frame_get_global_context(frame), script, scriptfile);
}
}
void
gotheaders(SoupMessage *msg, gpointer v) {
- SoupURI *uri;
GSList *l, *p;
- uri = soup_message_get_uri(msg);
for(p = l = soup_cookies_from_response(msg); p;
p = g_slist_next(p)) {
setcookie((SoupCookie *)p->data);
updatewinid(c);
for(i = 0; i < LENGTH(keys); i++) {
if(gdk_keyval_to_lower(ev->keyval) == keys[i].keyval
- && (ev->state & keys[i].mod) == keys[i].mod
+ && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
&& keys[i].func) {
keys[i].func(c, &(keys[i].arg));
processed = TRUE;
gtk_window_set_default_size(GTK_WINDOW(c->win), 800, 600);
g_signal_connect(G_OBJECT(c->win), "destroy", G_CALLBACK(destroywin), c);
g_signal_connect(G_OBJECT(c->win), "key-press-event", G_CALLBACK(keypress), c);
- g_signal_connect(G_OBJECT(c->win), "size-allocate", G_CALLBACK(resize), c);
/* VBox */
c->vbox = gtk_vbox_new(FALSE, 0);
gdk_window_add_filter(GTK_WIDGET(c->win)->window, processx, c);
webkit_web_view_set_full_content_zoom(c->view, TRUE);
frame = webkit_web_view_get_main_frame(c->view);
- runscript(frame, webkit_web_frame_get_global_context(frame));
+ runscript(frame);
settings = webkit_web_view_get_settings(c->view);
if(!(ua = getenv("SURF_USERAGENT")))
ua = useragent;
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", true, NULL);
+ g_object_set(G_OBJECT(settings), "enable-spatial-navigation", SPATIAL_BROWSING, NULL);
g_free(uri);
gdk_display_sync(gtk_widget_get_display(c->win));
printf("%u\n", (guint)GDK_WINDOW_XID(GTK_WIDGET(c->win)->window));
fflush(NULL);
+ if (fclose(stdout) != 0) {
+ die("Error closing stdout");
+ }
}
return c;
}
}
void
-resize(GtkWidget *w, GtkAllocation *a, Client *c) {
- double zoom;
+scroll_h(Client *c, const Arg *arg) {
+ scroll(gtk_scrolled_window_get_hadjustment(
+ GTK_SCROLLED_WINDOW(c->scroll)), arg);
+}
- if(c->zoomed)
- return;
- zoom = webkit_web_view_get_zoom_level(c->view);
- if(a->width * a->height < 300 * 400 && zoom != 0.2)
- webkit_web_view_set_zoom_level(c->view, 0.2);
- else if(zoom != 1.0)
- webkit_web_view_set_zoom_level(c->view, 1.0);
+void
+scroll_v(Client *c, const Arg *arg) {
+ scroll(gtk_scrolled_window_get_vadjustment(
+ GTK_SCROLLED_WINDOW(c->scroll)), arg);
}
void
-scroll(Client *c, const Arg *arg) {
+scroll(GtkAdjustment *a, const Arg *arg) {
gdouble v;
- GtkAdjustment *a;
- a = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(c->scroll));
v = gtk_adjustment_get_value(a);
- v += gtk_adjustment_get_step_increment(a) * arg->i;
+ switch (arg->i){
+ case +10000:
+ case -10000:
+ v += gtk_adjustment_get_page_increment(a) *
+ (arg->i / 10000);
+ break;
+ case +20000:
+ case -20000:
+ default:
+ v += gtk_adjustment_get_step_increment(a) * arg->i;
+ }
+
v = MAX(v, 0.0);
- v = MIN(v, gtk_adjustment_get_upper(a) - gtk_adjustment_get_page_size(a));
+ v = MIN(v, gtk_adjustment_get_upper(a) -
+ gtk_adjustment_get_page_size(a));
gtk_adjustment_set_value(a, v);
}
void
eval(Client *c, const Arg *arg) {
WebKitWebFrame *frame = webkit_web_view_get_main_frame(c->view);
- evalscript(frame, webkit_web_frame_get_global_context(frame), ((char **)arg->v)[0], "");
+ evalscript(webkit_web_frame_get_global_context(frame),
+ ((char **)arg->v)[0], "");
}
void
void
windowobjectcleared(GtkWidget *w, WebKitWebFrame *frame, JSContextRef js, JSObjectRef win, Client *c) {
- runscript(frame, js);
+ runscript(frame);
}
void
switch(argv[i][1]) {
case 'e':
if(++i < argc)
- embed = atoi(argv[i]);
+ embed = strtol(argv[i], NULL, 0);
else
usage();
break;
showxid = TRUE;
break;
case 'v':
- die("surf-"VERSION", © 2009 surf engineers, see LICENSE for details\n");
+ die("surf-"VERSION", ©2009-2012 surf engineers, see LICENSE for details\n");
default:
usage();
}