trearranging, adding initial keyboard support. - surf - customized build of sur… | |
git clone git://src.adamsgaard.dk/surf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 6848b92342058d083a2ba3717914738cbf1bb6d6 | |
parent ad005db13f571dabb72fce448eb0d93f79acf97d | |
Author: Enno Boland (Gottox) <[email protected]> | |
Date: Sat, 6 Jun 2009 09:35:50 +0200 | |
rearranging, adding initial keyboard support. | |
Diffstat: | |
M Makefile | 8 +++----- | |
M surf.c | 78 ++++++++++++++++++++++-------… | |
2 files changed, 59 insertions(+), 27 deletions(-) | |
--- | |
diff --git a/Makefile b/Makefile | |
t@@ -3,10 +3,10 @@ | |
include config.mk | |
-SRC = surf.c tabbed.c | |
+SRC = surf.c | |
OBJ = ${SRC:.c=.o} | |
-all: options surf tabbed | |
+all: options surf | |
options: | |
@echo surf build options: | |
t@@ -20,12 +20,10 @@ options: | |
${OBJ}: config.mk | |
-surf: surf.o | |
+surf: ${OBJ} | |
@echo CC -o $@ | |
@${CC} -o $@ surf.o ${LDFLAGS} | |
-tabbed: tabbed.o | |
- | |
clean: | |
@echo cleaning | |
@rm -f surf ${OBJ} surf-${VERSION}.tar.gz | |
diff --git a/surf.c b/surf.c | |
t@@ -7,6 +7,7 @@ | |
#include <gtk/gtk.h> | |
#include <gdk/gdkx.h> | |
#include <gdk/gdk.h> | |
+#include <gdk/gdkkeysyms.h> | |
#include <string.h> | |
#include <unistd.h> | |
#include <stdlib.h> | |
t@@ -46,8 +47,8 @@ static void die(char *str); | |
static void setup(void); | |
static void cleanup(void); | |
static void updatetitle(Client *c); | |
-static void windestroy(GtkWidget* w, gpointer d); | |
-static gboolean keypress(GtkWidget* w, GdkEventKey *ev); | |
+static void destroywin(GtkWidget* w, gpointer d); | |
+static gboolean keypress(GtkWidget* w, GdkEventKey *ev, gpointer d); | |
static void titlechange(WebKitWebView* view, WebKitWebFrame* frame, const gcha… | |
static void progresschange(WebKitWebView *view, gint p, gpointer d); | |
static void loadcommit(WebKitWebView *view, WebKitWebFrame *f, gpointer d); | |
t@@ -63,7 +64,8 @@ GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event,… | |
void | |
cleanup(void) { | |
- | |
+ while(clients) | |
+ destroyclient(clients); | |
} | |
GdkFilterReturn | |
t@@ -132,13 +134,19 @@ gboolean | |
newwindow(WebKitWebView *view, WebKitWebFrame *f, | |
WebKitNetworkRequest *r, WebKitWebNavigationAction *n, | |
WebKitWebPolicyDecision *p, gpointer d) { | |
+ puts("new"); | |
Client *c = newclient(); | |
webkit_web_view_load_request(c->view, r); | |
return TRUE; | |
} | |
void | |
linkhover(WebKitWebView* page, const gchar* t, const gchar* l, gpointer d) { | |
- /* TODO */ | |
+ Client *c = (Client *)d; | |
+ | |
+ if(l) | |
+ gtk_window_set_title(GTK_WINDOW(c->win), l); | |
+ else | |
+ updatetitle(c); | |
} | |
void | |
t@@ -183,7 +191,7 @@ titlechange(WebKitWebView *v, WebKitWebFrame *f, const gch… | |
} | |
void | |
-windestroy(GtkWidget* w, gpointer d) { | |
+destroywin(GtkWidget* w, gpointer d) { | |
Client *c = (Client *)d; | |
destroyclient(c); | |
t@@ -204,8 +212,33 @@ destroyclient(Client *c) { | |
} | |
gboolean | |
-keypress(GtkWidget* w, GdkEventKey *ev) { | |
- /* TODO */ | |
+keypress(GtkWidget* w, GdkEventKey *ev, gpointer d) { | |
+ Client *c = (Client *)d; | |
+ | |
+ if(ev->type == GDK_KEY_PRESS && (ev->state == GDK_CONTROL_MASK | |
+ || ev->state == (GDK_CONTROL_MASK | GDK_SHIFT_MASK))) { | |
+ switch(ev->keyval) { | |
+ case GDK_r: | |
+ case GDK_R: | |
+ if((ev->state & GDK_SHIFT_MASK)) | |
+ webkit_web_view_reload_bypass_cache(c->view); | |
+ else | |
+ webkit_web_view_reload(c->view); | |
+ return TRUE; | |
+ case GDK_go: | |
+ /* TODO */ | |
+ return TRUE; | |
+ case GDK_slash: | |
+ /* TODO */ | |
+ return TRUE; | |
+ case GDK_Left: | |
+ webkit_web_view_go_back(c->view); | |
+ return TRUE; | |
+ case GDK_Right: | |
+ webkit_web_view_go_forward(c->view); | |
+ return TRUE; | |
+ } | |
+ } | |
return FALSE; | |
} | |
t@@ -233,8 +266,8 @@ newclient(void) { | |
} | |
gtk_window_set_default_size(GTK_WINDOW(c->win), 800, 600); | |
c->browser = gtk_scrolled_window_new(NULL, NULL); | |
- g_signal_connect (G_OBJECT(c->win), "destroy", G_CALLBACK(windestroy),… | |
- g_signal_connect (G_OBJECT(c->win), "key-press-event", G_CALLBACK(keyp… | |
+ g_signal_connect (G_OBJECT(c->win), "destroy", G_CALLBACK(destroywin),… | |
+ g_signal_connect (G_OBJECT(c->win), "key-press-event", G_CALLBACK(keyp… | |
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(c->browser), | |
GTK_POLICY_NEVER, GTK_POLICY_NEVER); | |
t@@ -245,9 +278,8 @@ newclient(void) { | |
g_signal_connect(G_OBJECT(c->view), "load-progress-changed", G_CALLBAC… | |
g_signal_connect(G_OBJECT(c->view), "load-committed", G_CALLBACK(loadc… | |
g_signal_connect(G_OBJECT(c->view), "hovering-over-link", G_CALLBACK(l… | |
- g_signal_connect(G_OBJECT(c->view), "new-window-policy-decision-reques… | |
+ g_signal_connect(G_OBJECT(c->view), "new-window", G_CALLBACK(newwindow… | |
g_signal_connect(G_OBJECT(c->view), "download-requested", G_CALLBACK(d… | |
- /* g_signal_connect(G_OBJECT(c->view), "create-web-view", G_CALLBACK(c… | |
gtk_container_add(GTK_CONTAINER(c->win), c->browser); | |
gtk_widget_grab_focus(GTK_WIDGET(c->view)); | |
t@@ -265,6 +297,10 @@ int main(int argc, char *argv[]) { | |
gchar *uri = NULL, *file = NULL; | |
Client *c; | |
+ gtk_init(NULL, NULL); | |
+ if (!g_thread_supported()) | |
+ g_thread_init(NULL); | |
+ setup(); | |
ARG { | |
case 'x': | |
showxid = TRUE; | |
t@@ -276,29 +312,27 @@ int main(int argc, char *argv[]) { | |
case 'u': | |
if(!(uri = ARGVAL())) | |
goto argerr; | |
+ c = newclient(); | |
+ loaduri(c, uri); | |
+ updatetitle(c); | |
break; | |
case 'f': | |
if(!(file = ARGVAL())) | |
goto argerr; | |
+ c = newclient(); | |
+ loadfile(c, file); | |
+ updatetitle(c); | |
break; | |
argerr: | |
default: | |
puts("surf - simple browser"); | |
- printf("usage: %s [-e] [-u uri] [-f file]", argv[0]); | |
+ printf("usage: %s [-e] [-x] [-u uri] [-f file]\n", argv[0]); | |
return EXIT_FAILURE; | |
} | |
if(argc != ARGC()) | |
goto argerr; | |
- gtk_init(NULL, NULL); | |
- if (!g_thread_supported()) | |
- g_thread_init(NULL); | |
- setup(); | |
- c = newclient(); | |
- if(uri) | |
- loaduri(c, uri); | |
- else if(file) | |
- loadfile(c, file); | |
- updatetitle(c); | |
+ if(!clients) | |
+ newclient(); | |
gtk_main(); | |
cleanup(); | |
return EXIT_SUCCESS; |