diff options
author | Huang Peng <shawn.p.huang@gmail.com> | 2008-10-03 20:19:03 +0800 |
---|---|---|
committer | Huang Peng <shawn.p.huang@gmail.com> | 2008-10-03 20:19:03 +0800 |
commit | 6515cb122eea13c16d5f936a346acbc1369b2d64 (patch) | |
tree | 697ecf0303f04e7452364ce17fb44df79d01662b /ibus | |
parent | 09a7df4511f12e447d1f43ad485b375a3e5b26c6 (diff) | |
download | ibus-6515cb122eea13c16d5f936a346acbc1369b2d64.tar.gz ibus-6515cb122eea13c16d5f936a346acbc1369b2d64.tar.xz ibus-6515cb122eea13c16d5f936a346acbc1369b2d64.zip |
WIP.
Diffstat (limited to 'ibus')
-rw-r--r-- | ibus/bus.py | 38 | ||||
-rw-r--r-- | ibus/interface/iibus.py | 16 |
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 |