changing locking algorythm for setprop.

This commit is contained in:
Enno Boland (tox) 2009-11-08 23:45:36 +01:00
parent b57eca1a2b
commit 1d93bfa9ce

12
surf.c
View file

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