On Mon, 23 Mar 2009, DJ Delorie wrote: > >> This was the simpler and more general change. > >Simpler and more general does not always mean better. To me, the more >general solution is to be able to add/remove single actions, with >their own context. Other functions can build on that. If the >internals of that code need to be changed to support that, it's a >change we need to now to avoid more work later. > >Creating a new API that will never be used in its full functionality >seems wrong to me. > >> I don't say the GUI should know about context, but that, as the GTK >> hid does, the GUI hid should not do this directly but call >> hid_actionv() from hid/common/actions.c. > >Perhaps hid_find_action could set the global context pointer? > >> I have one more layer, which is not part of this patch but the >> plugin, where I do this. My approach is doing the smallest but more >> general patch to the core and do everything else in plugins. > >My approach is to create the best API in the core so that the least >amount of code need be duplicated in plugins. >
After polishing the API on irc, the final(?) version of the proposed API is attached.
--- pcb.orig/src/hid.h 2009-02-21 18:51:54.000000000 +0100 +++ pcb/src/hid.h 2009-03-23 06:25:44.000000000 +0100 @@ -86,7 +86,21 @@ const char *syntax; } HID_Action; + /* This global variable is always set to the action context, + before an action callback is called. Action context can + be specified when registering an action with hid_register_action() */ + extern void *hid_action_context; + + /* Register a singe action associated with an action context */ + extern void hid_register_actions(HID_Action *, void *); + + /* Deregister an action; returns 0 on success. Action context pointer is copied + in the 2nd argument if it's not NULL */ + extern void hid_deregister_action(const char *, void **); + + /* Register a list of actions without action context */ extern void hid_register_actions (HID_Action *, int); + #define REGISTER_ACTIONS(a) HIDCONCAT(void register_,a) ()\ { hid_register_actions(a, sizeof(a)/sizeof(a[0])); }
_______________________________________________ geda-user mailing list geda-user@moria.seul.org http://www.seul.org/cgi-bin/mailman/listinfo/geda-user