aboutsummaryrefslogtreecommitdiff
path: root/src/blocks/slider.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/blocks/slider.c')
-rw-r--r--src/blocks/slider.c64
1 files changed, 47 insertions, 17 deletions
diff --git a/src/blocks/slider.c b/src/blocks/slider.c
index 34d6c35..1b5d4c3 100644
--- a/src/blocks/slider.c
+++ b/src/blocks/slider.c
@@ -34,6 +34,9 @@ typedef struct {
gradient_t knob_color;
gradient_t knob_line_color;
double knob_rotation;
+ action_t *left_click;
+ action_t *middle_click;
+ action_t *right_click;
} block_slider_t;
static void block_slider_layout(block_t *block, layout_t *layout, layout_info_t info)
@@ -242,6 +245,29 @@ static int block_slider_validate(block_t *block, config_t *config)
return errors;
}
+static bool block_slider_resolve(block_t *block, config_t *config)
+{
+ block_slider_t *slider = (block_slider_t *)block;
+
+ action_t **actions[] = {
+ &slider->left_click,
+ &slider->middle_click,
+ &slider->right_click,
+ };
+
+ for (size_t i = 0; i < 3; i++) {
+ char *label = (char *)*actions[i];
+ if (label == NULL) continue;
+
+ if (!config_resolve_action(config, label, actions[i]))
+ return false;
+
+ free(label);
+ }
+
+ return true;
+}
+
static config_enum_t knob_shape_enum[] = {
{ "none", KNOB_NONE },
{ "capsule", KNOB_CAPSULE },
@@ -252,23 +278,26 @@ static config_enum_t knob_shape_enum[] = {
static const config_entry_t block_slider_entries[] = {
// TODO: Ugly names
- { "bar-color", CONFIG_GRADIENT, NULL, offsetof(block_slider_t, bar_color) },
- { "bar-line-color", CONFIG_GRADIENT, NULL, offsetof(block_slider_t, line_color) },
- { "bar-bg-color", CONFIG_GRADIENT, NULL, offsetof(block_slider_t, bg_color) },
- { "bar-height", CONFIG_UINT, NULL, offsetof(block_slider_t, height) },
- { "bar-width", CONFIG_UINT, NULL, offsetof(block_slider_t, width) },
- { "bar-line-width", CONFIG_UINT, NULL, offsetof(block_slider_t, line_width) },
- { "bar-value", CONFIG_INT, NULL, offsetof(block_slider_t, value) },
- { "seekable", CONFIG_BOOL, NULL, offsetof(block_slider_t, seekable) },
- { "knob", CONFIG_ENUM, knob_shape_enum, offsetof(block_slider_t, knob) },
- { "knob-height", CONFIG_UINT, NULL, offsetof(block_slider_t, knob_height) },
- { "knob-width", CONFIG_UINT, NULL, offsetof(block_slider_t, knob_width) },
- { "knob-line-width", CONFIG_UINT, NULL, offsetof(block_slider_t, knob_line_width) },
- { "knob-color", CONFIG_GRADIENT, NULL, offsetof(block_slider_t, knob_color) },
- { "knob-line-color", CONFIG_GRADIENT, NULL, offsetof(block_slider_t, knob_line_color) },
- { "knob-x-offset", CONFIG_INT, NULL, offsetof(block_slider_t, knob_x_offset) },
- { "knob-y-offset", CONFIG_INT, NULL, offsetof(block_slider_t, knob_y_offset) },
- { "knob-rotation", CONFIG_DOUBLE, NULL, offsetof(block_slider_t, knob_rotation) },
+ { "bar-color", CONFIG_GRADIENT, NULL, offsetof(block_slider_t, bar_color) },
+ { "bar-line-color", CONFIG_GRADIENT, NULL, offsetof(block_slider_t, line_color) },
+ { "bar-bg-color", CONFIG_GRADIENT, NULL, offsetof(block_slider_t, bg_color) },
+ { "bar-height", CONFIG_UINT, NULL, offsetof(block_slider_t, height) },
+ { "bar-width", CONFIG_UINT, NULL, offsetof(block_slider_t, width) },
+ { "bar-line-width", CONFIG_UINT, NULL, offsetof(block_slider_t, line_width) },
+ { "bar-value", CONFIG_INT, NULL, offsetof(block_slider_t, value) },
+ { "seekable", CONFIG_BOOL, NULL, offsetof(block_slider_t, seekable) },
+ { "knob", CONFIG_ENUM, knob_shape_enum, offsetof(block_slider_t, knob) },
+ { "knob-height", CONFIG_UINT, NULL, offsetof(block_slider_t, knob_height) },
+ { "knob-width", CONFIG_UINT, NULL, offsetof(block_slider_t, knob_width) },
+ { "knob-line-width", CONFIG_UINT, NULL, offsetof(block_slider_t, knob_line_width) },
+ { "knob-color", CONFIG_GRADIENT, NULL, offsetof(block_slider_t, knob_color) },
+ { "knob-line-color", CONFIG_GRADIENT, NULL, offsetof(block_slider_t, knob_line_color) },
+ { "knob-x-offset", CONFIG_INT, NULL, offsetof(block_slider_t, knob_x_offset) },
+ { "knob-y-offset", CONFIG_INT, NULL, offsetof(block_slider_t, knob_y_offset) },
+ { "knob-rotation", CONFIG_DOUBLE, NULL, offsetof(block_slider_t, knob_rotation) },
+ { "left-click-bar", CONFIG_STRING, NULL, offsetof(block_slider_t, left_click) },
+ { "middle-click-bar", CONFIG_STRING, NULL, offsetof(block_slider_t, middle_click) },
+ { "right-click-bar", CONFIG_STRING, NULL, offsetof(block_slider_t, right_click) },
{ 0 },
};
@@ -285,5 +314,6 @@ const block_scheme_t block_slider_scheme = {
.init_fn = block_slider_init,
.clean_fn = block_slider_clean,
.validate_fn = block_slider_validate,
+ .resolve_fn = block_slider_resolve,
.change_fn = block_slider_change,
};