summaryrefslogtreecommitdiffstats
path: root/daemon/enginefactory.py
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2008-06-25 10:41:59 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2008-06-25 10:41:59 +0800
commit1c3371e3c3e6fc6d1697aac8899ed733d37ab71e (patch)
tree5628021925cabbeb717c8540740d7cf930a7f37d /daemon/enginefactory.py
parent3a89b79bb898eb1c6a5fc52c3e16ff6cd4bcde87 (diff)
downloadibus-1c3371e3c3e6fc6d1697aac8899ed733d37ab71e.tar.gz
ibus-1c3371e3c3e6fc6d1697aac8899ed733d37ab71e.tar.xz
ibus-1c3371e3c3e6fc6d1697aac8899ed733d37ab71e.zip
Rename folder ibusdaemon to daemon.
Diffstat (limited to 'daemon/enginefactory.py')
-rw-r--r--daemon/enginefactory.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/daemon/enginefactory.py b/daemon/enginefactory.py
new file mode 100644
index 0000000..24974b1
--- /dev/null
+++ b/daemon/enginefactory.py
@@ -0,0 +1,80 @@
+# vim:set noet ts=4:
+#
+# ibus - The Input Bus
+#
+# Copyright (c) 2007-2008 Huang Peng <shawn.p.huang@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+# Boston, MA 02111-1307 USA
+
+import weakref
+import gobject
+import ibus
+from engine import Engine
+
+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, 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]
+