[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#859936: unblock: ktexteditor/5.28.0-2



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Dear release team,

I've backported two upstream fixes in ktexteditor for stretch that I consider 
worthwhile:
 + Fix: Forward dragging text results in wrong selection (a4ad36c)
   KDE#374163
 + fix minimap rendering for HiDPI envs (030c37b)

I've uploaded 5.28.0-2 with these changes and it has built successfully in all 
the release architectures.

I'm attaching the corresponding debdiff.

Happy hacking,

Please unblock package ktexteditor

unblock ktexteditor/5.28.0-2

- -- System Information:
Debian Release: 9.0
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'testing-debug'), (500, 'testing'), (500, 'stable'), (50, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386, armhf

Kernel: Linux 4.9.0-2-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Init: systemd (via /run/systemd/system)

-----BEGIN PGP SIGNATURE-----

iQJEBAEBCgAuFiEE+JIdOnQEyG4RNSIVxxl2mbKbIyoFAljqJoYQHG1heHlAZGVi
aWFuLm9yZwAKCRDHGXaZspsjKjGOD/9ZV9w3eQ4O2Sj6WQt2fa1AcpTgszPdfpoG
rEKQ9MFN+NzN33IW1z0/qcx20ehWMdeSsW79TCkHHIxTWftd6vWmVt1vlQJ8tSpQ
T8kixf7n/OQSmCPD2omCfrNW7ONWoG7hd4qjMJm3D16W8WYyNIynpIr8hmtQWJN6
HgVH6UFPRgWAnh4slcMbCPobtDbFLwI5k8zxQJZf7vnv/iK+v0kWFUUOPjgU7u7D
T5GGmD1jreQ+3ZMBgd+UEeEf7Cmw4ar4f3C58DwU8z/1Lc4kngYpy9g32xmRTsHk
ix4vKbCjKlsD1ZFmXGra1RJ67lkekRWS42PeWNIp8Y1r+IYyq6bujZdhM5pKRvaZ
zTj3vIA4K2JHS6crMbTjNF+sdrmw2IIVSPE/SUxujes1l4DnJ9cQy3E9Myl0cw7I
NNetgKAL3GLV1H/FoBoz1/5evheK3TfqxQdBL6Rf1fpg99MP++X0KbPupDhYp7QP
56mjAyg8jk0Vcc/691pxhThqNkBuXsAlY5EqjKhRuhsKWO/csEkwdy9PBsn8DiKo
B/owcwejDXrdCk14JjPaM6iBxvUYCvVReoev38MMKx9XFPrTIhFOxF7qWhbvyvE3
PEF68svk02Dj5e4m2Tpk45Fiv9BMg0Ok63cky9ZLUpQaauYljHxBHiTEchvN6tAS
sBzOAwAQ+g==
=sMwv
-----END PGP SIGNATURE-----
diff -Nru ktexteditor-5.28.0/debian/changelog ktexteditor-5.28.0/debian/changelog
--- ktexteditor-5.28.0/debian/changelog	2016-11-18 16:07:00.000000000 +0100
+++ ktexteditor-5.28.0/debian/changelog	2017-04-07 11:57:02.000000000 +0200
@@ -1,3 +1,14 @@
+ktexteditor (5.28.0-2) unstable; urgency=medium
+
+  * Apply "Fix: Forward dragging text results in wrong selection" (a4ad36c)
+    Add the upstream patch as:
+     Fix-Forward-dragging-text-results-in-wrong-selection.patch
+    This fixes KDE#374163
+  * Apply "fix minimap rendering for HiDPI envs" (030c37b)
+    Add upstream patch as: fix-minimap-rendering-for-HiDPI-envs.patch
+
+ -- Maximiliano Curia <maxy@debian.org>  Fri, 07 Apr 2017 11:57:02 +0200
+
 ktexteditor (5.28.0-1) unstable; urgency=medium
 
   [ Maximiliano Curia ]
diff -Nru ktexteditor-5.28.0/debian/patches/Fix-Forward-dragging-text-results-in-wrong-selection.patch ktexteditor-5.28.0/debian/patches/Fix-Forward-dragging-text-results-in-wrong-selection.patch
--- ktexteditor-5.28.0/debian/patches/Fix-Forward-dragging-text-results-in-wrong-selection.patch	1970-01-01 01:00:00.000000000 +0100
+++ ktexteditor-5.28.0/debian/patches/Fix-Forward-dragging-text-results-in-wrong-selection.patch	2017-04-07 11:57:02.000000000 +0200
@@ -0,0 +1,138 @@
+From: Dominik Haumann <dhaumann@kde.org>
+Date: Sat, 7 Jan 2017 12:15:39 +0100
+Subject: Fix: Forward dragging text results in wrong selection
+
+Thanks to Serge Roussak for the patch!
+
+REVIEW: 129758
+BUG: 374163
+---
+ autotests/src/kateview_test.cpp | 67 +++++++++++++++++++++++++++++++++++++++++
+ autotests/src/kateview_test.h   |  2 ++
+ src/view/kateviewinternal.cpp   | 12 +++++---
+ 3 files changed, 77 insertions(+), 4 deletions(-)
+
+diff --git a/autotests/src/kateview_test.cpp b/autotests/src/kateview_test.cpp
+index 950184f4..7372d235 100644
+--- a/autotests/src/kateview_test.cpp
++++ b/autotests/src/kateview_test.cpp
+@@ -317,4 +317,71 @@ void KateViewTest::testFoldFirstLine()
+     QVERIFY(view->textFolding().isLineVisible(1));
+ }
+ 
++// test for bug https://bugs.kde.org/374163
++void KateViewTest::testDragAndDrop()
++{
++    KTextEditor::DocumentPrivate doc(false, false);
++    doc.setText("line0\n"
++                "line1\n"
++                "line2\n"
++                "\n"
++                "line4");
++
++    KTextEditor::View* view = static_cast<KTextEditor::View*>(doc.createView(Q_NULLPTR));
++    view->show();
++    view->resize(400, 300);
++
++    QWidget *internalView = nullptr;
++    foreach (QObject* child, view->children()) {
++        if (child->metaObject()->className() == QByteArrayLiteral("KateViewInternal")) {
++            internalView = qobject_cast<QWidget *>(child);
++            break;
++        }
++    }
++    QVERIFY(internalView);
++
++    // select "line1\n"
++    view->setSelection(Range(1, 0, 2, 0));
++    QCOMPARE(view->selectionRange(), Range(1, 0, 2, 0));
++
++    QTest::qWaitForWindowExposed(view);
++    const QPoint startDragPos = internalView->mapFrom(view, view->cursorToCoordinate(KTextEditor::Cursor(1, 2)));
++    const QPoint endDragPos = internalView->mapFrom(view, view->cursorToCoordinate(KTextEditor::Cursor(3, 0)));
++    const QPoint gStartDragPos = internalView->mapToGlobal(startDragPos);
++    const QPoint gEndDragPos = internalView->mapToGlobal(endDragPos);
++
++    // now drag and drop selected text to Cursor(3, 0)
++    QMouseEvent pressEvent(QEvent::MouseButtonPress, startDragPos, gStartDragPos,
++                                Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
++    QCoreApplication::sendEvent(internalView, &pressEvent);
++
++    // ugly workaround: Drag & Drop has own blocking event queue. Therefore, we need a single-shot timer to
++    // break out of the blocking event queue, see (*)
++    QTimer::singleShot(50, [&](){
++        QMouseEvent moveEvent(QEvent::MouseMove, endDragPos + QPoint(5, 0), gEndDragPos + QPoint(5, 0),
++                            Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
++        QMouseEvent releaseEvent(QEvent::MouseButtonRelease, endDragPos, gEndDragPos,
++                            Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
++        QCoreApplication::sendEvent(internalView, &moveEvent);
++        QCoreApplication::sendEvent(internalView, &releaseEvent);
++    });
++
++    // (*) this somehow blocks...
++    QMouseEvent moveEvent1(QEvent::MouseMove, endDragPos + QPoint(10, 0), gEndDragPos + QPoint(10, 0),
++                           Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
++    QCoreApplication::sendEvent(internalView, &moveEvent1);
++
++    QTest::qWait(100);
++
++    // final tests of dragged text
++    QCOMPARE(doc.text(), QString("line0\n"
++                                 "line2\n"
++                                 "line1\n"
++                                 "\n"
++                                 "line4"));
++
++    QCOMPARE(view->cursorPosition(), KTextEditor::Cursor(3, 0));
++    QCOMPARE(view->selectionRange(), Range(2, 0, 3, 0));
++}
++
+ // kate: indent-mode cstyle; indent-width 4; replace-tabs on;
+diff --git a/autotests/src/kateview_test.h b/autotests/src/kateview_test.h
+index 672e74e6..a48720d9 100644
+--- a/autotests/src/kateview_test.h
++++ b/autotests/src/kateview_test.h
+@@ -43,6 +43,8 @@ private Q_SLOTS:
+     void testKillline();
+ 
+     void testFoldFirstLine();
++
++    void testDragAndDrop();
+ };
+ 
+ #endif // KATE_VIEW_TEST_H
+diff --git a/src/view/kateviewinternal.cpp b/src/view/kateviewinternal.cpp
+index 35545cc1..23a1e21e 100644
+--- a/src/view/kateviewinternal.cpp
++++ b/src/view/kateviewinternal.cpp
+@@ -3241,22 +3241,26 @@ void KateViewInternal::dropEvent(QDropEvent *event)
+         doc()->insertText(targetCursor, text, m_view->blockSelection());
+ 
+         KTextEditor::DocumentCursor startCursor(doc(), targetCursor);
++        KTextEditor::DocumentCursor endCursor1(doc(), targetCursor);
++        const int textLength = text.length();
+ 
+         if (event->dropAction() != Qt::CopyAction) {
+             m_view->removeSelectedText();
++            if (m_cursor.toCursor() < startCursor.toCursor()) {
++                startCursor.move(-textLength);
++                endCursor1.move(-textLength);
++            }
+         }
+ 
+-        KTextEditor::DocumentCursor endCursor1(doc(), startCursor);
+-
+         if (!m_view->blockSelection()) {
+-            endCursor1.move(text.length());
++            endCursor1.move(textLength);
+         } else {
+             endCursor1.setColumn(startCursor.column() + selectionWidth);
+             endCursor1.setLine(startCursor.line() + selectionHeight);
+         }
+ 
+         KTextEditor::Cursor endCursor(endCursor1);
+-        qCDebug(LOG_KTE) << startCursor << "---(" << text.length() << ")---" << endCursor;
++        qCDebug(LOG_KTE) << startCursor << "---(" << textLength << ")---" << endCursor;
+         setSelection(KTextEditor::Range(startCursor, endCursor));
+         editSetCursor(endCursor);
+ 
diff -Nru ktexteditor-5.28.0/debian/patches/fix-minimap-rendering-for-HiDPI-envs.patch ktexteditor-5.28.0/debian/patches/fix-minimap-rendering-for-HiDPI-envs.patch
--- ktexteditor-5.28.0/debian/patches/fix-minimap-rendering-for-HiDPI-envs.patch	1970-01-01 01:00:00.000000000 +0100
+++ ktexteditor-5.28.0/debian/patches/fix-minimap-rendering-for-HiDPI-envs.patch	2017-04-07 11:57:02.000000000 +0200
@@ -0,0 +1,64 @@
+From: Christoph Cullmann <cullmann@kde.org>
+Date: Mon, 9 Jan 2017 06:17:42 +0100
+Subject: fix minimap rendering for HiDPI envs
+
+Differential Revision: https://phabricator.kde.org/D4018
+---
+ src/view/kateviewhelpers.cpp | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/src/view/kateviewhelpers.cpp b/src/view/kateviewhelpers.cpp
+index e74a237e..3b45d8d4 100644
+--- a/src/view/kateviewhelpers.cpp
++++ b/src/view/kateviewhelpers.cpp
+@@ -476,7 +476,8 @@ void KateScrollBar::updatePixmap()
+     modifiedLineColor.setHsv(modifiedLineColor.hue(), 255, 255 - backgroundColor.value() / 3);
+     savedLineColor.setHsv(savedLineColor.hue(), 100, 255 - backgroundColor.value() / 3);
+ 
+-    m_pixmap = QPixmap(pixmapLineWidth, pixmapLineCount);
++    // increase dimensions by ratio
++    m_pixmap = QPixmap(pixmapLineWidth * m_view->devicePixelRatio(), pixmapLineCount * m_view->devicePixelRatio());
+     m_pixmap.fill(QColor("transparent"));
+ 
+     // The text currently selected in the document, to be drawn later.
+@@ -583,6 +584,10 @@ void KateScrollBar::updatePixmap()
+             }
+         }
+     }
++
++    // set right ratio
++    m_pixmap.setDevicePixelRatio(m_view->devicePixelRatio());
++
+     //qCDebug(LOG_KTE) << time.elapsed();
+     // Redraw the scrollbar widget with the updated pixmap.
+     update();
+@@ -627,7 +632,7 @@ void KateScrollBar::miniMapPaintEvent(QPaintEvent *e)
+     //style()->drawControl(QStyle::CE_ScrollBarSubLine, &opt, &painter, this);
+ 
+     // calculate the document size and position
+-    const int docHeight = qMin(grooveRect.height(), m_pixmap.height() * 2) - 2 * docXMargin;
++    const int docHeight = qMin(grooveRect.height(), int(m_pixmap.height() / m_pixmap.devicePixelRatio() * 2)) - 2 * docXMargin;
+     const int yoffset = 1; // top-aligned in stead of center-aligned (grooveRect.height() - docHeight) / 2;
+     const QRect docRect(QPoint(grooveRect.left() + docXMargin, yoffset + grooveRect.top()), QSize(grooveRect.width() - docXMargin, docHeight));
+     m_mapGroveRect = docRect;
+@@ -683,17 +688,17 @@ void KateScrollBar::miniMapPaintEvent(QPaintEvent *e)
+     }
+ 
+     // Smooth transform only when squeezing
+-    if (grooveRect.height() < m_pixmap.height()) {
++    if (grooveRect.height() < m_pixmap.height() / m_pixmap.devicePixelRatio()) {
+         painter.setRenderHint(QPainter::SmoothPixmapTransform);
+     }
+ 
+     // draw the modified lines margin
+-    QRect pixmapMarginRect(QPoint(0, 0), QSize(s_pixelMargin, m_pixmap.height()));
++    QRect pixmapMarginRect(QPoint(0, 0), QSize(s_pixelMargin, m_pixmap.height() / m_pixmap.devicePixelRatio()));
+     QRect docPixmapMarginRect(QPoint(0, docRect.top()), QSize(s_pixelMargin, docRect.height()));
+     painter.drawPixmap(docPixmapMarginRect, m_pixmap, pixmapMarginRect);
+ 
+     // calculate the stretch and draw the stretched lines (scrollbar marks)
+-    QRect pixmapRect(QPoint(s_pixelMargin, 0), QSize(m_pixmap.width() - s_pixelMargin, m_pixmap.height()));
++    QRect pixmapRect(QPoint(s_pixelMargin, 0), QSize(m_pixmap.width() / m_pixmap.devicePixelRatio() - s_pixelMargin, m_pixmap.height() / m_pixmap.devicePixelRatio()));
+     QRect docPixmapRect(QPoint(s_pixelMargin, docRect.top()), QSize(docRect.width() - s_pixelMargin, docRect.height()));
+     painter.drawPixmap(docPixmapRect, m_pixmap, pixmapRect);
+ 
diff -Nru ktexteditor-5.28.0/debian/patches/katesyntaxtest_check_basename ktexteditor-5.28.0/debian/patches/katesyntaxtest_check_basename
--- ktexteditor-5.28.0/debian/patches/katesyntaxtest_check_basename	2016-11-18 16:07:00.000000000 +0100
+++ ktexteditor-5.28.0/debian/patches/katesyntaxtest_check_basename	2017-04-07 11:57:02.000000000 +0200
@@ -7,7 +7,7 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/autotests/src/katesyntaxtest.cpp b/autotests/src/katesyntaxtest.cpp
-index 04d74bf..4f0b4f8 100644
+index 04d74bf2..4f0b4f86 100644
 --- a/autotests/src/katesyntaxtest.cpp
 +++ b/autotests/src/katesyntaxtest.cpp
 @@ -55,7 +55,7 @@ void KateSyntaxTest::testSyntaxHighlighting_data()
diff -Nru ktexteditor-5.28.0/debian/patches/series ktexteditor-5.28.0/debian/patches/series
--- ktexteditor-5.28.0/debian/patches/series	2016-11-18 16:07:00.000000000 +0100
+++ ktexteditor-5.28.0/debian/patches/series	2017-04-07 11:57:02.000000000 +0200
@@ -1 +1,3 @@
 katesyntaxtest_check_basename
+Fix-Forward-dragging-text-results-in-wrong-selection.patch
+fix-minimap-rendering-for-HiDPI-envs.patch

Reply to: