Blame ibus/config.py

Packit Service 1d8f1c
# vim:set et sts=4 sw=4:
Packit Service 1d8f1c
#
Packit Service 1d8f1c
# ibus - The Input Bus
Packit Service 1d8f1c
#
Packit Service 1d8f1c
# Copyright (c) 2007-2010 Peng Huang <shawn.p.huang@gmail.com>
Packit Service 1d8f1c
# Copyright (c) 2007-2010 Red Hat, Inc.
Packit Service 1d8f1c
#
Packit Service 1d8f1c
# This library is free software; you can redistribute it and/or
Packit Service 1d8f1c
# modify it under the terms of the GNU Lesser General Public
Packit Service 1d8f1c
# License as published by the Free Software Foundation; either
Packit Service 1d8f1c
# version 2.1 of the License, or (at your option) any later version.
Packit Service 1d8f1c
#
Packit Service 1d8f1c
# This library is distributed in the hope that it will be useful,
Packit Service 1d8f1c
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 1d8f1c
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 1d8f1c
# Lesser General Public License for more details.
Packit Service 1d8f1c
#
Packit Service 1d8f1c
# You should have received a copy of the GNU Lesser General Public
Packit Service 1d8f1c
# License along with this library; if not, write to the Free Software
Packit Service 1d8f1c
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
Packit Service 1d8f1c
# USA
Packit Service 1d8f1c
Packit Service 1d8f1c
__all__ = (
Packit Service 1d8f1c
        "ConfigBase",
Packit Service 1d8f1c
        "IBUS_SERVICE_CONFIG",
Packit Service 1d8f1c
        "IBUS_PATH_CONFIG"
Packit Service 1d8f1c
    )
Packit Service 1d8f1c
Packit Service 1d8f1c
IBUS_SERVICE_CONFIG = "org.freedesktop.IBus.Config"
Packit Service 1d8f1c
IBUS_PATH_CONFIG = "/org/freedesktop/IBus/Config"
Packit Service 1d8f1c
Packit Service 1d8f1c
import gobject
Packit Service 1d8f1c
import object
Packit Service 1d8f1c
import interface
Packit Service 1d8f1c
import dbus
Packit Service 1d8f1c
from dbus.proxies import ProxyObject
Packit Service 1d8f1c
Packit Service 1d8f1c
class ConfigBase(object.Object):
Packit Service 1d8f1c
    def __init__(self, bus):
Packit Service 1d8f1c
        super(ConfigBase, self).__init__()
Packit Service 1d8f1c
        self.__proxy = ConfigProxy(self, bus.get_dbusconn())
Packit Service 1d8f1c
Packit Service 1d8f1c
    def get_value(self, section, name):
Packit Service 1d8f1c
        pass
Packit Service 1d8f1c
Packit Service 1d8f1c
    def get_values(self, section):
Packit Service 1d8f1c
        pass
Packit Service 1d8f1c
Packit Service 1d8f1c
    def set_value(self, section, name, value):
Packit Service 1d8f1c
        pass
Packit Service 1d8f1c
Packit Service 1d8f1c
    def unset_value(self, section, name):
Packit Service 1d8f1c
        pass
Packit Service 1d8f1c
Packit Service 1d8f1c
    def value_changed(self, section, name, value):
Packit Service 1d8f1c
        self.__proxy.ValueChanged(section, name, value)
Packit Service 1d8f1c
Packit Service 1d8f1c
Packit Service 1d8f1c
class ConfigProxy(interface.IConfig):
Packit Service 1d8f1c
    def __init__ (self, config, dbusconn):
Packit Service 1d8f1c
        super(ConfigProxy, self).__init__(dbusconn, IBUS_PATH_CONFIG)
Packit Service 1d8f1c
        self.__dbusconn = dbusconn
Packit Service 1d8f1c
        self.__config = config
Packit Service 1d8f1c
Packit Service 1d8f1c
    def GetValue(self, section, name):
Packit Service 1d8f1c
        return self.__config.get_value(section, name)
Packit Service 1d8f1c
Packit Service 1d8f1c
    def GetValues(self, section):
Packit Service 1d8f1c
        return self.__config.get_values(section)
Packit Service 1d8f1c
Packit Service 1d8f1c
    def SetValue(self, section, name, value):
Packit Service 1d8f1c
        return self.__config.set_value(section, name, value)
Packit Service 1d8f1c
Packit Service 1d8f1c
    def UnsetValue(self, section, name):
Packit Service 1d8f1c
        return self.__config.unset_value(section, name)
Packit Service 1d8f1c
Packit Service 1d8f1c
    def Destroy(self):
Packit Service 1d8f1c
        self.__config.destroy()
Packit Service 1d8f1c
Packit Service 1d8f1c
class Config(object.Object):
Packit Service 1d8f1c
    __gtype_name__ = "PYIBusConfig"
Packit Service 1d8f1c
    __gsignals__ = {
Packit Service 1d8f1c
        "reloaded" : (
Packit Service 1d8f1c
            gobject.SIGNAL_RUN_LAST,
Packit Service 1d8f1c
            gobject.TYPE_NONE,
Packit Service 1d8f1c
            ()
Packit Service 1d8f1c
        ),
Packit Service 1d8f1c
        "value-changed" : (
Packit Service 1d8f1c
            gobject.SIGNAL_RUN_LAST,
Packit Service 1d8f1c
            gobject.TYPE_NONE,
Packit Service 1d8f1c
            (gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)
Packit Service 1d8f1c
        ),
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
Packit Service 1d8f1c
    def __init__(self, bus):
Packit Service 1d8f1c
        super(Config, self).__init__()
Packit Service 1d8f1c
        self.__bus = bus
Packit Service 1d8f1c
        self.__bus_name = None
Packit Service 1d8f1c
Packit Service 1d8f1c
        self.__bus.add_match("type='signal',\
Packit Service 1d8f1c
                              sender='org.freedesktop.DBus',\
Packit Service 1d8f1c
                              member='NameOwnerChanged',\
Packit Service 1d8f1c
                              arg0='org.freedesktop.IBus.Config'")
Packit Service 1d8f1c
        self.__bus.get_dbusconn().add_signal_receiver(self.__name_owner_changed_cb, signal_name="NameOwnerChanged")
Packit Service 1d8f1c
Packit Service 1d8f1c
        try:
Packit Service 1d8f1c
            self.__init_config()
Packit Service 1d8f1c
        except:
Packit Service 1d8f1c
            self.__config = None
Packit Service 1d8f1c
Packit Service 1d8f1c
    def __name_owner_changed_cb(self, name, old_name, new_name):
Packit Service 1d8f1c
        if name == "org.freedesktop.IBus.Config":
Packit Service 1d8f1c
            if new_name == "":
Packit Service 1d8f1c
                self.__config = None
Packit Service 1d8f1c
            else:
Packit Service 1d8f1c
                self.__init_config(new_name)
Packit Service 1d8f1c
Packit Service 1d8f1c
    def __init_config(self, bus_name=None):
Packit Service 1d8f1c
        if bus_name == None:
Packit Service 1d8f1c
            bus_name = self.__bus.get_name_owner(IBUS_SERVICE_CONFIG)
Packit Service 1d8f1c
Packit Service 1d8f1c
        match_rule = "type='signal',\
Packit Service 1d8f1c
                      sender='%s',\
Packit Service 1d8f1c
                      member='ValueChanged',\
Packit Service 1d8f1c
                      path='/org/freedesktop/IBus/Config'"
Packit Service 1d8f1c
Packit Service 1d8f1c
        if self.__bus_name:
Packit Service 1d8f1c
            self.__bus.remove_match(match_rule % self.__bus_name)
Packit Service 1d8f1c
            self.__bus_name = None
Packit Service 1d8f1c
Packit Service 1d8f1c
        _config = self.__bus.get_dbusconn().get_object(bus_name, IBUS_PATH_CONFIG)
Packit Service 1d8f1c
        self.__config = dbus.Interface(_config, dbus_interface="org.freedesktop.IBus.Config")
Packit Service 1d8f1c
        self.__config.connect_to_signal("ValueChanged", self.__value_changed_cb)
Packit Service 1d8f1c
Packit Service 1d8f1c
        self.__bus_name = bus_name
Packit Service 1d8f1c
        self.__bus.add_match(match_rule % self.__bus_name)
Packit Service 1d8f1c
        self.emit("reloaded")
Packit Service 1d8f1c
Packit Service 1d8f1c
    def __value_changed_cb(self, section, name, value):
Packit Service 1d8f1c
        self.emit("value-changed", section, name, value)
Packit Service 1d8f1c
Packit Service 1d8f1c
    def get_value(self, section, name, default_value):
Packit Service 1d8f1c
        try:
Packit Service 1d8f1c
            return self.__config.GetValue(section, name)
Packit Service 1d8f1c
        except:
Packit Service 1d8f1c
            return default_value
Packit Service 1d8f1c
Packit Service 1d8f1c
    def get_values(self, section):
Packit Service 1d8f1c
        try:
Packit Service 1d8f1c
            return self.__config.GetValues(section)
Packit Service 1d8f1c
        except:
Packit Service 1d8f1c
            return None
Packit Service 1d8f1c
Packit Service 1d8f1c
    def set_value(self, section, name, value):
Packit Service 1d8f1c
        try:
Packit Service 1d8f1c
            return self.__config.SetValue(section, name, value)
Packit Service 1d8f1c
        except:
Packit Service 1d8f1c
            return
Packit Service 1d8f1c
Packit Service 1d8f1c
    def set_list(self, section, name, value, signature):
Packit Service 1d8f1c
        return self.set_value(section, name, dbus.Array(value, signature=signature))
Packit Service 1d8f1c
Packit Service 1d8f1c
    def unset_value(self, section, name):
Packit Service 1d8f1c
        try:
Packit Service 1d8f1c
            return self.__config.UnsetValue(section, name)
Packit Service 1d8f1c
        except:
Packit Service 1d8f1c
            return