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:
parent
daffafb9fe
commit
fbe946ca4c
@ -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) {
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user