changing locking algorythm for setprop.
authorEnno Boland (tox) <tox@s01.de>
Sun, 8 Nov 2009 22:45:36 +0000 (23:45 +0100)
committerEnno Boland (tox) <tox@s01.de>
Sun, 8 Nov 2009 22:45:36 +0000 (23:45 +0100)
surf.c

diff --git a/surf.c b/surf.c
index 478c07e..66a60d0 100644 (file)
--- a/surf.c
+++ b/surf.c
@@ -61,7 +61,7 @@ static SoupSession *session;
 static Client *clients = NULL;
 static GdkNativeWindow embed = 0;
 static gboolean showxid = FALSE;
-static int ignorexprop = 0;
+static Time lastxprop = 0;
 static char winid[64];
 static char *progname;
 static gboolean lockcookie = FALSE;
@@ -539,6 +539,7 @@ newclient(void) {
        g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL);
        g_free(uri);
        setatom(c, findprop, "");
+       setatom(c, uriprop, "");
 
        c->download = NULL;
        c->title = NULL;
@@ -596,9 +597,8 @@ processx(GdkXEvent *e, GdkEvent *event, gpointer d) {
 
        if(((XEvent *)e)->type == PropertyNotify) {
                ev = &((XEvent *)e)->xproperty;
-               if(ignorexprop)
-                       ignorexprop--;
-               else if(ev->state == PropertyNewValue) {
+               if((!lastxprop || lastxprop + 512 < ev->time)
+                               && ev->state == PropertyNewValue) {
                        if(ev->atom == uriprop) {
                                arg.v = getatom(c, uriprop);
                                loaduri(c, &arg);
@@ -607,6 +607,7 @@ processx(GdkXEvent *e, GdkEvent *event, gpointer d) {
                                arg.b = TRUE;
                                find(c, &arg);
                        }
+                       lastxprop = ev->time;
                        return GDK_FILTER_REMOVE;
                }
        }
@@ -673,11 +674,10 @@ scroll(Client *c, const Arg *arg) {
 
 void
 setatom(Client *c, Atom a, const char *v) {
-       XSync(dpy, False);
-       ignorexprop++;
        XChangeProperty(dpy, GDK_WINDOW_XID(GTK_WIDGET(c->win)->window), a,
                        XA_STRING, 8, PropModeReplace, (unsigned char *)v,
                        strlen(v) + 1);
+       XSync(dpy, False);
 }
 
 void