Re: Undo Toolbar Button Refresh Issue

Ted Felix <ted-Ll1PANez7xxWk0Htik3J/[email protected]> Mon, 10 Feb 2025 09:21:52 -0500
Newsgroups gmane.comp.audio.rosegarden.user
Message-ID <[email protected]>
   You fixed this a long time ago.  I had some old email with what 
looked like a better fix.  That fix breaks the moving pointer in matrix. 
  I reverted the broken fix and went back to yours.  Everything should 
work fine like it has for years now.  Nothing to worry about.

Ted.

On 2/10/25 4:39 AM, Philip Leishman via Rosegarden-user wrote:
> 
> I tried looking at this after the revert.
> I cannot reproduce the original error. All the notes are cleanly removed
> by the undo button.
> 
> Is there a definite procedure for reproducing ?
> Should this be a bug ?
> 
>    Philip
> 
> 
> On 06/02/2025 19:30, Ted Felix wrote:
>> Just pushed a new fix [de2d72f2] for an old problem.  Using the undo
>> *toolbar button* in the matrix sometimes didn't refresh. Especially
>> with the playback pointer in the segment.
>>
>>   Please test latest git.  Here's the procedure:
>>
>> - Create a big segment.  8 bars or so.
>>
>> - Open the matrix on that segment.
>>
>> - Make sure the playback position pointer is in the segment.
>>
>> - Add 30 or so random notes so that you can see them all at once.
>>
>> - Use the *toolbar* undo button (not the toolbar undo history drop down,
>> not Ctrl+Z and not the menu) to remove the notes one by one, paying
>> attention to whether they go away each time.
>>
>> - Confirm that each note goes away each time the undo toolbar button is
>> pressed.
>>
>>   This is an ancient patch from David Faure from 2022 that fell
>> through the cracks.
>>
>>   Complete details are in this thread on the devel mailing list:
>>
>> https://sourceforge.net/p/rosegarden/mailman/rosegarden-devel/ 
>> thread/[email protected]/
>>
>>
>> Ted.
>>
>> On 6/6/22 9:47 AM, David Faure wrote:
>>> Debugging this a little bit further (I like tricky bugs) shows a
>>> number of
>>> surprising facts.
>>>
>>> 1) One undo step sometimes calls Segment::notifyRemove more than once.
>>>
>>> This is because BasicCommand::unexecute() calls copyFrom() which does
>>>
>>> m_segment->erase(m_segment->findTime(m_modifiedEventsStart),
>>>     m_segment->findTime(m_modifiedEventsEnd));
>>>
>>> As the comment in BasicCommand.cpp:302 says, surely this copyFrom()
>>> should be
>>> done without firing notifications?
>>>
>>> Note however that this isn't the actual problem. It's just rather
>>> confusing
>>> while debugging ;)
>>> But even if MatrixScene::handleEventRemoved() is called multiple times,
>>> the update() in there has no effect after the first call.
>>> The first call sets d->updateAll to true (in QGraphicsScene), the
>>> following
>>> calls return immediately because updateAll is true. It gets set to false
>>> whenever actual drawing happens (QGraphicsScene::drawItems, called by
>>> QGraphicsView::paintEvent).
>>>
>>> 2) While debugging deep within Qt, I found out that the "dirty"
>>> region of the
>>> graphicsview's viewport is only 4 pixels wide, because
>>> Panned::showPositionPointer calls viewport()->update(oldRect) which
>>> is a 4
>>> pixels wide rectangle. Normally the graphicsview is repainted via the
>>> scene's
>>> update() mechanism (which stores a dirtyRegion in QGraphicsView
>>> itself). I
>>> think the heart of the bug is a collision between the two update
>>> mechanisms.
>>> The scene thinks it's going to trigger a repaint of the whole view,
>>> but the
>>> view has stored only a tiny update region.
>>>
>>> I think it can be fixed by using scene()->update() instead.
>>> Patch attached, please test (I have of course reverted the commit
>>> that removes
>>> the update() call from MatrixScene::handleEventRemoved).
>>>
>>> But this makes me wonder, why is the "pointer" drawn in
>>> drawForeground, after
>>> these complex manual updates, instead of making the pointer a
>>> graphics item
>>> and letting QGraphicsScene/QGraphicsView take care of updating
>>> correctly for
>>> that item?
>>>
>>>
>>>
>>> _______________________________________________
>>> Rosegarden-devel mailing list
>>> [email protected] - use the link below to
>>> unsubscribe
>>> https://lists.sourceforge.net/lists/listinfo/rosegarden-devel
>>
>>
>>
>> _______________________________________________
>> Rosegarden-user mailing list
>> [email protected] - use the link below to unsubscribe
>> https://lists.sourceforge.net/lists/listinfo/rosegarden-user
> 
> 
> 
> _______________________________________________
> Rosegarden-user mailing list
> [email protected] - use the link below to unsubscribe
> https://lists.sourceforge.net/lists/listinfo/rosegarden-user



_______________________________________________
Rosegarden-user mailing list
[email protected] - use the link below to unsubscribe
https://lists.sourceforge.net/lists/listinfo/rosegarden-user