|
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
|