diff --git a/applets/systemtray/systemtraymodel.cpp b/applets/systemtray/systemtraymodel.cpp index 8da4f2a18..ff069696d 100644 --- a/applets/systemtray/systemtraymodel.cpp +++ b/applets/systemtray/systemtraymodel.cpp @@ -291,6 +291,16 @@ static QVariant extractIcon(const Plasma::DataEngine::Data &sniData, const QStri } } +static QString extractItemId(const Plasma::DataEngine::Data &sniData) { + const QString itemId = sniData.value(QStringLiteral("Id")).toString(); + // Bug 378910: workaround for Dropbox not following the SNI specification + if (itemId.startsWith(QLatin1String("dropbox-client-"))) { + return QLatin1String("dropbox-client-PID"); + } else { + return itemId; + } +} + QVariant StatusNotifierModel::data(const QModelIndex &index, int role) const { if (!checkIndex(index, CheckIndexOption::IndexIsValid)) { @@ -300,6 +310,7 @@ QVariant StatusNotifierModel::data(const QModelIndex &index, int role) const StatusNotifierModel::Item item = m_items[index.row()]; Plasma::DataContainer *dataContainer = m_dataEngine->containerForSource(item.source); const Plasma::DataEngine::Data &sniData = dataContainer->data(); + const QString itemId = extractItemId(sniData); if (role <= Qt::UserRole) { switch (role) { @@ -317,7 +328,7 @@ QVariant StatusNotifierModel::data(const QModelIndex &index, int role) const case BaseRole::ItemType: return QStringLiteral("StatusNotifier"); case BaseRole::ItemId: - return sniData.value(QStringLiteral("Id")); + return itemId; case BaseRole::CanRender: return true; case BaseRole::Category: { @@ -327,7 +338,7 @@ QVariant StatusNotifierModel::data(const QModelIndex &index, int role) const case BaseRole::Status: return extractStatus(sniData); case BaseRole::EffectiveStatus: - return calculateEffectiveStatus(true, extractStatus(sniData), sniData.value(QStringLiteral("Id")).toString()); + return calculateEffectiveStatus(true, extractStatus(sniData), itemId); default: return QVariant(); } @@ -353,7 +364,7 @@ QVariant StatusNotifierModel::data(const QModelIndex &index, int role) const case Role::IconThemePath: return sniData.value(QStringLiteral("IconThemePath")); case Role::Id: - return sniData.value(QStringLiteral("Id")); + return itemId; case Role::ItemIsMenu: return sniData.value(QStringLiteral("ItemIsMenu")); case Role::OverlayIconName: