- Stream_event *ev = unsmob_stream_event (sev);
-
- execute_general_pushpop_property (context (),
- ev->get_property ("symbol"),
- ev->get_property ("property-path"),
- ev->get_property ("value"));
+ Stream_event *ev = unsmob<Stream_event> (sev);
+ SCM sym = ev->get_property ("symbol");
+ Grob_property_info gpi (context (), sym);
+
+ if (to_boolean (ev->get_property ("once")))
+ {
+ SCM token = gpi.temporary_override (ev->get_property ("property-path"),
+ ev->get_property ("value"));
+ if (scm_is_pair (token))
+ if (Global_context *g = context ()->get_global_context ())
+ {
+ g->add_finalization (scm_list_4 (ly_context_matched_pop_property_proc,
+ context ()->self_scm (),
+ sym,
+ token));
+ }
+ }
+ else
+ gpi.push (ev->get_property ("property-path"),
+ ev->get_property ("value"));