1/* -*- Mode: Vala; indent-tabs-mode: nil; tab-width: 4 -*- 2 * 3 * Copyright (C) 2011,2012 Canonical Ltd 4 * 5 * This program is free software: you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License version 3 as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program. If not, see <http://www.gnu.org/licenses/>. 16 * 17 * Authors: Robert Ancell <robert.ancell@canonical.com> 18 * Michael Terry <michael.terry@canonical.com> 19 */ 20 21public class UGSettings 22{ 23 public const string KEY_BACKGROUND = "background"; 24 public const string KEY_BACKGROUND_COLOR = "background-color"; 25 public const string KEY_BACKGROUND_STRETCH = "stretch-background-across-monitors"; 26 public const string KEY_DRAW_USER_BACKGROUNDS = "draw-user-backgrounds"; 27 public const string KEY_DRAW_GRID = "draw-grid"; 28 public const string KEY_SHOW_HOSTNAME = "show-hostname"; 29 public const string KEY_SHOW_POWER = "show-power"; 30 public const string KEY_SHOW_A11Y = "show-a11y"; 31 public const string KEY_SHOW_CLOCK = "show-clock"; 32 public const string KEY_SHOW_KEYBOARD = "show-keyboard"; 33 public const string KEY_SHOW_QUIT = "show-quit"; 34 public const string KEY_LOGO = "logo"; 35 public const string KEY_OTHER_MONITORS_LOGO = "other-monitors-logo"; 36 public const string KEY_THEME_NAME = "theme-name"; 37 public const string KEY_ICON_THEME_NAME = "icon-theme-name"; 38 public const string KEY_FONT_NAME = "font-name"; 39 public const string KEY_XFT_ANTIALIAS = "xft-antialias"; 40 public const string KEY_XFT_DPI = "xft-dpi"; 41 public const string KEY_XFT_HINTSTYLE = "xft-hintstyle"; 42 public const string KEY_XFT_RGBA = "xft-rgba"; 43 public const string KEY_ONSCREEN_KEYBOARD = "onscreen-keyboard"; 44 public const string KEY_HIGH_CONTRAST = "high-contrast"; 45 public const string KEY_SCREEN_READER = "screen-reader"; 46 public const string KEY_PLAY_READY_SOUND = "play-ready-sound"; 47 public const string KEY_HIDDEN_USERS = "hidden-users"; 48 public const string KEY_GROUP_FILTER = "group-filter"; 49 public const string KEY_ENABLE_HIDPI = "enable-hidpi"; 50 public const string KEY_ACTIVATE_NUMLOCK = "activate-numlock"; 51 public const string KEY_ONLY_ON_MONITOR = "only-on-monitor"; 52 public const string KEY_CLOCK_FORMAT = "clock-format"; 53 54 public static bool get_boolean (string key) 55 { 56 var gsettings = new Settings (SCHEMA); 57 return gsettings.get_boolean (key); 58 } 59 60 /* LP: 1006497 - utility function to make sure we have the key before trying to read it (which will segfault if the key isn't there) */ 61 public static bool safe_get_boolean (string key, bool default) 62 { 63 var gsettings = new Settings (SCHEMA); 64 string[] keys = gsettings.list_keys (); 65 foreach (var k in keys) 66 if (k == key) 67 return gsettings.get_boolean (key); 68 69 /* key not in child list */ 70 return default; 71 } 72 73 public static int get_integer (string key) 74 { 75 var gsettings = new Settings (SCHEMA); 76 return gsettings.get_int (key); 77 } 78 79 public static double get_double (string key) 80 { 81 var gsettings = new Settings (SCHEMA); 82 return gsettings.get_double (key); 83 } 84 85 public static string get_string (string key) 86 { 87 var gsettings = new Settings (SCHEMA); 88 return gsettings.get_string (key); 89 } 90 91 public static bool set_boolean (string key, bool value) 92 { 93 var gsettings = new Settings (SCHEMA); 94 return gsettings.set_boolean (key, value); 95 } 96 97 public static string[] get_strv (string key) 98 { 99 var gsettings = new Settings (SCHEMA); 100 return gsettings.get_strv (key); 101 } 102 103 public static bool set_strv (string key, string[] value) 104 { 105 var gsettings = new Settings (SCHEMA); 106 return gsettings.set_strv (key, value); 107 } 108 109 public static void apply_conf_settings () 110 { 111 try { 112 var path = "/usr/local/etc/lightdm/slick-greeter.conf"; 113 var gsettings = new Settings (SCHEMA); 114 var keyfile = new KeyFile (); 115 116 if (FileUtils.test (path, FileTest.EXISTS)) 117 { 118 keyfile.load_from_file (path, KeyFileFlags.NONE); 119 } 120 121 var string_keys = new List<string> (); 122 string_keys.append (KEY_BACKGROUND); 123 string_keys.append (KEY_BACKGROUND_COLOR); 124 string_keys.append (KEY_LOGO); 125 string_keys.append (KEY_OTHER_MONITORS_LOGO); 126 string_keys.append (KEY_THEME_NAME); 127 string_keys.append (KEY_ICON_THEME_NAME); 128 string_keys.append (KEY_FONT_NAME); 129 string_keys.append (KEY_PLAY_READY_SOUND); 130 string_keys.append (KEY_XFT_HINTSTYLE); 131 string_keys.append (KEY_XFT_RGBA); 132 string_keys.append (KEY_ENABLE_HIDPI); 133 string_keys.append (KEY_ONLY_ON_MONITOR); 134 string_keys.append (KEY_CLOCK_FORMAT); 135 136 var bool_keys = new List<string> (); 137 bool_keys.append (KEY_DRAW_USER_BACKGROUNDS); 138 bool_keys.append (KEY_BACKGROUND_STRETCH); 139 bool_keys.append (KEY_DRAW_GRID); 140 bool_keys.append (KEY_SHOW_HOSTNAME); 141 bool_keys.append (KEY_SHOW_POWER); 142 bool_keys.append (KEY_SHOW_A11Y); 143 bool_keys.append (KEY_SHOW_CLOCK); 144 bool_keys.append (KEY_SHOW_KEYBOARD); 145 bool_keys.append (KEY_SHOW_QUIT); 146 bool_keys.append (KEY_XFT_ANTIALIAS); 147 bool_keys.append (KEY_ACTIVATE_NUMLOCK); 148 149 var int_keys = new List<string> (); 150 int_keys.append (KEY_XFT_DPI); 151 152 var strv_keys = new List<string> (); 153 strv_keys.append (KEY_HIDDEN_USERS); 154 strv_keys.append (KEY_GROUP_FILTER); 155 156 foreach (string key in string_keys) 157 { 158 if (keyfile.has_group (GROUP_NAME) && keyfile.has_key (GROUP_NAME, key)) { 159 try { 160 var value = keyfile.get_string (GROUP_NAME, key); 161 debug ("Overriding dconf setting for %s with %s", key, value); 162 gsettings.set_string (key, value); 163 } 164 catch (Error e) { 165 warning ("Failed to apply %s from configuration file: %s", key, e.message); 166 } 167 } 168 else { 169 gsettings.reset(key); 170 debug ("Resetting dconf setting for %s to default", key); 171 } 172 } 173 174 foreach (string key in bool_keys) 175 { 176 if (keyfile.has_group (GROUP_NAME) && keyfile.has_key (GROUP_NAME, key)) { 177 try { 178 var value = keyfile.get_boolean (GROUP_NAME, key); 179 debug ("Overriding dconf setting for %s", key); 180 gsettings.set_boolean (key, value); 181 } 182 catch (Error e) { 183 warning ("Failed to apply %s from configuration file: %s", key, e.message); 184 } 185 } 186 else { 187 gsettings.reset(key); 188 debug ("Resetting dconf setting for %s to default", key); 189 } 190 } 191 192 foreach (string key in int_keys) 193 { 194 if (keyfile.has_group (GROUP_NAME) && keyfile.has_key (GROUP_NAME, key)) { 195 try { 196 var value = keyfile.get_integer (GROUP_NAME, key); 197 debug ("Overriding dconf setting for %s with %d", key, value); 198 gsettings.set_int (key, value); 199 } 200 catch (Error e) { 201 warning ("Failed to apply %s from configuration file: %s", key, e.message); 202 } 203 } 204 else { 205 gsettings.reset(key); 206 debug ("Resetting dconf setting for %s to default", key); 207 } 208 } 209 210 foreach (string key in strv_keys) 211 { 212 if (keyfile.has_group (GROUP_NAME) && keyfile.has_key (GROUP_NAME, key)) { 213 try { 214 var value = keyfile.get_string_list (GROUP_NAME, key); 215 debug ("Overriding dconf setting for %s", key); 216 gsettings.set_strv (key, value); 217 } 218 catch (Error e) { 219 warning ("Failed to apply %s from configuration file: %s", key, e.message); 220 } 221 } 222 else { 223 gsettings.reset(key); 224 debug ("Resetting dconf setting for %s to default", key); 225 } 226 } 227 } 228 catch (Error e) { 229 warning ("Error in apply_conf_settings (): %s", e.message); 230 } 231 } 232 private const string SCHEMA = "x.dm.slick-greeter"; 233 private const string GROUP_NAME = "Greeter"; 234} 235