don't toggle the popup on activate, but actually show it

also set the state on needsattention.

if the view of the applet is not the same for its containment, call popupposition with the parent of the applet rather than the applet itself.
this fixes the popup appearing at funny places for applets in systemtray, like devicenotifier

svn path=/trunk/KDE/kdelibs/; revision=1115260
This commit is contained in:
Marco Martin 2010-04-15 19:25:30 +00:00
parent daffafb9fe
commit fbe946ca4c
3 changed files with 14 additions and 2 deletions

View File

@ -61,7 +61,7 @@ PopupApplet::PopupApplet(QObject *parent, const QVariantList &args)
int iconSize = IconSize(KIconLoader::Desktop); int iconSize = IconSize(KIconLoader::Desktop);
resize(iconSize, iconSize); resize(iconSize, iconSize);
disconnect(this, SIGNAL(activate()), (Applet*)this, SLOT(setFocus())); disconnect(this, SIGNAL(activate()), (Applet*)this, SLOT(setFocus()));
connect(this, SIGNAL(activate()), this, SLOT(togglePopup())); connect(this, SIGNAL(activate()), this, SLOT(appletActivated()));
setAcceptDrops(true); setAcceptDrops(true);
} }
@ -430,6 +430,12 @@ void PopupAppletPrivate::popupConstraintsEvent(Plasma::Constraints constraints)
emit q->sizeHintChanged(Qt::PreferredSize); emit q->sizeHintChanged(Qt::PreferredSize);
} }
void PopupAppletPrivate::appletActivated()
{
q->setStatus(Plasma::NeedsAttentionStatus);
q->showPopup();
}
void PopupApplet::mousePressEvent(QGraphicsSceneMouseEvent *event) void PopupApplet::mousePressEvent(QGraphicsSceneMouseEvent *event)
{ {
if (!d->icon && !d->popupLostFocus && event->buttons() == Qt::LeftButton) { if (!d->icon && !d->popupLostFocus && event->buttons() == Qt::LeftButton) {
@ -772,7 +778,11 @@ void PopupAppletPrivate::updateDialogPosition()
QSize s = dialog->size(); QSize s = dialog->size();
QPoint pos = view->mapFromScene(q->scenePos()); QPoint pos = view->mapFromScene(q->scenePos());
pos = corona->popupPosition(q, s); if (!q->containment() || view == q->containment()->view()) {
pos = corona->popupPosition(q, s);
} else {
pos = corona->popupPosition(q->parentItem(), s);
}
bool reverse = false; bool reverse = false;
if (q->formFactor() == Plasma::Vertical) { if (q->formFactor() == Plasma::Vertical) {

View File

@ -168,6 +168,7 @@ private:
Q_PRIVATE_SLOT(d, void dialogSizeChanged()) Q_PRIVATE_SLOT(d, void dialogSizeChanged())
Q_PRIVATE_SLOT(d, void dialogStatusChanged(bool)) Q_PRIVATE_SLOT(d, void dialogStatusChanged(bool))
Q_PRIVATE_SLOT(d, void updateDialogPosition()) Q_PRIVATE_SLOT(d, void updateDialogPosition())
Q_PRIVATE_SLOT(d, void appletActivated())
friend class Applet; friend class Applet;
friend class AppletPrivate; friend class AppletPrivate;

View File

@ -43,6 +43,7 @@ public:
void popupConstraintsEvent(Plasma::Constraints constraints); void popupConstraintsEvent(Plasma::Constraints constraints);
void checkExtenderAppearance(Plasma::FormFactor f); void checkExtenderAppearance(Plasma::FormFactor f);
KConfigGroup popupConfigGroup(); KConfigGroup popupConfigGroup();
void appletActivated();
PopupApplet *q; PopupApplet *q;
Plasma::IconWidget *icon; Plasma::IconWidget *icon;