mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-14 04:19:12 +00:00
Remove MovingPixelsState as an Editor observer when the editor is destroyed
This commit is contained in:
parent
7cfdf76b0e
commit
46fa7e18cf
@ -53,6 +53,7 @@ using namespace ui;
|
||||
|
||||
MovingPixelsState::MovingPixelsState(Editor* editor, MouseMessage* msg, PixelsMovementPtr pixelsMovement, HandleType handle)
|
||||
: m_editor(editor)
|
||||
, m_observingEditor(false)
|
||||
, m_discarded(false)
|
||||
{
|
||||
// MovingPixelsState needs a selection tool to avoid problems
|
||||
@ -97,6 +98,7 @@ MovingPixelsState::MovingPixelsState(Editor* editor, MouseMessage* msg, PixelsMo
|
||||
m_editor->getManager()->addMessageFilter(kKeyDownMessage, m_editor);
|
||||
m_editor->getManager()->addMessageFilter(kKeyUpMessage, m_editor);
|
||||
m_editor->addObserver(this);
|
||||
m_observingEditor = true;
|
||||
|
||||
ContextBar* contextBar = App::instance()->getMainWindow()->getContextBar();
|
||||
contextBar->updateForMovingPixels();
|
||||
@ -111,7 +113,7 @@ MovingPixelsState::~MovingPixelsState()
|
||||
|
||||
m_pixelsMovement.reset(NULL);
|
||||
|
||||
m_editor->removeObserver(this);
|
||||
removeAsEditorObserver();
|
||||
m_editor->getManager()->removeMessageFilter(kKeyDownMessage, m_editor);
|
||||
m_editor->getManager()->removeMessageFilter(kKeyUpMessage, m_editor);
|
||||
|
||||
@ -486,6 +488,13 @@ void MovingPixelsState::onBeforeCommandExecution(Command* command)
|
||||
dropPixels();
|
||||
}
|
||||
|
||||
void MovingPixelsState::onDestroyEditor(Editor* editor)
|
||||
{
|
||||
// TODO we should call ~MovingPixelsState(), we should delete the
|
||||
// whole "m_statesHistory" when an editor is deleted.
|
||||
removeAsEditorObserver();
|
||||
}
|
||||
|
||||
void MovingPixelsState::onBeforeFrameChanged(Editor* editor)
|
||||
{
|
||||
if (!isActiveDocument())
|
||||
@ -570,4 +579,12 @@ bool MovingPixelsState::isActiveEditor() const
|
||||
return (targetEditor == m_editor);
|
||||
}
|
||||
|
||||
void MovingPixelsState::removeAsEditorObserver()
|
||||
{
|
||||
if (m_observingEditor) {
|
||||
m_observingEditor = false;
|
||||
m_editor->removeObserver(this);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace app
|
||||
|
@ -50,6 +50,7 @@ namespace app {
|
||||
virtual bool requireBrushPreview() override { return false; }
|
||||
|
||||
// EditorObserver
|
||||
virtual void onDestroyEditor(Editor* editor) override;
|
||||
virtual void onBeforeFrameChanged(Editor* editor) override;
|
||||
virtual void onBeforeLayerChanged(Editor* editor) override;
|
||||
|
||||
@ -70,9 +71,12 @@ namespace app {
|
||||
bool isActiveDocument() const;
|
||||
bool isActiveEditor() const;
|
||||
|
||||
void removeAsEditorObserver();
|
||||
|
||||
// Helper member to move/translate selection and pixels.
|
||||
PixelsMovementPtr m_pixelsMovement;
|
||||
Editor* m_editor;
|
||||
bool m_observingEditor;
|
||||
|
||||
// True if the image was discarded (e.g. when a "Cut" command was
|
||||
// used to remove the dragged image).
|
||||
|
Loading…
x
Reference in New Issue
Block a user