51
51
IndicatorsManager::~IndicatorsManager()
57
56
void IndicatorsManager::load()
61
QStringList xdgLocations = shellDataDirs();//QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
60
const QStringList xdgLocations = shellDataDirs();
63
62
m_fsWatcher.reset(new QFileSystemWatcher(this));
65
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
67
QDir indicator_dir(indicator_path);
69
68
if (indicator_dir.exists())
104
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
106
Q_FOREACH(const QFileInfo& indicator_file, indicator_files)
109
108
loadFile(indicator_file);
115
114
void IndicatorsManager::loadFile(const QFileInfo& file_info)
117
116
QSettings indicator_settings(file_info.absoluteFilePath(), QSettings::IniFormat, this);
118
QString name = indicator_settings.value(QStringLiteral("Indicator Service/Name")).toString();
120
auto iter = m_indicatorsData.find(name);
121
if (iter != m_indicatorsData.end())
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
123
auto iter = m_indicatorsData.constFind(name);
124
if (iter != m_indicatorsData.constEnd())
123
QString newFileInfoDir = QDir::cleanPath(file_info.canonicalPath());
126
const QString newFileInfoDir = QDir::cleanPath(file_info.canonicalPath());
124
127
IndicatorData* currentData = (*iter);
125
128
currentData->m_verified = true;
127
130
int file_info_location = -1;
128
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
135
// if we've already got this indicator, we need to make sure we're not overwriting data which is
133
136
// from a lower priority standard path
134
137
QStringList xdgLocations = shellDataDirs();
135
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
142
if (newFileInfoDir == indicatorDir)
281
284
data->m_indicator = new_indicator;
282
285
QSettings settings(data->m_fileInfo.absoluteFilePath(), QSettings::IniFormat, this);
283
286
new_indicator->init(data->m_fileInfo.fileName(), settings);
284
new_indicator->setProfile(m_profile);
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");
298
new_indicator->setProfile(m_profile);
285
301
QObject::connect(this, &IndicatorsManager::profileChanged, new_indicator.data(), &Indicator::setProfile);
286
302
return new_indicator;