* add actions in the order they are added, not alphabetically by name (?!)

* remove actions if they get deleted
BUG:30042

svn path=/branches/KDE/4.2/kdelibs/; revision=907995
This commit is contained in:
Aaron J. Seigo 2009-01-09 02:14:10 +00:00
parent 9f03caaa18
commit 4f16460715
3 changed files with 30 additions and 3 deletions

View File

@ -331,9 +331,14 @@ bool ExtenderItem::isDetached() const
void ExtenderItem::addAction(const QString &name, QAction *action) void ExtenderItem::addAction(const QString &name, QAction *action)
{ {
Q_ASSERT(action); Q_ASSERT(action);
if (d->actionsInOrder.contains(action)) {
return;
}
d->actions.insert(name, action); d->actions.insert(name, action);
d->actionsInOrder.append(action);
connect(action, SIGNAL(changed()), this, SLOT(updateToolBox())); connect(action, SIGNAL(changed()), this, SLOT(updateToolBox()));
connect(action, SIGNAL(destroyed(QObject*)), this, SLOT(actionDestroyed(QObject*)));
d->updateToolBox(); d->updateToolBox();
} }
@ -907,7 +912,7 @@ void ExtenderItemPrivate::updateToolBox()
} }
//add the actions that are actually set to visible. //add the actions that are actually set to visible.
foreach (QAction *action, actions) { foreach (QAction *action, actionsInOrder) {
if (action->isVisible()) { if (action->isVisible()) {
IconWidget *icon = new IconWidget(q); IconWidget *icon = new IconWidget(q);
icon->setAction(action); icon->setAction(action);
@ -1105,10 +1110,29 @@ void ExtenderItemPrivate::resizeContent(const QSizeF &newSize)
void ExtenderItemPrivate::previousTargetExtenderDestroyed(QObject *o) void ExtenderItemPrivate::previousTargetExtenderDestroyed(QObject *o)
{ {
Q_UNUSED(o) Q_UNUSED(o)
previousTargetExtender = 0; previousTargetExtender = 0;
} }
void ExtenderItemPrivate::actionDestroyed(QObject *o)
{
QAction *action = static_cast<QAction *>(o);
QMutableHashIterator<QString, QAction *> hit(actions);
while (hit.hasNext()) {
if (hit.next().value() == action) {
hit.remove();
break;
}
}
QMutableListIterator<QAction *> lit(actionsInOrder);
while (lit.hasNext()) {
if (lit.next() == action) {
lit.remove();
break;
}
}
}
uint ExtenderItemPrivate::s_maxExtenderItemId = 0; uint ExtenderItemPrivate::s_maxExtenderItemId = 0;
} // namespace Plasma } // namespace Plasma

View File

@ -249,6 +249,7 @@ class PLASMA_EXPORT ExtenderItem : public QGraphicsWidget
Q_PRIVATE_SLOT(d, void themeChanged()) Q_PRIVATE_SLOT(d, void themeChanged())
Q_PRIVATE_SLOT(d, void sourceAppletRemoved()) Q_PRIVATE_SLOT(d, void sourceAppletRemoved())
Q_PRIVATE_SLOT(d, void previousTargetExtenderDestroyed(QObject*)) Q_PRIVATE_SLOT(d, void previousTargetExtenderDestroyed(QObject*))
Q_PRIVATE_SLOT(d, void actionDestroyed(QObject*))
ExtenderItemPrivate * const d; ExtenderItemPrivate * const d;

View File

@ -59,6 +59,7 @@ class ExtenderItemPrivate
qreal iconSize(); qreal iconSize();
void resizeContent(const QSizeF &newSize); void resizeContent(const QSizeF &newSize);
void previousTargetExtenderDestroyed(QObject *o); void previousTargetExtenderDestroyed(QObject *o);
void actionDestroyed(QObject *o);
ExtenderItem *q; ExtenderItem *q;
@ -78,7 +79,8 @@ class ExtenderItemPrivate
IconWidget *collapseIcon; IconWidget *collapseIcon;
QMap<QString, QAction*> actions; QHash<QString, QAction*> actions;
QList<QAction*> actionsInOrder;
QString title; QString title;
QString name; QString name;