diff --git a/src/app/ui/editor/moving_pixels_state.cpp b/src/app/ui/editor/moving_pixels_state.cpp index a0a83040e..e740ce7f5 100644 --- a/src/app/ui/editor/moving_pixels_state.cpp +++ b/src/app/ui/editor/moving_pixels_state.cpp @@ -52,7 +52,8 @@ namespace app { using namespace ui; MovingPixelsState::MovingPixelsState(Editor* editor, MouseMessage* msg, PixelsMovementPtr pixelsMovement, HandleType handle) - : m_editor(editor) + : m_pixelsMovement(pixelsMovement) + , m_editor(editor) , m_observingEditor(false) , m_discarded(false) { @@ -63,8 +64,6 @@ MovingPixelsState::MovingPixelsState(Editor* editor, MouseMessage* msg, PixelsMo UIContext* context = UIContext::instance(); - m_pixelsMovement = pixelsMovement; - if (handle != NoHandle) { gfx::Point pt = editor->screenToEditor(msg->position()); m_pixelsMovement->catchImage(pt, handle); @@ -111,9 +110,9 @@ MovingPixelsState::~MovingPixelsState() contextBar->remove_observer(this); contextBar->updateForActiveTool(); - m_pixelsMovement.reset(NULL); - + removePixelsMovement(); removeAsEditorObserver(); + m_editor->manager()->removeMessageFilter(kKeyDownMessage, m_editor); m_editor->manager()->removeMessageFilter(kKeyUpMessage, m_editor); @@ -176,7 +175,7 @@ EditorState::LeaveAction MovingPixelsState::onLeaveState(Editor* editor, EditorS editor->document()->resetTransformation(); - m_pixelsMovement.reset(NULL); + removePixelsMovement(); editor->releaseMouse(); @@ -598,6 +597,8 @@ void MovingPixelsState::onBeforeLayerChanged(Editor* editor) void MovingPixelsState::onTransparentColorChange() { + ASSERT(m_pixelsMovement); + bool opaque = Preferences::instance().selection.opaque(); setTransparentColor( opaque, @@ -677,4 +678,12 @@ void MovingPixelsState::removeAsEditorObserver() } } +void MovingPixelsState::removePixelsMovement() +{ + m_pixelsMovement.reset(nullptr); + m_ctxConn.disconnect(); + m_opaqueConn.disconnect(); + m_transparentConn.disconnect(); +} + } // namespace app diff --git a/src/app/ui/editor/moving_pixels_state.h b/src/app/ui/editor/moving_pixels_state.h index c5282ff0d..90f4de317 100644 --- a/src/app/ui/editor/moving_pixels_state.h +++ b/src/app/ui/editor/moving_pixels_state.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2017 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -72,6 +72,7 @@ namespace app { bool isActiveEditor() const; void removeAsEditorObserver(); + void removePixelsMovement(); // Helper member to move/translate selection and pixels. PixelsMovementPtr m_pixelsMovement; @@ -82,9 +83,9 @@ namespace app { // used to remove the dragged image). bool m_discarded; - obs::scoped_connection m_ctxConn; - obs::scoped_connection m_opaqueConn; - obs::scoped_connection m_transparentConn; + obs::connection m_ctxConn; + obs::connection m_opaqueConn; + obs::connection m_transparentConn; }; } // namespace app