[balsa/gtk4] fix crash on systems without GNOME schema files
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/gtk4] fix crash on systems without GNOME schema files
- Date: Fri, 16 Apr 2021 20:26:32 +0000 (UTC)
commit 51428da3956f9e9d5ed5d53e1df2ff85c7002384
Author: Albrecht Dreß <albrecht dress netcologne de>
Date: Sat Apr 10 18:48:11 2021 +0200
fix crash on systems without GNOME schema files
On minimalistic systems (e.g. macOS w/jhbuild) the 'org.gnome.desktop.interface'
schema may not be available, resulting in a crash. The fix first checks for it
before attempting to call g_settings_new().
Signed-off-by: Albrecht Dreß <albrecht dress arcor de>
src/toolbar-factory.c | 62 ++++++++++++++++++++++++++++++++++++---------------
1 file changed, 44 insertions(+), 18 deletions(-)
---
diff --git a/src/toolbar-factory.c b/src/toolbar-factory.c
index d8cd0f9a4..0f889f4b8 100644
--- a/src/toolbar-factory.c
+++ b/src/toolbar-factory.c
@@ -267,6 +267,31 @@ tm_gsettings_change_cb(GSettings * settings,
balsa_toolbar_model_changed(model);
}
+static GSettings *
+tm_get_settings(void)
+{
+ GSettingsSchemaSource *schema_source;
+ GSettings *settings = NULL;
+
+ schema_source = g_settings_schema_source_get_default();
+ if (schema_source != NULL) {
+ GSettingsSchema *schema;
+
+ schema = g_settings_schema_source_lookup(schema_source, "org.gnome.desktop.interface", TRUE);
+ if (schema != NULL) {
+ settings = g_settings_new("org.gnome.desktop.interface");
+ g_debug("settings schema 'org.gnome.desktop.interface' loaded");
+ g_settings_schema_unref(schema);
+ } else {
+ g_info("the settings schema 'org.gnome.desktop.interface' does not exist");
+ }
+ } else {
+ g_warning("cannot get default settings schema source");
+ }
+
+ return settings;
+}
+
/* Create a BalsaToolbarModel structure.
*/
BalsaToolbarModel *
@@ -293,9 +318,10 @@ balsa_toolbar_model_new(BalsaToolbarType type,
balsa_toolbar_model_add_entries(model, entries, n_entries);
tm_load_model(model);
- model->settings = g_settings_new("org.gnome.desktop.interface");
- g_signal_connect(model->settings, "changed",
- G_CALLBACK(tm_gsettings_change_cb), model);
+ model->settings = tm_get_settings();
+ if (model->settings != NULL) {
+ g_signal_connect(model->settings, "changed", G_CALLBACK(tm_gsettings_change_cb), model);
+ }
return model;
}
@@ -460,25 +486,25 @@ tm_default_style(void)
{
BalsaToolbarStyle default_style = BALSA_TOOLBAR_BOTH;
GSettings *settings;
- gchar *str;
/* Get global setting */
- settings = g_settings_new("org.gnome.desktop.interface");
- str = g_settings_get_string(settings, "toolbar-style");
- if (str) {
- guint i;
-
- for (i = 0; i < G_N_ELEMENTS(tm_toolbar_options); i++) {
- const ToolbarOption *option = &tm_toolbar_options[i];
-
- if (strcmp(option->config_name, str) == 0) {
- default_style = option->style;
- break;
- }
+ settings = tm_get_settings();
+ if (settings != NULL) {
+ gchar *str;
+
+ str = g_settings_get_string(settings, "toolbar-style");
+ if (str != NULL) {
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS(tm_toolbar_options); i++)
+ if (strcmp(tm_toolbar_options[i].config_name, str) == 0) {
+ default_style = tm_toolbar_options[i].style;
+ break;
+ }
+ g_free(str);
}
- g_free(str);
+ g_object_unref(settings);
}
- g_object_unref(settings);
return default_style;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]