changes to the event system, make config.h saner, working on cookies
This commit is contained in:
parent
4156e0aa51
commit
f0e0656f38
2 changed files with 63 additions and 96 deletions
69
config.h
69
config.h
|
@ -1,47 +1,26 @@
|
||||||
/* modifier 0 means no modifier */
|
/* modifier 0 means no modifier */
|
||||||
static Key searchbar_keys[] = {
|
static Key keys[] = {
|
||||||
/* modifier keyval function arg stop event */
|
/* modifier keyval function arg Focus */
|
||||||
{ 0, GDK_Escape, hidesearch, {0}, TRUE },
|
{ 0, GDK_Escape, hidesearch, {0}, ALWAYS },
|
||||||
{ 0, GDK_Return, searchtext, {.b = TRUE}, TRUE },
|
{ 0, GDK_Escape, hideurl, {0}, ALWAYS },
|
||||||
{ GDK_SHIFT_MASK, GDK_Return, searchtext, {.b = FALSE}, TRUE },
|
{ GDK_CONTROL_MASK, GDK_P, print, {0}, ALWAYS },
|
||||||
{ GDK_SHIFT_MASK, GDK_Left, NULL, {0}, FALSE },
|
{ 0, GDK_Return, searchtext, {.b = TRUE}, SEARCHBAR },
|
||||||
{ GDK_SHIFT_MASK, GDK_Right, NULL, {0}, FALSE },
|
{ 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 },
|
||||||
static Key urlbar_keys[] = {
|
{ 0 },
|
||||||
/* modifier keyval function arg stop event */
|
{ GDK_CONTROL_MASK, GDK_R, reload, {.b = TRUE}, ALWAYS },
|
||||||
{ 0, GDK_Escape, hideurl, {0}, TRUE },
|
{ GDK_CONTROL_MASK, GDK_r, reload, {.b = FALSE}, ALWAYS },
|
||||||
/* able to "chain" commands; by setting stop event to FALSE */
|
{ GDK_CONTROL_MASK, GDK_g, showurl, {0}, ALWAYS },
|
||||||
{ 0, GDK_Return, loaduri, {.v = NULL}, FALSE },
|
{ GDK_CONTROL_MASK, GDK_slash, showsearch, {0}, ALWAYS },
|
||||||
{ 0, GDK_Return, hideurl, {0}, TRUE },
|
{ 0, GDK_Return, loaduri, {.v = NULL}, URLBAR },
|
||||||
{ GDK_SHIFT_MASK, GDK_Left, NULL, {0}, FALSE },
|
{ 0, GDK_Return, hideurl, {0}, URLBAR },
|
||||||
{ GDK_SHIFT_MASK, GDK_Right, NULL, {0}, FALSE },
|
{ 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 },
|
||||||
static Key general_keys[] = {
|
{ GDK_CONTROL_MASK, GDK_minus, zoompage, {.i = -1 }, BROWSER },
|
||||||
/* modifier keyval function arg stop event */
|
{ GDK_CONTROL_MASK, GDK_0, zoompage, {.i = 0 }, BROWSER },
|
||||||
{ GDK_CONTROL_MASK, GDK_P, print, {0}, TRUE },
|
{ GDK_CONTROL_MASK, GDK_l, navigate, {.i = +1}, BROWSER },
|
||||||
{ GDK_CONTROL_MASK, GDK_p, clipboard, {.b = TRUE }, TRUE },
|
{ GDK_CONTROL_MASK, GDK_h, navigate, {.i = -1}, BROWSER },
|
||||||
{ GDK_CONTROL_MASK, GDK_y, clipboard, {.b = FALSE}, TRUE },
|
{ 0, GDK_Escape, stop, {0}, BROWSER },
|
||||||
{ 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 },
|
|
||||||
};
|
};
|
||||||
|
|
88
surf.c
88
surf.c
|
@ -25,7 +25,6 @@ union Arg {
|
||||||
const gboolean b;
|
const gboolean b;
|
||||||
const int i;
|
const int i;
|
||||||
const unsigned int ui;
|
const unsigned int ui;
|
||||||
const float f;
|
|
||||||
const void *v;
|
const void *v;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
@ -46,26 +45,21 @@ typedef struct Cookie {
|
||||||
struct Cookie *next;
|
struct Cookie *next;
|
||||||
} Cookie;
|
} Cookie;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
BROWSER = 0x0001,
|
||||||
|
SEARCHBAR = 0x0010,
|
||||||
|
URLBAR = 0x0100,
|
||||||
|
ALWAYS = ~0,
|
||||||
|
} KeyFocus;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
guint mod;
|
guint mod;
|
||||||
guint keyval;
|
guint keyval;
|
||||||
void (*func)(Client *c, const Arg *arg);
|
void (*func)(Client *c, const Arg *arg);
|
||||||
const Arg arg;
|
const Arg arg;
|
||||||
gboolean stop; /* do not propagate keypress event/stop matching keys */
|
KeyFocus focus;
|
||||||
} Key;
|
} Key;
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
NONE,
|
|
||||||
SEARCHBAR,
|
|
||||||
URLBAR,
|
|
||||||
} Keypressmode;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
Key *keys;
|
|
||||||
unsigned int numkeys;
|
|
||||||
Keypressmode mode;
|
|
||||||
} KeySet;
|
|
||||||
|
|
||||||
SoupCookieJar *cookiejar;
|
SoupCookieJar *cookiejar;
|
||||||
SoupSession *session;
|
SoupSession *session;
|
||||||
Client *clients = NULL;
|
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 print(Client *c, const Arg *arg);
|
||||||
static void progresschange(WebKitWebView *view, gint p, Client *c);
|
static void progresschange(WebKitWebView *view, gint p, Client *c);
|
||||||
static void request(SoupSession *s, SoupMessage *m, 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 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 setup();
|
||||||
static void titlechange(WebKitWebView* view, WebKitWebFrame* frame,
|
static void titlechange(WebKitWebView* view, WebKitWebFrame* frame,
|
||||||
const gchar* title, Client *c);
|
const gchar* title, Client *c);
|
||||||
|
@ -129,6 +124,7 @@ proccookies(SoupMessage *m, Client *c) {
|
||||||
SoupCookie *co;
|
SoupCookie *co;
|
||||||
long t;
|
long t;
|
||||||
|
|
||||||
|
rereadcookies();
|
||||||
for (l = soup_cookies_from_response(m); l; l = l->next){
|
for (l = soup_cookies_from_response(m); l; l = l->next){
|
||||||
co = (SoupCookie *)l->data;
|
co = (SoupCookie *)l->data;
|
||||||
t = co->expires ? soup_date_to_time_t(co->expires) : 0;
|
t = co->expires ? soup_date_to_time_t(co->expires) : 0;
|
||||||
|
@ -237,42 +233,26 @@ hideurl(Client *c, const Arg *arg) {
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
keypress(GtkWidget* w, GdkEventKey *ev, Client *c) {
|
keypress(GtkWidget* w, GdkEventKey *ev, Client *c) {
|
||||||
unsigned int n, m;
|
unsigned int i, focus;
|
||||||
|
gboolean processed = FALSE;
|
||||||
|
|
||||||
if(ev->type != GDK_KEY_PRESS)
|
if(ev->type != GDK_KEY_PRESS)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
for(n = 0; n < LENGTH(keysets); n++)
|
|
||||||
switch(keysets[n].mode) {
|
|
||||||
case SEARCHBAR:
|
|
||||||
if(GTK_WIDGET_HAS_FOCUS(c->searchbar))
|
if(GTK_WIDGET_HAS_FOCUS(c->searchbar))
|
||||||
goto matchkeys;
|
focus = SEARCHBAR;
|
||||||
break;
|
else if(GTK_WIDGET_HAS_FOCUS(c->urlbar))
|
||||||
case URLBAR:
|
focus = URLBAR;
|
||||||
if(GTK_WIDGET_HAS_FOCUS(c->urlbar))
|
else
|
||||||
goto matchkeys;
|
focus = BROWSER;
|
||||||
break;
|
for(i = 0; i < LENGTH(keys); i++) {
|
||||||
case NONE:
|
if(focus & keys[i].focus && ev->keyval == keys[i].keyval &&
|
||||||
goto matchkeys;
|
(ev->state == keys[i].mod || ev->state & keys[i].mod)
|
||||||
default:
|
&& keys[i].func) {
|
||||||
fprintf(stderr, "keypress(): Unknown Keypressmode\n");
|
keys[i].func(c, &(keys[i].arg));
|
||||||
break;
|
processed = TRUE;
|
||||||
}
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
return processed;
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -496,9 +476,17 @@ reload(Client *c, const Arg *arg) {
|
||||||
webkit_web_view_reload(c->view);
|
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
|
void
|
||||||
setcookie(char *name, char *val, char *dom, char *path, long exp) {
|
setcookie(char *name, char *val, char *dom, char *path, long exp) {
|
||||||
printf("%s %s %s %s %li\n", name, val, dom, path, exp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -576,12 +564,12 @@ updatetitle(Client *c, const char *title) {
|
||||||
|
|
||||||
void
|
void
|
||||||
zoompage(Client *c, const Arg *arg) {
|
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);
|
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);
|
webkit_web_view_zoom_in(c->view);
|
||||||
else /* absolute level */
|
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[]) {
|
int main(int argc, char *argv[]) {
|
||||||
|
@ -633,7 +621,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
/* cookie persistance */
|
/* cookie persistance */
|
||||||
s = webkit_get_default_session();
|
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);
|
cookiejar = soup_cookie_jar_text_new(filename, FALSE);
|
||||||
soup_session_add_feature(s, SOUP_SESSION_FEATURE(cookiejar));
|
soup_session_add_feature(s, SOUP_SESSION_FEATURE(cookiejar));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue