Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 20 additions & 4 deletions plugins/application-tray/sniprotocolhandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,15 +104,16 @@ SniTrayProtocolHandler::SniTrayProtocolHandler(const QString &sniServicePath, QO
: AbstractTrayProtocolHandler(parent)
, m_tooltip (new QLabel())
, m_ignoreFirstAttention(true)
, m_dbusMenuImporter(nullptr)
{
auto pair = serviceAndPath(sniServicePath);
m_service = pair.first;
// will get a unique dbus name (number like x.xxxx) and dbus path
m_dbusUniqueName = pair.first.mid(1);
m_sniInter = new StatusNotifierItem(pair.first, pair.second, QDBusConnection::sessionBus(), this);
init();
m_sniInter->setSync(false);
m_dbusMenuImporter = new DBusMenu(pair.first, m_sniInter->menu().path(), this);
m_tooltip->setForegroundRole(QPalette::BrightText);
generateId();

connect(m_sniInter, &StatusNotifierItem::NewIcon, this, &SniTrayProtocolHandler::iconChanged);
connect(m_sniInter, &StatusNotifierItem::NewOverlayIcon, this, &SniTrayProtocolHandler::overlayIconChanged);
Expand All @@ -130,7 +131,7 @@ SniTrayProtocolHandler::SniTrayProtocolHandler(const QString &sniServicePath, QO
connect(m_sniInter, &StatusNotifierItem::NewToolTip, this, &SniTrayProtocolHandler::tooltiChanged);
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [this](DGuiApplicationHelper::ColorType themeType) {
Q_UNUSED(themeType)
m_dbusMenuImporter->updateMenu(true);
menuImporter()->updateMenu(true);
});
}

Expand All @@ -139,12 +140,27 @@ SniTrayProtocolHandler::~SniTrayProtocolHandler()
UTIL->removeUniqueId(m_id);
}

void SniTrayProtocolHandler::init()
{
generateId();
m_menuPath = m_sniInter->menu().path();
}

void SniTrayProtocolHandler::generateId()
{
auto id = sniPfrefix + m_sniInter->id();
m_id = UTIL->generateUniqueId(id);
}

DBusMenuImporter *SniTrayProtocolHandler::menuImporter() const
{
if (!m_dbusMenuImporter) {
auto that = const_cast<SniTrayProtocolHandler *>(this);
that->m_dbusMenuImporter = new DBusMenu(m_service, m_menuPath, that);
}
return m_dbusMenuImporter;
}

uint32_t SniTrayProtocolHandler::windowId() const
{
return m_sniInter->windowId();
Expand Down Expand Up @@ -238,7 +254,7 @@ bool SniTrayProtocolHandler::eventFilter(QObject *watched, QEvent *event)
if (mouseEvent->button() == Qt::LeftButton) {
m_sniInter->Activate(0, 0);
} else if (mouseEvent->button() == Qt::RightButton) {
auto menu = m_dbusMenuImporter->menu();
auto menu = menuImporter()->menu();
Q_CHECK_PTR(menu);
if (menu->isEmpty()) {
m_sniInter->ContextMenu(0, 0);
Expand Down
4 changes: 4 additions & 0 deletions plugins/application-tray/sniprotocolhandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,17 @@ class SniTrayProtocolHandler : public AbstractTrayProtocolHandler

private:
void generateId();
void init();
DBusMenuImporter *menuImporter() const;

private:
QString m_dbusUniqueName;
QLabel *m_tooltip;
StatusNotifierItem *m_sniInter;
DBusMenuImporter *m_dbusMenuImporter;
QString m_id;
QString m_service;
QString m_menuPath;
bool m_ignoreFirstAttention;
};
}