+ handle visibility-lambda the item itself iso. breakstatusdir, so
+ the function can do more complicated things.
+
+ */
+ SCM vis = get_elt_property ("visibility-lambda");
+ if (gh_procedure_p (vis))
+ {
+ SCM args = scm_listify (gh_int2scm (break_status_dir ()), SCM_UNDEFINED);
+ SCM result = gh_apply (vis, args);
+ bool trans = gh_scm2bool (gh_car (result));
+ bool empty = gh_scm2bool (gh_cdr (result));
+
+ if (empty && trans)
+ suicide ();
+ else if (empty)
+ {
+ set_extent_callback (SCM_EOL, X_AXIS);
+ set_extent_callback (SCM_EOL, Y_AXIS);
+ }
+ else if (trans)
+ set_elt_property ("molecule-callback", SCM_BOOL_T);
+ }
+}
+
+SCM
+Item::do_derived_mark ()
+{
+ if (broken_to_drul_[LEFT])
+ scm_gc_mark (broken_to_drul_[LEFT]->self_scm ());
+ if (broken_to_drul_[RIGHT])
+ scm_gc_mark (broken_to_drul_[RIGHT]->self_scm ());
+ return SCM_EOL;
+}