SVN commit 792371 by aseigo: make setNeedsConfiguring behave nicely M +58 -23 applet.cpp M +0 -5 applet.h --- trunk/KDE/kdebase/workspace/libs/plasma/applet.cpp #792370:792371 @@ -70,6 +70,29 @@ namespace Plasma { +class OverlayWidget : public Widget +{ +public: + OverlayWidget(Widget *parent) + : Widget(parent, parent) + { + resize(parent->size()); + } + +protected: + void paintWidget(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) + { + Q_UNUSED(option) + Q_UNUSED(widget) + painter->save(); + painter->setRenderHint(QPainter::Antialiasing); + QColor wash = Plasma::Theme::self()->backgroundColor(); + wash.setAlphaF(.6); + painter->fillPath(parent()->shape(), wash); + painter->restore(); + } +}; + class Applet::Private { public: @@ -77,6 +100,7 @@ : appletId(uniqueID), appletDescription(service), package(0), + needsConfigOverlay(0), background(0), failureText(0), script(0), @@ -90,7 +114,6 @@ immutable(false), hasConfigurationInterface(false), failed(false), - needsConfig(false), isContainment(false), square(false) { @@ -294,6 +317,7 @@ uint appletId; KPluginInfo appletDescription; Package* package; + OverlayWidget *needsConfigOverlay; QList watchedForFocus; QList watchedForMouseMove; QStringList loadedEngines; @@ -310,7 +334,6 @@ bool immutable : 1; bool hasConfigurationInterface : 1; bool failed : 1; - bool needsConfig : 1; bool isContainment : 1; bool square : 1; }; @@ -693,35 +716,35 @@ bool Applet::needsConfiguring() const { - return d->needsConfig; + return d->needsConfigOverlay != 0; } void Applet::setNeedsConfiguring(bool needsConfig) { - if (d->needsConfig == needsConfig) { + if ((d->needsConfigOverlay != 0) == needsConfig) { return; } - d->needsConfig = needsConfig; - prepareGeometryChange(); - qDeleteAll(QGraphicsItem::children()); - setLayout(0); - - if (needsConfig) { - setDrawStandardBackground(true); - Layout* layout = new BoxLayout(BoxLayout::TopToBottom,this); - PushButton* button = new PushButton(this); - button->setText(i18n("Configure...")); - connect(button, SIGNAL(clicked()), this, SLOT(performSetupConfig())); - layout->addItem(button); + if (d->needsConfigOverlay) { + delete d->needsConfigOverlay; + d->needsConfigOverlay = 0; + return; } -} -void Applet::performSetupConfig() -{ - qDeleteAll(QGraphicsItem::children()); - setLayout(0); - showConfigurationInterface(); + d->needsConfigOverlay = new OverlayWidget(this); + d->needsConfigOverlay->resize(contentSize()); + + setDrawStandardBackground(true); + qDeleteAll(d->needsConfigOverlay->QGraphicsItem::children()); + PushButton* button = new PushButton(d->needsConfigOverlay); + button->setText(i18n("Configure...")); + connect(button, SIGNAL(clicked()), this, SLOT(showConfigurationInterface())); + QSizeF s = button->sizeHint(); + button->resize(s); + button->setPos(d->needsConfigOverlay->boundingRect().width() / 2 - s.width() / 2, + d->needsConfigOverlay->boundingRect().height() / 2 - s.height() / 2); + button->show(); + d->needsConfigOverlay->show(); } void Applet::checkImmutability() @@ -745,6 +768,18 @@ Plasma::Constraints c = d->pendingConstraints; d->pendingConstraints = NoConstraint; + if (c & Plasma::SizeConstraint && d->needsConfigOverlay) { + d->needsConfigOverlay->setGeometry(QRectF(QPointF(0, 0), contentSize())); + // FIXME:: rather horrible hack to work around the fact we don't have spacers + // for layouts, and with WoC coming i'd rather not expend effort there + QGraphicsItem * button = d->needsConfigOverlay->QGraphicsItem::children().first(); + if (button) { + QSizeF s = button->boundingRect().size(); + button->setPos(d->needsConfigOverlay->boundingRect().width() / 2 - s.width() / 2, + d->needsConfigOverlay->boundingRect().height() / 2 - s.height() / 2); + } + } + if (c & Plasma::FormFactorConstraint) { FormFactor f = formFactor(); setShadowShown(f == Planar); @@ -908,7 +943,7 @@ d->background->paint(painter, option->rect); } - if (!d->failed && !d->needsConfig) { + if (!d->failed) { if (widget && isContainment()) { // note that the widget we get is actually the viewport of the view, not the view itself View* v = qobject_cast(widget->parent()); --- trunk/KDE/kdebase/workspace/libs/plasma/applet.h #792370:792371 @@ -780,11 +780,6 @@ protected Q_SLOTS: /** - * @internal used to show the configuration of an applet on first show - */ - void performSetupConfig(); - - /** * @internal used to check the immutability of the item in the config file */ void checkImmutability();