From 3a0e0b8bb6e7fd9bcf510167980d9715e3faeb7b Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Thu, 15 Feb 2024 20:39:09 +0000 Subject: Even more work :) --- props.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'props.c') 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] = { -- cgit v1.2.3