summaryrefslogtreecommitdiffstats
path: root/ibus/config.py
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2009-02-05 10:39:56 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2009-02-05 10:39:56 +0800
commitaedad1ea0a7fef604aa27f4b58433fd8f2ece29e (patch)
treeffcb531d8474bde18b90341bcd4eb639edd74525 /ibus/config.py
parent41ad46305a88637dd99f00a2d2a3f455505d357b (diff)
downloadibus-aedad1ea0a7fef604aa27f4b58433fd8f2ece29e.tar.gz
ibus-aedad1ea0a7fef604aa27f4b58433fd8f2ece29e.tar.xz
ibus-aedad1ea0a7fef604aa27f4b58433fd8f2ece29e.zip
re-implement ibus in c language.
Diffstat (limited to 'ibus/config.py')
-rw-r--r--ibus/config.py96
1 files changed, 88 insertions, 8 deletions
diff --git a/ibus/config.py b/ibus/config.py
index 24b4edc..70bc89a 100644
--- a/ibus/config.py
+++ b/ibus/config.py
@@ -21,17 +21,20 @@
__all__ = (
"ConfigBase",
- "IBUS_CONFIG_NAME",
- "IBUS_CONFIG_PATH"
+ "IBUS_SERVICE_CONFIG",
+ "IBUS_PATH_CONFIG"
)
-IBUS_CONFIG_NAME = "org.freedesktop.ibus.Config"
-IBUS_CONFIG_PATH = "/org/freedesktop/ibus/Config"
+IBUS_SERVICE_CONFIG = "org.freedesktop.IBus.Config"
+IBUS_PATH_CONFIG = "/org/freedesktop/IBus/Config"
-import ibus
-from ibus import interface
+import gobject
+import object
+import interface
+import dbus
+from dbus.proxies import ProxyObject
-class ConfigBase(ibus.Object):
+class ConfigBase(object.Object):
def __init__(self, bus):
super(ConfigBase, self).__init__()
self.__proxy = ConfigProxy(self, bus.get_dbusconn())
@@ -48,7 +51,7 @@ class ConfigBase(ibus.Object):
class ConfigProxy(interface.IConfig):
def __init__ (self, config, dbusconn):
- super(ConfigProxy, self).__init__(dbusconn, IBUS_CONFIG_PATH)
+ super(ConfigProxy, self).__init__(dbusconn, IBUS_PATH_CONFIG)
self.__dbusconn = dbusconn
self.__config = config
@@ -60,3 +63,80 @@ class ConfigProxy(interface.IConfig):
def Destroy(self):
self.__config.destroy()
+
+class Config(object.Object):
+ __gsignals__ = {
+ "reloaded" : (
+ gobject.SIGNAL_RUN_LAST,
+ gobject.TYPE_NONE,
+ ()
+ ),
+ "value-changed" : (
+ gobject.SIGNAL_RUN_LAST,
+ gobject.TYPE_NONE,
+ (gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)
+ ),
+ }
+
+ def __init__(self, bus):
+ super(Config, self).__init__()
+ self.__bus = bus
+ self.__bus_name = None
+
+ self.__bus.add_match("type='signal',\
+ sender='org.freedesktop.DBus',\
+ member='NameOwnerChanged',\
+ arg0='org.freedesktop.IBus.Config'")
+ self.__bus.get_dbusconn().add_signal_receiver(self.__name_owner_changed_cb, signal_name="NameOwnerChanged")
+
+ try:
+ self.__init_config()
+ except:
+ self.__config = None
+
+ def __name_owner_changed_cb(self, name, old_name, new_name):
+ if name == "org.freedesktop.IBus.Config":
+ if new_name == "":
+ self.__config = None
+ else:
+ self.__init_config(new_name)
+
+ def __init_config(self, bus_name=None):
+ if bus_name == None:
+ bus_name = self.__bus.get_name_owner(IBUS_SERVICE_CONFIG)
+
+ match_rule = "type='signal',\
+ sender='%s',\
+ member='ValueChanged',\
+ path='/org/freedesktop/IBus/Config'"
+
+ if self.__bus_name:
+ self.__bus.remove_match(match_rule % self.__bus_name)
+ self.__bus_name = None
+
+ self.__config = self.__bus.get_dbusconn().get_object(bus_name, IBUS_PATH_CONFIG)
+ self.__config.connect_to_signal("ValueChanged", self.__value_changed_cb)
+
+ self.__bus_name = bus_name
+ self.__bus.add_match(match_rule % self.__bus_name)
+ self.emit("reloaded")
+
+ def __value_changed_cb(self, section, name, value):
+ self.emit("value-changed", section, name, value)
+
+ def get_value(self, section, name, default_value):
+ try:
+ return self.__config.GetValue(section, name)
+ except:
+ return default_value
+
+ def set_value(self, section, name, value):
+ try:
+ return self.__config.SetValue(section, name, value)
+ except:
+ return
+
+ def set_list(self, section, name, value, signature):
+ return self.set_value(section, name, dbus.Array(value, signature=signature))
+
+gobject.type_register(Config)