1#!/usr/bin/python
2
3import sys
4import dbus
5import dbus.service
6import gobject
7
8from dbus.mainloop.glib import DBusGMainLoop
9
10DBusGMainLoop(set_as_default=True)
11
12class IdleStateM (object):
13        def __init__(self, bus, loop):
14                self._bus = bus
15                self._loop = loop
16                self._func = self.setup
17
18        def idle_handler(self):
19                self._func = self._func()
20                if self._func == None:
21                        self._func = self.teardown
22                return True
23
24        def setup(self):
25                self.obj = self._bus.get_object("org.a11y.atspi.Registry",
26                                                "/org/a11y/atspi/accessible/root",
27                                                introspect=False)
28                self.itf = dbus.Interface(self.obj, dbus_interface="org.a11y.atspi.Accessible")
29                return self.register_apps
30
31        def register_apps(self):
32                #self.itf.registerApplication(":R456", ignore_reply=True)
33                #self.itf.registerApplication(":R123", ignore_reply=True)
34                return self.print_applications
35
36        def print_applications(self):
37                apps = self.itf.GetChildren()
38                print apps
39                return self.teardown
40
41        def teardown(self):
42                self._loop.quit()
43
44def main(argv):
45        bus = dbus.SessionBus()
46        obj = bus.get_object("org.a11y.Bus",
47                             "/org/a11y/bus",
48                             introspect=False)
49        itf = dbus.Interface(obj, dbus_interface="org.a11y.Bus")
50        address = itf.GetAddress()
51
52        bus = dbus.bus.BusConnection(str(address))
53        loop = gobject.MainLoop()
54        stateM = IdleStateM(bus, loop)
55        gobject.idle_add(stateM.idle_handler)
56        loop.run()
57
58if __name__=="__main__":
59        sys.exit(main(sys.argv))
60