r23553 by jghali - #16082: Text undo crash

scribus-commit scribus-commit at lists.scribus.net
Wed Apr 1 16:42:01 UTC 2020


Author: jghali
Date: Wed Apr  1 16:42:01 2020
New Revision: 23553

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23553
Log:
#16082: Text undo crash

Modified:
    trunk/Scribus/scribus/pageitem_textframe.cpp
    trunk/Scribus/scribus/scribus.cpp

Modified: trunk/Scribus/scribus/pageitem_textframe.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23553&path=/trunk/Scribus/scribus/pageitem_textframe.cpp
==============================================================================
--- trunk/Scribus/scribus/pageitem_textframe.cpp	(original)
+++ trunk/Scribus/scribus/pageitem_textframe.cpp	Wed Apr  1 16:42:01 2020
@@ -3954,10 +3954,10 @@
 						}
 						undoManager->action(undoTarget, ip);
 					}
-					else if (ss && ss->get("ETEA") == "insert_frametext")
+					else if (ss && (ss->get("ETEA") == "insert_frametext") && (ss->undoObject() == undoTarget))
 						ss->set("TEXT_STR", ss->get("TEXT_STR") + QString(QChar(conv)));
 					else {
-						ss = new SimpleState(Um::InsertText,"",Um::ICreate);
+						ss = new SimpleState(Um::InsertText, "", Um::ICreate);
 						ss->set("INSERT_FRAMETEXT");
 						ss->set("ETEA", QString("insert_frametext"));
 						ss->set("TEXT_STR", QString(QChar(conv)));
@@ -4400,11 +4400,12 @@
 			if (UndoManager::undoEnabled())
 			{
 				SimpleState *ss = dynamic_cast<SimpleState*>(undoManager->getLastUndo());
-				if (ss && ss->get("ETEA") == "insert_frametext")
-					ss->set("TEXT_STR",ss->get("TEXT_STR") + QString(SpecialChars::TAB));
+				UndoObject *undoTarget = this;
+				if (ss && (ss->get("ETEA") == "insert_frametext") && (ss->undoObject() == undoTarget))
+					ss->set("TEXT_STR", ss->get("TEXT_STR") + QString(SpecialChars::TAB));
 				else
 				{
-					ss = new SimpleState(Um::InsertText,"",Um::ICreate);
+					ss = new SimpleState(Um::InsertText, "", Um::ICreate);
 					ss->set("INSERT_FRAMETEXT");
 					ss->set("ETEA", QString("insert_frametext"));
 					ss->set("TEXT_STR", QString(SpecialChars::TAB));
@@ -4445,7 +4446,7 @@
 					}
 					undoManager->action(undoTarget, ip);
 				}
-				else if (ss && ss->get("ETEA") == "insert_frametext")
+				else if (ss && (ss->get("ETEA") == "insert_frametext") && (ss->undoObject() == undoTarget))
 					ss->set("TEXT_STR", ss->get("TEXT_STR") + uc);
 				else
 				{

Modified: trunk/Scribus/scribus/scribus.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23553&path=/trunk/Scribus/scribus/scribus.cpp
==============================================================================
--- trunk/Scribus/scribus/scribus.cpp	(original)
+++ trunk/Scribus/scribus/scribus.cpp	Wed Apr  1 16:42:01 2020
@@ -1536,8 +1536,9 @@
 		if (UndoManager::undoEnabled())
 		{
 			SimpleState *ss = dynamic_cast<SimpleState*>(m_undoManager->getLastUndo());
-			if (ss && ss->get("ETEA") == "insert_frametext")
-				ss->set("TEXT_STR",ss->get("TEXT_STR") + QString(QChar(unicodevalue)));
+			UndoObject *undoTarget = currItem;
+			if (ss && (ss->get("ETEA") == "insert_frametext") && (ss->undoObject() == undoTarget))
+				ss->set("TEXT_STR", ss->get("TEXT_STR") + QString(QChar(unicodevalue)));
 			else
 			{
 				ss = new SimpleState(Um::InsertText,"",Um::ICreate);
@@ -1545,7 +1546,6 @@
 				ss->set("ETEA", QString("insert_frametext"));
 				ss->set("TEXT_STR", QString(QChar(unicodevalue)));
 				ss->set("START", currItem->itemText.cursorPosition());
-				UndoObject * undoTarget = currItem;
 				if (currItem->isNoteFrame())
 				{
 					undoTarget = doc;
@@ -1572,8 +1572,9 @@
 		if (UndoManager::undoEnabled())
 		{
 			SimpleState *ss = dynamic_cast<SimpleState*>(m_undoManager->getLastUndo());
-			if (ss && ss->get("ETEA") == "insert_frametext")
-				ss->set("TEXT_STR",ss->get("TEXT_STR") + QString(SpecialChars::SHYPHEN));
+			UndoObject *undoTarget = currItem;
+			if (ss && (ss->get("ETEA") == "insert_frametext") && (ss->undoObject() == undoTarget))
+				ss->set("TEXT_STR", ss->get("TEXT_STR") + QString(SpecialChars::SHYPHEN));
 			else
 			{
 				ss = new SimpleState(Um::InsertText,"", Um::ICreate);
@@ -1581,7 +1582,6 @@
 				ss->set("ETEA", QString("insert_frametext"));
 				ss->set("TEXT_STR", QString(SpecialChars::SHYPHEN));
 				ss->set("START", currItem->itemText.cursorPosition());
-				UndoObject * undoTarget = currItem;
 				if (currItem->isNoteFrame())
 				{
 					undoTarget = doc;




More information about the scribus-commit mailing list