D28819: [KRichTextEdit] Always treat key press as single modification in undo stack

Igor Poboiko noreply at phabricator.kde.org
Thu Apr 16 18:45:09 BST 2020


poboiko added a comment.


  @dfaure There seem to be a regression caused by this patch: if I reach the end of current view, and then press Enter so it has to scroll down, it scrolls to the very beginning of the document instead.
  
  This is the same issue as in ancient bug 195828 <https://bugs.kde.org/show_bug.cgi?id=195828>, and it seems like it is Qt issue.
  
  Here's the simplest MWE:
  
    #include <QApplication>
    #include <QMainWindow>
    #include <QTextEdit>
    #include <QPushButton>
    #include <QVBoxLayout>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        auto w = new QWidget();
        auto edit = new QTextEdit();
        auto button = new QPushButton(QStringLiteral("Insert new line"));
        button->connect(button, &QPushButton::clicked, [edit](){
            auto cursor = edit->textCursor();
            cursor.beginEditBlock();
            cursor.insertBlock();
            edit->setTextCursor(cursor);
            cursor.endEditBlock();
        });
        auto layout = new QVBoxLayout(w);
        layout->addWidget(edit);
        layout->addWidget(button);
        w->show();
        return a.exec();
    }
  
  Seems like the following code in `QTextCursorPrivate::setX` causes the trouble:
  
    if (priv->isInEditBlock() || priv->inContentsChange) {
        x = -1; // mark dirty
        return;
    }
  
  and seems like this "dirty" value is treated literally afterwards.
  
  For this example, switching `endEditBlock` and `setTextCursor` lines fixes the issue (and same with `Insert Rule`).
  I've also found a (dirty) workaround for the original patch: if I call `setTextCursor(textCursor())` right after `endEditBlock()`, it works like a charm. It seems like this line (although semantically is a NOOP) triggers the update of this "dirty" value.
  
  How should I proceed?

REPOSITORY
  R310 KTextWidgets

REVISION DETAIL
  https://phabricator.kde.org/D28819

To: poboiko, #frameworks, mlaurent, dfaure
Cc: ahmadsamir, kde-frameworks-devel, LeGast00n, cblack, michaelh, ngraham, bruns
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20200416/1a6bb1cb/attachment.html>


More information about the Kde-frameworks-devel mailing list