diff options
Diffstat (limited to 'kde/kdebase-workspace/kdebase-workspace-4.6.0-fix-plasma-crash-on-exit.patch')
-rw-r--r-- | kde/kdebase-workspace/kdebase-workspace-4.6.0-fix-plasma-crash-on-exit.patch | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/kde/kdebase-workspace/kdebase-workspace-4.6.0-fix-plasma-crash-on-exit.patch b/kde/kdebase-workspace/kdebase-workspace-4.6.0-fix-plasma-crash-on-exit.patch new file mode 100644 index 000000000..41561858d --- /dev/null +++ b/kde/kdebase-workspace/kdebase-workspace-4.6.0-fix-plasma-crash-on-exit.patch @@ -0,0 +1,127 @@ +commit 92f71adb8bb6e46d4a3187ab8824c859312e9136 +Author: Aaron Seigo <aseigo@kde.org> +Date: Tue Feb 1 12:54:44 2011 -0800 + + try to avoid doing any work when we are deleting + +diff --git a/plasma/generic/applets/notifications/ui/notificationgroup.cpp b/plasma/generic/applets/notifications/ui/notificationgroup.cpp +index 1f7c0b8..6bbf43c 100644 +--- a/plasma/generic/applets/notifications/ui/notificationgroup.cpp ++++ b/plasma/generic/applets/notifications/ui/notificationgroup.cpp +@@ -66,6 +66,8 @@ NotificationGroup::NotificationGroup(Extender *parent, uint groupId) + + NotificationGroup::~NotificationGroup() + { ++ m_extenderItemsForNotification.clear(); ++ m_notificationForExtenderItems.clear(); + qDeleteAll(m_notifications); + } + +@@ -137,6 +139,11 @@ void NotificationGroup::addNotification(Notification *notification) + + void NotificationGroup::extenderItemDestroyed(Plasma::ExtenderItem *object) + { ++ if (m_extenderItemsForNotification.isEmpty()) { ++ // either we aren't tracking this notification or else we're being deleted ++ return; ++ } ++ + Notification *n = m_notificationForExtenderItems.value(object); + + if (n) { +@@ -148,10 +155,16 @@ void NotificationGroup::extenderItemDestroyed(Plasma::ExtenderItem *object) + + void NotificationGroup::removeNotification(Notification *notification) + { ++ if (m_extenderItemsForNotification.isEmpty()) { ++ // either we aren't tracking this notification or else we're being deleted ++ return; ++ } ++ + Plasma::ExtenderItem *item = m_extenderItemsForNotification.value(notification); + if (item) { + m_notificationForExtenderItems.remove(item); + } ++ + m_extenderItemsForNotification.remove(notification); + m_notifications.removeAll(notification); + QString applicationName = m_appForNotification.value(notification); +diff --git a/plasma/generic/applets/notifications/ui/notifications.cpp b/plasma/generic/applets/notifications/ui/notifications.cpp +index 9b1a7c0..c7aa6dd 100644 +--- a/plasma/generic/applets/notifications/ui/notifications.cpp ++++ b/plasma/generic/applets/notifications/ui/notifications.cpp +@@ -106,6 +106,9 @@ Notifications::~Notifications() + { + // stop listening to the manager + disconnect(m_manager, 0, this, 0); ++ if (m_notificationStackDialog) { ++ disconnect(m_notificationStackDialog, 0, this, 0); ++ } + + foreach (Notification *notification, m_manager->notifications()) { + // we don't want a destroyed managed after the destruction of manager +@@ -342,10 +345,10 @@ void Notifications::initExtenderItem(Plasma::ExtenderItem *extenderItem) + return; + } + +- if (extenderItem->config().readEntry("type", "") == "job") { ++ if (extenderItem->config().readEntry("type", QString()) == "job") { + extenderItem->setWidget(new JobWidget(0, extenderItem)); +- //unknown type, this should never happen + } else { ++ //unknown type, this should never happen + extenderItem->destroy(); + } + +commit 1fc6c46a49695ec6ad6cd80a8459c5c083de8e06 +Author: Aaron Seigo <aseigo@kde.org> +Date: Tue Feb 1 12:54:25 2011 -0800 + + make them all uniqueconnections + +diff --git a/plasma/generic/applets/notifications/ui/notificationstack.cpp b/plasma/generic/applets/notifications/ui/notificationstack.cpp +index 2f68961..3b53559 100644 +--- a/plasma/generic/applets/notifications/ui/notificationstack.cpp ++++ b/plasma/generic/applets/notifications/ui/notificationstack.cpp +@@ -54,11 +54,9 @@ NotificationStack::~NotificationStack() + void NotificationStack::addNotification(Notification *notification) + { + m_canDismissTimer->start(1000); +- connect(notification, SIGNAL(notificationDestroyed(Notification *)), this, SLOT(removeNotification(Notification *))); +- connect(notification, SIGNAL(expired(Notification *)), this, SLOT(delayedRemoveNotification(Notification *))); +- +- disconnect(notification, SIGNAL(changed(Notification *)), this, SLOT(notificationChanged(Notification *))); +- connect(notification, SIGNAL(changed(Notification *)), this, SLOT(notificationChanged(Notification *))); ++ connect(notification, SIGNAL(notificationDestroyed(Notification *)), this, SLOT(removeNotification(Notification *)), Qt::UniqueConnection); ++ connect(notification, SIGNAL(expired(Notification *)), this, SLOT(delayedRemoveNotification(Notification *)), Qt::UniqueConnection); ++ connect(notification, SIGNAL(changed(Notification *)), this, SLOT(notificationChanged(Notification *)), Qt::UniqueConnection); + + NotificationWidget *notificationWidget = new NotificationWidget(notification, this); + notificationWidget->installEventFilter(this); +commit f0f66f023e6f2896bcc2ea67d7922fc0745ff7b5 +Author: Aaron Seigo <aseigo@kde.org> +Date: Tue Feb 1 12:54:10 2011 -0800 + + simplification + +diff --git a/plasma/generic/applets/notifications/ui/notificationwidget.cpp b/plasma/generic/applets/notifications/ui/notificationwidget.cpp +index 7764ede..3f87cfe 100644 +--- a/plasma/generic/applets/notifications/ui/notificationwidget.cpp ++++ b/plasma/generic/applets/notifications/ui/notificationwidget.cpp +@@ -43,7 +43,6 @@ + + #include <Plasma/Animation> + #include <Plasma/Animator> +-#include <Plasma/Extender> + #include <Plasma/Frame> + #include <Plasma/IconWidget> + #include <Plasma/Label> +@@ -170,7 +169,7 @@ NotificationWidget::NotificationWidget(Notification *notification, QGraphicsWidg + d->notification = notification; + + connect(d->signalMapper, SIGNAL(mapped(const QString &)), +- d->notification.data(), SLOT(triggerAction(const QString &))); ++ notification, SLOT(triggerAction(const QString &))); + connect(notification, SIGNAL(changed()), + this, SLOT(updateNotification())); + connect(notification, SIGNAL(destroyed()), |