summaryrefslogtreecommitdiffstats
path: root/ibus
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2008-10-03 20:19:03 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2008-10-03 20:19:03 +0800
commit6515cb122eea13c16d5f936a346acbc1369b2d64 (patch)
tree697ecf0303f04e7452364ce17fb44df79d01662b /ibus
parent09a7df4511f12e447d1f43ad485b375a3e5b26c6 (diff)
downloadibus-6515cb122eea13c16d5f936a346acbc1369b2d64.tar.gz
ibus-6515cb122eea13c16d5f936a346acbc1369b2d64.tar.xz
ibus-6515cb122eea13c16d5f936a346acbc1369b2d64.zip
WIP.
Diffstat (limited to 'ibus')
-rw-r--r--ibus/bus.py38
-rw-r--r--ibus/interface/iibus.py16
2 files changed, 30 insertions, 24 deletions
diff --git a/ibus/bus.py b/ibus/bus.py
index 4f70c8a..4eb7b36 100644
--- a/ibus/bus.py
+++ b/ibus/bus.py
@@ -122,6 +122,11 @@ class Bus(ibus.Object):
self.__dbusconn = dbus.connection.Connection(ibus.IBUS_ADDR)
self.__ibus = self.__dbusconn.get_object(ibus.IBUS_NAME, ibus.IBUS_PATH)
self.__dbus = self.__dbusconn.get_object(dbus.BUS_DAEMON_NAME, dbus.BUS_DAEMON_PATH)
+ try:
+ unique_name = self.__dbus.get_name_owner(ibus.IBUS_CONFIG_NAME)
+ self.__config = self.__dbusconn.get_object(unique_name, ibus.IBUS_CONFIG_PATH)
+ except:
+ self.__config = None
self.__dbusconn.add_message_filter(self.__dbus_message_cb)
# define dbus methods
@@ -195,21 +200,31 @@ class Bus(ibus.Object):
return self.__ibus.GetInputContextStates(ic)
def config_add_watch(self, section):
- return self.__ibus.ConfigAddWatch(section)
+ return self.__dbus.AddMatch(
+ "type='signal',"
+ "interface='" + ibus.IBUS_CONFIG_NAME + "',"
+ "member='ValueChanged',"
+ "arg0='" + section + "'"
+ )
def config_remove_watch(self, section):
- return self.__ibus.ConfigRemoveWatch(section)
+ return self.__dbus.RemoveMatch(
+ "type='signal',"
+ "interface='" + ibus.IBUS_CONFIG_NAME + "',"
+ "member='ValueChanged',"
+ "arg0='" + section + "'"
+ )
def config_set_value(self, section, name, value):
- return self.__ibus.ConfigSetValue(section, name, value)
+ return self.__config.SetValue(section, name, value)
def config_set_list(self, section, name, value, list_type):
value = dbus.Array(value, signature = list_type)
- return self.__ibus.ConfigSetValue(section, name, value)
+ return self.__config.SetValue(section, name, value)
def config_get_value(self, section, name, default_value = None):
try:
- return self.__ibus.ConfigGetValue(section, name)
+ return self.__config.GetValue(section, name)
except Exception, e:
return default_value
@@ -232,8 +247,17 @@ class Bus(ibus.Object):
return self.__ibus.Kill()
def __dbus_message_cb(self, conn, message):
+ # name owner changed signal
+ if message.is_signal(dbus.BUS_DAEMON_IFACE, "NameOwnerChanged"):
+ args = message.get_args_list()
+ if args[0] == ibus.IBUS_CONFIG_NAME:
+ if args[2] != "":
+ self.__config = self.__dbusconn.get_object(ibus.IBUS_CONFIG_NAME, ibus.IBUS_CONFIG_PATH)
+ else:
+ self.__config = None
+
# commit string signal
- if message.is_signal(ibus.IBUS_IFACE, "CommitString"):
+ elif message.is_signal(ibus.IBUS_IFACE, "CommitString"):
args = message.get_args_list()
ic, string = args[0:2]
self.emit("commit-string", ic, string.encode("utf-8"))
@@ -331,6 +355,4 @@ class Bus(ibus.Object):
retval = dbus.lowlevel.HANDLER_RESULT_HANDLED
else:
retval = dbus.lowlevel.HANDLER_RESULT_NOT_YET_HANDLED
-
return retval
-
diff --git a/ibus/interface/iibus.py b/ibus/interface/iibus.py
index ab2ea36..0f299b0 100644
--- a/ibus/interface/iibus.py
+++ b/ibus/interface/iibus.py
@@ -77,10 +77,6 @@ class IIBus(dbus.service.Object):
@method(in_signature = "ao")
def UnregisterFactories(self, object_paths, dbusconn): pass
- # methods for ibus config
- @method(in_signature = "ob")
- def RegisterConfig(self, object_path, replace, dbusconn): pass
-
# general methods
@method(out_signature = "av")
def GetFactories(self, dbusconn): pass
@@ -94,18 +90,6 @@ class IIBus(dbus.service.Object):
@method(in_signature = "s", out_signature = "sb")
def GetInputContextStates(self, ic, dbusconn): pass
- @method(in_signature = "s")
- def ConfigAddWatch(self, section, dbusconn): pass
-
- @method(in_signature = "s")
- def ConfigRemoveWatch(self, section, dbusconn): pass
-
- @async_method(in_signature = "ssv")
- def ConfigSetValue(self, section, name, value, dbusconn, reply_cb, error_cb): pass
-
- @async_method(in_signature = "ss", out_signature = "v")
- def ConfigGetValue(self, section, name, dbusconn, reply_cb, error_cb): pass
-
@method(out_signature = "a(sssssssb)")
def RegisterListEngines(self, dbusconn): pass