feat: support gsettingsbackend, remove dsettings-key
authorIceyer <me@iceyer.net>
Tue, 31 Oct 2017 13:31:03 +0000 (21:31 +0800)
committerDeepin Code Review <gerrit@deepin.com>
Wed, 1 Nov 2017 02:28:54 +0000 (10:28 +0800)
Change-Id: I54bdb20f0d2f51828fb1ad5244ac03128f07eab6

src/settings/backend/gsettingsbackend.cpp
src/settings/dsettings.cpp
tool/settings/main.cpp

index 71278ba81ea142bb18f034bfbd2fd98261b9bab5..526c5c0f7947361c6e1e5710dafcc23b2c2a1fc1 100644 (file)
@@ -1,6 +1,6 @@
 #include "gsettingsbackend.h"
 
-#include <QDebug>
+//#include <QDebug>
 #include <QFile>
 #include <QJsonDocument>
 #include <QJsonObject>
@@ -38,7 +38,7 @@ class GSettingsBackendPrivate
 public:
     GSettingsBackendPrivate(GSettingsBackend *parent) : q_ptr(parent) {}
 
-    QGSettings *settings;
+    QGSettings *gsettings;
     QMap<QString, QString> keyMap;
 
     GSettingsBackend *q_ptr;
@@ -60,11 +60,12 @@ GSettingsBackend::GSettingsBackend(DSettings *settings, QObject *parent) :
         d->keyMap.insert(gsettingsKey, key);
     }
 
-    d->settings = new QGSettings(id.toUtf8(), path.toUtf8(), this);
+    d->gsettings = new QGSettings(id.toUtf8(), path.toUtf8(), this);
 
-    connect(d->settings, &QGSettings::changed, this, [ = ](const QString & key) {
+    connect(d->gsettings, &QGSettings::changed, this, [ = ](const QString & key) {
         auto dk = d->keyMap.value(unqtifyName(key));
-        Q_EMIT optionChanged(dk, d->settings->get(key));
+//        qDebug() << "gsetting change" << key << d->gsettings->get(key);
+        Q_EMIT optionChanged(dk, d->gsettings->get(key));
     });
 
 }
@@ -77,20 +78,22 @@ GSettingsBackend::~GSettingsBackend()
 QStringList GSettingsBackend::keys() const
 {
     Q_D(const GSettingsBackend);
-    return d->settings->keys();
+    return d->gsettings->keys();
 }
 
 QVariant GSettingsBackend::getOption(const QString &key) const
 {
     Q_D(const GSettingsBackend);
-    return d->settings->get(qtifyName(key));
+    return d->gsettings->get(qtifyName(key));
 }
 
 void GSettingsBackend::doSetOption(const QString &key, const QVariant &value)
 {
     Q_D(GSettingsBackend);
-    d->settings->set(qtifyName(key), value);
-    Q_EMIT setOption(key, value);
+    if (value != d->gsettings->get(qtifyName(key))) {
+//        qDebug() << "doSetOption" << key << d->gsettings->get(qtifyName(key));
+        d->gsettings->set(qtifyName(key), value);
+    }
 }
 
 void GSettingsBackend::doSync()
index fd906d451dcea02b7f4dbf7c286c86feccc89aaf..7edd233a84bb80942d118bb61ccef557e6767177 100644 (file)
@@ -76,7 +76,9 @@ void DSettings::setBackend(DSettingsBackend *backend)
     d->backend->moveToThread(backendWriteThread);
 
     connect(d->backend, &DSettingsBackend::optionChanged,
-            this, &DSettings::valueChanged);
+    this, [ = ](const QString & key, const QVariant & value) {
+        option(key)->setValue(value);
+    });
 
     backendWriteThread->start();
 
@@ -203,6 +205,7 @@ void DSettings::parseJson(const QByteArray &json)
         connect(option.data(), &DSettingsOption::valueChanged,
         this, [ = ](QVariant value) {
             Q_EMIT d->backend->setOption(option->key(), value);
+            Q_EMIT valueChanged(option->key(), value);
         });
     }
 }
index ff0f49821ed38a94b07d52c6f2b886591177a1e7..c976b8532558a1f37eaac71d41fbe81f6ea6d09a 100644 (file)
@@ -148,10 +148,15 @@ static bool writeGSettingXML(Dtk::Core::DSettings *settings,
     for (QString key : settings->keys()) {
         auto codeKey = QString(key).replace(".", "-").replace("_", "-");
         auto value = settings->option(key)->value();
+        auto gtype = gsettings_type_from_QVarint(value.type());
+        if (gtype.isEmpty()) {
+            qDebug() << "skip unsupport type:" << value.type() << key;
+            continue;
+        }
+
         QDomElement keyXml = document.createElement("key");
-        keyXml.setAttribute("dsetting-key", key);
         keyXml.setAttribute("name", codeKey);
-        keyXml.setAttribute("type", gsettings_type_from_QVarint(value.type()));
+        keyXml.setAttribute("type", gtype);
 
         QString defaultData = gsettings_value_from_QVarint(value);
         QDomElement defaultEle = document.createElement("default");