From 415e072a3af292937f0b4c41acadafaee6958437 Mon Sep 17 00:00:00 2001 From: Erik Reider <35975961+ErikReider@users.noreply.github.com> Date: Fri, 19 May 2023 21:14:06 +0200 Subject: Add blur, shadow, and corner radius to layer-shell surfaces (#144) Co-authored-by: Will McKinnon --- sway/commands/blur.c | 2 +- sway/commands/corner_radius.c | 15 ++++++++++++--- sway/commands/layer_effects.c | 33 +++++++++++++++++++++++++++++++++ sway/commands/shadows.c | 2 +- 4 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 sway/commands/layer_effects.c (limited to 'sway/commands') diff --git a/sway/commands/blur.c b/sway/commands/blur.c index 15dd985d..5607d1e2 100644 --- a/sway/commands/blur.c +++ b/sway/commands/blur.c @@ -12,7 +12,7 @@ struct cmd_results *cmd_blur(int argc, char **argv) { struct sway_container *con = config->handler_context.container; - bool result = parse_boolean(argv[0], config->blur_enabled); + bool result = parse_boolean(argv[0], true); if (con == NULL) { config->blur_enabled = result; } else { diff --git a/sway/commands/corner_radius.c b/sway/commands/corner_radius.c index ab216f6e..fe8b458f 100644 --- a/sway/commands/corner_radius.c +++ b/sway/commands/corner_radius.c @@ -4,15 +4,24 @@ #include "sway/tree/container.h" #include "log.h" +bool cmd_corner_radius_parse_value(char *arg, int* result) { + char *inv; + int value = strtol(arg, &inv, 10); + if (*inv != '\0' || value < 0 || value > 99) { + return false; + } + *result = value; + return true; +} + struct cmd_results *cmd_corner_radius(int argc, char **argv) { struct cmd_results *error = NULL; if ((error = checkarg(argc, "corner_radius", EXPECTED_EQUAL_TO, 1))) { return error; } - char *inv; - int value = strtol(argv[0], &inv, 10); - if (*inv != '\0' || value < 0 || value > 99) { + int value = 0; + if (!cmd_corner_radius_parse_value(argv[0], &value)) { return cmd_results_new(CMD_FAILURE, "Invalid size specified"); } diff --git a/sway/commands/layer_effects.c b/sway/commands/layer_effects.c new file mode 100644 index 00000000..3d5cc8c0 --- /dev/null +++ b/sway/commands/layer_effects.c @@ -0,0 +1,33 @@ +#include +#include "log.h" +#include "stringop.h" +#include "sway/commands.h" +#include "sway/config.h" +#include "sway/layer_criteria.h" +#include "sway/output.h" +#include "util.h" + +struct cmd_results *cmd_layer_effects(int argc, char **argv) { + struct cmd_results *error = NULL; + if ((error = checkarg(argc, "layer_effects", EXPECTED_AT_LEAST, 2))) { + return error; + } + + struct layer_criteria *criteria = malloc(sizeof(struct layer_criteria)); + criteria->namespace = malloc(strlen(argv[0]) + 1); + strcpy(criteria->namespace, argv[0]); + criteria->cmdlist = join_args(argv + 1, argc - 1); + + // Check if the rule already exists + if (layer_criteria_already_exists(criteria)) { + sway_log(SWAY_DEBUG, "layer_effect already exists: '%s' '%s'", + criteria->namespace, criteria->cmdlist); + layer_criteria_destroy(criteria); + return cmd_results_new(CMD_SUCCESS, NULL); + } + + list_add(config->layer_criteria, criteria); + sway_log(SWAY_DEBUG, "layer_effect: '%s' '%s' added", criteria->namespace, criteria->cmdlist); + + return cmd_results_new(CMD_SUCCESS, NULL); +} diff --git a/sway/commands/shadows.c b/sway/commands/shadows.c index 2b57b2e6..ae7fc019 100644 --- a/sway/commands/shadows.c +++ b/sway/commands/shadows.c @@ -17,7 +17,7 @@ struct cmd_results *cmd_shadows(int argc, char **argv) { struct sway_container *con = config->handler_context.container; - bool result = parse_boolean(argv[0], config->shadow_enabled); + bool result = parse_boolean(argv[0], true); if (con == NULL) { config->shadow_enabled = result; } else { -- cgit v1.2.3