diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-05-26 13:18:21 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-05-26 13:18:21 +0000 |
commit | 100241c3a1a3d284cd720b57be9765d73fd461df (patch) | |
tree | 1301546a1eb5af6ac66b4a842cfcd10eac2adbb1 | |
parent | b068d371aeabe538b7158c09c0cc9b5d979c2187 (diff) | |
download | navit-100241c3a1a3d284cd720b57be9765d73fd461df.tar.gz |
Add:Core:Allow arbitrary contexts for saved command
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@5512 ffa7fe5e-494d-0410-b361-a75ebd5db220
-rw-r--r-- | navit/navit/command.c | 24 | ||||
-rw-r--r-- | navit/navit/command.h | 1 |
2 files changed, 16 insertions, 9 deletions
diff --git a/navit/navit/command.c b/navit/navit/command.c index d981c6b66..d15ef4ae8 100644 --- a/navit/navit/command.c +++ b/navit/navit/command.c @@ -63,7 +63,7 @@ struct command_saved { struct callback *idle_cb; struct callback *register_cb; // Callback to register all the callbacks struct event_idle *register_ev; // Idle event to register all the callbacks - struct attr navit; + struct attr context_attr; int num_cbs; struct command_saved_cb *cbs; // List of callbacks for this saved command struct callback *cb; // Callback that should be called when we re-evaluate @@ -1420,7 +1420,7 @@ command_saved_evaluate_idle (struct command_saved *cs) cs->idle_ev = NULL; } - command_evaluate_to(&cs->navit, cs->command, &cs->ctx, &cs->res); + command_evaluate_to(&cs->context_attr, cs->command, &cs->ctx, &cs->res); if (!cs->ctx.error) { cs->error = 0; @@ -1497,10 +1497,10 @@ command_register_callbacks(struct command_saved *cs) struct object_func *func; struct callback *cb; - attr = cs->navit; + attr = cs->context_attr; cs->ctx.expr = cs->command; cs->ctx.attr = &attr; - prev = cs->navit; + prev = cs->context_attr; while ((status = get_next_object(&cs->ctx, &cs->res)) != 0) { resolve(&cs->ctx, &cs->res, NULL); @@ -1519,7 +1519,7 @@ command_register_callbacks(struct command_saved *cs) attr = cs->res.attr; } else if (status == 1) { // This is the final attribute name cb = callback_new_attr_1(callback_cast(command_saved_evaluate), cs->res.attr.type, (void*)cs); - cs->ctx.attr = &cs->navit; + cs->ctx.attr = &cs->context_attr; } else { dbg(0, "Error: Strange status returned from get_next_object()\n"); } @@ -1542,7 +1542,7 @@ command_register_callbacks(struct command_saved *cs) if (status == 2) { prev = cs->res.attr; } else { - prev = cs->navit; + prev = cs->context_attr; } } @@ -1552,14 +1552,13 @@ command_register_callbacks(struct command_saved *cs) } struct command_saved * -command_saved_new(char *command, struct navit *navit, struct callback *cb, int async) +command_saved_attr_new(char *command, struct attr *attr, struct callback *cb, int async) { struct command_saved *ret; ret = g_new0(struct command_saved, 1); ret->command = g_strdup(command); - ret->navit.u.navit = navit; - ret->navit.type = attr_navit; + ret->context_attr = *attr; ret->cb = cb; ret->error = not_ready; ret->async = async; @@ -1573,6 +1572,13 @@ command_saved_new(char *command, struct navit *navit, struct callback *cb, int a return ret; } +struct command_saved * +command_saved_new(char *command, struct navit *navit, struct callback *cb, int async) +{ + struct attr attr=ATTR_OBJECT(navit, navit); + return command_saved_attr_new(command, &attr, cb, async); +} + void command_saved_destroy(struct command_saved *cs) { diff --git a/navit/navit/command.h b/navit/navit/command.h index f13822551..25d2dee09 100644 --- a/navit/navit/command.h +++ b/navit/navit/command.h @@ -51,6 +51,7 @@ void command_add_table(struct callback_list *cbl, struct command_table *table, i void command_saved_set_cb(struct command_saved *cs, struct callback *cb); int command_saved_get_int(struct command_saved *cs); int command_saved_error(struct command_saved *cs); +struct command_saved *command_saved_attr_new(char *command, struct attr *context, struct callback *cb, int async); struct command_saved *command_saved_new(char *command, struct navit *navit, struct callback *cb, int async); void command_saved_destroy(struct command_saved *cs); /* end of prototypes */ |