const struct layer *ly;
char *rp;
char *wp;
+ struct buxton_layer unset_layer;
if (!layer || !key || !*key || !val) {
bxt_err("Invalid parameter");
return r;
r = set_val(ly, layer->uid, layer->type, key, rp, wp, val);
+ if (r != BUXTON_ERROR_NONE) {
+ free(rp);
+ free(wp);
+ return r;
+ }
+
+ if (layer->type == LAYER_ATTRIBUTE_RO) {
+ r = set_val(ly, layer->uid, LAYER_ATTRIBUTE_RW, key, rp, wp, val);
+ if (r != BUXTON_ERROR_NONE) {
+ bxt_err("failed to set (%s: %s) %d", ly->name, key, r);
+ unset_layer = *layer;
+ unset_layer.type = LAYER_ATTRIBUTE_RO;
+ direct_unset(&unset_layer, key);
+ }
+ }
free(rp);
free(wp);