File 0003-Fix-crash-when-showing-top-or-bottom-messages-mutlip.patch of Package ktexteditor.7413
From 6a4ec46bc2cd8c77ff37ced7436c2e0cea3c4244 Mon Sep 17 00:00:00 2001
From: Dominik Haumann <dhaumann@kde.org>
Date: Wed, 7 Sep 2016 12:27:00 +0200
Subject: [PATCH 3/3] Fix crash when showing top or bottom messages mutliple
times
Unfortunately, this regression was introduced in KF 5.24-5.26.
Will be fixed with KF 5.27.
(cherry picked from commit 86f1dde943389bbf211ec1cde3f27c9681351d3f)
---
autotests/src/messagetest.cpp | 16 ++++++++--------
src/view/katemessagewidget.cpp | 1 -
src/view/kateview.cpp | 1 +
src/view/kateview.h | 10 +++++-----
src/view/kateviewinternal.cpp | 4 +++-
5 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/autotests/src/messagetest.cpp b/autotests/src/messagetest.cpp
index 92366ed..4aee9db 100644
--- a/autotests/src/messagetest.cpp
+++ b/autotests/src/messagetest.cpp
@@ -66,7 +66,7 @@ void MessageTest::testPostMessage()
QVERIFY(message != 0);
delete message;
QTest::qWait(600); // fadeout animation takes 500 ms
- QVERIFY(!view->messageWidget());
+ QVERIFY(!view->messageWidget()->isVisible());
}
void MessageTest::testAutoHide()
@@ -98,7 +98,7 @@ void MessageTest::testAutoHide()
// message widget should be hidden after 2 seconds
QTest::qWait(500);
- QVERIFY(!view->messageWidget());
+ QVERIFY(!view->messageWidget()->isVisible());
}
void MessageTest::testAutoHideAfterUserInteraction()
@@ -142,7 +142,7 @@ void MessageTest::testAutoHideAfterUserInteraction()
// after a total of 3.6 seconds, widget should be hidden
QTest::qWait(500);
- QVERIFY(!view->messageWidget());
+ QVERIFY(!view->messageWidget()->isVisible());
}
void MessageTest::testMessageQueue()
@@ -200,7 +200,7 @@ void MessageTest::testMessageQueue()
// after a total of 3.1s, animation is finished and widget is hidden
QTest::qWait(500);
- QVERIFY(!view->messageWidget());
+ QVERIFY(!view->messageWidget()->isVisible());
}
void MessageTest::testPriority()
@@ -305,8 +305,8 @@ void MessageTest::testCreateView()
// delete message, then check after fadeout time 0f 0.5s whether message is gone
delete m1;
QTest::qWait(600);
- QVERIFY(!v1->messageWidget());
- QVERIFY(!v2->messageWidget());
+ QVERIFY(!v1->messageWidget()->isVisible());
+ QVERIFY(!v2->messageWidget()->isVisible());
}
void MessageTest::testHideView()
@@ -353,7 +353,7 @@ void MessageTest::testHideView()
// wait another 0.5s, then message widget should be hidden
QTest::qWait(500);
QVERIFY(message.data() == 0);
- QVERIFY(!view->messageWidget());
+ QVERIFY(!view->messageWidget()->isVisible());
}
void MessageTest::testHideViewAfterUserInteraction()
@@ -414,6 +414,6 @@ void MessageTest::testHideViewAfterUserInteraction()
// another 0.5s, and the message widget should be hidden
QTest::qWait(600);
- QVERIFY(!view->messageWidget());
+ QVERIFY(!view->messageWidget()->isVisible());
}
diff --git a/src/view/katemessagewidget.cpp b/src/view/katemessagewidget.cpp
index de2542b..c1bc54f 100644
--- a/src/view/katemessagewidget.cpp
+++ b/src/view/katemessagewidget.cpp
@@ -78,7 +78,6 @@ void KateMessageWidget::showNextMessage()
// if not message to show, just stop
if (m_messageQueue.size() == 0) {
hide();
- deleteLater();
return;
}
diff --git a/src/view/kateview.cpp b/src/view/kateview.cpp
index b77d8e0..3da648c 100644
--- a/src/view/kateview.cpp
+++ b/src/view/kateview.cpp
@@ -51,6 +51,7 @@
#include "script/katescriptmanager.h"
#include "script/katescriptaction.h"
#include "export/exporter.h"
+#include "katemessagewidget.h"
#include "katetemplatehandler.h"
#include "katepartdebug.h"
#include "printing/kateprinter.h"
diff --git a/src/view/kateview.h b/src/view/kateview.h
index 1e9f3d8..699d990 100644
--- a/src/view/kateview.h
+++ b/src/view/kateview.h
@@ -38,7 +38,6 @@
#include "katetextrange.h"
#include "katetextfolding.h"
#include "katerenderer.h"
-#include "katemessagewidget.h"
namespace KTextEditor
{
@@ -58,6 +57,7 @@ class KateTextPreview;
class KateGotoBar;
class KateDictionaryBar;
class KateSpellingMenu;
+class KateMessageWidget;
class KateIconBorder;
class KateStatusBar;
class KateViewEncodingAction;
@@ -873,13 +873,13 @@ public:
private:
/** Message widget showing KTextEditor::Messages above the View. */
- QPointer<KateMessageWidget> m_topMessageWidget;
+ KateMessageWidget *m_topMessageWidget;
/** Message widget showing KTextEditor::Messages below the View. */
- QPointer<KateMessageWidget> m_bottomMessageWidget;
+ KateMessageWidget *m_bottomMessageWidget;
/** Message widget showing KTextEditor::Messages as view overlay in top right corner. */
- QPointer<KateMessageWidget> m_floatTopMessageWidget;
+ KateMessageWidget *m_floatTopMessageWidget;
/** Message widget showing KTextEditor::Messages as view overlay in bottom left corner. */
- QPointer<KateMessageWidget> m_floatBottomMessageWidget;
+ KateMessageWidget *m_floatBottomMessageWidget;
/** Layout for floating notifications */
QVBoxLayout *m_notificationLayout;
diff --git a/src/view/kateviewinternal.cpp b/src/view/kateviewinternal.cpp
index 13d031e..3b2a127 100644
--- a/src/view/kateviewinternal.cpp
+++ b/src/view/kateviewinternal.cpp
@@ -484,7 +484,9 @@ void KateViewInternal::scrollPos(KTextEditor::Cursor &c, bool force, bool called
if (!calledExternally && qAbs(viewLinesScrolled) < lines &&
// NOTE: on some machines we must update if the floating widget is visible
// otherwise strange painting bugs may occur during scrolling...
- !(m_view->m_floatTopMessageWidget || m_view->m_bottomMessageWidget))
+ !((m_view->m_floatTopMessageWidget && m_view->m_floatTopMessageWidget->isVisible()) ||
+ (m_view->m_floatBottomMessageWidget && m_view->m_floatBottomMessageWidget->isVisible()))
+ )
{
updateView(false, viewLinesScrolled);
--
2.10.0