Author: jghali
Date: Wed Dec 13 19:15:04 2017
New Revision: 22247

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22247
Log:
#15070: Incorrect cursor position after undoing or redoing text action

Modified:
    trunk/Scribus/scribus/pageitem.cpp

Modified: trunk/Scribus/scribus/pageitem.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22247&path=/trunk/Scribus/scribus/pageitem.cpp
==============================================================================
--- trunk/Scribus/scribus/pageitem.cpp  (original)
+++ trunk/Scribus/scribus/pageitem.cpp  Wed Dec 13 19:15:04 2017
@@ -6510,13 +6510,18 @@
 {
        int start = ss->getInt("START");
        QString text = ss->get("TEXT");
+
+       itemText.deselectAll();
        if (isUndo)
        {
                itemText.select(start, text.length());
                asTextFrame()->deleteSelectedTextFromFrame();
        }
        else
+       {
                itemText.insertChars(start, text, true);
+               itemText.setCursorPosition(start + text.length());
+       }
 }
 
 void PageItem::restorePasteText(SimpleState *ss, bool isUndo)
@@ -6525,13 +6530,18 @@
        if (!is)
                qFatal("PageItem::restorePasteText: dynamic cast failed");
        int start = is->getInt("START");
-       if (isUndo)
-       {
-               itemText.select(start,is->getItem().length());
+
+       itemText.deselectAll();
+       if (isUndo)
+       {
+               itemText.select(start, is->getItem().length());
                asTextFrame()->deleteSelectedTextFromFrame();
        }
        else
+       {
                itemText.insert(start, is->getItem());
+               itemText.setCursorPosition(start + is->getItem().length());
+       }
 }
 
 void PageItem::restoreColumnsGap(SimpleState *ss, bool isUndo)
@@ -6674,10 +6684,13 @@
                qFatal("PageItem::restoreDeleteFrameText: dynamic cast failed");
        QString text = is->get("TEXT_STR");
        int start = is->getInt("START");
+
+       itemText.deselectAll();
        if (isUndo)
        {
                itemText.insertChars(start, text);
                itemText.applyCharStyle(start, text.length(), is->getItem());
+               itemText.setCursorPosition(start + text.length());
                invalid = true;
                invalidateLayout();
        }
@@ -6695,10 +6708,13 @@
        if (!is)
                qFatal("PageItem::restoreDeleteFrameParagraph: dynamic cast 
failed");
        int start = is->getInt("START");
+       
+       itemText.deselectAll();
        if (isUndo)
        {
                itemText.insertChars(start, SpecialChars::PARSEP);
                itemText.applyStyle(start, is->getItem());
+               itemText.setCursorPosition(start + 1);
                invalid = true;
                invalidateLayout();
        }
@@ -6714,14 +6730,18 @@
 {
        QString text = ss->get("TEXT_STR");
        int start = ss->getInt("START");
-       if (isUndo)
-       {
-               itemText.deselectAll();
+
+       itemText.deselectAll();
+       if (isUndo)
+       {
                itemText.select(start, text.length());
                asTextFrame()->deleteSelectedTextFromFrame();
        }
        else
+       {
                itemText.insertChars(start, text);
+               itemText.setCursorPosition(start + text.length());
+       }
 }
 
 void PageItem::restoreInsertFrameParagraph(SimpleState *ss, bool isUndo)
@@ -6730,6 +6750,8 @@
        if (!is)
                qFatal("PageItem::restoreInsertFrameParagraph: dynamic cast 
failed");
        int start = is->getInt("START");
+       
+       itemText.deselectAll();
        if (isUndo)
        {
                itemText.select(start, 1);
@@ -6739,6 +6761,7 @@
        else
        {
                itemText.insertChars(start, SpecialChars::PARSEP);
+               itemText.setCursorPosition(start + 1);
                invalid = true;
                invalidateLayout();
        }


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to