From: Iceyer Date: Tue, 31 Oct 2017 13:31:03 +0000 (+0800) Subject: feat: support gsettingsbackend, remove dsettings-key X-Git-Tag: archive/raspbian/5.7.12-2+rpi1^2~152^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=26a2980034881da322978077ccced53c7b29af44;p=dtkcore.git feat: support gsettingsbackend, remove dsettings-key Change-Id: I54bdb20f0d2f51828fb1ad5244ac03128f07eab6 --- diff --git a/src/settings/backend/gsettingsbackend.cpp b/src/settings/backend/gsettingsbackend.cpp index 71278ba..526c5c0 100644 --- a/src/settings/backend/gsettingsbackend.cpp +++ b/src/settings/backend/gsettingsbackend.cpp @@ -1,6 +1,6 @@ #include "gsettingsbackend.h" -#include +//#include #include #include #include @@ -38,7 +38,7 @@ class GSettingsBackendPrivate public: GSettingsBackendPrivate(GSettingsBackend *parent) : q_ptr(parent) {} - QGSettings *settings; + QGSettings *gsettings; QMap 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() diff --git a/src/settings/dsettings.cpp b/src/settings/dsettings.cpp index fd906d4..7edd233 100644 --- a/src/settings/dsettings.cpp +++ b/src/settings/dsettings.cpp @@ -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); }); } } diff --git a/tool/settings/main.cpp b/tool/settings/main.cpp index ff0f498..c976b85 100644 --- a/tool/settings/main.cpp +++ b/tool/settings/main.cpp @@ -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");