@@ -51,20 +51,19 @@ IndicatorsManager::IndicatorsManager(QObject* parent)
5151IndicatorsManager::~IndicatorsManager()
5252{
5353 unload();
54−
5554}
5655
5756void IndicatorsManager::load()
5857{
5958 unload();
6059
61− QStringList xdgLocations = shellDataDirs();//QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
60+ const QStringList xdgLocations = shellDataDirs();
6261
6362 m_fsWatcher.reset(new QFileSystemWatcher(this));
6463
6564 Q_FOREACH(const QString& xdgLocation, xdgLocations)
6665 {
67− QString indicator_path = QDir::cleanPath(xdgLocation + "/unity/indicators");
66+ const QString indicator_path = QDir::cleanPath(xdgLocation + "/unity/indicators");
6867 QDir indicator_dir(indicator_path);
6968 if (indicator_dir.exists())
7069 {
@@ -103,7 +102,7 @@ void IndicatorsManager::loadDir(const QDir& dir)
103102{
104103 startVerify(dir.canonicalPath());
105104
106− QFileInfoList indicator_files = dir.entryInfoList(QStringList(), QDir::Files|QDir::NoDotAndDotDot);
105+ const QFileInfoList indicator_files = dir.entryInfoList(QStringList(), QDir::Files|QDir::NoDotAndDotDot);
107106 Q_FOREACH(const QFileInfo& indicator_file, indicator_files)
108107 {
109108 loadFile(indicator_file);
@@ -115,26 +114,30 @@ void IndicatorsManager::loadDir(const QDir& dir)
115114void IndicatorsManager::loadFile(const QFileInfo& file_info)
116115{
117116 QSettings indicator_settings(file_info.absoluteFilePath(), QSettings::IniFormat, this);
118− QString name = indicator_settings.value(QStringLiteral("Indicator Service/Name")).toString();
117+ const QString name = indicator_settings.value(QStringLiteral("Indicator Service/Name")).toString();
118+
119+ if (m_platform.isPC() && name == "indicator-keyboard") {
120+ return; // convergence: skip this indicator until it works in Mir
121+ }
119122
120− auto iter = m_indicatorsData.find(name);
121− if (iter != m_indicatorsData.end())
123+ auto iter = m_indicatorsData.constFind(name);
124+ if (iter != m_indicatorsData.constEnd())
122125 {
123− QString newFileInfoDir = QDir::cleanPath(file_info.canonicalPath());
126+ const QString newFileInfoDir = QDir::cleanPath(file_info.canonicalPath());
124127 IndicatorData* currentData = (*iter);
125128 currentData->m_verified = true;
126129
127130 int file_info_location = -1;
128131 int current_data_location = -1;
129132
130− QString currentDataDir = QDir::cleanPath(currentData->m_fileInfo.canonicalPath());
133+ const QString currentDataDir = QDir::cleanPath(currentData->m_fileInfo.canonicalPath());
131134
132135 // if we've already got this indicator, we need to make sure we're not overwriting data which is
133136 // from a lower priority standard path
134137 QStringList xdgLocations = shellDataDirs();
135138 for (int i = 0; i < xdgLocations.size(); i++)
136139 {
137− QString indicatorDir = QDir::cleanPath(xdgLocations[i] + "/unity/indicators");
140+ const QString indicatorDir = QDir::cleanPath(xdgLocations[i] + "/unity/indicators");
138141
139142 if (newFileInfoDir == indicatorDir)
140143 {
@@ -194,7 +197,7 @@ void IndicatorsManager::unloadFile(const QFileInfo& file)
194197 {
195198 if (!data->m_verified)
196199 {
197− QString name = data->m_name;
200+ const QString name = data->m_name;
198201 Q_EMIT indicatorAboutToBeUnloaded(name);
199202
200203 delete data;
@@ -253,7 +256,7 @@ void IndicatorsManager::endVerify(const QString& path)
253256 {
254257 if (!data->m_verified)
255258 {
256− QString name = data->m_name;
259+ const QString name = data->m_name;
257260 Q_EMIT indicatorAboutToBeUnloaded(name);
258261
259262 delete data;
@@ -271,7 +274,7 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
271274 return Indicator::Ptr();
272275 }
273276
274− IndicatorData *data = m_indicatorsData[indicator_name];
277+ IndicatorData *data = m_indicatorsData.value(indicator_name);
275278 if (data->m_indicator)
276279 {
277280 return data->m_indicator;
@@ -281,7 +284,20 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
281284 data->m_indicator = new_indicator;
282285 QSettings settings(data->m_fileInfo.absoluteFilePath(), QSettings::IniFormat, this);
283286 new_indicator->init(data->m_fileInfo.fileName(), settings);
284− new_indicator->setProfile(m_profile);
287+
288+ // convergence:
289+ // 1) enable session indicator conditionally, typically when running in a multisession/multiuser environment
290+ // 2) on a PC, switch the battery/power indicator to desktop mode,
291+ // can't control brightness for now and phone-on-desktop broken (FIXME)
292+ //
293+ // The rest of the indicators respect their default profile (which is "phone", even on desktop PCs)
294+ if ((new_indicator->identifier() == QStringLiteral("indicator-session") && m_platform.isMultiSession())
295+ || (new_indicator->identifier() == QStringLiteral("indicator-power") && m_platform.isPC())) {
296+ new_indicator->setProfile("desktop");
297+ } else {
298+ new_indicator->setProfile(m_profile);
299+ }
300+
285301 QObject::connect(this, &IndicatorsManager::profileChanged, new_indicator.data(), &Indicator::setProfile);
286302 return new_indicator;
287303}