summaryrefslogtreecommitdiff
path: root/props.c
diff options
context:
space:
mode:
Diffstat (limited to 'props.c')
-rw-r--r--props.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/props.c b/props.c
index 2937845..0bbd48e 100644
--- a/props.c
+++ b/props.c
@@ -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] = {