Skip to content

Commit 46d0a22

Browse files
committed
Do not load GSettings when schema is not found
Fixes #110
1 parent 6107a4b commit 46d0a22

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

src/common/gsettingshintprovider.cpp

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,34 @@
2626

2727
Q_LOGGING_CATEGORY(QGnomePlatformGSettingsHintProvider, "qt.qpa.qgnomeplatform.gsettingshintprovider")
2828

29+
static GSettings *loadGSettingsSchema(const QString &schema)
30+
{
31+
GSettingsSchemaSource *source = g_settings_schema_source_get_default();
32+
GSettingsSchema *gschema = nullptr;
33+
34+
gschema = g_settings_schema_source_lookup(source, schema.toLatin1(), TRUE);
35+
if (!gschema) {
36+
return nullptr;
37+
}
38+
39+
GSettings *settings = g_settings_new(schema.toLatin1());
40+
g_settings_schema_unref(gschema);
41+
return settings;
42+
}
43+
2944
GSettingsHintProvider::GSettingsHintProvider(QObject *parent)
3045
: HintProvider(parent)
31-
, m_gnomeDesktopSettings(g_settings_new("org.gnome.desktop.wm.preferences"))
32-
, m_settings(g_settings_new("org.gnome.desktop.interface"))
46+
, m_gnomeDesktopSettings(loadGSettingsSchema(QLatin1String("org.gnome.desktop.wm.preferences")))
47+
, m_settings(loadGSettingsSchema(QLatin1String("org.gnome.desktop.interface")))
3348
{
3449
// Check if this is a Cinnamon session to use additionally a different setting scheme
3550
if (qgetenv("XDG_CURRENT_DESKTOP").toLower() == QStringLiteral("x-cinnamon")) {
36-
m_cinnamonSettings = g_settings_new("org.cinnamon.desktop.interface");
51+
m_cinnamonSettings = loadGSettingsSchema(QLatin1String("org.cinnamon.desktop.interface"));
52+
}
53+
54+
// Do not continue on missing GSettings
55+
if (!m_settings && !m_cinnamonSettings) {
56+
return;
3757
}
3858

3959
// Watch for changes

0 commit comments

Comments
 (0)