I have been working on Cello and seem to have run into a problem arising from the Cells sub-system, specifically the "awakening" process which forces all non-lazy cells to be evaluated.
I have a slot which cannot be evaluated just any old time, it needs the right active OpenGL context (the containing window's). I /could/ have an "active" cell on the window itself and turn it on during GLUT callbacks, but that would be inefficient and a silly way to achieve something more elegantly (I think) conceived of as laziness: do not calculate this until asked. (The specific is the building of the OpenGL display list for a widget.)
Unfortunately, the lazy option as currently set up will not work, because the slot never gets sampled if no containg widget is forced to rebuild its own display list. (the neat thing is that simply rebuilding the named display list causes the Right Thing to happen when the containing display list next gets kicked off.)
Currenty laziness has two manifestations: cells are not awakened artificially, and change propagation stops at them. display-lists need to avoid the artificial awakening but not change propagation.
Since I can imagine another cell requiring awakening but not change propagation, I am considering making the lazy boolean into a code, with legal values:
:until-asked do not awaken artifically, but once asked stop being lazy :after-awakening awaken artificially, but do not propagate change automatically :always, or t current semantics, aka both
I guess i will just go ahead since I am not breaking anything, but comments/questions are welcome.
kt