Fix crash using a nullptr m_pixelsMovement on MovingPixelsState::onCommitMouseMove() (fix #3161)

This commit is contained in:
David Capello 2022-02-03 10:51:55 -03:00
parent aa188d641b
commit aec012a0d9
3 changed files with 17 additions and 0 deletions

View File

@ -60,6 +60,12 @@ void DelayedMouseMove::onMouseUp(const ui::MouseMessage* msg)
commitMouseMove();
}
void DelayedMouseMove::stopTimer()
{
if (m_timer.isRunning())
m_timer.stop();
}
void DelayedMouseMove::commitMouseMove()
{
if (m_timer.isRunning())

View File

@ -50,6 +50,11 @@ namespace app {
bool onMouseMove(const ui::MouseMessage* msg);
void onMouseUp(const ui::MouseMessage* msg);
// Forces stopping the timer so we don't receive a Tick event in
// case that we've just removed/delete some structure that is
// needed in onCommitMouseMove().
void stopTimer();
const gfx::PointF& spritePos() const;
private:

View File

@ -391,6 +391,8 @@ bool MovingPixelsState::onMouseMove(Editor* editor, MouseMessage* msg)
void MovingPixelsState::onCommitMouseMove(Editor* editor,
const gfx::PointF& spritePos)
{
ASSERT(m_pixelsMovement);
if (!m_pixelsMovement->isDragging())
return;
@ -823,6 +825,10 @@ void MovingPixelsState::removeAsEditorObserver()
void MovingPixelsState::removePixelsMovement()
{
// Avoid receiving a onCommitMouseMove() message when
// m_pixelsMovement is already nullptr.
m_delayedMouseMove.stopTimer();
m_pixelsMovement.reset();
m_ctxConn.disconnect();
m_opaqueConn.disconnect();