diff --git a/src/app/ui/editor/delayed_mouse_move.cpp b/src/app/ui/editor/delayed_mouse_move.cpp index d9c44bbc8..d5b21129e 100644 --- a/src/app/ui/editor/delayed_mouse_move.cpp +++ b/src/app/ui/editor/delayed_mouse_move.cpp @@ -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()) diff --git a/src/app/ui/editor/delayed_mouse_move.h b/src/app/ui/editor/delayed_mouse_move.h index 31dddc486..d42aede56 100644 --- a/src/app/ui/editor/delayed_mouse_move.h +++ b/src/app/ui/editor/delayed_mouse_move.h @@ -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: diff --git a/src/app/ui/editor/moving_pixels_state.cpp b/src/app/ui/editor/moving_pixels_state.cpp index 3565b7294..5f9f926d9 100644 --- a/src/app/ui/editor/moving_pixels_state.cpp +++ b/src/app/ui/editor/moving_pixels_state.cpp @@ -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();