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

openSUSE Build Service is sponsored by