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.
This commit is contained in:
Daniel Eklöf 2018-12-29 14:36:18 +01:00
parent 6019129acc
commit 5164d1d6ea
7 changed files with 14 additions and 7 deletions

View file

@ -8,15 +8,18 @@ particle_default_destroy(struct particle *particle)
{ {
if (particle->deco != NULL) if (particle->deco != NULL)
particle->deco->destroy(particle->deco); particle->deco->destroy(particle->deco);
free(particle->on_click_template);
free(particle); free(particle);
} }
struct 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)); struct particle *p = malloc(sizeof(*p));
p->left_margin = left_margin; p->left_margin = left_margin;
p->right_margin = right_margin; p->right_margin = right_margin;
p->on_click_template = on_click_template != NULL ? strdup(on_click_template) : NULL;
p->deco = NULL; p->deco = NULL;
return p; return p;
} }

View file

@ -7,6 +7,7 @@
#include "font.h" #include "font.h"
#include "tag.h" #include "tag.h"
struct bar;
struct exposable; struct exposable;
struct particle { struct particle {
@ -14,6 +15,7 @@ struct particle {
int left_margin, right_margin; int left_margin, right_margin;
struct deco *deco; struct deco *deco;
char *on_click_template;
void (*destroy)(struct particle *particle); void (*destroy)(struct particle *particle);
struct exposable *(*instantiate)(const struct particle *particle, struct exposable *(*instantiate)(const struct particle *particle,
@ -30,6 +32,7 @@ struct exposable {
void *private; void *private;
int width; /* Should be set by begin_expose(), at latest */ int width; /* Should be set by begin_expose(), at latest */
char *on_click;
void (*destroy)(struct exposable *exposable); void (*destroy)(struct exposable *exposable);
int (*begin_expose)(struct exposable *exposable, cairo_t *cr); int (*begin_expose)(struct exposable *exposable, cairo_t *cr);
@ -40,7 +43,8 @@ struct exposable {
enum mouse_event event, int x, int y); 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); void particle_default_destroy(struct particle *particle);
struct exposable *exposable_common_new( struct exposable *exposable_common_new(

View file

@ -30,7 +30,7 @@ instantiate(const struct particle *particle, const struct tag_set *tags)
struct particle * struct particle *
particle_empty_new(int left_margin, int right_margin) 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->destroy = &particle_default_destroy;
particle->instantiate = &instantiate; particle->instantiate = &instantiate;
return particle; return particle;

View file

@ -123,7 +123,7 @@ particle_list_new(
for (size_t i = 0; i < count; i++) for (size_t i = 0; i < count; i++)
p->particles[i] = particles[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->private = p;
particle->destroy = &particle_destroy; particle->destroy = &particle_destroy;

View file

@ -60,7 +60,7 @@ struct particle *
particle_map_new(const char *tag, const struct particle_map *particle_map, particle_map_new(const char *tag, const struct particle_map *particle_map,
size_t count, struct particle *default_particle) 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->destroy = &particle_destroy;
particle->instantiate = &instantiate; particle->instantiate = &instantiate;

View file

@ -175,7 +175,7 @@ particle_progress_bar_new(const char *tag, int width,
priv->empty = empty; priv->empty = empty;
priv->indicator = indicator; 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->private = priv;
particle->destroy = &particle_destroy; particle->destroy = &particle_destroy;
particle->instantiate = &instantiate; particle->instantiate = &instantiate;

View file

@ -61,7 +61,7 @@ instantiate(const struct particle *particle, const struct tag_set *tags)
struct particle * struct particle *
particle_ramp_new(const char *tag, struct particle *particles[], size_t count) 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->destroy = &particle_destroy;
particle->instantiate = &instantiate; particle->instantiate = &instantiate;