@@ -51,20 +51,19 @@ IndicatorsManager::IndicatorsManager(QObject* parent)
51IndicatorsManager::~IndicatorsManager()
51IndicatorsManager::~IndicatorsManager()
57void IndicatorsManager::load()
56void IndicatorsManager::load()
61− QStringList xdgLocations = shellDataDirs();//QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
60+ const QStringList xdgLocations = shellDataDirs();
63 m_fsWatcher.reset(new QFileSystemWatcher(this));
62 m_fsWatcher.reset(new QFileSystemWatcher(this));
65 Q_FOREACH(const QString& xdgLocation, xdgLocations)
64 Q_FOREACH(const QString& xdgLocation, xdgLocations)
67− QString indicator_path = QDir::cleanPath(xdgLocation + "/unity/indicators");
66+ const QString indicator_path = QDir::cleanPath(xdgLocation + "/unity/indicators");
68 QDir indicator_dir(indicator_path);
67 QDir indicator_dir(indicator_path);
69 if (indicator_dir.exists())
68 if (indicator_dir.exists())
@@ -103,7 +102,7 @@ void IndicatorsManager::loadDir(const QDir& dir)
104 startVerify(dir.canonicalPath());
103 startVerify(dir.canonicalPath());
106− QFileInfoList indicator_files = dir.entryInfoList(QStringList(), QDir::Files|QDir::NoDotAndDotDot);
105+ const QFileInfoList indicator_files = dir.entryInfoList(QStringList(), QDir::Files|QDir::NoDotAndDotDot);
107 Q_FOREACH(const QFileInfo& indicator_file, indicator_files)
106 Q_FOREACH(const QFileInfo& indicator_file, indicator_files)
109 loadFile(indicator_file);
108 loadFile(indicator_file);
@@ -115,26 +114,30 @@ void IndicatorsManager::loadDir(const QDir& dir)
115void IndicatorsManager::loadFile(const QFileInfo& file_info)
114void IndicatorsManager::loadFile(const QFileInfo& file_info)
117 QSettings indicator_settings(file_info.absoluteFilePath(), QSettings::IniFormat, this);
116 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();
119+ if (m_platform.isPC() && name == "indicator-keyboard") {
120+ return; // convergence: skip this indicator until it works in Mir
120− auto iter = m_indicatorsData.find(name);
123+ auto iter = m_indicatorsData.constFind(name);
121− if (iter != m_indicatorsData.end())
124+ if (iter != m_indicatorsData.constEnd())
123− QString newFileInfoDir = QDir::cleanPath(file_info.canonicalPath());
126+ const QString newFileInfoDir = QDir::cleanPath(file_info.canonicalPath());
124 IndicatorData* currentData = (*iter);
127 IndicatorData* currentData = (*iter);
125 currentData->m_verified = true;
128 currentData->m_verified = true;
127 int file_info_location = -1;
130 int file_info_location = -1;
128 int current_data_location = -1;
131 int current_data_location = -1;
130− QString currentDataDir = QDir::cleanPath(currentData->m_fileInfo.canonicalPath());
133+ const QString currentDataDir = QDir::cleanPath(currentData->m_fileInfo.canonicalPath());
132 // if we've already got this indicator, we need to make sure we're not overwriting data which is
135 // if we've already got this indicator, we need to make sure we're not overwriting data which is
133 // from a lower priority standard path
136 // from a lower priority standard path
134 QStringList xdgLocations = shellDataDirs();
137 QStringList xdgLocations = shellDataDirs();
135 for (int i = 0; i < xdgLocations.size(); i++)
138 for (int i = 0; i < xdgLocations.size(); i++)
137− QString indicatorDir = QDir::cleanPath(xdgLocations[i] + "/unity/indicators");
140+ const QString indicatorDir = QDir::cleanPath(xdgLocations[i] + "/unity/indicators");
139 if (newFileInfoDir == indicatorDir)
142 if (newFileInfoDir == indicatorDir)
@@ -194,7 +197,7 @@ void IndicatorsManager::unloadFile(const QFileInfo& file)
195 if (!data->m_verified)
198 if (!data->m_verified)
197− QString name = data->m_name;
200+ const QString name = data->m_name;
198 Q_EMIT indicatorAboutToBeUnloaded(name);
201 Q_EMIT indicatorAboutToBeUnloaded(name);
200 delete data;
203 delete data;
@@ -253,7 +256,7 @@ void IndicatorsManager::endVerify(const QString& path)
254 if (!data->m_verified)
257 if (!data->m_verified)
256− QString name = data->m_name;
259+ const QString name = data->m_name;
257 Q_EMIT indicatorAboutToBeUnloaded(name);
260 Q_EMIT indicatorAboutToBeUnloaded(name);
259 delete data;
262 delete data;
@@ -271,7 +274,7 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
271 return Indicator::Ptr();
274 return Indicator::Ptr();
274− IndicatorData *data = m_indicatorsData[indicator_name];
277+ IndicatorData *data = m_indicatorsData.value(indicator_name);
275 if (data->m_indicator)
278 if (data->m_indicator)
277 return data->m_indicator;
280 return data->m_indicator;
@@ -281,7 +284,20 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
281 data->m_indicator = new_indicator;
284 data->m_indicator = new_indicator;
282 QSettings settings(data->m_fileInfo.absoluteFilePath(), QSettings::IniFormat, this);
285 QSettings settings(data->m_fileInfo.absoluteFilePath(), QSettings::IniFormat, this);
283 new_indicator->init(data->m_fileInfo.fileName(), settings);
286 new_indicator->init(data->m_fileInfo.fileName(), settings);
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)
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");
284− new_indicator->setProfile(m_profile);
298+ new_indicator->setProfile(m_profile);
285 QObject::connect(this, &IndicatorsManager::profileChanged, new_indicator.data(), &Indicator::setProfile);
301 QObject::connect(this, &IndicatorsManager::profileChanged, new_indicator.data(), &Indicator::setProfile);
286 return new_indicator;
302 return new_indicator;