too much classes clobbers with the Extender's private, protect d->applet behind a QWeakPointer
BUG:195369 BUG:232408 CCBUG:233563 BUG:239022 svn path=/trunk/KDE/kdelibs/; revision=1131248
This commit is contained in:
parent
653fdbbfb6
commit
b8893a8044
@ -172,7 +172,10 @@ Plasma::Applet *DialogPrivate::applet()
|
||||
Extender *extender = qobject_cast<Extender*>(graphicsWidgetPtr.data());
|
||||
Plasma::Applet *applet = 0;
|
||||
if (extender) {
|
||||
applet = extender->d->applet;
|
||||
if (!extender->d->applet) {
|
||||
return 0;
|
||||
}
|
||||
applet = extender->d->applet.data();
|
||||
} else if (graphicsWidgetPtr) {
|
||||
QObject *pw = graphicsWidgetPtr.data();
|
||||
|
||||
|
@ -137,7 +137,11 @@ QList<ExtenderItem*> Extender::items() const
|
||||
|
||||
//FIXME: a triple nested loop ... ew. there should be a more efficient way to do this
|
||||
//iterate through all extenders we can find and check each extenders source applet.
|
||||
Containment *containment = d->applet->containment();
|
||||
if (!d->applet) {
|
||||
return QList<ExtenderItem*>();
|
||||
}
|
||||
|
||||
Containment *containment = d->applet.data()->containment();
|
||||
if (!containment) {
|
||||
return result;
|
||||
}
|
||||
@ -146,7 +150,7 @@ QList<ExtenderItem*> Extender::items() const
|
||||
foreach (Applet *applet, c->applets()) {
|
||||
if (applet->d->extender) {
|
||||
foreach (ExtenderItem *item, applet->d->extender.data()->attachedItems()) {
|
||||
if (item->d->sourceApplet == d->applet) {
|
||||
if (item->d->sourceApplet == d->applet.data()) {
|
||||
result.append(item);
|
||||
}
|
||||
}
|
||||
@ -168,7 +172,10 @@ QList<ExtenderItem*> Extender::detachedItems() const
|
||||
|
||||
//FIXME: a triple nested loop ... ew. there should be a more efficient way to do this
|
||||
//iterate through all extenders we can find and check each extenders source applet.
|
||||
Containment *containment = d->applet->containment();
|
||||
if (!d->applet) {
|
||||
return QList<ExtenderItem*>();
|
||||
}
|
||||
Containment *containment = d->applet.data()->containment();
|
||||
if (!containment) {
|
||||
return result;
|
||||
}
|
||||
@ -177,7 +184,7 @@ QList<ExtenderItem*> Extender::detachedItems() const
|
||||
foreach (Applet *applet, c->applets()) {
|
||||
if (applet->d->extender) {
|
||||
foreach (ExtenderItem *item, applet->d->extender.data()->attachedItems()) {
|
||||
if (item->d->sourceApplet == d->applet && item->isDetached()) {
|
||||
if (item->d->sourceApplet == d->applet.data() && item->isDetached()) {
|
||||
result.append(item);
|
||||
}
|
||||
}
|
||||
@ -192,7 +199,7 @@ ExtenderItem *Extender::item(const QString &name) const
|
||||
{
|
||||
// chances are the item is in our own extender, so check there first
|
||||
foreach (ExtenderItem *item, d->attachedExtenderItems) {
|
||||
if (item->d->sourceApplet == d->applet && item->name() == name) {
|
||||
if (item->d->sourceApplet == d->applet.data() && item->name() == name) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
@ -200,7 +207,10 @@ ExtenderItem *Extender::item(const QString &name) const
|
||||
// maybe it's been moved elsewhere, so lets search through the entire tree of elements
|
||||
//FIXME: a triple nested loop ... ew. there should be a more efficient way to do this
|
||||
//iterate through all extenders we can find and check each extenders source applet.
|
||||
Containment *containment = d->applet->containment();
|
||||
if (!d->applet) {
|
||||
return 0;
|
||||
}
|
||||
Containment *containment = d->applet.data()->containment();
|
||||
if (!containment) {
|
||||
return 0;
|
||||
}
|
||||
@ -221,7 +231,7 @@ ExtenderItem *Extender::item(const QString &name) const
|
||||
}
|
||||
|
||||
foreach (ExtenderItem *item, applet->d->extender.data()->attachedItems()) {
|
||||
if (item->d->sourceApplet == d->applet && item->name() == name) {
|
||||
if (item->d->sourceApplet == d->applet.data() && item->name() == name) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
@ -243,6 +253,10 @@ bool Extender::hasItem(const QString &name) const
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!d->applet) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//if item(name) returns false, that doesn't mean that the item doesn't exist, just that it has
|
||||
//not been instantiated yet. check to see if there's mention of this item existing in the
|
||||
//plasma config's section DetachedExtenderItems
|
||||
@ -254,9 +268,9 @@ bool Extender::hasItem(const QString &name) const
|
||||
KConfigGroup extenderItemGroup(corona->config(), "DetachedExtenderItems");
|
||||
foreach (const QString &extenderItemId, extenderItemGroup.groupList()) {
|
||||
KConfigGroup cg = extenderItemGroup.group(extenderItemId);
|
||||
if (uint(cg.readEntry("sourceAppletId", 0)) == d->applet->id() &&
|
||||
if (uint(cg.readEntry("sourceAppletId", 0)) == d->applet.data()->id() &&
|
||||
cg.readEntry("extenderItemName", "") == name &&
|
||||
cg.readEntry("sourceAppletPluginName", "") == d->applet->pluginName()) {
|
||||
cg.readEntry("sourceAppletPluginName", "") == d->applet.data()->pluginName()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -295,7 +309,7 @@ QList<ExtenderGroup*> Extender::groups() const
|
||||
|
||||
Applet *Extender::applet() const
|
||||
{
|
||||
return d->applet;
|
||||
return d->applet.data();
|
||||
}
|
||||
|
||||
void Extender::saveState()
|
||||
@ -323,7 +337,12 @@ void Extender::resizeEvent(QGraphicsSceneResizeEvent *event)
|
||||
void Extender::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
Q_UNUSED(event)
|
||||
PopupApplet *popupApplet = qobject_cast<PopupApplet*>(d->applet);
|
||||
|
||||
if (!d->applet) {
|
||||
return;
|
||||
}
|
||||
|
||||
PopupApplet *popupApplet = qobject_cast<PopupApplet*>(d->applet.data());
|
||||
if (isEmpty() && popupApplet) {
|
||||
popupApplet->hidePopup();
|
||||
}
|
||||
@ -340,7 +359,7 @@ void Extender::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
|
||||
if (mimeData) {
|
||||
itemHoverEnterEvent(mimeData->extenderItem());
|
||||
|
||||
PopupApplet *popupApplet = qobject_cast<PopupApplet*>(d->applet);
|
||||
PopupApplet *popupApplet = qobject_cast<PopupApplet*>(d->applet.data());
|
||||
if (popupApplet) {
|
||||
popupApplet->showPopup();
|
||||
}
|
||||
@ -375,7 +394,7 @@ void Extender::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
|
||||
//Hide popups when they're not the extender where we started, and we're leaving the
|
||||
//extender. Use a small timeout here, to avoid accidental hides of extenders we're
|
||||
//targetting.
|
||||
PopupApplet *popupApplet = qobject_cast<PopupApplet*>(d->applet);
|
||||
PopupApplet *popupApplet = qobject_cast<PopupApplet*>(d->applet.data());
|
||||
if (popupApplet && sourceExtender != this) {
|
||||
kDebug() << "leaving another extender then the extender we started, so hide the popup.";
|
||||
popupApplet->showPopup(250);
|
||||
@ -389,7 +408,7 @@ void Extender::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
|
||||
|
||||
//Hide empty internal extender containers when we drag the last item away. Avoids having
|
||||
//an ugly empty applet on the desktop temporarily.
|
||||
ExtenderApplet *extenderApplet = qobject_cast<ExtenderApplet*>(d->applet);
|
||||
ExtenderApplet *extenderApplet = qobject_cast<ExtenderApplet*>(d->applet.data());
|
||||
if (extenderApplet && sourceExtender == this && attachedItems().count() < 2 &&
|
||||
extenderApplet->formFactor() != Plasma::Horizontal &&
|
||||
extenderApplet->formFactor() != Plasma::Vertical) {
|
||||
@ -573,7 +592,7 @@ void ExtenderPrivate::removeExtenderItem(ExtenderItem *item)
|
||||
|
||||
//collapse the popupapplet if the last item is removed.
|
||||
if (!q->attachedItems().count()) {
|
||||
PopupApplet *popupApplet = qobject_cast<PopupApplet*>(applet);
|
||||
PopupApplet *popupApplet = qobject_cast<PopupApplet*>(applet.data());
|
||||
if (popupApplet) {
|
||||
popupApplet->hidePopup();
|
||||
}
|
||||
@ -606,7 +625,11 @@ int ExtenderPrivate::insertIndexFromPos(const QPointF &pos) const
|
||||
|
||||
void ExtenderPrivate::loadExtenderItems()
|
||||
{
|
||||
KConfigGroup cg = applet->config("ExtenderItems");
|
||||
if (!applet) {
|
||||
return;
|
||||
}
|
||||
|
||||
KConfigGroup cg = applet.data()->config("ExtenderItems");
|
||||
|
||||
//first create a list of extenderItems, and then sort them on their position, so the items get
|
||||
//recreated in the correct order.
|
||||
@ -631,17 +654,17 @@ void ExtenderPrivate::loadExtenderItems()
|
||||
|
||||
bool temporarySourceApplet = false;
|
||||
|
||||
kDebug() << "applet id = " << applet->id();
|
||||
kDebug() << "applet id = " << applet.data()->id();
|
||||
kDebug() << "sourceappletid = " << sourceAppletId;
|
||||
|
||||
//find the source applet.
|
||||
Applet *sourceApplet = 0;
|
||||
if (applet->id() == sourceAppletId) {
|
||||
if (applet.data()->id() == sourceAppletId) {
|
||||
// it's ours!
|
||||
sourceApplet = applet;
|
||||
sourceApplet = applet.data();
|
||||
} else {
|
||||
// maybe it's foreign?
|
||||
Containment *containment = applet->containment();
|
||||
Containment *containment = applet.data()->containment();
|
||||
|
||||
if (containment) {
|
||||
Corona *corona = containment->corona();
|
||||
|
@ -130,7 +130,7 @@ ExtenderItem::ExtenderItem(Extender *hostExtender, uint extenderItemId)
|
||||
d->toolboxLayout = new QGraphicsLinearLayout(d->toolbox);
|
||||
|
||||
//create items's configgroup
|
||||
KConfigGroup cg = hostExtender->d->applet->config("ExtenderItems");
|
||||
KConfigGroup cg = hostExtender->d->applet.data()->config("ExtenderItems");
|
||||
KConfigGroup dg = KConfigGroup(&cg, QString::number(d->extenderItemId));
|
||||
|
||||
//create own layout
|
||||
@ -149,11 +149,11 @@ ExtenderItem::ExtenderItem(Extender *hostExtender, uint extenderItemId)
|
||||
|
||||
if (!sourceAppletId) {
|
||||
//The item is new
|
||||
dg.writeEntry("sourceAppletPluginName", hostExtender->d->applet->pluginName());
|
||||
dg.writeEntry("sourceAppletId", hostExtender->d->applet->id());
|
||||
dg.writeEntry("extenderIconName", hostExtender->d->applet->icon());
|
||||
d->sourceApplet = hostExtender->d->applet;
|
||||
d->collapseIcon->setIcon(KIcon(hostExtender->d->applet->icon()));
|
||||
dg.writeEntry("sourceAppletPluginName", hostExtender->d->applet.data()->pluginName());
|
||||
dg.writeEntry("sourceAppletId", hostExtender->d->applet.data()->id());
|
||||
dg.writeEntry("extenderIconName", hostExtender->d->applet.data()->icon());
|
||||
d->sourceApplet = hostExtender->d->applet.data();
|
||||
d->collapseIcon->setIcon(KIcon(hostExtender->d->applet.data()->icon()));
|
||||
} else {
|
||||
//The item already exists.
|
||||
d->name = dg.readEntry("extenderItemName", "");
|
||||
@ -171,7 +171,7 @@ ExtenderItem::ExtenderItem(Extender *hostExtender, uint extenderItemId)
|
||||
d->group = hostExtender->d->findGroup(groupName);
|
||||
|
||||
//Find the sourceapplet.
|
||||
Corona *corona = hostExtender->d->applet->containment()->corona();
|
||||
Corona *corona = hostExtender->d->applet.data()->containment()->corona();
|
||||
foreach (Containment *containment, corona->containments()) {
|
||||
foreach (Applet *applet, containment->applets()) {
|
||||
if (applet->id() == sourceAppletId &&
|
||||
@ -199,7 +199,7 @@ ExtenderItem::ExtenderItem(Extender *hostExtender, uint extenderItemId)
|
||||
setAcceptsHoverEvents(true);
|
||||
|
||||
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()), this, SLOT(themeChanged()));
|
||||
d->setMovable(d->extender->d->applet->immutability() == Plasma::Mutable);
|
||||
d->setMovable(d->extender->d->applet.data()->immutability() == Plasma::Mutable);
|
||||
}
|
||||
|
||||
ExtenderItem::~ExtenderItem()
|
||||
@ -213,7 +213,7 @@ KConfigGroup ExtenderItem::config() const
|
||||
if (!d->extender->d->applet) {
|
||||
return KConfigGroup();
|
||||
}
|
||||
KConfigGroup cg = d->extender->d->applet->config("ExtenderItems");
|
||||
KConfigGroup cg = d->extender->d->applet.data()->config("ExtenderItems");
|
||||
return KConfigGroup(&cg, QString::number(d->extenderItemId));
|
||||
}
|
||||
|
||||
@ -314,7 +314,7 @@ void ExtenderItem::setExtender(Extender *extender, const QPointF &pos)
|
||||
|
||||
//move the configuration.
|
||||
if (d->hostApplet() && (extender != d->extender)) {
|
||||
KConfigGroup c = extender->d->applet->config("ExtenderItems");
|
||||
KConfigGroup c = extender->d->applet.data()->config("ExtenderItems");
|
||||
config().reparent(&c);
|
||||
}
|
||||
|
||||
@ -576,7 +576,7 @@ void ExtenderItem::resizeEvent(QGraphicsSceneResizeEvent *event)
|
||||
void ExtenderItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
if (!(d->dragHandleRect().contains(event->pos())) ||
|
||||
d->extender->d->applet->immutability() != Plasma::Mutable) {
|
||||
d->extender->d->applet.data()->immutability() != Plasma::Mutable) {
|
||||
event->ignore();
|
||||
return;
|
||||
}
|
||||
@ -590,6 +590,10 @@ void ExtenderItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!d->extender->d->applet) {
|
||||
return;
|
||||
}
|
||||
|
||||
//Start the drag:
|
||||
d->dragStarted = true;
|
||||
QPointF curPos = pos();
|
||||
@ -629,7 +633,7 @@ void ExtenderItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||
|
||||
//Hide empty internal extender containers when we drag the last item away. Avoids having
|
||||
//an ugly empty applet on the desktop temporarily.
|
||||
ExtenderApplet *extenderApplet = qobject_cast<ExtenderApplet*>(d->extender->d->applet);
|
||||
ExtenderApplet *extenderApplet = qobject_cast<ExtenderApplet*>(d->extender->d->applet.data());
|
||||
if (extenderApplet && d->extender->attachedItems().count() < 2 &&
|
||||
extenderApplet->formFactor() != Plasma::Horizontal &&
|
||||
extenderApplet->formFactor() != Plasma::Vertical) {
|
||||
@ -649,7 +653,7 @@ void ExtenderItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||
}
|
||||
|
||||
//and execute the drag.
|
||||
QWidget *dragParent = extender()->d->applet->view();
|
||||
QWidget *dragParent = extender()->d->applet.data()->view();
|
||||
QDrag *drag = new QDrag(dragParent);
|
||||
drag->setPixmap(pixmap);
|
||||
drag->setMimeData(mimeData);
|
||||
@ -845,7 +849,7 @@ void ExtenderItemPrivate::updateToolBox()
|
||||
Applet *ExtenderItemPrivate::hostApplet() const
|
||||
{
|
||||
if (extender) {
|
||||
return extender->d->applet;
|
||||
return extender->d->applet.data();
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ class ExtenderPrivate
|
||||
|
||||
Extender *q;
|
||||
|
||||
Applet *applet;
|
||||
QWeakPointer<Applet> applet;
|
||||
QGraphicsLinearLayout *layout;
|
||||
FrameSvg *background;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user