Blame ibus/bus.py

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()