Author: jghali
Date: Sun Nov  3 00:16:13 2019
New Revision: 23313

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23313
Log:
#15900: Story Editor jumps to top every time a style is changed

Modified:
    trunk/Scribus/scribus/ui/storyeditor.cpp
    trunk/Scribus/scribus/ui/storyeditor.h

Modified: trunk/Scribus/scribus/ui/storyeditor.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23313&path=/trunk/Scribus/scribus/ui/storyeditor.cpp
==============================================================================
--- trunk/Scribus/scribus/ui/storyeditor.cpp    (original)
+++ trunk/Scribus/scribus/ui/storyeditor.cpp    Sun Nov  3 00:16:13 2019
@@ -506,13 +506,13 @@
        QTextCursor tc(textCursor());
        if (tc.hasSelection())
        {
-               QPair<int, int> selPair = qMakePair(tc.selectionStart(), 
tc.selectionEnd());
-               SelStack.push(selPair);
+               auto selTuple = std::make_tuple(tc.selectionStart(), 
tc.selectionEnd(), verticalScrollBar()->value());
+               SelStack.push(selTuple);
        }
        else
        {
-               QPair<int, int> selPair = qMakePair(tc.position(), -1);
-               SelStack.push(selPair);
+               auto selTuple = std::make_tuple(tc.position(), -1, 
verticalScrollBar()->value());
+               SelStack.push(selTuple);
        }
        QTextEdit::focusOutEvent(e);
 }
@@ -522,11 +522,13 @@
        if (SelStack.count() > 0)
        {
                QTextCursor tc(textCursor());
-               QPair<int, int> selPair = SelStack.pop();
-               tc.setPosition(qMin(selPair.first, StyledText.length()));
-               if (selPair.second >= 0)
-                       tc.setPosition(selPair.second, QTextCursor::KeepAnchor);
+               int selFirst, selSecond, selThird;
+               std::tie(selFirst, selSecond, selThird) = SelStack.pop();
+               tc.setPosition(qMin(selFirst, StyledText.length()));
+               if (selSecond >= 0)
+                       tc.setPosition(selSecond, QTextCursor::KeepAnchor);
                setTextCursor(tc);
+               verticalScrollBar()->setValue(selThird);
        }
        QTextEdit::focusInEvent(e);
 }
@@ -710,7 +712,7 @@
                SelCharStart = currItem->itemText.cursorPosition();
        SelCharStart -= currItem->itemText.startOfParagraph(newSelParaStart);
        if (SelStack.count())
-               SelStack.top().second = -1;
+               std::get<1>(SelStack.top()) = -1;
        //qDebug() << "SE::loadItemText: cursor";
 //     setCursorPosition(SelParaStart, SelCharStart);
        emit setProps(newSelParaStart, SelCharStart);
@@ -911,11 +913,12 @@
        if (SelStack.count())
        {
                QTextCursor tc(textCursor());
-               QPair<int, int> selPair = SelStack.pop();
-               if (selPair.second >= 0)
-               {
-                       tc.setPosition(selPair.first);
-                       tc.setPosition(selPair.second, QTextCursor::KeepAnchor);
+               int selFirst, selSecond, selThird;
+               std::tie(selFirst, selSecond, selThird) = SelStack.pop();
+               if (selSecond >= 0)
+               {
+                       tc.setPosition(selFirst);
+                       tc.setPosition(selSecond, QTextCursor::KeepAnchor);
                        setTextCursor(tc);
                }
        }
@@ -935,11 +938,12 @@
        if (SelStack.count())
        {
                QTextCursor tc(textCursor());
-               QPair<int, int> selPair = SelStack.pop();
-               if (selPair.second >= 0)
-               {
-                       tc.setPosition(selPair.first);
-                       tc.setPosition(selPair.second, QTextCursor::KeepAnchor);
+               int selFirst, selSecond, selThird;
+               std::tie(selFirst, selSecond, selThird) = SelStack.pop();
+               if (selSecond >= 0)
+               {
+                       tc.setPosition(selFirst);
+                       tc.setPosition(selSecond, QTextCursor::KeepAnchor);
                        setTextCursor(tc);
                }
        }
@@ -3038,7 +3042,7 @@
                        QTextCursor tCursor = Editor->textCursor();
                        tCursor.setPosition(pos);
                        Editor->setTextCursor(tCursor);
-                       Editor->SelStack.push(qMakePair(pos, -1));
+                       Editor->SelStack.push(std::make_tuple(pos, -1, 
Editor->verticalScrollBar()->value()));
                }
        }
        qApp->processEvents();

Modified: trunk/Scribus/scribus/ui/storyeditor.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23313&path=/trunk/Scribus/scribus/ui/storyeditor.h
==============================================================================
--- trunk/Scribus/scribus/ui/storyeditor.h      (original)
+++ trunk/Scribus/scribus/ui/storyeditor.h      Sun Nov  3 00:16:13 2019
@@ -23,6 +23,8 @@
 
 #ifndef STORYEDITOR_H
 #define STORYEDITOR_H
+
+#include <tuple>
 
 #include <QTextEdit>
 #include <QAction>
@@ -163,7 +165,7 @@
        QString CurrFont;
        QString unicodeInputString;
 
-       QStack< QPair<int, int> > SelStack;
+       QStack< std::tuple<int, int, int> > SelStack;
 
        int SelCharStart;
        int SelCharEnd;


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

Reply via email to