fixing _SURF_URL XProperty.
[surf.git] / surf.c
diff --git a/surf.c b/surf.c
index 35ef358..39b6f12 100644 (file)
--- a/surf.c
+++ b/surf.c
@@ -60,6 +60,7 @@ static void showsearch(Client *c);
 static void showurl(Client *c);
 static void stop(Client *c);
 static void titlechange(WebKitWebView* view, WebKitWebFrame* frame, const gchar* title, gpointer d);
+static void usage();
 static void updatetitle(Client *c, const gchar *title);
 
 void
@@ -203,7 +204,7 @@ keypress(GtkWidget* w, GdkEventKey *ev, gpointer d) {
                        return FALSE;
                }
        }
-       if(ev->state == GDK_CONTROL_MASK || ev->state == (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) {
+       if(ev->state & GDK_CONTROL_MASK) {
                switch(ev->keyval) {
                case GDK_r:
                case GDK_R:
@@ -220,6 +221,16 @@ keypress(GtkWidget* w, GdkEventKey *ev, gpointer d) {
                case GDK_slash:
                        showsearch(c);
                        return TRUE;
+               case GDK_plus:
+               case GDK_equal:
+                       webkit_web_view_zoom_in(c->view);
+                       return TRUE;
+               case GDK_minus:
+                       webkit_web_view_zoom_out(c->view);
+                       return TRUE;
+               case GDK_0:
+                       webkit_web_view_set_zoom_level(c->view, 1.0);
+                       return TRUE;
                case GDK_n:
                case GDK_N:
                        webkit_web_view_search_text(c->view,
@@ -261,8 +272,8 @@ loadcommit(WebKitWebView *view, WebKitWebFrame *f, gpointer d) {
        Client *c = (Client *)d;
        gchar *uri;
 
-       uri = geturi(c);
        ignore_once = TRUE;
+       uri = geturi(c);
        XChangeProperty(dpy, GDK_WINDOW_XID(GTK_WIDGET(c->win)->window), urlprop,
                        XA_STRING, 8, PropModeReplace, (unsigned char *)uri,
                        strlen(uri) + 1);
@@ -331,7 +342,6 @@ newclient(void) {
        gtk_window_set_default_size(GTK_WINDOW(c->win), 800, 600);
        g_signal_connect(G_OBJECT(c->win), "destroy", G_CALLBACK(destroywin), c);
        g_signal_connect(G_OBJECT(c->win), "key-press-event", G_CALLBACK(keypress), c);
-       c->download = NULL;
 
        /* VBox */
        c->vbox = gtk_vbox_new(FALSE, 0);
@@ -381,6 +391,9 @@ newclient(void) {
        gtk_widget_show(c->win);
        gdk_window_set_events(GTK_WIDGET(c->win)->window, GDK_ALL_EVENTS_MASK);
        gdk_window_add_filter(GTK_WIDGET(c->win)->window, processx, c);
+       webkit_web_view_set_full_content_zoom(c->view, TRUE);
+       c->download = NULL;
+       c->title = NULL;
        c->next = clients;
        clients = c;
        if(showxid)
@@ -412,12 +425,16 @@ processx(GdkXEvent *e, GdkEvent *event, gpointer d) {
        unsigned char *buf = NULL;
        if(((XEvent *)e)->type == PropertyNotify) {
                ev = &((XEvent *)e)->xproperty;
-               if(ignore_once == FALSE && ev->atom == urlprop && ev->state == PropertyNewValue) {
-                       XGetWindowProperty(dpy, ev->window, urlprop, 0L, BUFSIZ, False, XA_STRING,
-                               &adummy, &idummy, &ldummy, &ldummy, &buf);
-                       loaduri(c, (gchar *)buf);
-                       XFree(buf);
-                       return GDK_FILTER_REMOVE;
+               if(ev->atom == urlprop && ev->state == PropertyNewValue) {
+                       if(ignore_once)
+                              ignore_once = FALSE;
+                       else {
+                               XGetWindowProperty(dpy, ev->window, urlprop, 0L, BUFSIZ, False, XA_STRING,
+                                       &adummy, &idummy, &ldummy, &ldummy, &buf);
+                               loaduri(c, (gchar *)buf);
+                               XFree(buf);
+                               return GDK_FILTER_REMOVE;
+                       }
                }
        }
        return GDK_FILTER_CONTINUE;
@@ -462,6 +479,12 @@ titlechange(WebKitWebView *v, WebKitWebFrame *f, const gchar *t, gpointer d) {
        updatetitle(c, t);
 }
 
+void
+usage() {
+       fputs("surf - simple browser\n", stderr);
+       die("usage: surf [-e] [-x] [-u uri] [-f file]\n");
+}
+
 void
 updatetitle(Client *c, const char *title) {
        char t[512];
@@ -479,7 +502,6 @@ updatetitle(Client *c, const char *title) {
 }
 
 int main(int argc, char *argv[]) {
-       gchar *uri = NULL, *file = NULL;
        SoupSession *s;
        Client *c;
        int o;
@@ -499,28 +521,21 @@ int main(int argc, char *argv[]) {
                        embed = TRUE;
                        break;
                case 'u':
-                       if(!(uri = optarg))
-                               goto argerr;
                        c = newclient();
-                       loaduri(c, uri);
+                       loaduri(c, optarg);
                        break;
                case 'f':
-                       if(!(file = optarg))
-                               goto argerr;
                        c = newclient();
-                       loadfile(c, file);
+                       loadfile(c, optarg);
                        break;
                case 'v':
                        die("surf-"VERSION", © 2009 surf engineers, see LICENSE for details\n");
                        break;
-               argerr:
                default:
-                       puts("surf - simple browser");
-                       die("usage: surf [-e] [-x] [-u uri] [-f file]\n");
-                       return EXIT_FAILURE;
+                       usage();
                }
        if(optind != argc)
-               goto argerr;
+               usage();
        if(!clients)
                newclient();