summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJusung Son <jusung07.son@samsung.com>2020-03-03 09:42:13 +0900
committerJusung Son <jusung07.son@samsung.com>2020-03-03 15:27:29 +0900
commit4d0cfabfd86b85db7405c10d54d2fb3d52d835b9 (patch)
tree0a6774e6b4dc339d36309d8c0a243de5ed4a612e
parent3b3f8435ddfe0cdad2cc870764d73a1e6d20966e (diff)
downloadbuxton2-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.c16
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);