From 5164d1d6ea18e88730067bb5b30b62acfca24496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sat, 29 Dec 2018 14:36:18 +0100 Subject: [PATCH] particle: add an 'on_click_template' to base constructor. This is intended to be a format-like string, with the possibility to use tag formatters. The expanded string will later be passed to the system() call. --- particle.c | 5 ++++- particle.h | 6 +++++- particles/empty.c | 2 +- particles/list.c | 2 +- particles/map.c | 2 +- particles/progress_bar.c | 2 +- particles/ramp.c | 2 +- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/particle.c b/particle.c index 996de4c..e00827e 100644 --- a/particle.c +++ b/particle.c @@ -8,15 +8,18 @@ particle_default_destroy(struct particle *particle) { if (particle->deco != NULL) particle->deco->destroy(particle->deco); + free(particle->on_click_template); free(particle); } struct particle * -particle_common_new(int left_margin, int right_margin) +particle_common_new(int left_margin, int right_margin, + const char *on_click_template) { struct particle *p = malloc(sizeof(*p)); p->left_margin = left_margin; p->right_margin = right_margin; + p->on_click_template = on_click_template != NULL ? strdup(on_click_template) : NULL; p->deco = NULL; return p; } diff --git a/particle.h b/particle.h index b2211f6..4d5c2db 100644 --- a/particle.h +++ b/particle.h @@ -7,6 +7,7 @@ #include "font.h" #include "tag.h" +struct bar; struct exposable; struct particle { @@ -14,6 +15,7 @@ struct particle { int left_margin, right_margin; struct deco *deco; + char *on_click_template; void (*destroy)(struct particle *particle); struct exposable *(*instantiate)(const struct particle *particle, @@ -30,6 +32,7 @@ struct exposable { void *private; int width; /* Should be set by begin_expose(), at latest */ + char *on_click; void (*destroy)(struct exposable *exposable); int (*begin_expose)(struct exposable *exposable, cairo_t *cr); @@ -40,7 +43,8 @@ struct exposable { enum mouse_event event, int x, int y); }; -struct particle *particle_common_new(int left_margin, int right_margin); +struct particle *particle_common_new(int left_margin, int right_margin, + const char *on_click_template); void particle_default_destroy(struct particle *particle); struct exposable *exposable_common_new( diff --git a/particles/empty.c b/particles/empty.c index 93d254e..3694151 100644 --- a/particles/empty.c +++ b/particles/empty.c @@ -30,7 +30,7 @@ instantiate(const struct particle *particle, const struct tag_set *tags) struct particle * particle_empty_new(int left_margin, int right_margin) { - struct particle *particle = particle_common_new(left_margin, right_margin); + struct particle *particle = particle_common_new(left_margin, right_margin, NULL); particle->destroy = &particle_default_destroy; particle->instantiate = &instantiate; return particle; diff --git a/particles/list.c b/particles/list.c index d273845..e3e7acb 100644 --- a/particles/list.c +++ b/particles/list.c @@ -123,7 +123,7 @@ particle_list_new( for (size_t i = 0; i < count; i++) p->particles[i] = particles[i]; - struct particle *particle = particle_common_new(left_margin, right_margin); + struct particle *particle = particle_common_new(left_margin, right_margin, NULL); particle->private = p; particle->destroy = &particle_destroy; diff --git a/particles/map.c b/particles/map.c index 901d797..3287219 100644 --- a/particles/map.c +++ b/particles/map.c @@ -60,7 +60,7 @@ struct particle * particle_map_new(const char *tag, const struct particle_map *particle_map, size_t count, struct particle *default_particle) { - struct particle *particle = particle_common_new(0, 0); + struct particle *particle = particle_common_new(0, 0, NULL); particle->destroy = &particle_destroy; particle->instantiate = &instantiate; diff --git a/particles/progress_bar.c b/particles/progress_bar.c index ca02d77..73c0cbc 100644 --- a/particles/progress_bar.c +++ b/particles/progress_bar.c @@ -175,7 +175,7 @@ particle_progress_bar_new(const char *tag, int width, priv->empty = empty; priv->indicator = indicator; - struct particle *particle = particle_common_new(left_margin, right_margin); + struct particle *particle = particle_common_new(left_margin, right_margin, NULL); particle->private = priv; particle->destroy = &particle_destroy; particle->instantiate = &instantiate; diff --git a/particles/ramp.c b/particles/ramp.c index 6448934..118adb0 100644 --- a/particles/ramp.c +++ b/particles/ramp.c @@ -61,7 +61,7 @@ instantiate(const struct particle *particle, const struct tag_set *tags) struct particle * particle_ramp_new(const char *tag, struct particle *particles[], size_t count) { - struct particle *particle = particle_common_new(0, 0); + struct particle *particle = particle_common_new(0, 0, NULL); particle->destroy = &particle_destroy; particle->instantiate = &instantiate;