From eb319f801dad0d85ae54bb2a3624bac754cddfd6 Mon Sep 17 00:00:00 2001 From: shun-iwasawa Date: Aug 01 2018 05:31:43 +0000 Subject: fix crash on undo merge levels (#2183) --- diff --git a/toonz/sources/toonz/mergecolumns.cpp b/toonz/sources/toonz/mergecolumns.cpp index 027e8d0..6dcd82d 100644 --- a/toonz/sources/toonz/mergecolumns.cpp +++ b/toonz/sources/toonz/mergecolumns.cpp @@ -205,7 +205,7 @@ public: std::map::const_iterator it = m_images.begin(); std::vector fids; - m_level->setPalette(m_palette); + m_level->setPalette(m_palette->clone()); for (; it != m_images.end(); ++it) //, ++mit) { QString id = "MergeColumnsUndo" + QString::number(m_matchlineSessionId) + @@ -236,8 +236,8 @@ public: std::map::const_iterator it = m_images.begin(); for (; it != m_images.end(); ++it) //, ++mit) { - QString id = "MergeColumnsUndo" + QString::number((uintptr_t)this) + "-" + - QString::number(it->first.getNumber()); + QString id = "MergeColumnsUndo" + QString::number(m_matchlineSessionId) + + "-" + QString::number(it->first.getNumber()); TImageCache::instance()->remove(id); } } @@ -272,7 +272,7 @@ void mergeColumns(const std::set &columns) { static int MergeColumnsSessionId = 0; void mergeColumns(int column, int mColumn, bool isRedo) { - MergeColumnsSessionId++; + if (!isRedo) MergeColumnsSessionId++; TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet(); int start, end; xsh->getCellRange(column, start, end); @@ -353,11 +353,14 @@ void mergeColumns(int column, int mColumn, bool isRedo) { return; } - QString id = "MergeColumnsUndo" + QString::number(MergeColumnsSessionId) + - "-" + QString::number(fid.getNumber()); - TImageCache::instance()->add( - id, (timg) ? timg->cloneImage() : vimg->cloneImage()); - images[fid] = id; + if (!isRedo) { + QString id = "MergeColumnsUndo" + + QString::number(MergeColumnsSessionId) + "-" + + QString::number(fid.getNumber()); + TImageCache::instance()->add( + id, (timg) ? timg->cloneImage() : vimg->cloneImage()); + images[fid] = id; + } TAffine imgAff, matchAff; getColumnPlacement(imgAff, xsh, start + i, column, false); getColumnPlacement(matchAff, xsh, start + i, mColumn, false);