fix #96, fix right click for systray

pull/1/head
Michail Vourlakos 8 years ago
parent 444c12f1c5
commit 5a390e95b3

@ -551,17 +551,24 @@ void DockView::mousePressEvent(QMouseEvent *event)
//qDebug() << "3..."; //qDebug() << "3...";
//FIXME: very inefficient appletAt() implementation //FIXME: very inefficient appletAt() implementation
Plasma::Applet *applet = 0; Plasma::Applet *applet = 0;
bool inSystray = false;
foreach (Plasma::Applet *appletTemp, containment()->applets()) { foreach (Plasma::Applet *appletTemp, containment()->applets()) {
PlasmaQuick::AppletQuickItem *ai = appletTemp->property("_plasma_graphicObject").value<PlasmaQuick::AppletQuickItem *>(); PlasmaQuick::AppletQuickItem *ai = appletTemp->property("_plasma_graphicObject").value<PlasmaQuick::AppletQuickItem *>();
if (ai && ai->isVisible() && ai->contains(ai->mapFromItem(contentItem(), event->pos()))) { if (ai && ai->isVisible() && ai->contains(ai->mapFromItem(contentItem(), event->pos()))) {
applet = ai->applet(); applet = ai->applet();
KPluginMetaData meta = applet->kPackage().metadata();
//Try to find applets inside a systray
if (meta.pluginId() == "org.kde.plasma.systemtray") {
auto systrayId = applet->config().readEntry("SystrayContainmentId");
//Try to find applets inside a secondary containment e.g. systray applet = 0;
if (applet->isContainment()) { inSystray = true;
Plasma::Containment *cont = qobject_cast<Plasma::Containment *>(applet); Plasma::Containment *cont = containmentById(systrayId.toInt());
if (cont) {
foreach (Plasma::Applet *appletCont, cont->applets()) { foreach (Plasma::Applet *appletCont, cont->applets()) {
PlasmaQuick::AppletQuickItem *ai2 = appletCont->property("_plasma_graphicObject").value<PlasmaQuick::AppletQuickItem *>(); PlasmaQuick::AppletQuickItem *ai2 = appletCont->property("_plasma_graphicObject").value<PlasmaQuick::AppletQuickItem *>();
@ -570,6 +577,7 @@ void DockView::mousePressEvent(QMouseEvent *event)
break; break;
} }
} }
}
break; break;
} else { } else {
@ -578,7 +586,7 @@ void DockView::mousePressEvent(QMouseEvent *event)
} }
} }
if (!applet) { if (!applet && !inSystray) {
applet = containment(); applet = containment();
} }
@ -785,6 +793,18 @@ void DockView::addContainmentActions(QMenu *desktopMenu, QEvent *event)
return; return;
} }
Plasma::Containment *DockView::containmentById(int id)
{
foreach (auto containment, corona()->containments()) {
if (id == containment->id()) {
return containment;
}
}
return 0;
}
//!END overriding context menus behavior //!END overriding context menus behavior
} }

@ -137,6 +137,8 @@ private:
void updateFormFactor(); void updateFormFactor();
private: private:
Plasma::Containment *containmentById(int id);
int m_maxLength{INT_MAX}; int m_maxLength{INT_MAX};
int m_maxThickness{24}; int m_maxThickness{24};
int m_shadow{0}; int m_shadow{0};

Loading…
Cancel
Save