diff options
Diffstat (limited to 'props.c')
-rw-r--r-- | props.c | 19 |
1 files changed, 12 insertions, 7 deletions
@@ -226,14 +226,16 @@ parsetext(char *str, PropVal *p) } PropVal -getprop(GuiElement *g, int tag) +getprop(GuiElement *g, int tag, int lock) { PropVal *v = nil; - rlock(&g->lock); + if(lock) + rlock(&g->lock); for(int i = 0; i < g->nprops && v == nil; i++) if(g->props[i].tag == tag) v = &g->props[i].val; - runlock(&g->lock); + if(lock) + runlock(&g->lock); if(v == nil) sysfatal("invalid prop for this gui element"); @@ -242,15 +244,18 @@ getprop(GuiElement *g, int tag) } void -setprop(GuiElement *g, int tag, PropVal val) +setprop(GuiElement *g, int tag, PropVal val, int lock) { - wlock(&g->lock); + if(lock) + wlock(&g->lock); /* TODO: free old propval */ for(int i = 0; i < g->nprops; i++) if(g->props[i].tag == tag) g->props[i].val = val; - wunlock(&g->lock); - updategui(0); + if(lock){ + wunlock(&g->lock); + updategui(0); /* Can't update gui if the user has write-locked g */ + } } PropSpec propspecs[Pmax] = { |