packages: kde4-kdebase-workspace/kde4-kdebase-workspace.spec, kde4-kdebase-...
arekm
arekm at pld-linux.org
Fri Nov 11 05:51:29 CET 2011
Author: arekm Date: Fri Nov 11 04:51:29 2011 GMT
Module: packages Tag: HEAD
---- Log message:
- rel 3; fix for taskbar segfaults taking down plasma-desktop
---- Files affected:
packages/kde4-kdebase-workspace:
kde4-kdebase-workspace.spec (1.284 -> 1.285) , kde4-kdebase-workspace-bug-272495.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: packages/kde4-kdebase-workspace/kde4-kdebase-workspace.spec
diff -u packages/kde4-kdebase-workspace/kde4-kdebase-workspace.spec:1.284 packages/kde4-kdebase-workspace/kde4-kdebase-workspace.spec:1.285
--- packages/kde4-kdebase-workspace/kde4-kdebase-workspace.spec:1.284 Thu Nov 3 09:03:08 2011
+++ packages/kde4-kdebase-workspace/kde4-kdebase-workspace.spec Fri Nov 11 05:51:24 2011
@@ -9,7 +9,7 @@
Summary(pl.UTF-8): Podstawowe komponenty środowiska KDE 4
Name: kde4-kdebase-workspace
Version: 4.7.3
-Release: 2
+Release: 3
License: GPL v2+
Group: X11/Applications
Source0: ftp://ftp.kde.org/pub/kde/%{_state}/%{version}/src/%{orgname}-%{version}.tar.bz2
@@ -30,6 +30,7 @@
Patch100: %{name}-branch.diff
Patch0: %{name}-rootprivs.patch
Patch1: %{name}-kdmconfig.patch
+Patch2: %{name}-bug-272495.patch
URL: http://www.kde.org/
BuildRequires: ConsoleKit-devel
BuildRequires: NetworkManager-devel >= 0.8.999
@@ -514,6 +515,7 @@
#%%patch100 -p1
%patch0 -p1
%patch1 -p1
+%patch2 -p1
%build
install -d build
@@ -1871,6 +1873,9 @@
All persons listed below can be reached at <cvs_login>@pld-linux.org
$Log$
+Revision 1.285 2011/11/11 04:51:24 arekm
+- rel 3; fix for taskbar segfaults taking down plasma-desktop
+
Revision 1.284 2011/11/03 08:03:08 arekm
- rel 2; new tarball
================================================================
Index: packages/kde4-kdebase-workspace/kde4-kdebase-workspace-bug-272495.patch
diff -u /dev/null packages/kde4-kdebase-workspace/kde4-kdebase-workspace-bug-272495.patch:1.1
--- /dev/null Fri Nov 11 05:51:29 2011
+++ packages/kde4-kdebase-workspace/kde4-kdebase-workspace-bug-272495.patch Fri Nov 11 05:51:24 2011
@@ -0,0 +1,264 @@
+commit 639155a5493a28ca9460d60fa0c078ec65c3bb96
+Author: Aaron Seigo <aseigo at kde.org>
+Date: Thu Nov 10 13:01:37 2011 +0100
+
+ use a QWeakPointer to track the lifespan of the task
+
+ the itemRemoved signal from TaskGroup has dangling pointers, apparently
+ by design (the next thing on my list to investigate), and the signal is
+ delayed. so between the actual deletion of the task and the signal, there
+ pointer is a dangler. easy solution is to just track it in the WindowTaskItem
+ itself with a cheap QWeakPointer.
+
+ BUG:272495
+
+diff --git a/plasma/desktop/applets/tasks/abstracttaskitem.cpp b/plasma/desktop/applets/tasks/abstracttaskitem.cpp
+index 00140ef..48ba172 100644
+--- a/plasma/desktop/applets/tasks/abstracttaskitem.cpp
++++ b/plasma/desktop/applets/tasks/abstracttaskitem.cpp
+@@ -203,6 +203,10 @@ QIcon AbstractTaskItem::icon() const
+ return QIcon();
+ }
+
++void AbstractTaskItem::close()
++{
++}
++
+ void AbstractTaskItem::setTaskFlags(const TaskFlags flags)
+ {
+ if (((m_flags & TaskWantsAttention) != 0) != ((flags & TaskWantsAttention) != 0)) {
+diff --git a/plasma/desktop/applets/tasks/abstracttaskitem.h b/plasma/desktop/applets/tasks/abstracttaskitem.h
+index 9520e1f..a527881 100644
+--- a/plasma/desktop/applets/tasks/abstracttaskitem.h
++++ b/plasma/desktop/applets/tasks/abstracttaskitem.h
+@@ -103,7 +103,7 @@ public:
+ /** Returns the current icon for this task. */
+ QIcon icon() const;
+
+- virtual void close() = 0;
++ virtual void close();
+
+ /** Tells the window manager the minimized task's geometry. */
+ virtual void publishIconGeometry() const;
+diff --git a/plasma/desktop/applets/tasks/windowtaskitem.cpp b/plasma/desktop/applets/tasks/windowtaskitem.cpp
+index 1ddca2c..1c33476 100644
+--- a/plasma/desktop/applets/tasks/windowtaskitem.cpp
++++ b/plasma/desktop/applets/tasks/windowtaskitem.cpp
+@@ -56,7 +56,6 @@
+
+ WindowTaskItem::WindowTaskItem(QGraphicsWidget *parent, Tasks *applet)
+ : AbstractTaskItem(parent, applet),
+- m_task(0),
+ m_busyWidget(0)
+ {
+ }
+@@ -77,8 +76,8 @@ void WindowTaskItem::activate()
+ // in a widget such as a line edit which does accept the focus)
+ // this needs to be implemented for Plasma's own panels.
+ //kDebug();
+- if (m_task && m_task->task()) {
+- m_task->task()->activateRaiseOrIconify();
++ if (m_task && m_task.data()->task()) {
++ m_task.data()->task()->activateRaiseOrIconify();
+ // emit windowSelected(this);
+ }
+ }
+@@ -108,27 +107,20 @@ void WindowTaskItem::keyPressEvent(QKeyEvent *event)
+ }
+ }
+
+-//destroy this item
+-void WindowTaskItem::close()
+-{
+- //kDebug();
+- m_task = 0;
+-}
+-
+ void WindowTaskItem::publishIconGeometry() const
+ {
+- if (!m_task || !m_task->task()) {
++ if (!m_task || !m_task.data()->task()) {
+ return;
+ }
+
+ QRect rect = iconGeometry();
+- m_task->task()->publishIconGeometry(rect);
++ m_task.data()->task()->publishIconGeometry(rect);
+ }
+
+ void WindowTaskItem::publishIconGeometry(const QRect &rect) const
+ {
+- if (m_task && m_task->task()) {
+- m_task->task()->publishIconGeometry(rect);
++ if (m_task && m_task.data()->task()) {
++ m_task.data()->task()->publishIconGeometry(rect);
+ }
+ }
+
+@@ -142,7 +134,7 @@ void WindowTaskItem::updateTask(::TaskManager::TaskChanges changes)
+ TaskFlags flags = m_flags;
+
+ if (changes & TaskManager::StateChanged) {
+- if (m_task->isActive()) {
++ if (m_task.data()->isActive()) {
+ flags |= TaskHasFocus;
+ if (!(m_flags & TaskHasFocus)) {
+ emit activated(this);
+@@ -151,7 +143,7 @@ void WindowTaskItem::updateTask(::TaskManager::TaskChanges changes)
+ flags &= ~TaskHasFocus;
+ }
+
+- if (m_task->isMinimized()) {
++ if (m_task.data()->isMinimized()) {
+ flags |= TaskIsMinimized;
+ } else {
+ flags &= ~TaskIsMinimized;
+@@ -160,7 +152,7 @@ void WindowTaskItem::updateTask(::TaskManager::TaskChanges changes)
+ }
+
+ if (changes & TaskManager::AttentionChanged) {
+- if (m_task->demandsAttention()) {
++ if (m_task.data()->demandsAttention()) {
+ flags |= TaskWantsAttention;
+ } else {
+ flags &= ~TaskWantsAttention;
+@@ -191,14 +183,14 @@ void WindowTaskItem::updateTask(::TaskManager::TaskChanges changes)
+
+ if (needsUpdate) {
+ //redraw
+- //kDebug() << m_task->name();
++ //kDebug() << m_task.data()->name();
+ queueUpdate();
+ }
+ }
+
+ void WindowTaskItem::updateToolTip()
+ {
+- if (!m_task || !m_task->task()) {
++ if (!m_task || !m_task.data()->task()) {
+ return;
+ }
+
+@@ -219,19 +211,19 @@ void WindowTaskItem::updateToolTip()
+ }
+
+ if (showToolTip) {
+- QPixmap p = m_task->task()->icon(KIconLoader::SizeLarge, KIconLoader::SizeLarge, false);
++ QPixmap p = m_task.data()->task()->icon(KIconLoader::SizeLarge, KIconLoader::SizeLarge, false);
+ if (p.height() > KIconLoader::SizeLarge) {
+ p = p.scaled(QSize(KIconLoader::SizeLarge, KIconLoader::SizeLarge),
+ Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ }
+
+- Plasma::ToolTipContent data(Qt::escape(m_task->name()), QString(), p);
+- if (m_task->desktop() != 0 &&
+- (!m_applet->groupManager().showOnlyCurrentDesktop() || !m_task->isOnCurrentDesktop())) {
++ Plasma::ToolTipContent data(Qt::escape(m_task.data()->name()), QString(), p);
++ if (m_task.data()->desktop() != 0 &&
++ (!m_applet->groupManager().showOnlyCurrentDesktop() || !m_task.data()->isOnCurrentDesktop())) {
+ data.setSubText(i18nc("Which virtual desktop a window is currently on", "On %1",
+- KWindowSystem::desktopName(m_task->desktop())));
++ KWindowSystem::desktopName(m_task.data()->desktop())));
+ }
+- data.setWindowToPreview(m_task->task()->window());
++ data.setWindowsToPreview(QList<WId>() << m_task.data()->task()->window());
+ data.setClickable(true);
+ data.setInstantPopup(true);
+ data.setHighlightWindows(m_applet->highlightWindows());
+@@ -285,8 +277,9 @@ void WindowTaskItem::gotTaskPointer()
+ void WindowTaskItem::setWindowTask(TaskManager::TaskItem* taskItem)
+ {
+ if (m_task) {
+- disconnect(m_task->task().constData(), 0, this, 0);
++ disconnect(m_task.data()->task().constData(), 0, this, 0);
+ }
++
+ m_task = taskItem;
+ m_abstractItem = qobject_cast<TaskManager::AbstractGroupableItem *>(taskItem);
+
+@@ -294,8 +287,10 @@ void WindowTaskItem::setWindowTask(TaskManager::TaskItem* taskItem)
+ connect(m_abstractItem, SIGNAL(destroyed(QObject*)), this, SLOT(clearAbstractItem()));
+ }
+
+- connect(m_task, SIGNAL(changed(::TaskManager::TaskChanges)),
+- this, SLOT(updateTask(::TaskManager::TaskChanges)));
++ if (m_task) {
++ connect(m_task.data(), SIGNAL(changed(::TaskManager::TaskChanges)),
++ this, SLOT(updateTask(::TaskManager::TaskChanges)));
++ }
+
+ updateTask(::TaskManager::EverythingChanged);
+ publishIconGeometry();
+@@ -319,7 +314,7 @@ void WindowTaskItem::setTask(TaskManager::TaskItem* taskItem)
+
+ TaskManager::TaskPtr WindowTaskItem::windowTask() const
+ {
+- return m_task ? m_task->task() : TaskManager::TaskPtr();
++ return m_task ? m_task.data()->task() : TaskManager::TaskPtr();
+ }
+
+ void WindowTaskItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *e)
+@@ -331,10 +326,10 @@ void WindowTaskItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *e)
+
+ QList <QAction*> actionList;
+ QAction *a(0);
+- if (m_task->isGrouped()) {
++ if (m_task.data()->isGrouped()) {
+ a = new QAction(i18n("Collapse Parent Group"), 0);
+ actionList.append(a);
+- TaskGroupItem *group = qobject_cast<TaskGroupItem*>(m_applet->rootGroupItem()->abstractTaskItem(m_task->parentGroup()));
++ TaskGroupItem *group = qobject_cast<TaskGroupItem*>(m_applet->rootGroupItem()->abstractTaskItem(m_task.data()->parentGroup()));
+ connect(a, SIGNAL(triggered()), group, SLOT(collapse()));
+ }
+
+@@ -343,7 +338,7 @@ void WindowTaskItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *e)
+ actionList.append(configAction);
+ }
+
+- TaskManager::BasicMenu menu(0, m_task, &m_applet->groupManager(), actionList);
++ TaskManager::BasicMenu menu(0, m_task.data(), &m_applet->groupManager(), actionList);
+ menu.adjustSize();
+
+ if (m_applet->formFactor() != Plasma::Vertical) {
+@@ -364,18 +359,13 @@ bool WindowTaskItem::isWindowItem() const
+
+ bool WindowTaskItem::isActive() const
+ {
+- if (!m_task) {
+- //kDebug() << "no task set";
+- return false;
+- }
+-
+- return m_task->isActive();
++ return m_task ? m_task.data()->isActive() : false;
+ }
+
+ void WindowTaskItem::setAdditionalMimeData(QMimeData* mimeData)
+ {
+ if (m_task) {
+- m_task->addMimeData(mimeData);
++ m_task.data()->addMimeData(mimeData);
+ }
+ }
+
+diff --git a/plasma/desktop/applets/tasks/windowtaskitem.h b/plasma/desktop/applets/tasks/windowtaskitem.h
+index a5b698a..4db9d43 100644
+--- a/plasma/desktop/applets/tasks/windowtaskitem.h
++++ b/plasma/desktop/applets/tasks/windowtaskitem.h
+@@ -63,7 +63,6 @@ signals:
+
+ public slots:
+ void activate();
+- void close();
+
+ protected:
+ void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
+@@ -82,7 +81,7 @@ private:
+ /** Sets the window represented by this task. */
+ void setWindowTask(TaskManager::TaskItem* taskItem);
+
+- TaskManager::TaskItem *m_task;
++ QWeakPointer<TaskManager::TaskItem> m_task;
+ Plasma::BusyWidget *m_busyWidget;
+ };
+
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kde4-kdebase-workspace/kde4-kdebase-workspace.spec?r1=1.284&r2=1.285&f=u
More information about the pld-cvs-commit
mailing list