Blame ibus/bus.py

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