X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=surf.c;h=47005b721536f9468336a3ae5c4f93a18607a684;hb=124d3e89dd242042648a5615e3d975f085b1f0d5;hp=2778beeb21ed36835b996b63e017822344a3dd1f;hpb=80d33d696d73c14c81da6e35ab06ee97517c9852;p=surf.git diff --git a/surf.c b/surf.c index 2778bee..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; @@ -98,11 +92,13 @@ static Client *newclient(); static WebKitWebView *newwindow(WebKitWebView *v, WebKitWebFrame *f, Client *c); static void pasteurl(GtkClipboard *clipboard, const gchar *text, gpointer d); 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 setup(void); +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); static void searchtext(Client *c, const Arg *arg); @@ -128,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; @@ -236,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 @@ -347,11 +328,8 @@ loaduri(Client *c, const Arg *arg) { void navigate(Client *c, const Arg *arg) { - gboolean forward = *(gboolean *)arg; - if(forward) - webkit_web_view_go_forward(c->view); - else - webkit_web_view_go_back(c->view); + gint steps = *(gint *)arg; + webkit_web_view_go_back_or_forward(c->view, steps); } Client * @@ -472,6 +450,11 @@ processx(GdkXEvent *e, GdkEvent *event, gpointer d) { return GDK_FILTER_CONTINUE; } +void +print(Client *c, const Arg *arg) { + webkit_web_frame_print(webkit_web_view_get_main_frame(c->view)); +} + void progresschange(WebKitWebView* view, gint p, Client *c) { c->progress = p; @@ -493,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 @@ -573,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[]) { @@ -630,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));