rendered paste body#!/usr/bin/pythonimport pyatspi, gtk, atk, os, gnomegnome.program_init('test_pyatspi', '0.1.2')root_atk = atk.get_root()root_atk.set_description(str(os.getpid()))desktop = pyatspi.Registry.getDesktop(0)class TreeV(gtk.TreeView): def __init__(self): gtk.TreeView.__init__(self) model = gtk.ListStore(str) self.set_model(model) crt = gtk.CellRendererText() tvc = gtk.TreeViewColumn() tvc.pack_start(crt, True) tvc.set_attributes(crt, text=0) self.append_column(tvc)class Main: def __init__(self): w = gtk.Window() b = gtk.Button('Click me') b.connect('clicked', self._onClicked) tv = TreeV() sw = gtk.ScrolledWindow() sw.add(tv) self.model = tv.get_model() vbox = gtk.VBox() vbox.add(b) vbox.add(sw) w.add(vbox) w.show_all() pyatspi.Registry.registerEventListener(self.Foo, 'object:children-changed') pyatspi.Registry.start() pyatspi.Registry.stop() def isMyApp(self, acc): if not acc: return False try: app = acc.getApplication() except Exception, e: return False print getattr(app, 'name', 'no app'), acc if not app or not hasattr(app, 'id'): return False if hasattr(self,'my_app_id'): if self.my_app_id == app.id: return True else: if app.description == str(os.getpid()): self.my_app_id = app.id return True return False def Foo(self, event): print event if self.isMyApp(event.source): print 'mine' else: print 'no mine' def _onClicked(self, button): self.model.append(['Test'])Main()