tchanges to the event system, make config.h saner, working on cookies - surf - … | |
git clone git://src.adamsgaard.dk/surf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit f0e0656f38682d54d8b981fe579767d4fa9638fd | |
parent 4156e0aa51ae1e8925537aa4814acfb6eed4923b | |
Author: Enno Boland (tox) <[email protected]> | |
Date: Mon, 7 Sep 2009 09:44:21 +0200 | |
changes to the event system, make config.h saner, working on cookies | |
Diffstat: | |
M config.h | 69 +++++++++++------------------… | |
M surf.c | 90 ++++++++++++++---------------… | |
2 files changed, 63 insertions(+), 96 deletions(-) | |
--- | |
diff --git a/config.h b/config.h | |
t@@ -1,47 +1,26 @@ | |
/* modifier 0 means no modifier */ | |
-static Key searchbar_keys[] = { | |
- /* modifier keyval function arg sto… | |
- { 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 sto… | |
- { 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 sto… | |
- { 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 … | |
+ { 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}, SEARCH… | |
+ { GDK_SHIFT_MASK, GDK_Return, searchtext, {.b = FALSE}, SEARCH… | |
+ { GDK_CONTROL_MASK, GDK_n, searchtext, {.b = TRUE}, BROWSE… | |
+ { GDK_CONTROL_MASK, GDK_N, searchtext, {.b = FALSE}, BROWSE… | |
+ { 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 }, BROWSE… | |
+ { GDK_CONTROL_MASK, GDK_y, clipboard, {.b = FALSE}, BROWSE… | |
+ { GDK_CONTROL_MASK, GDK_plus, zoompage, {.i = +1 }, BROWSE… | |
+ { GDK_CONTROL_MASK, GDK_minus, zoompage, {.i = -1 }, BROWSE… | |
+ { GDK_CONTROL_MASK, GDK_0, zoompage, {.i = 0 }, BROWSE… | |
+ { GDK_CONTROL_MASK, GDK_l, navigate, {.i = +1}, BROWSE… | |
+ { GDK_CONTROL_MASK, GDK_h, navigate, {.i = -1}, BROWSE… | |
+ { 0, GDK_Escape, stop, {0}, BROWSE… | |
}; | |
diff --git a/surf.c b/surf.c | |
t@@ -25,7 +25,6 @@ union Arg { | |
const gboolean b; | |
const int i; | |
const unsigned int ui; | |
- const float f; | |
const void *v; | |
} ; | |
t@@ -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; | |
t@@ -101,8 +95,9 @@ static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent… | |
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); | |
t@@ -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; | |
t@@ -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[… | |
+ && keys[i].func) { | |
+ keys[i].func(c, &(keys[i].arg)); | |
+ processed = TRUE; | |
} | |
} | |
- return FALSE; | |
+ return processed; | |
} | |
void | |
t@@ -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 | |
t@@ -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[]) { | |
t@@ -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)); | |