X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=surf.c;h=48a691a66d0eb034dba4b17c0a9e939391a28d84;hb=e28d27249e4c24a8f9c131911536d99b5b6c4587;hp=6022ca24d443e84489607a2d2f8792db7eba4ce5;hpb=e75753775ff77bb7c31019ef1dd924e5cc912eb8;p=surf.git diff --git a/surf.c b/surf.c index 6022ca2..48a691a 100644 --- a/surf.c +++ b/surf.c @@ -95,8 +95,9 @@ static void print(Client *c, const Arg *arg); 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); @@ -127,12 +128,15 @@ buildpath(const char *path) { 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; } @@ -146,7 +150,7 @@ cleanup(void) { } void -evalscript(WebKitWebFrame *frame, JSContextRef js, char *script, char* scriptname) { +evalscript(JSContextRef js, char *script, char* scriptname) { JSStringRef jsscript, jsscriptname; JSValueRef exception = NULL; @@ -158,12 +162,12 @@ evalscript(WebKitWebFrame *frame, JSContextRef js, char *script, char* scriptnam } 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); } } @@ -329,10 +333,8 @@ geturi(Client *c) { 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); @@ -471,7 +473,6 @@ newclient(void) { 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); @@ -519,7 +520,7 @@ newclient(void) { 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; @@ -529,7 +530,7 @@ newclient(void) { 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); @@ -545,6 +546,9 @@ newclient(void) { 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; } @@ -643,29 +647,32 @@ reload(Client *c, const Arg *arg) { } 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) { - gdouble v; - GtkAdjustment *a; +scroll(GtkAdjustment *a, const Arg *arg) { + gdouble v; - 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; - v = MAX(v, 0.0); - v = MIN(v, gtk_adjustment_get_upper(a) - gtk_adjustment_get_page_size(a)); - gtk_adjustment_set_value(a, v); + v = gtk_adjustment_get_value(a); + 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)); + gtk_adjustment_set_value(a, v); } void @@ -775,7 +782,7 @@ spawn(Client *c, const Arg *arg) { 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 @@ -818,7 +825,7 @@ usage(void) { void windowobjectcleared(GtkWidget *w, WebKitWebFrame *frame, JSContextRef js, JSObjectRef win, Client *c) { - runscript(frame, js); + runscript(frame); } void @@ -850,7 +857,7 @@ main(int argc, char *argv[]) { switch(argv[i][1]) { case 'e': if(++i < argc) - embed = atoi(argv[i]); + embed = strtol(argv[i], NULL, 0); else usage(); break; @@ -867,7 +874,7 @@ main(int argc, char *argv[]) { 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(); }