surf

surf browser, a WebKit based browser
git clone git://git.suckless.org/surf
Log | Files | Refs | README | LICENSE

commit f0e0656f38682d54d8b981fe579767d4fa9638fd
parent 4156e0aa51ae1e8925537aa4814acfb6eed4923b
Author: Enno Boland (tox) <tox@s01.de>
Date:   Mon,  7 Sep 2009 09:44:21 +0200

changes to the event system, make config.h saner, working on cookies
Diffstat:
Mconfig.h | 69++++++++++++++++++++++++---------------------------------------------
Msurf.c | 90++++++++++++++++++++++++++++++++++---------------------------------------------
2 files changed, 63 insertions(+), 96 deletions(-)

diff --git a/config.h b/config.h @@ -1,47 +1,26 @@ /* modifier 0 means no modifier */ -static Key searchbar_keys[] = { - /* modifier keyval function arg stop event */ - { 0, GDK_Escape, hidesearch, {0}, TRUE }, - { 0, GDK_Return, searchtext, {.b = TRUE}, TRUE }, - { GDK_SHIFT_MASK, GDK_Return, searchtext, {.b = FALSE}, TRUE }, - { GDK_SHIFT_MASK, GDK_Left, NULL, {0}, FALSE }, - { GDK_SHIFT_MASK, GDK_Right, NULL, {0}, FALSE }, -}; - -static Key urlbar_keys[] = { - /* modifier keyval function arg stop event */ - { 0, GDK_Escape, hideurl, {0}, TRUE }, - /* able to "chain" commands; by setting stop event to FALSE */ - { 0, GDK_Return, loaduri, {.v = NULL}, FALSE }, - { 0, GDK_Return, hideurl, {0}, TRUE }, - { GDK_SHIFT_MASK, GDK_Left, NULL, {0}, FALSE }, - { GDK_SHIFT_MASK, GDK_Right, NULL, {0}, FALSE }, -}; - -static Key general_keys[] = { - /* modifier keyval function arg stop event */ - { GDK_CONTROL_MASK, GDK_P, print, {0}, TRUE }, - { GDK_CONTROL_MASK, GDK_p, clipboard, {.b = TRUE }, TRUE }, - { GDK_CONTROL_MASK, GDK_y, clipboard, {.b = FALSE}, TRUE }, - { GDK_CONTROL_MASK, GDK_R, reload, {.b = TRUE}, TRUE }, - { GDK_CONTROL_MASK, GDK_r, reload, {.b = FALSE}, TRUE }, - { GDK_CONTROL_MASK, GDK_b, NULL, {0}, TRUE }, - { GDK_CONTROL_MASK, GDK_g, showurl, {0}, TRUE }, - { GDK_CONTROL_MASK, GDK_slash, showsearch, {0}, TRUE }, - { GDK_CONTROL_MASK, GDK_plus, zoompage, {0}, TRUE }, - { GDK_CONTROL_MASK, GDK_minus, zoompage, {.f = -1.0 }, TRUE }, - { GDK_CONTROL_MASK, GDK_0, zoompage, {.f = +1.0 }, TRUE }, - { GDK_CONTROL_MASK, GDK_n, searchtext, {.b = TRUE}, TRUE }, - { GDK_CONTROL_MASK, GDK_N, searchtext, {.b = FALSE}, TRUE }, - { GDK_CONTROL_MASK, GDK_l, navigate, {.i = +1}, TRUE }, - { GDK_CONTROL_MASK, GDK_h, navigate, {.i = -1}, TRUE }, - { 0, GDK_Escape, stop, {0}, TRUE }, -}; - -/* Sequence of Keys to match against a keypress */ -static KeySet keysets[] = { - /* keyset (Key[]) numkeys focusedwidget/mode */ - { searchbar_keys, LENGTH(searchbar_keys), SEARCHBAR }, - { urlbar_keys, LENGTH(urlbar_keys), URLBAR }, - { general_keys, LENGTH(general_keys), NONE }, +static Key keys[] = { + /* modifier keyval function arg Focus */ + { 0, GDK_Escape, hidesearch, {0}, ALWAYS }, + { 0, GDK_Escape, hideurl, {0}, ALWAYS }, + { GDK_CONTROL_MASK, GDK_P, print, {0}, ALWAYS }, + { 0, GDK_Return, searchtext, {.b = TRUE}, SEARCHBAR }, + { GDK_SHIFT_MASK, GDK_Return, searchtext, {.b = FALSE}, SEARCHBAR }, + { GDK_CONTROL_MASK, GDK_n, searchtext, {.b = TRUE}, BROWSER|SEARCHBAR }, + { GDK_CONTROL_MASK, GDK_N, searchtext, {.b = FALSE}, BROWSER|SEARCHBAR }, + { 0 }, + { GDK_CONTROL_MASK, GDK_R, reload, {.b = TRUE}, ALWAYS }, + { GDK_CONTROL_MASK, GDK_r, reload, {.b = FALSE}, ALWAYS }, + { GDK_CONTROL_MASK, GDK_g, showurl, {0}, ALWAYS }, + { GDK_CONTROL_MASK, GDK_slash, showsearch, {0}, ALWAYS }, + { 0, GDK_Return, loaduri, {.v = NULL}, URLBAR }, + { 0, GDK_Return, hideurl, {0}, URLBAR }, + { GDK_CONTROL_MASK, GDK_p, clipboard, {.b = TRUE }, BROWSER }, + { GDK_CONTROL_MASK, GDK_y, clipboard, {.b = FALSE}, BROWSER }, + { GDK_CONTROL_MASK, GDK_plus, zoompage, {.i = +1 }, BROWSER }, + { GDK_CONTROL_MASK, GDK_minus, zoompage, {.i = -1 }, BROWSER }, + { GDK_CONTROL_MASK, GDK_0, zoompage, {.i = 0 }, BROWSER }, + { GDK_CONTROL_MASK, GDK_l, navigate, {.i = +1}, BROWSER }, + { GDK_CONTROL_MASK, GDK_h, navigate, {.i = -1}, BROWSER }, + { 0, GDK_Escape, stop, {0}, BROWSER }, }; diff --git 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 @@ -497,8 +477,16 @@ reload(Client *c, const Arg *arg) { } 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); + 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));