(sorry, I forgot to attach the patch -- the follow message is duplicated)
Hello,
I have a bug fix to resolve the problem with the fast mouse button
press/release during the insertion of the notes in notation view.
Probably you know it: with a fast press/release, often we hear a note
longer than 1/4 sec and we are forced to press the panic button.
The fix is simple but there is a nice (at least for me) side effect,
therefore I prefer to ask before to apply the attached patch.
After the change, the behaviour remains the same without playback
(insert note and advance the playback pointer) but we have an
uninterrupted short midi note also when the left button press/release
is fast. We can also press the button and drag without unpredictable
(often long) midi notes, so we avoid to use the panic button.
However, during the playback, the cursor doesn't jump on the inserted
note. I think it is a useful feature. For example, I'm using a loop
in notation view to insert notes and controllers without to interrupt
the playback with useless jumps. If we want a jump, we can always
click on the ruler.
With the proposed change, we avoid to stop/start the alsa driver
bypassing the signal `pointerPositionChanged' in RosegardenMainWindow,
because it triggers RosegardenMainWindow::slotSetPointerPosition() and
consequently m_seqManager->sendSequencerJump() (see the message about
m_originatingJump also in slotUpdateUI:4780). I think a simple bypass
is enough because it seems bogus to call stopClocks(), resetPlayback(),
startClocks() & Co after the insertion of a note.
What do you think?
Index: src/gui/editors/notation/NotationWidget.cpp
===================================================================
--- src/gui/editors/notation/NotationWidget.cpp (revision 14095)
+++ src/gui/editors/notation/NotationWidget.cpp (working copy)
@@ -1385,7 +1385,15 @@
void
NotationWidget::setPointerPosition(timeT t)
{
+ disconnect(m_document, SIGNAL(pointerPositionChanged(timeT)),
+ RosegardenMainWindow::self(),
+ SLOT(slotSetPointerPosition(timeT)));
+
m_document->slotSetPointerPosition(t);
+
+ connect(m_document, SIGNAL(pointerPositionChanged(timeT)),
+ RosegardenMainWindow::self(),
+ SLOT(slotSetPointerPosition(timeT)));
}
void
------------------------------------------------------------------------------
_______________________________________________
Rosegarden-devel mailing list
[email protected] - use the link below to unsubscribe
https://lists.sourceforge.net/lists/listinfo/rosegarden-devel