+ Context_def *cdef = path[0];
+
+ Context *new_context = cdef->instantiate (ops);
+
+ new_context->id_string_ = id;
+
+ /* Register various listeners:
+ - Make the new context hear events that universally affect contexts
+ - connect events_below etc. properly */
+ /* We want to be the first ones to hear our own events. Therefore, wait
+ before registering events_below_ */
+ new_context->event_source ()->
+ add_listener (new_context->GET_LISTENER (Context, create_context_from_event),
+ ly_symbol2scm ("CreateContext"));
+ new_context->event_source ()->
+ add_listener (new_context->GET_LISTENER (Context, remove_context),
+ ly_symbol2scm ("RemoveContext"));
+ new_context->event_source ()->
+ add_listener (new_context->GET_LISTENER (Context, change_parent),
+ ly_symbol2scm ("ChangeParent"));
+ new_context->event_source ()->
+ add_listener (new_context->GET_LISTENER (Context, set_property_from_event),
+ ly_symbol2scm ("SetProperty"));
+ new_context->event_source ()->
+ add_listener (new_context->GET_LISTENER (Context, unset_property_from_event),
+ ly_symbol2scm ("UnsetProperty"));
+
+ new_context->events_below_->register_as_listener (new_context->event_source_);
+ add_context (new_context);
+
+ new_context->unprotect ();