Fix base layer setting bug 43/226443/2
authorJusung Son <jusung07.son@samsung.com>
Tue, 3 Mar 2020 00:42:13 +0000 (09:42 +0900)
committerJusung Son <jusung07.son@samsung.com>
Tue, 3 Mar 2020 06:27:29 +0000 (15:27 +0900)
  - If base layer is changed, normal layer should also be changed.

Change-Id: Ie090d29a08cba83698bf7ceffa125831163ab34e
Signed-off-by: Jusung Son <jusung07.son@samsung.com>
common/direct.c

index 525e7a2..cabc3a9 100644 (file)
@@ -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);