summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEitan Isaacson <eitan@monotonous.org>2011-03-08 17:38:08 -0500
committerEitan Isaacson <eitan@monotonous.org>2011-03-08 17:38:08 -0500
commit994014a918ce32a08e4912ee2ac7274839d823f0 (patch)
treeace51462dff9c36a8a7e76796069e59a8ec0f9fd
parent2ddf12c4bc8665f7ce55c83e8cc6de5d7e5c1ab4 (diff)
downloadcaribou-994014a918ce32a08e4912ee2ac7274839d823f0.tar.gz
Use GSettings for caribou settings.
-rw-r--r--caribou/common/setting_types.py6
-rw-r--r--caribou/common/settings.py4
-rw-r--r--caribou/common/settings_manager.py41
3 files changed, 22 insertions, 29 deletions
diff --git a/caribou/common/setting_types.py b/caribou/common/setting_types.py
index 130a0b5..109bf1b 100644
--- a/caribou/common/setting_types.py
+++ b/caribou/common/setting_types.py
@@ -71,6 +71,7 @@ class ValueSetting(Setting):
self.default = default
self.insensitive_when_false = insensitive_when_false
self.insensitive_when_true = insensitive_when_true
+ self.hush = False
@property
def value(self):
@@ -78,11 +79,12 @@ class ValueSetting(Setting):
@value.setter
def value(self, val):
- _val = self.convert_value(val.unpack())
+ _val = self.convert_value(val)
if self.allowed and _val not in [a for a, b in self.allowed]:
raise ValueError, "'%s' not a valid value" % _val
self._value = _val
- self.emit('value-changed', _val)
+ if not self.hush:
+ self.emit('value-changed', _val)
@property
def gsettings_key(self):
diff --git a/caribou/common/settings.py b/caribou/common/settings.py
index 0393079..86ad86f 100644
--- a/caribou/common/settings.py
+++ b/caribou/common/settings.py
@@ -5,6 +5,8 @@ import caribou.common.const as const
import caribou.ui.i18n
import xml.dom.minidom
+GSETTINGS_SCHEMA = "org.gnome.caribou"
+
try:
import json
except ImportError:
@@ -127,7 +129,7 @@ if __name__ == "__main__":
doc = xml.dom.minidom.Document()
schemafile = doc.createElement('schemalist')
schema = doc.createElement('schema')
- schema.setAttribute("id", "org.gnome.caribou")
+ schema.setAttribute("id", GSETTINGS_SCHEMA)
schema.setAttribute("path", "/apps/caribou/osk/")
schemafile.appendChild(schema)
self._create_schema(settings, doc, schema)
diff --git a/caribou/common/settings_manager.py b/caribou/common/settings_manager.py
index c073fef..66119f8 100644
--- a/caribou/common/settings_manager.py
+++ b/caribou/common/settings_manager.py
@@ -1,15 +1,14 @@
import os
-from gi.repository import GConf
+from gi.repository import Gio
from setting_types import *
-from settings import settings
+from settings import settings, GSETTINGS_SCHEMA
import const
class _SettingsManager(object):
def __init__(self, settings):
self.groups = settings
- self.gconf_client = GConf.Client.get_default()
- self.gconf_client.add_dir(const.CARIBOU_GCONF,
- GConf.ClientPreloadType.PRELOAD_NONE)
+ self._gsettings = Gio.Settings(GSETTINGS_SCHEMA)
+ self._gsettings.connect("changed", self._gsettings_changed_cb)
self._settings_map = {}
self._map_settings(self.groups)
@@ -34,21 +33,12 @@ class _SettingsManager(object):
for setting in self._settings_map.values():
if isinstance(setting, SettingsGroup):
continue
- try:
- setting.value = self.gconf_client.get(setting.gconf_key)
- except ValueError:
- val = GConf.Value.new(setting.gconf_type)
- setting.set_gconf_value(val)
- self.gconf_client.set(setting.gconf_key, val)
+ setting.value = \
+ self._gsettings.get_value(setting.gsettings_key).unpack()
self._change_dependant_sensitivity(setting)
- handler_id = setting.connect('value-changed',
- self._on_value_changed)
-
- #self.gconf_client.notify_add(setting.gconf_key,
- # self._gconf_setting_changed_cb,
- # (setting, handler_id))
+ setting.connect('value-changed', self._on_value_changed)
def _change_dependant_sensitivity(self, setting):
for name in setting.insensitive_when_false:
@@ -61,19 +51,18 @@ class _SettingsManager(object):
child.sensitive = i == index
def _on_value_changed(self, setting, value):
- if value != self.gconf_client.get(setting.gconf_key):
- val = GConf.Value.new(setting.gconf_type)
- setting.set_gconf_value(val)
- self.gconf_client.set(setting.gconf_key, val)
+ if value != \
+ self._gsettings.get_value(setting.gsettings_key).unpack():
+ self._gsettings.set_value(setting.gsettings_key, setting.gvariant)
self._change_dependant_sensitivity(setting)
- def _gconf_setting_changed_cb(self, client, connection_id, entry, data):
- setting, handler_id = data
- new_value = client.get_value(setting.gconf_key)
+ def _gsettings_changed_cb(self, gsettings, key):
+ setting = getattr(self, key.replace('-', '_'))
+ new_value = gsettings.get_value(key).unpack()
if setting.value != new_value:
- setting.handler_block(handler_id)
+ setting.hush = True
setting.value = new_value
- setting.handler_unblock(handler_id)
+ setting.hush = False
def __call__(self):
return self