X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=surf.c;h=47005b721536f9468336a3ae5c4f93a18607a684;hb=124d3e89dd242042648a5615e3d975f085b1f0d5;hp=29bf8c67b6efb8019f79330234c4d698cdaee717;hpb=839edbe22dbe789f56fb4383b5f348f0846d0a58;p=surf.git diff --git a/surf.c b/surf.c index 29bf8c6..47005b7 100644 --- a/surf.c +++ b/surf.c @@ -25,7 +25,6 @@ union Arg { const gboolean b; const int i; const unsigned int ui; - const float f; const void *v; } ; @@ -46,26 +45,21 @@ typedef struct Cookie { struct Cookie *next; } Cookie; +typedef enum { + BROWSER = 0x0001, + SEARCHBAR = 0x0010, + URLBAR = 0x0100, + ALWAYS = ~0, +} KeyFocus; + typedef struct { guint mod; guint keyval; void (*func)(Client *c, const Arg *arg); const Arg arg; - gboolean stop; /* do not propagate keypress event/stop matching keys */ + KeyFocus focus; } Key; -typedef enum { - NONE, - SEARCHBAR, - URLBAR, -} Keypressmode; - -typedef struct { - Key *keys; - unsigned int numkeys; - Keypressmode mode; -} KeySet; - SoupCookieJar *cookiejar; SoupSession *session; Client *clients = NULL; @@ -101,8 +95,9 @@ static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event, gpointer d); static void print(Client *c, const Arg *arg); static void progresschange(WebKitWebView *view, gint p, Client *c); static void request(SoupSession *s, SoupMessage *m, Client *c); -static void setcookie(char *name, char *val, char *dom, char *path, long exp); static void reload(Client *c, const Arg *arg); +static void rereadcookies(); +static void setcookie(char *name, char *val, char *dom, char *path, long exp); static void setup(); static void titlechange(WebKitWebView* view, WebKitWebFrame* frame, const gchar* title, Client *c); @@ -129,6 +124,7 @@ proccookies(SoupMessage *m, Client *c) { SoupCookie *co; long t; + rereadcookies(); for (l = soup_cookies_from_response(m); l; l = l->next){ co = (SoupCookie *)l->data; t = co->expires ? soup_date_to_time_t(co->expires) : 0; @@ -237,42 +233,26 @@ hideurl(Client *c, const Arg *arg) { gboolean keypress(GtkWidget* w, GdkEventKey *ev, Client *c) { - unsigned int n, m; + unsigned int i, focus; + gboolean processed = FALSE; if(ev->type != GDK_KEY_PRESS) return FALSE; - - for(n = 0; n < LENGTH(keysets); n++) - switch(keysets[n].mode) { - case SEARCHBAR: - if(GTK_WIDGET_HAS_FOCUS(c->searchbar)) - goto matchkeys; - break; - case URLBAR: - if(GTK_WIDGET_HAS_FOCUS(c->urlbar)) - goto matchkeys; - break; - case NONE: - goto matchkeys; - default: - fprintf(stderr, "keypress(): Unknown Keypressmode\n"); - break; - } - if(n < LENGTH(keysets)) { -matchkeys: - for(m = 0; m < keysets[n].numkeys; m++) { - Key *keys = keysets[n].keys; - if(ev->keyval == keys[m].keyval - && (ev->state == keys[m].mod - || (ev->state & keys[m].mod)) - && keys[m].func) { - keys[m].func(c, &(keys[m].arg)); - if(keys[m].stop) - return TRUE; - } + if(GTK_WIDGET_HAS_FOCUS(c->searchbar)) + focus = SEARCHBAR; + else if(GTK_WIDGET_HAS_FOCUS(c->urlbar)) + focus = URLBAR; + else + focus = BROWSER; + for(i = 0; i < LENGTH(keys); i++) { + if(focus & keys[i].focus && ev->keyval == keys[i].keyval && + (ev->state == keys[i].mod || ev->state & keys[i].mod) + && keys[i].func) { + keys[i].func(c, &(keys[i].arg)); + processed = TRUE; } } - return FALSE; + return processed; } void @@ -349,7 +329,7 @@ loaduri(Client *c, const Arg *arg) { void navigate(Client *c, const Arg *arg) { gint steps = *(gint *)arg; - webkit_web_view_can_go_back_or_forward(c->view, steps); + webkit_web_view_go_back_or_forward(c->view, steps); } Client * @@ -496,9 +476,17 @@ reload(Client *c, const Arg *arg) { webkit_web_view_reload(c->view); } +void +rereadcookies() { + const gchar *filename, *home; + + home = g_get_home_dir(); + filename = g_build_filename(home, ".surf", "cookies", NULL); +} + void setcookie(char *name, char *val, char *dom, char *path, long exp) { - printf("%s %s %s %s %li\n", name, val, dom, path, exp); + } void @@ -576,12 +564,12 @@ updatetitle(Client *c, const char *title) { void zoompage(Client *c, const Arg *arg) { - if(*(float *)arg < 0) /* zoom out */ + if(arg->i < 0) /* zoom out */ webkit_web_view_zoom_out(c->view); - else if(*(float *)arg == 0) /* zoom in */ + else if(arg->i > 0) /* zoom in */ webkit_web_view_zoom_in(c->view); - else /* absolute level */ - webkit_web_view_set_zoom_level(c->view, *(float *)arg); + else /* reset */ + webkit_web_view_set_zoom_level(c->view, 1.0); } int main(int argc, char *argv[]) { @@ -633,7 +621,7 @@ int main(int argc, char *argv[]) { /* cookie persistance */ s = webkit_get_default_session(); - filename = g_build_filename(home, ".surf", "cookies", NULL); + filename = g_build_filename(home, ".surf", "cookies.jar", NULL); cookiejar = soup_cookie_jar_text_new(filename, FALSE); soup_session_add_feature(s, SOUP_SESSION_FEATURE(cookiejar));