On September 10, 2009, David Faure wrote:
> I finally took the time to investigate the plasma crash that was happening
>  so often to me.

can you try the attached patch? thanks.

-- 
Aaron J. Seigo
humru othro a kohnu se
GPG Fingerprint: 8B8B 2209 0C6F 7C47 B1EA  EE75 D6B7 2EB1 A7F1 DB43

KDE core developer sponsored by Qt Development Frameworks
Index: taskgroupitem.cpp
===================================================================
--- taskgroupitem.cpp	(revision 1019907)
+++ taskgroupitem.cpp	(working copy)
@@ -105,7 +105,8 @@
     if (!m_childSplitGroup) {
         return;
     }
-    m_childSplitGroup->deleteLater();
+
+    m_childSplitGroup->destroy();
     m_childSplitGroup = 0;
     m_splitPosition = 0;
     reload();
@@ -535,7 +536,7 @@
     }
 
     item->close();
-    item->deleteLater();
+    item->destroy();
 }
 
 bool TaskGroupItem::isWindowItem() const
@@ -978,7 +979,6 @@
     }
 
     AbstractTaskItem *taskItem = abstractTaskItem(item);
-
     m_tasksLayout->removeTaskItem(taskItem);
 
     if (m_group) {
Index: abstracttaskitem.cpp
===================================================================
--- abstracttaskitem.cpp	(revision 1019907)
+++ abstracttaskitem.cpp	(working copy)
@@ -76,7 +76,8 @@
       m_hoverEffectTimerId(0),
       m_attentionTimerId(0),
       m_attentionTicks(0),
-      m_fadeIn(true)
+      m_fadeIn(true),
+      m_destroyed(false)
 {
     setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding));
     setAcceptsHoverEvents(true);
@@ -92,6 +93,15 @@
     connect(applet, SIGNAL(settingsChanged()), this, SLOT(checkSettings()));
 }
 
+AbstractTaskItem::~AbstractTaskItem()
+{
+    if (m_animId) {
+        Plasma::Animator::self()->stopCustomAnimation(m_animId);
+    }
+
+    Plasma::ToolTipManager::self()->unregisterWidget(this);
+}
+
 QSize AbstractTaskItem::basicPreferredSize() const
 {
     QFontMetrics fm(KGlobalSettings::taskbarFont());
@@ -140,13 +150,15 @@
     setPreferredSize(basicPreferredSize());
 }
 
-AbstractTaskItem::~AbstractTaskItem()
+void AbstractTaskItem::destroy()
 {
-    if (m_animId) {
-        Plasma::Animator::self()->stopCustomAnimation(m_animId);
-    }
+    m_destroyed = true;
+    QObject::deleteLater();
+}
 
-    Plasma::ToolTipManager::self()->unregisterWidget(this);
+bool AbstractTaskItem::isDestroyed() const
+{
+    return m_destroyed;
 }
 
 void AbstractTaskItem::checkSettings()
Index: abstracttaskitem.h
===================================================================
--- abstracttaskitem.h	(revision 1019907)
+++ abstracttaskitem.h	(working copy)
@@ -129,6 +129,9 @@
     void setPreferredOffscreenSize();
     void setPreferredOnscreenSize();
 
+    void destroy();
+    bool isDestroyed() const;
+
 Q_SIGNALS:
     void activated(AbstractTaskItem *);
 
@@ -232,11 +235,15 @@
     int m_attentionTicks;
 
     bool m_fadeIn : 1;
+    bool m_destroyed : 1;
 
     // distance (in pixels) between a task's icon and its text
     static const int IconTextSpacing = 4;
     static const int TaskItemHorizontalMargin = 4;
     static const int TaskItemVerticalMargin = 4;
+
+private:
+    void deleteLater();
 };
 
 #endif
Index: taskitemlayout.cpp
===================================================================
--- taskitemlayout.cpp	(revision 1019907)
+++ taskitemlayout.cpp	(working copy)
@@ -106,7 +106,7 @@
 bool TaskItemLayout::insert(int index, AbstractTaskItem* item)
 {
     //kDebug() << item->text() << index;
-    if (!item ) {
+    if (!item || item->isDestroyed()) {
         kDebug() << "error";
         return false;
     }

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel

Reply via email to