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 },
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										90
									
								
								surf.c
								
								
								
								
							
							
						
						
									
										90
									
								
								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
 | 
			
		||||
| 
						 | 
				
			
			@ -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