mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
QML-only write access for 'private/' Settings keys
This commit is contained in:
parent
6ae75ecafe
commit
d334a2e5e2
3 changed files with 21 additions and 3 deletions
|
@ -3393,7 +3393,7 @@ void Application::onDesktopRootContextCreated(QQmlContext* surfaceContext) {
|
|||
surfaceContext->setContextProperty("Window", DependencyManager::get<WindowScriptingInterface>().data());
|
||||
surfaceContext->setContextProperty("Desktop", DependencyManager::get<DesktopScriptingInterface>().data());
|
||||
surfaceContext->setContextProperty("MenuInterface", MenuScriptingInterface::getInstance());
|
||||
surfaceContext->setContextProperty("Settings", SettingsScriptingInterface::getInstance());
|
||||
surfaceContext->setContextProperty("Settings", new QMLSettingsScriptingInterface(surfaceContext));
|
||||
surfaceContext->setContextProperty("ScriptDiscoveryService", DependencyManager::get<ScriptEngines>().data());
|
||||
surfaceContext->setContextProperty("AvatarBookmarks", DependencyManager::get<AvatarBookmarks>().data());
|
||||
surfaceContext->setContextProperty("LocationBookmarks", DependencyManager::get<LocationBookmarks>().data());
|
||||
|
@ -3509,7 +3509,7 @@ void Application::setupQmlSurface(QQmlContext* surfaceContext, bool setAdditiona
|
|||
surfaceContext->setContextProperty("offscreenFlags", flags);
|
||||
surfaceContext->setContextProperty("AddressManager", DependencyManager::get<AddressManager>().data());
|
||||
|
||||
surfaceContext->setContextProperty("Settings", SettingsScriptingInterface::getInstance());
|
||||
surfaceContext->setContextProperty("Settings", new QMLSettingsScriptingInterface(surfaceContext));
|
||||
surfaceContext->setContextProperty("MenuInterface", MenuScriptingInterface::getInstance());
|
||||
surfaceContext->setContextProperty("Performance", new PerformanceScriptingInterface());
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
#include "SettingsScriptingInterface.h"
|
||||
|
||||
#include <QtScript/QScriptContext>
|
||||
#include <SettingHandle.h>
|
||||
|
||||
SettingsScriptingInterface* SettingsScriptingInterface::getInstance() {
|
||||
|
@ -35,6 +36,14 @@ QVariant SettingsScriptingInterface::getValue(const QString& setting, const QVar
|
|||
}
|
||||
|
||||
void SettingsScriptingInterface::setValue(const QString& setting, const QVariant& value) {
|
||||
if (setting.startsWith("private/")) {
|
||||
if (_restrictPrivateValues) {
|
||||
qWarning() << "SettingsScriptingInterface::setValue -- restricted write: " << setting << value;
|
||||
return;
|
||||
} else {
|
||||
qInfo() << "SettingsScriptingInterface::setValue -- allowing restricted write: " << setting << value;
|
||||
}
|
||||
}
|
||||
// Make a deep-copy of the string.
|
||||
// Dangling pointers can occur with QStrings that are implicitly shared from a QScriptEngine.
|
||||
QString deepCopy = QString::fromUtf16(setting.utf16());
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
|
||||
class SettingsScriptingInterface : public QObject {
|
||||
Q_OBJECT
|
||||
SettingsScriptingInterface() { };
|
||||
public:
|
||||
static SettingsScriptingInterface* getInstance();
|
||||
|
||||
|
@ -64,6 +63,16 @@ public slots:
|
|||
* print("Value: " + (typeof value) + " " + JSON.stringify(value)); // object {"x":0,"y":10,"z":0}
|
||||
*/
|
||||
void setValue(const QString& setting, const QVariant& value);
|
||||
|
||||
protected:
|
||||
SettingsScriptingInterface(QObject* parent = nullptr) : QObject(parent) { };
|
||||
bool _restrictPrivateValues { true };
|
||||
};
|
||||
|
||||
class QMLSettingsScriptingInterface : public SettingsScriptingInterface {
|
||||
Q_OBJECT
|
||||
public:
|
||||
QMLSettingsScriptingInterface(QObject* parent) : SettingsScriptingInterface(parent) { _restrictPrivateValues = false; }
|
||||
};
|
||||
|
||||
#endif // hifi_SettingsScriptingInterface_h
|
||||
|
|
Loading…
Reference in a new issue