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