/* * Copyright 2014 Canonical Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Michael Zanetti */ #include "gsettings.h" #include GSettings::GSettings(QObject *parent): QObject(parent) { m_gSettings = new QGSettings("com.canonical.Unity.Launcher", "/com/canonical/unity/launcher/", this); connect(m_gSettings, &QGSettings::changed, this, &GSettings::onSettingsChanged); } QStringList GSettings::storedApplications() const { QStringList storedApps; const QString items = QStringLiteral("items"); Q_FOREACH(const QString &entry, m_gSettings->get(items).toStringList()) { if (entry.startsWith(QLatin1String("application:///"))) { // convert legacy entries to new world appids QString appId = entry; // Transform "application://foobar.desktop" to "foobar" appId.remove(QRegExp(QStringLiteral("^application:///"))); appId.remove(QRegExp(QStringLiteral(".desktop$"))); storedApps << appId; } else if (entry.startsWith(QLatin1String("appid://"))) { QString appId = entry; appId.remove(QStringLiteral("appid://")); const QStringList splittedAppId = appId.split('/'); if (splittedAppId.count() == 3) { // Strip current-user-version in case its there appId = splittedAppId.first() + "_" + splittedAppId.at(1); } storedApps << appId; } } return storedApps; } void GSettings::setStoredApplications(const QStringList &storedApplications) { QStringList gSettingsList; gSettingsList.reserve(storedApplications.count()); Q_FOREACH(const QString &entry, storedApplications) { gSettingsList << QStringLiteral("appid://%1").arg(entry); } // GSettings will emit a changed signal to ourselves. Let's cache the items // and only forward the changed signal when the list did actually change. m_cachedItems = gSettingsList; m_gSettings->set(QStringLiteral("items"), gSettingsList); } void GSettings::onSettingsChanged(const QString &key) { if (key == QLatin1String("items")) { const QStringList cachedItems = m_gSettings->get(QStringLiteral("items")).toStringList(); if (m_cachedItems != cachedItems) { m_cachedItems = cachedItems; Q_EMIT changed(); } } }