From: <mar...@us...> - 2013-05-26 13:18:30
|
Revision: 5512 http://navit.svn.sourceforge.net/navit/?rev=5512&view=rev Author: martin-s Date: 2013-05-26 13:18:21 +0000 (Sun, 26 May 2013) Log Message: ----------- Add:Core:Allow arbitrary contexts for saved command Modified Paths: -------------- trunk/navit/navit/command.c trunk/navit/navit/command.h Modified: trunk/navit/navit/command.c =================================================================== --- trunk/navit/navit/command.c 2013-05-26 13:17:27 UTC (rev 5511) +++ trunk/navit/navit/command.c 2013-05-26 13:18:21 UTC (rev 5512) @@ -63,7 +63,7 @@ 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 @@ 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 @@ 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 @@ 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 @@ if (status == 2) { prev = cs->res.attr; } else { - prev = cs->navit; + prev = cs->context_attr; } } @@ -1552,14 +1552,13 @@ } 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 @@ 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) { Modified: trunk/navit/navit/command.h =================================================================== --- trunk/navit/navit/command.h 2013-05-26 13:17:27 UTC (rev 5511) +++ trunk/navit/navit/command.h 2013-05-26 13:18:21 UTC (rev 5512) @@ -51,6 +51,7 @@ 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 */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |