diff options
| -rw-r--r-- | config.h | 69 | ||||
| -rw-r--r-- | surf.c | 90 | 
2 files changed, 63 insertions, 96 deletions
| @@ -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 },  }; @@ -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 @@ -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 @@ -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)); | 
