Do not assume external gsettings schemas exist

The problem with GSettings is that it errors when a schema is not found
causing the application to abort. We now check for schema existence of
external schemas that we optionally want to use.

https://bugzilla.gnome.org/show_bug.cgi?id=721748
This commit is contained in:
Jesse van den Kieboom 2014-01-08 14:32:13 +01:00
parent dbb2e0feb0
commit bf021dcadd
2 changed files with 50 additions and 12 deletions

View file

@ -47,7 +47,7 @@ namespace Gitg
private Ggit.Diff? d_diff; private Ggit.Diff? d_diff;
private Commit? d_commit; private Commit? d_commit;
private Settings d_fontsettings; private Settings? d_fontsettings;
private bool d_has_selection; private bool d_has_selection;
private static Gee.HashMap<string, DiffView> s_diff_map; private static Gee.HashMap<string, DiffView> s_diff_map;
@ -276,6 +276,23 @@ namespace Gitg
settings.default_monospace_font_size = fsize; settings.default_monospace_font_size = fsize;
} }
private Settings? try_settings(string schema_id)
{
var source = SettingsSchemaSource.get_default();
if (source == null)
{
return null;
}
if (source.lookup(schema_id, true) != null)
{
return new Settings(schema_id);
}
return null;
}
protected override void constructed() protected override void constructed()
{ {
base.constructed(); base.constructed();
@ -293,18 +310,22 @@ namespace Gitg
settings.javascript_can_access_clipboard = true; settings.javascript_can_access_clipboard = true;
settings.enable_page_cache = false; settings.enable_page_cache = false;
d_fontsettings = new Settings("org.gnome.desktop.interface");
set_settings(settings); set_settings(settings);
update_font_settings(); d_fontsettings = try_settings("org.gnome.desktop.interface");
d_fontsettings.changed["monospace-font-name"].connect((s, k) => { if (d_fontsettings != null)
{
update_font_settings(); update_font_settings();
});
d_fontsettings.changed["font-name"].connect((s, k) => { d_fontsettings.changed["monospace-font-name"].connect((s, k) => {
update_font_settings(); update_font_settings();
}); });
d_fontsettings.changed["font-name"].connect((s, k) => {
update_font_settings();
});
}
++s_diff_id; ++s_diff_id;
s_diff_map[s_diff_id.to_string()] = this; s_diff_map[s_diff_id.to_string()] = this;

View file

@ -30,8 +30,8 @@ namespace GitgFiles
private TreeStore d_model; private TreeStore d_model;
private Gtk.Paned d_paned; private Gtk.Paned d_paned;
private GtkSource.View d_source; private GtkSource.View d_source;
private Settings d_fontsettings; private Settings? d_fontsettings;
private Settings d_stylesettings; private Settings? d_stylesettings;
private Gtk.ScrolledWindow d_scrolled_files; private Gtk.ScrolledWindow d_scrolled_files;
private Gtk.ScrolledWindow d_scrolled; private Gtk.ScrolledWindow d_scrolled;
@ -98,6 +98,23 @@ namespace GitgFiles
} }
} }
private Settings? try_settings(string schema_id)
{
var source = SettingsSchemaSource.get_default();
if (source == null)
{
return null;
}
if (source.lookup(schema_id, true) != null)
{
return new Settings(schema_id);
}
return null;
}
private void build_ui() private void build_ui()
{ {
var ret = GitgExt.UI.from_builder("files/view-files.ui", var ret = GitgExt.UI.from_builder("files/view-files.ui",
@ -122,7 +139,7 @@ namespace GitgFiles
d_imagevp.add(d_image); d_imagevp.add(d_image);
d_imagevp.show_all(); d_imagevp.show_all();
d_fontsettings = new Settings("org.gnome.desktop.interface"); d_fontsettings = try_settings("org.gnome.desktop.interface");
if (d_fontsettings != null) if (d_fontsettings != null)
{ {
@ -133,7 +150,7 @@ namespace GitgFiles
update_font(); update_font();
} }
d_stylesettings = new Settings("org.gnome.gedit.preferences.editor"); d_stylesettings = try_settings("org.gnome.gedit.preferences.editor");
if (d_stylesettings != null) if (d_stylesettings != null)
{ {