]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/voice-regs.cc
release: 0.0.57
[lilypond.git] / lily / voice-regs.cc
index 55732e52a24065a8af2fc04e7b95f1fe38244f70..7545442c6e15431c67d1c007729c96f1bd50a757 100644 (file)
@@ -18,6 +18,7 @@
 
 Voice_registers::Voice_registers(Voice *v_p, Input_register const*ireg_C)
 {
+    terminate_b_ = false;
     ireg_C_ = ireg_C;
     voice_l_ = v_p;
     add(ireg_C->get_nongroup_p_arr());
@@ -39,7 +40,7 @@ Voice_registers::try_request(Request*r_l)
     
     Command_req *c=r_l->command();
     if (c&&c->terminate()) {
-       daddy_reg_l_->terminate_register(this);
+       terminate_b_ = true;
        return true;            // scary. We're deleted now.. 
     } else if (c&&c->groupchange()) {
        /* this is scary as well. The groupchange has to be handled by
@@ -49,7 +50,7 @@ Voice_registers::try_request(Request*r_l)
        assert(daddy_reg_l_->name() == Voice_group_registers::static_name());
        ((Staff_registers*)daddy_reg_l_->daddy_reg_l_)->        // scary.
            change_group(c->groupchange(), this,
-                        (Voice_group_registers*)daddy_reg_l_); // UGR!
+                        (Voice_group_registers*)daddy_reg_l_); // ugh!
        return true;
     }
     
@@ -73,3 +74,12 @@ Voice_registers::do_print() const
     Register_group_register::do_print();
 #endif
 }
+
+void
+Voice_registers::pre_move_processing()
+{
+    if (terminate_b_)
+       daddy_reg_l_->terminate_register(this);
+    else 
+       Register_group_register::pre_move_processing();
+}