changes to the event system, make config.h saner, working on cookies
This commit is contained in:
parent
4156e0aa51
commit
f0e0656f38
69
config.h
69
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 },
|
||||
};
|
||||
|
|
88
surf.c
88
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;
|
||||
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
|
||||
|
@ -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);
|
||||
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));
|
||||
|
||||
|
|
Loading…
Reference in New Issue