diff options
author | Jusung Son <jusung07.son@samsung.com> | 2020-03-03 09:42:13 +0900 |
---|---|---|
committer | Jusung Son <jusung07.son@samsung.com> | 2020-03-03 15:27:29 +0900 |
commit | 4d0cfabfd86b85db7405c10d54d2fb3d52d835b9 (patch) | |
tree | 0a6774e6b4dc339d36309d8c0a243de5ed4a612e | |
parent | 3b3f8435ddfe0cdad2cc870764d73a1e6d20966e (diff) | |
download | buxton2-4d0cfabfd86b85db7405c10d54d2fb3d52d835b9.tar.gz buxton2-4d0cfabfd86b85db7405c10d54d2fb3d52d835b9.tar.bz2 buxton2-4d0cfabfd86b85db7405c10d54d2fb3d52d835b9.zip |
Fix base layer setting bug
- If base layer is changed, normal layer should also be changed.
Change-Id: Ie090d29a08cba83698bf7ceffa125831163ab34e
Signed-off-by: Jusung Son <jusung07.son@samsung.com>
-rw-r--r-- | common/direct.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/common/direct.c b/common/direct.c index 525e7a2..cabc3a9 100644 --- a/common/direct.c +++ b/common/direct.c @@ -291,6 +291,7 @@ int direct_set(const struct buxton_layer *layer, const struct layer *ly; char *rp; char *wp; + struct buxton_layer unset_layer; if (!layer || !key || !*key || !val) { bxt_err("Invalid parameter"); @@ -306,6 +307,21 @@ int direct_set(const struct buxton_layer *layer, 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); |