diff options
author | Huang Peng <shawn.p.huang@gmail.com> | 2008-05-13 10:51:18 +0800 |
---|---|---|
committer | Huang Peng <shawn.p.huang@gmail.com> | 2008-05-13 11:41:06 +0800 |
commit | 14a08bc34acab200f891c880b3f3f31751d5800f (patch) | |
tree | c1526e005b4487d7ed21d4f319324093f72fe9e8 /ibus | |
parent | 4d313651ea8de6a554ae1f5009687e66803b99c4 (diff) | |
download | ibus-14a08bc34acab200f891c880b3f3f31751d5800f.tar.gz ibus-14a08bc34acab200f891c880b3f3f31751d5800f.tar.xz ibus-14a08bc34acab200f891c880b3f3f31751d5800f.zip |
Split ibusdaemon from ibus.
Diffstat (limited to 'ibus')
-rw-r--r-- | ibus/__init__.py | 6 | ||||
-rwxr-xr-x | ibus/bus.py | 168 | ||||
-rw-r--r-- | ibus/client.py | 107 | ||||
-rw-r--r-- | ibus/clientmanager.py | 20 | ||||
-rw-r--r-- | ibus/connection.py | 32 | ||||
-rw-r--r-- | ibus/engine.py | 123 | ||||
-rw-r--r-- | ibus/factorymanager.py | 76 | ||||
-rwxr-xr-x | ibus/ibusdaemon.py | 56 | ||||
-rwxr-xr-x | ibus/server.py | 62 |
9 files changed, 0 insertions, 650 deletions
diff --git a/ibus/__init__.py b/ibus/__init__.py index 8832e1e..182c191 100644 --- a/ibus/__init__.py +++ b/ibus/__init__.py @@ -1,11 +1,5 @@ from object import * from attribute import * from common import * -from connection import * from interface import * -from bus import * -from client import * -from engine import * -from factorymanager import * -from clientmanager import * from exception import * diff --git a/ibus/bus.py b/ibus/bus.py deleted file mode 100755 index 01e5e73..0000000 --- a/ibus/bus.py +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env python -import weakref -import dbus -import ibus -from ibus import keysyms - -class IBus (ibus.Object): - def __init__ (self): - ibus.Object.__init__ (self) - self._connections = {} - self._client_manager = ibus.ClientManager () - self._factory_manager = ibus.FactoryManager () - - self._focused_client = None - self._last_focused_client = None - - self._last_key = None - - def new_connection (self, dbusconn): - assert dbusconn not in self._connections - self._connections[dbusconn] = ibus.Connection (dbusconn) - - def remove_connection (self, dbusconn): - assert dbusconn in self._connections - - # destroy the connection - self._connections[dbusconn].destroy () - del self._connections[dbusconn] - - def _lookup_ibus_connection (self, dbusconn): - if dbusconn not in self._connections: - raise ibus.IBusException ("can not find ibus.Connection") - return self._connections[dbusconn] - - ########################################################## - # methods for im client - ########################################################## - def register_client (self, name, dbusconn): - ibusconn = self._lookup_ibus_connection (dbusconn) - client = self._client_manager.register_client (name, ibusconn) - factory = self._factory_manager.get_default_factory () - client.set_engine_factory (factory) - - def focus_in (self, dbusconn): - client = self._lookup_client (dbusconn) - - if self._focused_client != client and self._focused_client != None: - self._focused_client.focus_out () - - self._focused_client = client - self._last_focused_client = client - client.focus_in () - - def focus_out (self, dbusconn): - client = self._lookup_client (dbusconn) - if client == self._focused_client: - self._focused_client = None - client.focus_out () - - def reset (self, dbusconn): - client = self._lookup_client (dbusconn) - client.reset () - - def is_enabled (self, dbusconn): - client = self._lookup_client (dbusconn) - return client.is_enabled () - - def process_key_event (self, keyval, is_press, state, - dbusconn, reply_cb, error_cb): - client = self._lookup_client (dbusconn) - - if self._filter_hotkeys (client, keyval, is_press, state): - reply_cb (True) - return - else: - client.process_key_event (keyval, is_press, state, reply_cb, error_cb) - - def set_cursor_location (self, x, y, w, h, dbusconn): - client = self._lookup_client (dbusconn) - client.set_cursor_location (x, y, w, h) - - def _filter_hotkeys (self, client, keyval, is_press, state): - if is_press and keyval == keysyms.space \ - and state == keysyms.CONTROL_MASK: - enable = not client.is_enabled () - client.set_enable (enable) - if client.get_engine_factory () == None and enable: - factory = self._factory_manager.get_default_factory() - client.set_engine_factory (factory) - return True - return False - - def _lookup_client (self, dbusconn): - ibusconn = self._lookup_ibus_connection (dbusconn) - return self._client_manager.lookup_client (ibusconn) - if dbusconn not in self._clients: - raise ibus.IBusException ("not register the client") - return self._clients[dbusconn] - - ########################################################## - # methods for im client - ########################################################## - def register_factories (self, object_paths, dbusconn): - ibusconn = self._lookup_ibus_connection (dbusconn) - self._factory_manager.register_factories (object_paths, ibusconn) - - def dispatch_dbus_signal (self, dbusconn, message): - ibusconn = self._lookup_ibus_connection (dbusconn) - ibusconn.dispatch_dbus_signal (message) - - def _lookup_engine (self, dbusconn, path): - ibusconn = self._lookup_ibus_connection (dbusconn) - return self._factory_manager.lookup_engine (ibusconn, path) - - - - -class IBusProxy (ibus.IIBus): - SUPPORTS_MULTIPLE_CONNECTIONS = True - - def __init__ (self): - ibus.IIBus.__init__ (self) - self._ibus = IBus () - - def new_connection (self, dbusconn): - self._ibus.new_connection (dbusconn) - - def remove_connection (self, dbusconn): - self._ibus.remove_connection (dbusconn) - - def dispatch_dbus_signal (self, dbusconn, message): - return self._ibus.dispatch_dbus_signal (dbusconn, message) - - def GetIBusAddress (self, dbusconn): - return self._ibus_addr - - def RegisterClient (self, client_name, dbusconn): - self._ibus.register_client (client_name, dbusconn) - - def RegisterFactories (self, object_paths, dbusconn): - self._ibus.register_factories (object_paths, dbusconn) - - def UnregisterEngines (self, object_paths, dbusconn): - self._ibus.unregister_engines (object_paths, dbusconn) - - def ProcessKeyEvent (self, keyval, is_press, state, \ - dbusconn, reply_cb, error_cb): - try: - self._ibus.process_key_event (keyval, is_press, state, - dbusconn, reply_cb, error_cb) - except Exception, e: - error_cb (e) - - def SetCursorLocation (self, x, y, w, h, dbusconn): - self._ibus.set_cursor_location (x, y, w, h, dbusconn) - - def FocusIn (self, dbusconn): - self._ibus.focus_in (dbusconn) - - def FocusOut (self, dbusconn): - self._ibus.focus_out (dbusconn) - - def Reset (self, dbusconn): - self._ibus.reset (dbusconn) - - def IsEnabled (self, dbusconn): - return self._ibus.is_enabled (dbusconn) - diff --git a/ibus/client.py b/ibus/client.py deleted file mode 100644 index 21e7eac..0000000 --- a/ibus/client.py +++ /dev/null @@ -1,107 +0,0 @@ -import ibus - -class Client (ibus.Object): - def __init__ (self, name, ibusconn): - ibus.Object.__init__ (self) - - self._ibusconn = ibusconn - self._ibusconn.connect ("destroy", self._ibusconn_destroy_cb) - - # init default values - self._enable = False - self._factory = None - self._engine = None - self._engine_handler_ids = [] - - def process_key_event (self, keyval, is_press, state, - reply_cb, error_cb): - if self._engine != None and self._enable: - self._engine.process_key_event (keyval, is_press, state, - reply_cb, error_cb) - else: - reply_cb (False) - - def set_cursor_location (self, x, y, w, h): - if self._engine: - self._engine.set_cursor_location (x, y, w, h) - - def focus_in (self): - if self._engine: - self._engine.focus_in () - - def focus_out (self): - if self._engine: - self._engine.focus_out () - - def reset (self): - if self._engine: - self._engine.reset () - - def is_enabled (self): - return self._enable - - def set_enable (self, enable): - if self._enable != enable: - self._enable = enable - if self._enable: - self._ibusconn.emit_dbus_signal ("Enabled") - else: - self._ibusconn.emit_dbus_signal ("Disabled") - if self._engine: - self._engine.set_enable (self._enable) - - def commit_string (self, text): - self._ibusconn.emit_dbus_signal ("CommitString", text) - - def preedit_changed (self, text, attrs, cursor): - self._ibusconn.emit_dbus_signal ("PreeditChanged", text, attrs.get_array (), cursor) - - def set_engine_factory (self, factory): - if self._factory == factory: - return - - if self._engine != None: - self._remove_engine_handlers () - self._engine.destroy () - self._engine = None - - self._factory = factory - - if self._factory: - self._engine = self._factory.create_engine () - self._install_engine_handlers () - - def get_engine_factory (self): - return self._factory - - def _engine_destroy_cb (self, engine): - if self._engine == engine: - self._remove_engine_handlers () - self._engine = None - self._factory = None - - def _ibusconn_destroy_cb (self, ibusconn): - self._factory = None - if self._engine != None: - self._remove_engine_handlers () - self._engine.destroy () - self._engine = None - - def _commit_string_cb (self, engine, text): - self.commit_string (text) - - def _preedit_changed_cb (self, engine, text, attrs, cursor): - self.preedit_changed (self, text, attrs, cursor) - - def _remove_engine_handlers (self): - assert self._engine != None - for id in self._engine_handler_ids: - self._engine.disconnect (id) - self._engine_handler_ids = [] - - def _install_engine_handlers (self): - id = self._engine.connect ("destroy", self._engine_destroy_cb) - id = self._engine.connect ("commit-string", self._commit_string_cb) - self._engine_handler_ids.append (id) - id = self._engine.connect ("preedit-changed", self._preedit_changed_cb) - self._engine_handler_ids.append (id) diff --git a/ibus/clientmanager.py b/ibus/clientmanager.py deleted file mode 100644 index 92030da..0000000 --- a/ibus/clientmanager.py +++ /dev/null @@ -1,20 +0,0 @@ -import ibus - -class ClientManager (ibus.Object): - def __init__ (self): - self._clients = {} - - def register_client (self, name, ibusconn): - if ibusconn in self._clients: - raise ibus.IBusException ("client has been registered") - client = ibus.Client (name, ibusconn) - self._clients[ibusconn] = client - ibusconn.connect ("destroy", self._ibusconn_destroy_cb) - return client - - def lookup_client (self, ibusconn): - return self._clients[ibusconn] - - def _ibusconn_destroy_cb (self, ibusconn): - del self._clients[ibusconn] - diff --git a/ibus/connection.py b/ibus/connection.py deleted file mode 100644 index f1d2882..0000000 --- a/ibus/connection.py +++ /dev/null @@ -1,32 +0,0 @@ -import dbus.lowlevel -import ibus -import gobject - -class Connection (ibus.Object): - __gsignals__ = { - "dbus-signal" : ( - gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, - (gobject.TYPE_PYOBJECT, ) - ) - } - def __init__ (self, dbusconn): - ibus.Object.__init__ (self) - self._dbusconn = dbusconn - - def get_object (self, path): - return self._dbusconn.get_object ("no.name", path) - - def emit_dbus_signal (self, name, *args): - message = dbus.lowlevel.SignalMessage (ibus.IBUS_PATH, ibus.IBUS_IFACE, name) - message.append (*args) - self._dbusconn.send_message (message) - self._dbusconn.flush () - - def do_destroy (self): - self._dbusconn = None - - def dispatch_dbus_signal (self, message): - self.emit ("dbus-signal", message) - -gobject.type_register (Connection) diff --git a/ibus/engine.py b/ibus/engine.py deleted file mode 100644 index ec55a17..0000000 --- a/ibus/engine.py +++ /dev/null @@ -1,123 +0,0 @@ -import weakref -import gobject -import ibus - -class EngineFactory (ibus.Object): - def __init__ (self, ibusconn, object_path): - ibus.Object.__init__ (self) - self._ibusconn = ibusconn - self._object_path = object_path - self._factory = self._ibusconn.get_object (self._object_path) - - self._ibusconn.connect ("destroy", self._ibusconn_destroy_cb) - - self._ibusconn.connect ("dbus-signal", self._dbus_signal_cb) - self._engines = weakref.WeakValueDictionary () - - self._info = None - - def get_object_path (self): - return self._object_path - - def get_info (self): - if self._info == None: - self._info = self._factory.GetInfo () - return self._info - - def create_engine (self): - object_path = self._factory.CreateEngine () - engine = Engine (self._ibusconn, object_path) - self._engines[object_path] = engine - return engine - - def destroy (self): - ibus.Object.destroy (self) - self._ibusconn = None - self._factory = None - - def _ibusconn_destroy_cb (self, ibusconn): - self.destroy () - - def _dbus_signal_cb (self, ibusconn, message): - object_path = message.get_path () - if object_path in self._engines: - self._engines[object_path].handle_dbus_signal (message) - - # methods for cmp - def __lt__ (self, other): - x = self.get_info () - y = other.get_info () - if x[1] < y[1]: return True - if x[1] == y[1]: return x[0] < y[0] - - def __gt__ (self, other): - x = self.get_info () - y = other.get_info () - if x[1] > y[1]: return True - if x[1] == y[1]: return x[0] > y[0] - - -class Engine (ibus.Object): - __gsignals__ = { - "commit-string" : ( - gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, - (gobject.TYPE_STRING, )), - "preedit-changed" : ( - gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, - (gobject.TYPE_STRING, gobject.TYPE_PYOBJECT, gobject.TYPE_UINT)) - } - - def __init__ (self, ibusconn, object_path): - ibus.Object.__init__ (self) - self._ibusconn = ibusconn - self._object_path = object_path - self._engine = ibusconn.get_object (self._object_path) - self._ibusconn.connect ("destroy", self._ibusconn_destroy_cb) - - def handle_dbus_signal (self, message): - if message.is_signal (ibus.IBUS_ENGINE_IFACE, "CommitString"): - args = message.get_args_list () - self.emit ("commit-string", args[0]) - return True - elif message.is_signal (ibus.IBUS_ENGINE_IFACE, "PreeditChanged"): - args = message.get_args_list () - self.emit ("preedit-changed", args[0], args[1], args[2]) - return True - else: - return False - - def focus_in (self): - self._engine.FocusIn (**ibus.DEFAULT_ASYNC_HANDLERS) - - def focus_out (self): - self._engine.FocusOut (**ibus.DEFAULT_ASYNC_HANDLERS) - - def reset (self): - self._engine.Reset (**ibus.DEFAULT_ASYNC_HANDLERS) - - def process_key_event (self, keyval, is_press, state, reply_cb, error_cb): - self._engine.ProcessKeyEvent (keyval, is_press, state, - reply_handler = reply_cb, - error_handler = error_cb) - - def set_cursor_location (self, x, y, w, h): - self._engine.SetCursorLocation (x, y, w, h) - - def set_enable (self, enable): - self._engine.SetEnable (enable) - - def destroy (self): - ibus.Object.destroy (self) - if self._engine: - self._engine.Destroy () - self._engine = None - self._ibusconn = None - - def _ibusconn_destroy_cb (self, ibusconn): - self._engine = None - self.destroy () - -gobject.type_register (Engine) - diff --git a/ibus/factorymanager.py b/ibus/factorymanager.py deleted file mode 100644 index ffc7885..0000000 --- a/ibus/factorymanager.py +++ /dev/null @@ -1,76 +0,0 @@ -import weakref -import gobject -import ibus - -class FactoryManager (ibus.Object): - __gsignals__ = { - 'new-factories-added' : ( - gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, - (gobject.TYPE_PYOBJECT, ) - ) - } - def __init__ (self): - ibus.Object.__init__ (self) - self._factories = {} - self._ibusconn_factory_dict = {} - self._default_factory = None - self._sorted_factories = None - - def register_factories (self, object_paths, ibusconn): - if ibusconn in self._factories: - raise ibus.IBusException ("this conn has registered factories!") - - self._ibusconn_factory_dict[ibusconn] = [] - - for object_path in object_paths: - if object_path in self._factories: - raise ibus.IBusException ( - "Factory [%s] has been registered!" % object_path) - - factory = ibus.EngineFactory (ibusconn, object_path) - self._factories[object_path] = factory - self._ibusconn_factory_dict[ibusconn].append (object_path) - - ibusconn.connect ("destroy", self._ibusconn_destroy_cb) - - self.emit ("new-factories-added", - self._ibusconn_factory_dict[ibusconn][:]) - - def get_default_factory (self): - if self._default_factory == None: - factories = self._get_sorted_factories () - if factories: - self._default_factory = factories[0] - - return self._default_factory - - def get_next_factory (self, factory): - factories = self._get_sorted_factories () - i = factories.index (factory) + 1 - if i >= len (factories): - i = 0 - - return factories[i] - - def _get_sorted_factories (self, resort = False): - if not self._sorted_factories or resort: - factories = self._factories.values () - factories.sort () - self._sorted_factories = factories - return self._sorted_factories - - def _ibusconn_destroy_cb (self, ibusconn): - assert ibusconn in self._ibusconn_factory_dict - - for object_path in self._ibusconn_factory_dict[ibusconn]: - factory = self._factories[object_path] - if factory == self._default_factory: - self._default_factory = None - del self._factories[object_path] - - del self._ibusconn_factory_dict[ibusconn] - self._sorted_factories = None - -gobject.type_register (FactoryManager) - diff --git a/ibus/ibusdaemon.py b/ibus/ibusdaemon.py deleted file mode 100755 index 5093562..0000000 --- a/ibus/ibusdaemon.py +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env python -import sys -import gobject -import dbus.server -import dbus.lowlevel -import dbus.mainloop.glib -import ibus - -class IBusServer (dbus.server.Server): - def __init__ (self): - dbus.server.Server.__init__ (self, ibus.IBUS_ADDR) - self._ibus = ibus.IBusProxy () - - self.register_object (self._ibus, ibus.IBUS_PATH) - - def new_connection (self, server, dbusconn): - dbusconn.add_message_filter (self.message_filter_cb) - self._ibus.new_connection (dbusconn) - - def remove_connection (self, dbusconn): - self._ibus.remove_connection (dbusconn) - - def message_filter_cb (self, dbusconn, message): - if message.is_method_call (dbus.LOCAL_IFACE, "Disconnected"): - return dbus.lowlevel.HANDLER_RESULT_NOT_YET_HANDLED - - if message.get_type () == 4: # is signal - if self._ibus.dispatch_dbus_signal (dbusconn, message): - return dbus.lowlevel.HANDLER_RESULT_HANDLED - - return dbus.lowlevel.HANDLER_RESULT_NOT_YET_HANDLED - - def _print_message (self, message): - print "Got a Message (%s) : " % message.__class__.__name__ - print "\t From: %s" % message.get_sender () - print "\t To: %s" % message.get_destination () - print "\t Interface: %s" % message.get_interface () - print "\t Path: %s" % message.get_path () - print "\t Member: %s" % message.get_member () - print "\t Arguments:" - i = 0 - for arg in message.get_args_list(): - print "\t\t Arg[%d] : %s" % (i, arg) - i = i + 1 - -if __name__ == "__main__": - dbus.mainloop.glib.DBusGMainLoop (set_as_default = True) - loop = gobject.MainLoop () - bus = IBusServer () - print "IBUS_ADDRESS=\"%s\"" % bus.get_address () - try: - loop.run () - except KeyboardInterrupt, e: - print "daemon exits" - sys.exit () - diff --git a/ibus/server.py b/ibus/server.py deleted file mode 100755 index 6bd6642..0000000 --- a/ibus/server.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env python -import dbus -import dbus.server -import dbus.lowlevel -import dbus.mainloop.glib -import gobject -from ibus import keysyms -from ibus import attribute -from ibus import client -from ibus import interface -from ibus import IBus -from ibus import Object - -from ibus.common import \ - IBUS_PATH, \ - IBUS_ADDR - -class IBusServer (Object): - def __init__ (self): - Object.__init__ (self) - self._server = dbus.server.Server (IBUS_ADDR) - self._ibus = IBus () - self._server.register_object (self._ibus, IBUS_PATH) - - def get_address (self): - return self._server.get_address () - - def new_connection (self, server, connection): - connection.add_message_filter (self.message_filter_cb) - pass - - def remove_connection (self, connection): - pass - - def message_filter_cb (self, connection, message): - if message.get_interface() == "org.freedesktop.DBus.Local" and \ - message.get_member() == "Disconnected": - return dbus.lowlevel.HANDLER_RESULT_NOT_YET_HANDLED - - return dbus.lowlevel.HANDLER_RESULT_NOT_YET_HANDLED - - print "Got a Message (%s) : " % message.__class__.__name__ - print "\t From: %s" % message.get_sender () - print "\t To: %s" % message.get_destination () - print "\t Interface: %s" % message.get_interface () - print "\t Path: %s" % message.get_path () - print "\t Member: %s" % message.get_member () - print "\t Arguments:" - i = 0 - for arg in message.get_args_list(): - print "\t\t Arg[%d] : %s" % (i, arg) - i = i + 1 - - return dbus.lowlevel.HANDLER_RESULT_NOT_YET_HANDLED - -if __name__ == "__main__": - dbus.mainloop.glib.DBusGMainLoop (set_as_default = True) - loop = gobject.MainLoop () - bus = IBusServer () - print "IBUS_ADDRESS=\"%s\"" % bus.get_address () - loop.run () - |