Introduction
Introduction Statistics Contact Development Disclaimer Help
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));
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.