summaryrefslogtreecommitdiffstats
path: root/ibus
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2008-05-13 10:51:18 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2008-05-13 11:41:06 +0800
commit14a08bc34acab200f891c880b3f3f31751d5800f (patch)
treec1526e005b4487d7ed21d4f319324093f72fe9e8 /ibus
parent4d313651ea8de6a554ae1f5009687e66803b99c4 (diff)
downloadibus-14a08bc34acab200f891c880b3f3f31751d5800f.tar.gz
ibus-14a08bc34acab200f891c880b3f3f31751d5800f.tar.xz
ibus-14a08bc34acab200f891c880b3f3f31751d5800f.zip
Split ibusdaemon from ibus.
Diffstat (limited to 'ibus')
-rw-r--r--ibus/__init__.py6
-rwxr-xr-xibus/bus.py168
-rw-r--r--ibus/client.py107
-rw-r--r--ibus/clientmanager.py20
-rw-r--r--ibus/connection.py32
-rw-r--r--ibus/engine.py123
-rw-r--r--ibus/factorymanager.py76
-rwxr-xr-xibus/ibusdaemon.py56
-rwxr-xr-xibus/server.py62
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 ()
-