summaryrefslogtreecommitdiff
blob: e28fc7e2212fccf033c7881a442fc6b2e1c7e02a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
From: Dominik Haumann <dhaumann@kde.org>
Date: Wed, 07 Sep 2016 10:27:00 +0000
Subject: Fix crash when showing top or bottom messages mutliple times
X-Git-Url: http://quickgit.kde.org/?p=ktexteditor.git&a=commitdiff&h=86f1dde943389bbf211ec1cde3f27c9681351d3f
---
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.
---


--- a/autotests/src/messagetest.cpp
+++ b/autotests/src/messagetest.cpp
@@ -66,7 +66,7 @@
     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 @@
 
     // 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 @@
 
     // 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 @@
 
     // 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 @@
     // 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 @@
     // 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 @@
 
     // another 0.5s, and the message widget should be hidden
     QTest::qWait(600);
-    QVERIFY(!view->messageWidget());
+    QVERIFY(!view->messageWidget()->isVisible());
 }
 
-

--- a/src/view/katemessagewidget.cpp
+++ b/src/view/katemessagewidget.cpp
@@ -78,7 +78,6 @@
     // if not message to show, just stop
     if (m_messageQueue.size() == 0) {
         hide();
-        deleteLater();
         return;
     }
 
--- 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"
--- 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 KateGotoBar;
 class KateDictionaryBar;
 class KateSpellingMenu;
+class KateMessageWidget;
 class KateIconBorder;
 class KateStatusBar;
 class KateViewEncodingAction;
@@ -873,13 +873,13 @@
 
 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;
 
--- a/src/view/kateviewinternal.cpp
+++ b/src/view/kateviewinternal.cpp
@@ -484,7 +484,9 @@
         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);