|
Packit Service |
1d8f1c |
# vim:set et sts=4 sw=4:
|
|
Packit Service |
1d8f1c |
#
|
|
Packit Service |
1d8f1c |
# ibus - The Input Bus
|
|
Packit Service |
1d8f1c |
#
|
|
Packit Service |
1d8f1c |
# Copyright (c) 2007-2010 Peng Huang <shawn.p.huang@gmail.com>
|
|
Packit Service |
1d8f1c |
# Copyright (c) 2007-2010 Red Hat, Inc.
|
|
Packit Service |
1d8f1c |
#
|
|
Packit Service |
1d8f1c |
# This library is free software; you can redistribute it and/or
|
|
Packit Service |
1d8f1c |
# modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
1d8f1c |
# License as published by the Free Software Foundation; either
|
|
Packit Service |
1d8f1c |
# version 2.1 of the License, or (at your option) any later version.
|
|
Packit Service |
1d8f1c |
#
|
|
Packit Service |
1d8f1c |
# This library is distributed in the hope that it will be useful,
|
|
Packit Service |
1d8f1c |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
1d8f1c |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
1d8f1c |
# Lesser General Public License for more details.
|
|
Packit Service |
1d8f1c |
#
|
|
Packit Service |
1d8f1c |
# You should have received a copy of the GNU Lesser General Public
|
|
Packit Service |
1d8f1c |
# License along with this library; if not, write to the Free Software
|
|
Packit Service |
1d8f1c |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
|
Packit Service |
1d8f1c |
# USA
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
__all__ = (
|
|
Packit Service |
1d8f1c |
"Bus",
|
|
Packit Service |
1d8f1c |
)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
import dbus
|
|
Packit Service |
1d8f1c |
import dbus.lowlevel
|
|
Packit Service |
1d8f1c |
import dbus.connection
|
|
Packit Service |
1d8f1c |
import dbus.mainloop.glib
|
|
Packit Service |
1d8f1c |
import gobject
|
|
Packit Service |
1d8f1c |
import common
|
|
Packit Service |
1d8f1c |
import object
|
|
Packit Service |
1d8f1c |
import serializable
|
|
Packit Service |
1d8f1c |
import config
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
dbus.mainloop.glib.DBusGMainLoop(set_as_default = True)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
class Bus(object.Object):
|
|
Packit Service |
1d8f1c |
__gtype_name__ = "PYIBusBus"
|
|
Packit Service |
1d8f1c |
__gsignals__ = {
|
|
Packit Service |
1d8f1c |
"disconnected" : (
|
|
Packit Service |
1d8f1c |
gobject.SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
gobject.TYPE_NONE,
|
|
Packit Service |
1d8f1c |
()
|
|
Packit Service |
1d8f1c |
),
|
|
Packit Service |
1d8f1c |
"config-reloaded" : (
|
|
Packit Service |
1d8f1c |
gobject.SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
gobject.TYPE_NONE,
|
|
Packit Service |
1d8f1c |
()
|
|
Packit Service |
1d8f1c |
),
|
|
Packit Service |
1d8f1c |
"registry-changed" : (
|
|
Packit Service |
1d8f1c |
gobject.SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
gobject.TYPE_NONE,
|
|
Packit Service |
1d8f1c |
()
|
|
Packit Service |
1d8f1c |
),
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def __init__(self):
|
|
Packit Service |
1d8f1c |
super(Bus, self).__init__()
|
|
Packit Service |
1d8f1c |
self.__dbusconn = dbus.connection.Connection(common.get_address())
|
|
Packit Service |
1d8f1c |
_dbus = self.__dbusconn.get_object(dbus.BUS_DAEMON_NAME,
|
|
Packit Service |
1d8f1c |
dbus.BUS_DAEMON_PATH)
|
|
Packit Service |
1d8f1c |
self.__dbus = dbus.Interface (_dbus, dbus_interface="org.freedesktop.DBus")
|
|
Packit Service |
1d8f1c |
self.__unique_name = self.hello()
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
_ibus = self.__dbusconn.get_object(common.IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
common.IBUS_PATH_IBUS)
|
|
Packit Service |
1d8f1c |
self.__ibus = dbus.Interface (_ibus, dbus_interface='org.freedesktop.IBus')
|
|
Packit Service |
1d8f1c |
self.__ibus.connect_to_signal("RegistryChanged", self.__registry_changed_cb)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
self.__dbusconn.call_on_disconnection(self.__dbusconn_disconnected_cb)
|
|
Packit Service |
1d8f1c |
# self.__dbusconn.add_message_filter(self.__filter_cb)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def __filter_cb(self, conn, message):
|
|
Packit Service |
1d8f1c |
if message.get_type() == 4:
|
|
Packit Service |
1d8f1c |
print "Signal %s" % message.get_member()
|
|
Packit Service |
1d8f1c |
print " sender = %s" % message.get_sender()
|
|
Packit Service |
1d8f1c |
print " path = %s" % message.get_path()
|
|
Packit Service |
1d8f1c |
return dbus.lowlevel.HANDLER_RESULT_NOT_YET_HANDLED
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def __dbusconn_disconnected_cb(self, dbusconn):
|
|
Packit Service |
1d8f1c |
assert self.__dbusconn == dbusconn
|
|
Packit Service |
1d8f1c |
self.__dbusconn = None
|
|
Packit Service |
1d8f1c |
self.emit("disconnected")
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def __registry_changed_cb(self):
|
|
Packit Service |
1d8f1c |
self.emit("registry-changed")
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def get_name(self):
|
|
Packit Service |
1d8f1c |
return self.__unique_name
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def get_is_connected(self):
|
|
Packit Service |
1d8f1c |
if self.__dbusconn == None:
|
|
Packit Service |
1d8f1c |
return False
|
|
Packit Service |
1d8f1c |
return self.__dbusconn.get_is_connected()
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
# define dbus methods
|
|
Packit Service |
1d8f1c |
def get_dbus(self):
|
|
Packit Service |
1d8f1c |
return self.__dbus
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def hello(self):
|
|
Packit Service |
1d8f1c |
return self.__dbus.Hello()
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def request_name(self, name, flags):
|
|
Packit Service |
1d8f1c |
return self.__dbus.RequestName(name, dbus.UInt32 (flags))
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def release_name(self, name):
|
|
Packit Service |
1d8f1c |
return self.__dbus.ReleaseName(name)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def start_service_by_name(self, name, flags):
|
|
Packit Service |
1d8f1c |
return self.__dbus.StartServiceByName(name, dbus.UInt32 (flags))
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def list_queued_owners(self, name):
|
|
Packit Service |
1d8f1c |
return self.__dbus.ListQueuedOwners(name)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def get_name_owner(self, name):
|
|
Packit Service |
1d8f1c |
return self.__dbus.GetNameOwner(name)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def add_match(self, rule):
|
|
Packit Service |
1d8f1c |
return self.__dbus.AddMatch(rule)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def remove_match(self, rule):
|
|
Packit Service |
1d8f1c |
return self.__dbus.RemoveMatch(rule)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def get_dbusconn(self):
|
|
Packit Service |
1d8f1c |
return self.__dbusconn
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def get_address(self):
|
|
Packit Service |
1d8f1c |
return common.get_address()
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
# define ibus methods
|
|
Packit Service |
1d8f1c |
def register_component(self, component):
|
|
Packit Service |
1d8f1c |
component = serializable.serialize_object(component)
|
|
Packit Service |
1d8f1c |
return self.__ibus.RegisterComponent(component)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def list_engines(self):
|
|
Packit Service |
1d8f1c |
engines = self.__ibus.ListEngines()
|
|
Packit Service |
1d8f1c |
return map(serializable.deserialize_object, engines)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def get_engines_by_names(self, names):
|
|
Packit Service |
1d8f1c |
engines = self.__ibus.GetEnginesByNames(names)
|
|
Packit Service |
1d8f1c |
return map(serializable.deserialize_object, engines)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def list_active_engines(self):
|
|
Packit Service |
1d8f1c |
engines = self.__ibus.ListActiveEngines()
|
|
Packit Service |
1d8f1c |
return map(serializable.deserialize_object, engines)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def set_global_engine(self, name):
|
|
Packit Service |
1d8f1c |
return self.__ibus.SetGlobalEngine(name)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def create_input_context(self, client_name):
|
|
Packit Service |
1d8f1c |
return self.__ibus.CreateInputContext(client_name)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def current_input_contxt(self):
|
|
Packit Service |
1d8f1c |
return self.__ibus.CurrentInputContext()
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def exit(self, restart):
|
|
Packit Service |
1d8f1c |
return self.__ibus.Exit(restart)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def ping(self, data):
|
|
Packit Service |
1d8f1c |
flag = isinstance(data, serializable.Serializable)
|
|
Packit Service |
1d8f1c |
if flag:
|
|
Packit Service |
1d8f1c |
data = serializable.serialize_object(data)
|
|
Packit Service |
1d8f1c |
data = self.__ibus.Ping(data, dbus_interface="org.freedesktop.IBus")
|
|
Packit Service |
1d8f1c |
if flag:
|
|
Packit Service |
1d8f1c |
data = serializable.deserialize_object(data)
|
|
Packit Service |
1d8f1c |
return data
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def introspect_ibus(self):
|
|
Packit Service |
1d8f1c |
return self.__ibus.Introspect()
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def introspect_dbus(self):
|
|
Packit Service |
1d8f1c |
return self.__dbus.Introspect()
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def get_config(self):
|
|
Packit Service |
1d8f1c |
try:
|
|
Packit Service |
1d8f1c |
return self.__config
|
|
Packit Service |
1d8f1c |
except:
|
|
Packit Service |
1d8f1c |
self.__config = config.Config(self)
|
|
Packit Service |
1d8f1c |
return self.__config
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def test():
|
|
Packit Service |
1d8f1c |
import glib
|
|
Packit Service |
1d8f1c |
import factory
|
|
Packit Service |
1d8f1c |
import text
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
mainloop = glib.MainLoop()
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
def __disconnected_cb(*args):
|
|
Packit Service |
1d8f1c |
print "Disconnected", args
|
|
Packit Service |
1d8f1c |
mainloop.quit()
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
b = Bus()
|
|
Packit Service |
1d8f1c |
b.connect("disconnected", __disconnected_cb)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
print "unique_name =", b.get_name()
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
for i in b.list_factories():
|
|
Packit Service |
1d8f1c |
print i.name
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
mainloop.run()
|
|
Packit Service |
1d8f1c |
print "Exit"
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if __name__ == "__main__":
|
|
Packit Service |
1d8f1c |
test()
|